mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 17:10:22 +00:00
[MPG123] Update to version 1.25.12. CORE-16440
This commit is contained in:
parent
983f57b6e0
commit
e02cdcce68
6 changed files with 54 additions and 21 deletions
|
@ -63,7 +63,7 @@ Used Version: 0.1.9
|
|||
Website: http://www.mega-nerd.com/SRC/download.html
|
||||
|
||||
Title: libmpg123 (used by winemp3.acm)
|
||||
Used Version: 1.25.10
|
||||
Used Version: 1.25.12
|
||||
Website: http://www.mpg123.de/
|
||||
|
||||
Title: STLport
|
||||
|
|
|
@ -356,7 +356,7 @@
|
|||
#define PACKAGE_NAME "mpg123"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "mpg123 1.25.10"
|
||||
#define PACKAGE_STRING "mpg123 1.25.12"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "mpg123"
|
||||
|
@ -365,7 +365,7 @@
|
|||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "1.25.10"
|
||||
#define PACKAGE_VERSION "1.25.12"
|
||||
|
||||
/* Define if portaudio v18 API is wanted. */
|
||||
/* #undef PORTAUDIO18 */
|
||||
|
@ -398,7 +398,7 @@
|
|||
/* #undef USE_YASM_FOR_AVX */
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "1.25.10"
|
||||
#define VERSION "1.25.12"
|
||||
|
||||
/* Define to use Win32 named pipes */
|
||||
#define WANT_WIN32_FIFO 1
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
|
||||
/* Mach-O binaries (OSX/iOS) */
|
||||
#define LOCAL_VAR(a) a ## - Lpic_base(_EBX_)
|
||||
#define GLOBAL_VAR(a) #error This ABI cannot access non-local symbols directly.
|
||||
#define GLOBAL_VAR(a) .err This ABI cannot access non-local symbols directly.
|
||||
#define GLOBAL_VAR_PTR(a) L_ ## a ## - Lpic_base(_EBX_)
|
||||
#define FUNC(a) L_ ## a
|
||||
#define EXTERNAL_FUNC(a) L_ ## a
|
||||
|
@ -130,7 +130,7 @@ Lpic_base: \
|
|||
/* Dummies for everyone else. */
|
||||
#define LOCAL_VAR(a) a
|
||||
#define GLOBAL_VAR ASM_NAME
|
||||
#define GLOBAL_VAR_PTR(a) #error Cannot use indirect addressing in non-PIC object.
|
||||
#define GLOBAL_VAR_PTR(a) .err Cannot use indirect addressing in non-PIC object.
|
||||
#define FUNC ASM_NAME
|
||||
#define EXTERNAL_FUNC ASM_NAME
|
||||
#define GET_GOT
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
libmpg123: MPEG Audio Decoder library (version 1.25.10)
|
||||
libmpg123: MPEG Audio Decoder library (version 1.25.12)
|
||||
|
||||
copyright 1995-2015 by the mpg123 project
|
||||
free software under the terms of the LGPL 2.1
|
||||
|
|
26
sdk/lib/3rdparty/libmpg123/id3.c
vendored
26
sdk/lib/3rdparty/libmpg123/id3.c
vendored
|
@ -884,7 +884,8 @@ int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes)
|
|||
int rva_mode = -1; /* mix / album */
|
||||
unsigned long realsize = framesize;
|
||||
unsigned char* realdata = tagdata+pos;
|
||||
if((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG))
|
||||
unsigned char* unsyncbuffer = NULL;
|
||||
if(((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG)) && framesize > 0)
|
||||
{
|
||||
unsigned long ipos = 0;
|
||||
unsigned long opos = 0;
|
||||
|
@ -892,7 +893,7 @@ int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes)
|
|||
/* de-unsync: FF00 -> FF; real FF00 is simply represented as FF0000 ... */
|
||||
/* damn, that means I have to delete bytes from withing the data block... thus need temporal storage */
|
||||
/* standard mandates that de-unsync should always be safe if flag is set */
|
||||
realdata = (unsigned char*) malloc(framesize); /* will need <= bytes */
|
||||
realdata = unsyncbuffer = malloc(framesize+1); /* will need <= bytes, plus a safety zero */
|
||||
if(realdata == NULL)
|
||||
{
|
||||
if(NOQUIET) error("ID3v2: unable to allocate working buffer for de-unsync");
|
||||
|
@ -909,6 +910,8 @@ int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes)
|
|||
}
|
||||
}
|
||||
realsize = opos;
|
||||
/* Append a zero to keep strlen() safe. */
|
||||
realdata[realsize] = 0;
|
||||
debug2("ID3v2: de-unsync made %lu out of %lu bytes", realsize, framesize);
|
||||
}
|
||||
pos = 0; /* now at the beginning again... */
|
||||
|
@ -936,14 +939,24 @@ int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes)
|
|||
if(fr->rva.level[rva_mode] <= rva2+1)
|
||||
{
|
||||
pos += strlen((char*) realdata) + 1;
|
||||
if(realdata[pos] == 1)
|
||||
// channel and two bytes for RVA value
|
||||
// pos possibly just past the safety zero, so one more than realsize
|
||||
if(pos > realsize || realsize-pos < 3)
|
||||
{
|
||||
if(NOQUIET)
|
||||
error("bad RVA2 tag (truncated?)");
|
||||
}
|
||||
else if(realdata[pos] == 1)
|
||||
{
|
||||
++pos;
|
||||
/* only handle master channel */
|
||||
debug("ID3v2: it is for the master channel");
|
||||
/* two bytes adjustment, one byte for bits representing peak - n bytes, eh bits, for peak */
|
||||
/* 16 bit signed integer = dB * 512 ... the double cast is needed to preserve the sign of negative values! */
|
||||
fr->rva.gain[rva_mode] = (float) ( (((short)((signed char)realdata[pos])) << 8) | realdata[pos+1] ) / 512;
|
||||
/* 16 bit signed integer = dB * 512. Do not shift signed integers! Multiply instead.
|
||||
Also no implementation-defined casting. Reinterpret the pointer to signed char, then do
|
||||
proper casting. */
|
||||
fr->rva.gain[rva_mode] = (float) (
|
||||
((short)((signed char*)realdata)[pos]) * 256 + (short)realdata[pos+1] ) / 512;
|
||||
pos += 2;
|
||||
if(VERBOSE3) fprintf(stderr, "Note: RVA value %fdB\n", fr->rva.gain[rva_mode]);
|
||||
/* heh, the peak value is represented by a number of bits - but in what manner? Skipping that part */
|
||||
|
@ -964,7 +977,8 @@ int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes)
|
|||
break;
|
||||
default: if(NOQUIET) error1("ID3v2: unknown frame type %i", tt);
|
||||
}
|
||||
if((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG)) free(realdata);
|
||||
if(unsyncbuffer)
|
||||
free(unsyncbuffer);
|
||||
}
|
||||
#undef BAD_FFLAGS
|
||||
#undef PRES_TAG_FFLAG
|
||||
|
|
35
sdk/lib/3rdparty/libmpg123/parse.c
vendored
35
sdk/lib/3rdparty/libmpg123/parse.c
vendored
|
@ -1063,18 +1063,29 @@ static int handle_apetag(mpg123_handle *fr, unsigned long newhead)
|
|||
unsigned char apebuf[28];
|
||||
unsigned long val;
|
||||
int i, ret;
|
||||
|
||||
/* How many bytes to backpedal to get back to just after the first byte of */
|
||||
/* the supposed header. */
|
||||
int back_bytes = 3;
|
||||
fr->oldhead = 0;
|
||||
|
||||
debug1("trying to read remaining APE header at %"OFF_P, (off_p)fr->rd->tell(fr));
|
||||
/* Apetag headers are 32 bytes, newhead contains 4, read the rest */
|
||||
if((ret=fr->rd->fullread(fr,apebuf,28)) < 0) return ret;
|
||||
|
||||
if((ret=fr->rd->fullread(fr,apebuf,28)) < 0)
|
||||
return ret;
|
||||
back_bytes += ret;
|
||||
if(ret < 28)
|
||||
goto apetag_bad;
|
||||
|
||||
debug1("trying to parse APE header at %"OFF_P, (off_p)fr->rd->tell(fr));
|
||||
/* Apetags start with "APETAGEX", "APET" is already tested. */
|
||||
if(strncmp((char *)apebuf,"AGEX",4) != 0)
|
||||
goto apetag_bad;
|
||||
|
||||
/* Version must be 2.000 / 2000 */
|
||||
val = (apebuf[7]<<24)|(apebuf[6]<<16)|(apebuf[5]<<8)|apebuf[4];
|
||||
val = ((unsigned long)apebuf[7]<<24)
|
||||
| ((unsigned long)apebuf[6]<<16)
|
||||
| ((unsigned long)apebuf[5]<<8)
|
||||
| apebuf[4];
|
||||
if(val != 2000)
|
||||
goto apetag_bad;
|
||||
|
||||
|
@ -1084,14 +1095,22 @@ static int handle_apetag(mpg123_handle *fr, unsigned long newhead)
|
|||
goto apetag_bad;
|
||||
|
||||
/* Looks good, skip the rest. */
|
||||
val = (apebuf[11]<<24)|(apebuf[10]<<16)|(apebuf[9]<<8)|apebuf[8];
|
||||
if((ret=fr->rd->skip_bytes(fr,val)) < 0) return ret;
|
||||
val = ((unsigned long)apebuf[11]<<24)
|
||||
| ((unsigned long)apebuf[10]<<16)
|
||||
| ((unsigned long)apebuf[9]<<8)
|
||||
| apebuf[8];
|
||||
debug2( "skipping %lu bytes of APE data at %"OFF_P
|
||||
, val, (off_p)fr->rd->tell(fr) );
|
||||
/* If encountering EOF here, things are just at an end. */
|
||||
if((ret=fr->rd->skip_bytes(fr,val)) < 0)
|
||||
return ret;
|
||||
|
||||
return PARSE_AGAIN;
|
||||
|
||||
apetag_bad:
|
||||
if(fr->rd->back_bytes(fr,31) < 0 && NOQUIET)
|
||||
error("Cannot seek 31 bytes back!");
|
||||
debug("no proper APE tag found, seeking back");
|
||||
if(fr->rd->back_bytes(fr,back_bytes) < 0 && NOQUIET)
|
||||
error1("Cannot seek %d bytes back!", back_bytes);
|
||||
|
||||
return PARSE_AGAIN; /* Give the resync code a chance to fix things */
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue