ref: 1987a0a4b85d87768a2699e0a3d7d930857e78c2
parent: ae5d6d59e82ef40300a4dece7897499685f87184
author: Mark Harris <[email protected]>
date: Sat Jun 19 15:57:17 EDT 2021
Split out tag comparison from picture.c Avoids the need to link picture.c into opusenc.
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,6 +19,7 @@
src/opus_header.h \
src/opusinfo.h \
src/picture.h \
+ src/tagcompare.h \
src/resample_sse.h \
src/speex_resampler.h \
src/stack_alloc.h \
@@ -51,7 +52,7 @@
resampler_CPPFLAGS = -DRANDOM_PREFIX=opustools -DOUTSIDE_SPEEX -DRESAMPLE_FULL_SINC_TABLE
-opusenc_SOURCES = src/opus_header.c src/opusenc.c src/picture.c src/audio-in.c src/diag_range.c src/flac.c win32/unicode_support.c
+opusenc_SOURCES = src/opus_header.c src/opusenc.c src/tagcompare.c src/audio-in.c src/diag_range.c src/flac.c win32/unicode_support.c
opusenc_CPPFLAGS = $(AM_CPPFLAGS)
opusenc_CFLAGS = $(AM_CFLAGS) $(LIBOPUSENC_CFLAGS) $(FLAC_CFLAGS)
opusenc_LDADD = $(LIBOPUSENC_LIBS) $(OPUS_LIBS) $(FLAC_LIBS) $(OGG_LIBS) $(LIBM)
@@ -63,7 +64,7 @@
opusdec_LDADD = $(OPUSURL_LIBS) $(OPUS_LIBS) $(LIBM)
opusdec_MANS = man/opusdec.1
-opusinfo_SOURCES = src/opus_header.c src/opusinfo.c src/info_opus.c src/picture.c win32/unicode_support.c
+opusinfo_SOURCES = src/opus_header.c src/opusinfo.c src/info_opus.c src/picture.c src/tagcompare.c win32/unicode_support.c
opusinfo_CPPFLAGS = $(AM_CPPFLAGS) -DOPUSTOOLS
opusinfo_LDADD = $(OGG_LIBS)
opusinfo_MANS = man/opusinfo.1
--- a/src/flac.c
+++ b/src/flac.c
@@ -33,7 +33,7 @@
#include "encoder.h"
#include "flac.h"
#include "opus_header.h"
-#include "picture.h"
+#include "tagcompare.h"
#if defined(HAVE_LIBFLAC)
@@ -133,7 +133,7 @@
if(!entry)continue;
/*Check for ReplayGain tags.
Parse the ones we have R128 equivalents for, and skip the others.*/
- if(oi_strncasecmp(entry,"REPLAYGAIN_REFERENCE_LOUDNESS=",30)==0){
+ if(tagcompare(entry,"REPLAYGAIN_REFERENCE_LOUDNESS=",30)==0){
gain=strtod(entry+30,&end);
if(end<=entry+30){
fprintf(stderr,_("WARNING: Invalid ReplayGain tag: %s\n"),entry);
@@ -141,7 +141,7 @@
else reference_loudness=gain;
continue;
}
- if(oi_strncasecmp(entry,"REPLAYGAIN_ALBUM_GAIN=",22)==0){
+ if(tagcompare(entry,"REPLAYGAIN_ALBUM_GAIN=",22)==0){
gain=strtod(entry+22,&end);
if(end<=entry+22){
fprintf(stderr,_("WARNING: Invalid ReplayGain tag: %s\n"),entry);
@@ -152,7 +152,7 @@
}
continue;
}
- if(oi_strncasecmp(entry,"REPLAYGAIN_TRACK_GAIN=",22)==0){
+ if(tagcompare(entry,"REPLAYGAIN_TRACK_GAIN=",22)==0){
gain=strtod(entry+22,&end);
if(end<entry+22){
fprintf(stderr,_("WARNING: Invalid ReplayGain tag: %s\n"),entry);
@@ -163,8 +163,8 @@
}
continue;
}
- if(oi_strncasecmp(entry,"REPLAYGAIN_ALBUM_PEAK=",22)==0
- ||oi_strncasecmp(entry,"REPLAYGAIN_TRACK_PEAK=",22)==0){
+ if(tagcompare(entry,"REPLAYGAIN_ALBUM_PEAK=",22)==0
+ ||tagcompare(entry,"REPLAYGAIN_TRACK_PEAK=",22)==0){
continue;
}
if(!strchr(entry,'=')){
--- a/src/opusinfo.c
+++ b/src/opusinfo.c
@@ -31,6 +31,7 @@
#include "opus_header.h"
#include "info_opus.h"
#include "picture.h"
+#include "tagcompare.h"
#if defined WIN32 || defined _WIN32
# include "unicode_support.h"
@@ -256,7 +257,7 @@
}
if(sep - comment == 22
- && oi_strncasecmp(comment, "METADATA_BLOCK_PICTURE", 22) == 0) {
+ && tagcompare(comment, "METADATA_BLOCK_PICTURE", 22) == 0) {
ogg_uint32_t picture_type;
ogg_uint32_t mime_type_length;
ogg_uint32_t description_length;
@@ -440,7 +441,7 @@
is_url = 0;
format = -1;
if(mime_type_length == 10
- && oi_strncasecmp((const char*)data+8, "image/jpeg",
+ && tagcompare((const char*)data+8, "image/jpeg",
mime_type_length) == 0) {
if(!is_jpeg(data+j, image_length)) {
oi_warn(_("WARNING: Invalid image data in "
@@ -453,7 +454,7 @@
format = PIC_FORMAT_JPEG;
}
else if(mime_type_length == 9
- && oi_strncasecmp((const char *)data+8, "image/png",
+ && tagcompare((const char *)data+8, "image/png",
mime_type_length) == 0) {
if(!is_png(data+j, image_length)) {
oi_warn(_("WARNING: Invalid image data in "
@@ -466,7 +467,7 @@
format = PIC_FORMAT_PNG;
}
else if(mime_type_length == 9
- && oi_strncasecmp((const char *)data+8, "image/gif",
+ && tagcompare((const char *)data+8, "image/gif",
mime_type_length) == 0) {
if(!is_gif(data+j, image_length)) {
oi_warn(_("WARNING: Invalid image data in "
@@ -484,7 +485,7 @@
/*TODO: validate URL.*/
}
else if(mime_type_length == 0 || (mime_type_length == 6 &&
- oi_strncasecmp((const char *)data+8, "image/",
+ tagcompare((const char *)data+8, "image/",
mime_type_length) == 0)) {
if(is_jpeg(data+j, image_length)) {
format = PIC_FORMAT_JPEG;
--- a/src/picture.c
+++ b/src/picture.c
@@ -29,36 +29,10 @@
# include "config.h"
#endif
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "picture.h"
-
-/*A version of strncasecmp() that is guaranteed to only ignore the case of
- ASCII characters.*/
-int oi_strncasecmp(const char *a, const char *b, int n)
-{
- int i;
- for(i=0;i<n;i++){
- int aval;
- int bval;
- int diff;
- aval=a[i];
- bval=b[i];
- if(aval>='a'&&aval<='z') {
- aval-='a'-'A';
- }
- if(bval>='a'&&bval<='z'){
- bval-='a'-'A';
- }
- diff=aval-bval;
- if(diff){
- return diff;
- }
- }
- return 0;
-}
int is_jpeg(const unsigned char *buf, size_t length)
{
--- a/src/picture.h
+++ b/src/picture.h
@@ -6,8 +6,6 @@
PIC_FORMAT_GIF
} picture_format;
-int oi_strncasecmp(const char *a, const char *b, int n);
-
int is_jpeg(const unsigned char *buf, size_t length);
int is_png(const unsigned char *buf, size_t length);
int is_gif(const unsigned char *buf, size_t length);
--- /dev/null
+++ b/src/tagcompare.c
@@ -1,0 +1,51 @@
+/* Copyright (C)2007-2021 Xiph.Org Foundation
+ File: tagcompare.c
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+
+
+/*A version of strncasecmp() that is guaranteed to only ignore the case of
+ ASCII characters.*/
+int tagcompare(const char *a, const char *b, size_t n)
+{
+ size_t i;
+ for (i = 0; i < n; i++)
+ {
+ int aval = (unsigned char)a[i];
+ int bval = (unsigned char)b[i];
+ int diff;
+ if (aval >= 'a' && aval <= 'z') aval -= 'a' - 'A';
+ if (bval >= 'a' && bval <= 'z') bval -= 'a' - 'A';
+ diff = aval - bval;
+ if (diff) return diff;
+ }
+ return 0;
+}
--- /dev/null
+++ b/src/tagcompare.h
@@ -1,0 +1,3 @@
+#include <stdlib.h>
+
+int tagcompare(const char *a, const char *b, size_t n);
--- a/win32/VS2015/opusenc.vcxproj
+++ b/win32/VS2015/opusenc.vcxproj
@@ -23,7 +23,7 @@
<ClCompile Include="..\..\share\getopt1.c" />
<ClCompile Include="..\..\src\opus_header.c" />
<ClCompile Include="..\..\src\opusenc.c" />
- <ClCompile Include="..\..\src\picture.c" />
+ <ClCompile Include="..\..\src\tagcompare.c" />
<ClCompile Include="..\..\src\audio-in.c" />
<ClCompile Include="..\..\src\diag_range.c" />
<ClCompile Include="..\..\src\flac.c" />
@@ -37,7 +37,7 @@
<ClInclude Include="..\..\src\encoder.h" />
<ClInclude Include="..\..\src\flac.h" />
<ClInclude Include="..\..\src\opus_header.h" />
- <ClInclude Include="..\..\src\picture.h" />
+ <ClInclude Include="..\..\src\tagcompare.h" />
<ClInclude Include="..\..\src\stack_alloc.h" />
<ClInclude Include="..\..\src\wav_io.h" />
<ClInclude Include="..\..\win32\config.h" />
--- a/win32/VS2015/opusenc.vcxproj.filters
+++ b/win32/VS2015/opusenc.vcxproj.filters
@@ -32,7 +32,7 @@
<ClCompile Include="..\..\src\opus_header.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\src\picture.c">
+ <ClCompile Include="..\..\src\tagcompare.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\win32\unicode_support.c">
@@ -55,7 +55,7 @@
<ClInclude Include="..\..\src\opus_header.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\src\picture.h">
+ <ClInclude Include="..\..\src\tagcompare.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\src\stack_alloc.h">
--- a/win32/VS2015/opusinfo.vcxproj
+++ b/win32/VS2015/opusinfo.vcxproj
@@ -25,6 +25,7 @@
<ClCompile Include="..\..\src\opusinfo.c" />
<ClCompile Include="..\..\src\info_opus.c" />
<ClCompile Include="..\..\src\picture.c" />
+ <ClCompile Include="..\..\src\tagcompare.c" />
<ClCompile Include="..\..\win32\unicode_support.c" />
</ItemGroup>
<ItemGroup>
@@ -33,6 +34,7 @@
<ClInclude Include="..\..\src\opusinfo.h" />
<ClInclude Include="..\..\src\opus_header.h" />
<ClInclude Include="..\..\src\picture.h" />
+ <ClInclude Include="..\..\src\tagcompare.h" />
<ClInclude Include="..\..\win32\config.h" />
<ClInclude Include="..\..\win32\unicode_support.h" />
</ItemGroup>
@@ -90,4 +92,4 @@
<PropertyGroup Label="UserMacros" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
-</Project>
\ No newline at end of file
+</Project>
--- a/win32/VS2015/opusinfo.vcxproj.filters
+++ b/win32/VS2015/opusinfo.vcxproj.filters
@@ -29,6 +29,9 @@
<ClCompile Include="..\..\src\picture.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\tagcompare.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\win32\unicode_support.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -46,6 +49,9 @@
<ClInclude Include="..\..\src\picture.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\tagcompare.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
<ClInclude Include="..\..\win32\config.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -56,4 +62,4 @@
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
-</Project>
\ No newline at end of file
+</Project>