mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-23 04:24:35 +02:00
Stop parsing in read_header only after finding pmt, and
do not close pat filter so further pmt can be parsed. Fix issue #1294. Originally committed as revision 19530 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
1aae34890c
commit
d46c84ea31
@ -640,6 +640,11 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
|
|||||||
p += program_info_length;
|
p += program_info_length;
|
||||||
if (p >= p_end)
|
if (p >= p_end)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// stop parsing after pmt, we found header
|
||||||
|
if (!ts->stream->nb_streams)
|
||||||
|
ts->stop_parse = 1;
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
st = 0;
|
st = 0;
|
||||||
stream_type = get8(&p, p_end);
|
stream_type = get8(&p, p_end);
|
||||||
@ -725,7 +730,6 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
|
|||||||
p = desc_list_end;
|
p = desc_list_end;
|
||||||
}
|
}
|
||||||
/* all parameters are there */
|
/* all parameters are there */
|
||||||
ts->stop_parse++;
|
|
||||||
mpegts_close_filter(ts, filter);
|
mpegts_close_filter(ts, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,17 +766,12 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
|
|||||||
/* NIT info */
|
/* NIT info */
|
||||||
} else {
|
} else {
|
||||||
av_new_program(ts->stream, sid);
|
av_new_program(ts->stream, sid);
|
||||||
ts->stop_parse--;
|
|
||||||
mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);
|
mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);
|
||||||
add_pat_entry(ts, sid);
|
add_pat_entry(ts, sid);
|
||||||
add_pid_to_pmt(ts, sid, 0); //add pat pid to program
|
add_pid_to_pmt(ts, sid, 0); //add pat pid to program
|
||||||
add_pid_to_pmt(ts, sid, pmt_pid);
|
add_pid_to_pmt(ts, sid, pmt_pid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* not found */
|
|
||||||
ts->stop_parse++;
|
|
||||||
|
|
||||||
mpegts_close_filter(ts, filter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
|
static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user