summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Courtier-Dutton <jcdutton@users.sourceforge.net>2004-08-28 17:54:05 +0000
committerJames Courtier-Dutton <jcdutton@users.sourceforge.net>2004-08-28 17:54:05 +0000
commitb5eb9904b3cb68bbc15de55352dba4a5d456a1eb (patch)
treeebdc24b0c9ccf59a5b01b98a0edce1a608d14aa4
parent03162b0a56938768864c78b14847e429e396f7c7 (diff)
downloadxine-lib-b5eb9904b3cb68bbc15de55352dba4a5d456a1eb.tar.gz
xine-lib-b5eb9904b3cb68bbc15de55352dba4a5d456a1eb.tar.bz2
Improve handling of Transport Mpeg streams.
CVS patchset: 6913 CVS date: 2004/08/28 17:54:05
-rw-r--r--ChangeLog2
-rw-r--r--src/demuxers/demux_ts.c51
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 <jcdutton>
+ * - Improve PAT and PMT handling. Added some FIXME comments.
+ *
* 9-Aug-2003 James Courtier-Dutton <jcdutton>
* - 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++;
- }
- }
}
}