summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-06 15:05:17 +0300
committerPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-06 15:05:17 +0300
commited405d729443f414faa9e92094a23bad236ae9c6 (patch)
tree686480230bba21f4d240404ba226bc40e653bd06 /src
parent36fce1928cafcd8e2bd7c19bfb32af18c9969cb8 (diff)
downloadxine-lib-ed405d729443f414faa9e92094a23bad236ae9c6.tar.gz
xine-lib-ed405d729443f414faa9e92094a23bad236ae9c6.tar.bz2
demux_ts: detect transport stream changes from PAT
* * * Make sure initial PAT is parsed even if it's crc is 0
Diffstat (limited to 'src')
-rw-r--r--src/demuxers/demux_ts.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index 76cdb4550..e891a5cbe 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -321,6 +321,7 @@ typedef struct {
/* PAT */
uint32_t last_pat_crc;
+ uint32_t transport_stream_id;
/* programs */
uint32_t program_number[MAX_PMTS];
uint32_t pmt_pid[MAX_PMTS];
@@ -638,12 +639,19 @@ static void demux_ts_parse_pat (demux_ts_t*this, unsigned char *original_pkt,
}
#endif
- if (crc32 == this->last_pat_crc) {
+ if (crc32 == this->last_pat_crc &&
+ this->transport_stream_id == transport_stream_id) {
lprintf("demux_ts: PAT CRC unchanged\n");
return;
}
+ if (this->transport_stream_id != transport_stream_id) {
+ xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
+ "demux_ts: PAT transport_stream_id changed\n");
+ }
+
this->last_pat_crc = crc32;
+ this->transport_stream_id = transport_stream_id;
/*
* Process all programs in the program loop.
@@ -2391,6 +2399,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen,
*/
this->last_pat_crc = 0;
+ this->transport_stream_id = -1;
for (i = 0; i < MAX_PIDS; i++) {
this->media[i].pid = INVALID_PID;