From b5eb9904b3cb68bbc15de55352dba4a5d456a1eb Mon Sep 17 00:00:00 2001 From: James Courtier-Dutton Date: Sat, 28 Aug 2004 17:54:05 +0000 Subject: Improve handling of Transport Mpeg streams. CVS patchset: 6913 CVS date: 2004/08/28 17:54:05 --- ChangeLog | 2 ++ src/demuxers/demux_ts.c | 51 ++++++++++++++++++++++++------------------------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a440d496..cb50531ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -25,6 +25,8 @@ xine-lib (1-rc6) * support mp3 audio in mp4 files * use utf-8 for matroska subtitles * next stage of MINGW port - engine library compiles now + * Improve DVD MRL handling. + * Improve Transport stream handling. xine-lib (1-rc5) * add support for ejecting removable media on Solaris diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index 69b956b6b..650fe8230 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_ts.c,v 1.104 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_ts.c,v 1.105 2004/08/28 17:54:05 jcdutton Exp $ * * Demultiplexer for MPEG2 Transport Streams. * @@ -35,6 +35,9 @@ * Date Author * ---- ------ * + * 28-Aug-2004 James Courtier-Dutton + * - Improve PAT and PMT handling. Added some FIXME comments. + * * 9-Aug-2003 James Courtier-Dutton * - Improve readability of code. Added some FIXME comments. * @@ -924,6 +927,7 @@ static void demux_ts_get_reg_desc(demux_ts_t *this, uint32_t *dest, * * In other words, the PMT is assumed to describe a reasonable number of * video, audio and other streams (with descriptors). + * FIXME: Implement support for multi section PMT. */ static void demux_ts_parse_pmt (demux_ts_t *this, unsigned char *originalPkt, @@ -1581,9 +1585,26 @@ static void demux_ts_parse_packet (demux_ts_t*this) { */ if (payload_unit_start_indicator && this->media_num < MAX_PIDS){ - /* FIXME: This is faulty assumption. - * This might be a PAT or PMT and not a PES. - */ + if (pid == 0) { + demux_ts_parse_pat (this, originalPkt, originalPkt+data_offset-4, + payload_unit_start_indicator); + return; + } + program_count = 0; + while ((this->program_number[program_count] != INVALID_PROGRAM) ) { + if (pid == this->pmt_pid[program_count]) { +#ifdef TS_LOG + printf ("demux_ts: PMT prog: 0x%.4x pid: 0x%.4x\n", + this->program_number[program_count], + this->pmt_pid[program_count]); +#endif + demux_ts_parse_pmt (this, originalPkt, originalPkt+data_offset-4, + payload_unit_start_indicator, + program_count); + return; + } + program_count++; + } int pes_stream_id = originalPkt[data_offset+3]; #ifdef TS_HEADER_LOG @@ -1643,11 +1664,6 @@ static void demux_ts_parse_packet (demux_ts_t*this) { data_len); return; } - else if (pid == 0) { - demux_ts_parse_pat (this, originalPkt, originalPkt+data_offset-4, - payload_unit_start_indicator); - return; - } else if (pid == NULL_PID) { #ifdef TS_LOG printf ("demux_ts: Null Packet\n"); @@ -1664,23 +1680,6 @@ static void demux_ts_parse_packet (demux_ts_t*this) { data_len); return; } - else { - program_count = 0; - while ((this->program_number[program_count] != INVALID_PROGRAM) ) { - if (pid == this->pmt_pid[program_count]) { -#ifdef TS_LOG - printf ("demux_ts: PMT prog: 0x%.4x pid: 0x%.4x\n", - this->program_number[program_count], - this->pmt_pid[program_count]); -#endif - demux_ts_parse_pmt (this, originalPkt, originalPkt+data_offset-4, - payload_unit_start_indicator, - program_count); - return; - } - program_count++; - } - } } } -- cgit v1.2.3