Commit e0153145 authored by Michael Niedermayer's avatar Michael Niedermayer

avformat/mpegts: Detect changes in packet through CRC instead of just the 5bit version

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 4b6be54b
......@@ -76,6 +76,8 @@ typedef struct MpegTSSectionFilter {
int section_index;
int section_h_size;
int last_ver;
unsigned crc;
unsigned last_crc;
uint8_t *section_buf;
unsigned int check_crc : 1;
unsigned int end_of_section_reached : 1;
......@@ -419,6 +421,9 @@ static void write_section_data(MpegTSContext *ts, MpegTSFilter *tss1,
if (tss->check_crc) {
crc_valid = !av_crc(av_crc_get_table(AV_CRC_32_IEEE), -1, tss->section_buf, tss->section_h_size);
if (tss->section_h_size >= 4)
tss->crc = AV_RB32(tss->section_buf + tss->section_h_size - 4);
if (crc_valid) {
ts->crc_validity[ tss1->pid ] = 100;
}else if (ts->crc_validity[ tss1->pid ] > -10) {
......@@ -585,10 +590,11 @@ typedef struct SectionHeader {
static int skip_identical(const SectionHeader *h, MpegTSSectionFilter *tssf)
{
if (h->version == tssf->last_ver)
if (h->version == tssf->last_ver && tssf->last_crc == tssf->crc)
return 1;
tssf->last_ver = h->version;
tssf->last_crc = tssf->crc;
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment