changeset 17492:3f420548c0ca

export custom mp_a52_framesize(), needed to parse ac3 frames when liba52 is not present; will be moved in a more appropriate place sometimes in the future
author nicodvb
date Fri, 27 Jan 2006 23:07:16 +0000
parents 1de8f7a7ad32
children f71e678e6216
files libmpdemux/demux_ts.c
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/demux_ts.c	Fri Jan 27 19:13:46 2006 +0000
+++ b/libmpdemux/demux_ts.c	Fri Jan 27 23:07:16 2006 +0000
@@ -464,7 +464,7 @@
 
 //stripped down version of a52_syncinfo() from liba52
 //copyright belongs to Michel Lespinasse <walken@zoy.org> and Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
-static int a52_framesize(uint8_t * buf)
+int mp_a52_framesize(uint8_t * buf, int *srate)
 {
 	int rate[] = {	32,  40,  48,  56,  64,  80,  96, 112,
 			128, 160, 192, 224, 256, 320, 384, 448,
@@ -490,10 +490,13 @@
 	switch(buf[4] & 0xc0) 
 	{
 		case 0:	/* 48 KHz */
+			*srate = 48000 >> half;
 			return 4 * bitrate;
 		case 0x40:	/* 44.1 KHz */
+			*srate = 44100 >> half;
 			return 2 * (320 * bitrate / 147 + (frmsizecod & 1));
 		case 0x80: /* 32 KHz */
+			*srate = 32000 >> half;
 			return 6 * bitrate;
 	}
 	
@@ -503,7 +506,7 @@
 //second stage: returns the count of A52 syncwords found
 static int a52_check(char *buf, int len)
 {
-	int cnt, frame_length, ok;
+	int cnt, frame_length, ok, srate;
 	
 	cnt = ok = 0;
 	if(len < 8)
@@ -513,7 +516,7 @@
 	{
 		if(buf[cnt] == 0x0B && buf[cnt+1] == 0x77)
 		{
-			frame_length = a52_framesize(&buf[cnt]);
+			frame_length = mp_a52_framesize(&buf[cnt], &srate);
 			if(frame_length>=7 && frame_length<=3840)
 			{
 				cnt += frame_length;