demux: Move mp_a52_framesize from demux_ts.c to parse_es.c
The function is used in the MPEG muxer as well and not specific to MPEG-TS. Jointly developed by Nico Sabbi and myself. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31929 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
1 parent
1e403d0593
commit
7e57bfd853
4 files changed
+46
-45
No files matched your search
@@ -624,47 +624,6 @@ typedef struct {
|
||||
off_t probe;
|
||||
} tsdemux_init_t;
|
||||
|
||||
//stripped down version of a52_syncinfo() from liba52
|
||||
//copyright belongs to Michel Lespinasse <[email protected]> and Aaron Holtzman <[email protected]>
|
||||
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,
|
||||
512, 576, 640
|
||||
};
|
||||
uint8_t halfrate[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3};
|
||||
int frmsizecod, bitrate, half;
|
||||
|
||||
if((buf[0] != 0x0b) || (buf[1] != 0x77)) /* syncword */
|
||||
return 0;
|
||||
|
||||
if(buf[5] >= 0x60) /* bsid >= 12 */
|
||||
return 0;
|
||||
|
||||
half = halfrate[buf[5] >> 3];
|
||||
|
||||
frmsizecod = buf[4] & 63;
|
||||
if(frmsizecod >= 38)
|
||||
return 0;
|
||||
|
||||
bitrate = rate[frmsizecod >> 1];
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//second stage: returns the count of A52 syncwords found
|
||||
static int a52_check(char *buf, int len)
|
||||
{
|
||||
|
||||
@@ -19,10 +19,6 @@
|
||||
#ifndef MPLAYER_DEMUX_TS_H
|
||||
#define MPLAYER_DEMUX_TS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define TS_MAX_PROBE_SIZE 2000000
|
||||
|
||||
int mp_a52_framesize(uint8_t *buf, int *srate);
|
||||
|
||||
#endif /* MPLAYER_DEMUX_TS_H */
|
||||
@@ -18,6 +18,7 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
@@ -114,3 +115,44 @@ int skip_video_packet(demux_stream_t *ds){
|
||||
// SYNC AGAIN:
|
||||
return sync_video_packet(ds);
|
||||
}
|
||||
|
||||
/* stripped down version of a52_syncinfo() from liba52
|
||||
* copyright belongs to Michel Lespinasse <walken@zoy.org>
|
||||
* and Aaron Holtzman <aholtzma@ess.engr.uvic.ca> */
|
||||
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,
|
||||
512, 576, 640
|
||||
};
|
||||
uint8_t halfrate[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 };
|
||||
int frmsizecod, bitrate, half;
|
||||
|
||||
if ((buf[0] != 0x0b) || (buf[1] != 0x77)) /* syncword */
|
||||
return 0;
|
||||
|
||||
if (buf[5] >= 0x60) /* bsid >= 12 */
|
||||
return 0;
|
||||
|
||||
half = halfrate[buf[5] >> 3];
|
||||
|
||||
frmsizecod = buf[4] & 63;
|
||||
if (frmsizecod >= 38)
|
||||
return 0;
|
||||
|
||||
bitrate = rate[frmsizecod >> 1];
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -19,6 +19,8 @@
|
||||
#ifndef MPLAYER_PARSE_ES_H
|
||||
#define MPLAYER_PARSE_ES_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "demuxer.h"
|
||||
|
||||
#define MAX_VIDEO_PACKET_SIZE (224*1024+4)
|
||||
@@ -38,4 +40,6 @@ int read_video_packet(demux_stream_t *ds);
|
||||
// return: next packet code
|
||||
int skip_video_packet(demux_stream_t *ds);
|
||||
|
||||
int mp_a52_framesize(uint8_t *buf, int *srate);
|
||||
|
||||
#endif /* MPLAYER_PARSE_ES_H */
|
||||
Reference in new issue
Block a user