[SCM] faad2 packaging branch, master, updated. debian/2.7-4-4-g88ed21b

fabian-guest at users.alioth.debian.org fabian-guest at users.alioth.debian.org
Mon Aug 16 11:23:57 UTC 2010


The following commit has been merged in the master branch:
commit 88ed21b04a8ccd7350ed6249b68e1d7bd92c0a07
Author: Fabian Greffrath <fabian at greffrath.com>
Date:   Mon Aug 16 13:26:42 2010 +0200

    Apply SqueezeCenter patches from FreeBSD that enable streaming with BBCiPlayer and ezstream (LP: #470562).

diff --git a/debian/patches/bpa-stdin.patch b/debian/patches/bpa-stdin.patch
new file mode 100644
index 0000000..d4b40fe
--- /dev/null
+++ b/debian/patches/bpa-stdin.patch
@@ -0,0 +1,268 @@
+Description: The patch enables input on stdin for AAC/AAC+ streams.
+Origin: http://www.freebsd.org/cgi/cvsweb.cgi/ports/audio/faad/files/patch-frontend_main.c
+Bug: http://bugs.slimdevices.com/show_bug.cgi?id=10602
+Forwarded: menno at audiocoding.com
+Author: Bryan Alton
+Reviewed-By: Mark Knight <http://www.freebsd.org/cgi/query-pr.cgi?pr=138213>
+
+$FreeBSD: ports/audio/faad/files/patch-frontend_main.c,v 1.3 2010/02/25 17:12:54 brooks Exp $
+
+--- faad2.orig/frontend/main.c
++++ faad2/frontend/main.c
+@@ -137,6 +137,31 @@ static void advance_buffer(aac_buffer *b
+ 		b->bytes_into_buffer = 0;
+ }
+ 
++static void lookforheader(aac_buffer *b)
++{
++  int i = 0;
++	while (!b->at_eof )
++	{
++       		if (b->bytes_into_buffer > 4)
++        	{
++		    if( ((b->buffer[0+i] == 0xff) && ((b->buffer[1+i] & 0xf6) == 0xf0)) ||
++       			 (b->buffer[0+i] == 'A'    && b->buffer[1+i] == 'D' && b->buffer[2+i] == 'I' && b->buffer[3+i] == 'F'))
++			{
++				fill_buffer(b);
++				break;
++			} else {
++				i++;
++    				b->file_offset       += 1;
++    				b->bytes_consumed    += 1;
++    				b->bytes_into_buffer -= 1;
++			}
++		} else {
++			fill_buffer(b);
++			i = 0;
++		}
++	}
++}
++
+ static int adts_sample_rates[] = {96000,88200,64000,48000,44100,32000,24000,22050,16000,12000,11025,8000,7350,0,0,0};
+ 
+ static int adts_parse(aac_buffer *b, int *bitrate, float *length)
+@@ -424,6 +449,8 @@ static int decodeAACfile(char *aacfile,
+     float length = 0;
+ 
+     int first_time = 1;
++    int retval;
++    int streaminput = 0;
+ 
+     aac_buffer b;
+ 
+@@ -439,17 +466,39 @@ static int decodeAACfile(char *aacfile,
+         }
+     }
+ 
+-    b.infile = fopen(aacfile, "rb");
+-    if (b.infile == NULL)
++    if (0 == strcmp(aacfile, "-"))
+     {
+-        /* unable to open file */
+-        faad_fprintf(stderr, "Error opening file: %s\n", aacfile);
+-        return 1;
++	b.infile = stdin;
++#ifdef _WIN32
++        setmode(fileno(stdin), O_BINARY);
++#endif
++
++    } else
++    {
++    	b.infile = fopen(aacfile, "rb");
++    	if (b.infile == NULL)
++    	{
++    	    /* unable to open file */
++    	    faad_fprintf(stderr, "Error opening file: %s\n", aacfile);
++    	    return 1;
++    	}
+     }
+ 
+-    fseek(b.infile, 0, SEEK_END);
+-    fileread = ftell(b.infile);
+-    fseek(b.infile, 0, SEEK_SET);
++    retval = fseek(b.infile, 0, SEEK_END);
++#ifdef _WIN32
++	if (0 == strcmp(aacfile, "-")) {
++	  retval = -1;
++	}
++#endif
++    if (retval )
++    {
++	 faad_fprintf(stderr, "Input not seekable %s\n", aacfile);
++	 fileread = -1;
++         streaminput = 1;
++    } else {
++    	fileread = ftell(b.infile);
++    	fseek(b.infile, 0, SEEK_SET);
++    };
+ 
+     if (!(b.buffer = (unsigned char*)malloc(FAAD_MIN_STREAMSIZE*MAX_CHANNELS)))
+     {
+@@ -494,19 +543,39 @@ static int decodeAACfile(char *aacfile,
+ 
+     /* get AAC infos for printing */
+     header_type = 0;
++    if (streaminput == 1 )
++	lookforheader(&b);
++
+     if ((b.buffer[0] == 0xFF) && ((b.buffer[1] & 0xF6) == 0xF0))
+     {
+-        adts_parse(&b, &bitrate, &length);
+-        fseek(b.infile, tagsize, SEEK_SET);
+-
+-        bread = fread(b.buffer, 1, FAAD_MIN_STREAMSIZE*MAX_CHANNELS, b.infile);
+-        if (bread != FAAD_MIN_STREAMSIZE*MAX_CHANNELS)
+-            b.at_eof = 1;
+-        else
+-            b.at_eof = 0;
+-        b.bytes_into_buffer = bread;
+-        b.bytes_consumed = 0;
+-        b.file_offset = tagsize;
++        if (streaminput ==1)
++	{
++	    int frames, frame_length;
++	    int samplerate;
++	    float frames_per_sec, bytes_per_frame;
++	    samplerate = adts_sample_rates[(b.buffer[2]&0x3c)>>2];
++	    frame_length = ((((unsigned int)b.buffer[3] & 0x3)) << 11)
++	        | (((unsigned int)b.buffer[4]) << 3) | (b.buffer[5] >> 5);
++
++	    frames_per_sec = (float)samplerate/1024.0f;
++	    bytes_per_frame = (float)frame_length/(float)(1000);
++	    bitrate = (int)(8. * bytes_per_frame * frames_per_sec + 0.5);
++	    length = 1;
++	    faad_fprintf(stderr, "Streamed input format  samplerate %d channels %d.\n",samplerate,channels);
++
++	} else {
++		adts_parse(&b, &bitrate, &length);
++        	fseek(b.infile, tagsize, SEEK_SET);
++
++        	bread = fread(b.buffer, 1, FAAD_MIN_STREAMSIZE*MAX_CHANNELS, b.infile);
++        	if (bread != FAAD_MIN_STREAMSIZE*MAX_CHANNELS)
++        	    b.at_eof = 1;
++        	else
++        	    b.at_eof = 0;
++        	b.bytes_into_buffer = bread;
++        	b.bytes_consumed = 0;
++        	b.file_offset = tagsize;
++	}
+ 
+         header_type = 1;
+     } else if (memcmp(b.buffer, "ADIF", 4) == 0) {
+@@ -538,7 +607,8 @@ static int decodeAACfile(char *aacfile,
+         if (b.buffer)
+             free(b.buffer);
+         NeAACDecClose(hDecoder);
+-        fclose(b.infile);
++        if (b.infile != stdin)
++            fclose(b.infile);
+         return 1;
+     }
+     advance_buffer(&b, bread);
+@@ -564,7 +634,8 @@ static int decodeAACfile(char *aacfile,
+     if (infoOnly)
+     {
+         NeAACDecClose(hDecoder);
+-        fclose(b.infile);
++        if (b.infile != stdin)
++            fclose(b.infile);
+         if (b.buffer)
+             free(b.buffer);
+         return 0;
+@@ -621,7 +692,8 @@ static int decodeAACfile(char *aacfile,
+                     if (b.buffer)
+                         free(b.buffer);
+                     NeAACDecClose(hDecoder);
+-                    fclose(b.infile);
++                    if (b.infile != stdin)
++                        fclose(b.infile);
+                     return 0;
+                 }
+             } else {
+@@ -662,7 +734,8 @@ static int decodeAACfile(char *aacfile,
+         fclose(adtsFile);
+     }
+ 
+-    fclose(b.infile);
++    if (b.infile != stdin)
++        fclose(b.infile);
+ 
+     if (!first_time && !adts_out)
+         close_audio_file(aufile);
+@@ -750,6 +823,11 @@ static int decodeMP4file(char *mp4file,
+     /* initialise the callback structure */
+     mp4ff_callback_t *mp4cb = malloc(sizeof(mp4ff_callback_t));
+ 
++    if (strcmp(mp4file, "-") == 0 ) {
++        faad_fprintf(stderr, "Cannot open stdin for MP4 input \n");
++        return 1;
++    }
++
+     mp4File = fopen(mp4file, "rb");
+     mp4cb->read = read_callback;
+     mp4cb->seek = seek_callback;
+@@ -1016,6 +1094,7 @@ int main(int argc, char *argv[])
+     int result;
+     int infoOnly = 0;
+     int writeToStdio = 0;
++    int readFromStdin = 0;
+     int object_type = LC;
+     int def_srate = 0;
+     int downMatrix = 0;
+@@ -1229,15 +1308,30 @@ int main(int argc, char *argv[])
+     }
+ 
+     /* check for mp4 file */
+-    mp4file = 0;
+-    hMP4File = fopen(aacFileName, "rb");
+-    if (!hMP4File)
+-    {
+-        faad_fprintf(stderr, "Error opening file: %s\n", aacFileName);
+-        return 1;
++    if (0 == strcmp(aacFileName, "-")) {
++   	faad_fprintf(stderr, "Reading from stdin: %s\n", aacFileName);
++	readFromStdin = 1;
++	hMP4File  = stdin;
++#ifdef _WIN32
++        setmode(fileno(stdin), O_BINARY);
++#endif
++
++    } else {
++
++    	mp4file = 0;
++    	hMP4File = fopen(aacFileName, "rb");
++    	if (!hMP4File)
++    	{
++    	    faad_fprintf(stderr, "Error opening file: %s\n", aacFileName);
++    	    return 1;
++    	}
+     }
++
+     fread(header, 1, 8, hMP4File);
+-    fclose(hMP4File);
++
++    if (! readFromStdin )
++      fclose(hMP4File);
++
+     if (header[4] == 'f' && header[5] == 't' && header[6] == 'y' && header[7] == 'p')
+         mp4file = 1;
+ 
+@@ -1246,6 +1340,18 @@ int main(int argc, char *argv[])
+         result = decodeMP4file(aacFileName, audioFileName, adtsFileName, writeToStdio,
+             outputFormat, format, downMatrix, noGapless, infoOnly, adts_out, &length);
+     } else {
++
++	if (readFromStdin == 1) {
++		ungetc(header[7],hMP4File);
++		ungetc(header[6],hMP4File);
++		ungetc(header[5],hMP4File);
++		ungetc(header[4],hMP4File);
++		ungetc(header[3],hMP4File);
++		ungetc(header[2],hMP4File);
++		ungetc(header[1],hMP4File);
++		ungetc(header[0],hMP4File);
++	}
++
+         result = decodeAACfile(aacFileName, audioFileName, adtsFileName, writeToStdio,
+             def_srate, object_type, outputFormat, format, downMatrix, infoOnly, adts_out,
+             old_format, &length);
diff --git a/debian/patches/series b/debian/patches/series
index 973b94b..c6a562f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
 manpage.patch
+bpa-stdin.patch

-- 
faad2 packaging



More information about the pkg-multimedia-commits mailing list