diff options
author | Petri Hintukainen <phintuka@users.sourceforge.net> | 2011-10-06 14:57:09 +0300 |
---|---|---|
committer | Petri Hintukainen <phintuka@users.sourceforge.net> | 2011-10-06 14:57:09 +0300 |
commit | 36fce1928cafcd8e2bd7c19bfb32af18c9969cb8 (patch) | |
tree | 8f379a615883c9917a9865719b0c4fb18c068052 | |
parent | 482c6451982d9273e1d6f96e627df7a6511dd5ac (diff) | |
download | xine-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.c | 14 |
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; |