mirror of https://git.ffmpeg.org/ffmpeg.git
mpegts: fuzzy crc check for not so spec compliant files
Fixes Ticket598 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
43bbc3f477
commit
f464b02d22
|
@ -123,6 +123,7 @@ struct MpegTSContext {
|
||||||
unsigned int nb_prg;
|
unsigned int nb_prg;
|
||||||
struct Program *prg;
|
struct Program *prg;
|
||||||
|
|
||||||
|
int8_t crc_validity[NB_PID_MAX];
|
||||||
|
|
||||||
/** filters for various streams specified by PMT + for the PAT and PMT */
|
/** filters for various streams specified by PMT + for the PAT and PMT */
|
||||||
MpegTSFilter *pids[NB_PID_MAX];
|
MpegTSFilter *pids[NB_PID_MAX];
|
||||||
|
@ -277,6 +278,7 @@ static int discard_pid(MpegTSContext *ts, unsigned int pid)
|
||||||
static void write_section_data(AVFormatContext *s, MpegTSFilter *tss1,
|
static void write_section_data(AVFormatContext *s, MpegTSFilter *tss1,
|
||||||
const uint8_t *buf, int buf_size, int is_start)
|
const uint8_t *buf, int buf_size, int is_start)
|
||||||
{
|
{
|
||||||
|
MpegTSContext *ts = s->priv_data;
|
||||||
MpegTSSectionFilter *tss = &tss1->u.section_filter;
|
MpegTSSectionFilter *tss = &tss1->u.section_filter;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
@ -304,10 +306,19 @@ static void write_section_data(AVFormatContext *s, MpegTSFilter *tss1,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tss->section_h_size != -1 && tss->section_index >= tss->section_h_size) {
|
if (tss->section_h_size != -1 && tss->section_index >= tss->section_h_size) {
|
||||||
|
int crc_valid = 1;
|
||||||
tss->end_of_section_reached = 1;
|
tss->end_of_section_reached = 1;
|
||||||
if (!tss->check_crc ||
|
|
||||||
av_crc(av_crc_get_table(AV_CRC_32_IEEE), -1,
|
if (tss->check_crc){
|
||||||
tss->section_buf, tss->section_h_size) == 0)
|
crc_valid = !av_crc(av_crc_get_table(AV_CRC_32_IEEE), -1, tss->section_buf, tss->section_h_size);
|
||||||
|
if (crc_valid){
|
||||||
|
ts->crc_validity[ tss1->pid ] = 100;
|
||||||
|
}else if(ts->crc_validity[ tss1->pid ] > -10){
|
||||||
|
ts->crc_validity[ tss1->pid ]--;
|
||||||
|
}else
|
||||||
|
crc_valid = 2;
|
||||||
|
}
|
||||||
|
if (crc_valid)
|
||||||
tss->section_cb(tss1, tss->section_buf, tss->section_h_size);
|
tss->section_cb(tss1, tss->section_buf, tss->section_h_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue