summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-06 14:57:09 +0300
committerPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-06 14:57:09 +0300
commit36fce1928cafcd8e2bd7c19bfb32af18c9969cb8 (patch)
tree8f379a615883c9917a9865719b0c4fb18c068052
parent482c6451982d9273e1d6f96e627df7a6511dd5ac (diff)
downloadxine-lib-36fce1928cafcd8e2bd7c19bfb32af18c9969cb8.tar.gz
xine-lib-36fce1928cafcd8e2bd7c19bfb32af18c9969cb8.tar.bz2
demux_ts: Do not parse PAT unless it was changed (CRC)
-rw-r--r--src/demuxers/demux_ts.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index b8d655598..76cdb4550 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -318,6 +318,10 @@ typedef struct {
int rate;
int media_num;
demux_ts_media media[MAX_PIDS];
+
+ /* PAT */
+ uint32_t last_pat_crc;
+ /* programs */
uint32_t program_number[MAX_PMTS];
uint32_t pmt_pid[MAX_PMTS];
uint8_t *pmt[MAX_PMTS];
@@ -634,6 +638,13 @@ static void demux_ts_parse_pat (demux_ts_t*this, unsigned char *original_pkt,
}
#endif
+ if (crc32 == this->last_pat_crc) {
+ lprintf("demux_ts: PAT CRC unchanged\n");
+ return;
+ }
+
+ this->last_pat_crc = crc32;
+
/*
* Process all programs in the program loop.
*/
@@ -2378,6 +2389,9 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen,
/*
* Initialise our specialised data.
*/
+
+ this->last_pat_crc = 0;
+
for (i = 0; i < MAX_PIDS; i++) {
this->media[i].pid = INVALID_PID;
this->media[i].buf = NULL;