From: Miguel F. <mig...@us...> - 2004-12-10 12:42:12
|
Update of /cvsroot/xine/xine-lib/src/demuxers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21020 Modified Files: demux_ts.c Log Message: tags for AAC, MPEG4 and H264 Index: demux_ts.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_ts.c,v retrieving revision 1.112 retrieving revision 1.113 diff -u -r1.112 -r1.113 --- demux_ts.c 9 Dec 2004 13:16:52 -0000 1.112 +++ demux_ts.c 10 Dec 2004 12:42:02 -0000 1.113 @@ -202,6 +202,27 @@ #define ISO13522_STREAM 0xF3 #define PROG_STREAM_DIR 0xFF + typedef enum + { + ISO_11172_VIDEO = 0x01, /* ISO/IEC 11172 Video */ + ISO_13818_VIDEO = 0x02, /* ISO/IEC 13818-2 Video */ + ISO_11172_AUDIO = 0x03, /* ISO/IEC 11172 Audio */ + ISO_13818_AUDIO = 0x04, /* ISO/IEC 13818-3 Audi */ + ISO_13818_PRIVATE = 0x05, /* ISO/IEC 13818-1 private sections */ + ISO_13818_PES_PRIVATE = 0x06, /* ISO/IEC 13818-1 PES packets containing private data */ + ISO_13522_MHEG = 0x07, /* ISO/IEC 13512 MHEG */ + ISO_13818_DSMCC = 0x08, /* ISO/IEC 13818-1 Annex A DSM CC */ + ISO_13818_TYPE_A = 0x0a, /* ISO/IEC 13818-6 Multiprotocol encapsulation */ + ISO_13818_TYPE_B = 0x0b, /* ISO/IEC 13818-6 DSM-CC U-N Messages */ + ISO_13818_TYPE_C = 0x0c, /* ISO/IEC 13818-6 Stream Descriptors */ + ISO_13818_TYPE_D = 0x0d, /* ISO/IEC 13818-6 Sections (any type, including private data) */ + ISO_13818_AUX = 0x0e, /* ISO/IEC 13818-1 auxiliary */ + ISO_13818_PART7_AUDIO = 0x0f, /* ISO/IEC 13818-7 Audio with ADTS transport sytax */ + ISO_14496_PART2_VIDEO = 0x10, /* ISO/IEC 14496-2 Visual (MPEG-4) */ + ISO_14496_PART3_AUDIO = 0x11, /* ISO/IEC 14496-3 Audio with LATM transport syntax */ + ISO_14496_PART10_VIDEO = 0x1b /* ISO/IEC 14496-10 Video (MPEG-4 part 10/AVC, aka H.264) */ + } streamType; + #define WRAP_THRESHOLD 120000 #define PTS_AUDIO 0 @@ -720,7 +741,25 @@ m->content = p; m->size = packet_len; - m->type = BUF_VIDEO_MPEG; + switch (m->descriptor_tag) { + case ISO_11172_VIDEO: + case ISO_13818_VIDEO: + lprintf ("demux_ts: found MPEG video type.\n"); + m->type = BUF_VIDEO_MPEG; + break; + case ISO_14496_PART2_VIDEO: + lprintf ("demux_ts: found MPEG4 video type.\n"); + m->type = BUF_VIDEO_MPEG4; + break; + case ISO_14496_PART10_VIDEO: + lprintf ("demux_ts: found H264 video type.\n"); + m->type = BUF_VIDEO_H264; + break; + default: + lprintf ("demux_ts: unknown video type: %d, defaulting to MPEG.\n", m->descriptor_tag); + m->type = BUF_VIDEO_MPEG; + break; + } return 1; } else if ((stream_id & 0xe0) == 0xc0) { @@ -731,7 +770,22 @@ m->content = p; m->size = packet_len; - m->type = BUF_AUDIO_MPEG + track; + switch (m->descriptor_tag) { + case ISO_11172_AUDIO: + case ISO_13818_AUDIO: + lprintf ("demux_ts: found MPEG audio track.\n"); + m->type = BUF_AUDIO_MPEG + track; + break; + case ISO_13818_PART7_AUDIO: + case ISO_14496_PART3_AUDIO: + lprintf ("demux_ts: found AAC audio track.\n"); + m->type = BUF_AUDIO_AAC + track; + break; + default: + lprintf ("demux_ts: unknown audio type: %d, defaulting to MPEG.\n", m->descriptor_tag); + m->type = BUF_AUDIO_MPEG + track; + break; + } return 1; } else { @@ -949,24 +1003,6 @@ unsigned char *pkt, unsigned int pusi, uint32_t program_count) { - typedef enum - { - ISO_11172_VIDEO = 1, /* 1 */ - ISO_13818_VIDEO = 2, /* 2 */ - ISO_11172_AUDIO = 3, /* 3 */ - ISO_13818_AUDIO = 4, /* 4 */ - ISO_13818_PRIVATE = 5, /* 5 */ - ISO_13818_PES_PRIVATE = 6, /* 6 */ - ISO_13522_MHEG = 7, /* 7 */ - ISO_13818_DSMCC = 8, /* 8 */ - ISO_13818_TYPE_A = 9, /* 9 */ - ISO_13818_TYPE_B = 10, /* a */ - ISO_13818_TYPE_C = 11, /* b */ - ISO_13818_TYPE_D = 12, /* c */ - ISO_13818_TYPE_E = 13, /* d */ - ISO_13818_AUX = 14, - - } streamType; uint32_t table_id; uint32_t section_syntax_indicator; @@ -1151,6 +1187,8 @@ switch (stream[0]) { case ISO_11172_VIDEO: case ISO_13818_VIDEO: + case ISO_14496_PART2_VIDEO: + case ISO_14496_PART10_VIDEO: if (this->videoPid == INVALID_PID) { #ifdef TS_PMT_LOG printf ("demux_ts: PMT video pid 0x%.4x\n", pid); @@ -1163,6 +1201,8 @@ break; case ISO_11172_AUDIO: case ISO_13818_AUDIO: + case ISO_13818_PART7_AUDIO: + case ISO_14496_PART3_AUDIO: if (this->audioPid == INVALID_PID) { #ifdef TS_PMT_LOG printf ("demux_ts: PMT audio pid 0x%.4x\n", pid); |