mirror of https://git.ffmpeg.org/ffmpeg.git
In ts demuxer, if pes packet size is < ts packet, honor pes packet and skip padded data.
Fixes issue #2392. Originally committed as revision 25841 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
79561f0ed4
commit
74f726209f
|
@ -797,13 +797,17 @@ static int mpegts_push_data(MpegTSFilter *filter,
|
||||||
break;
|
break;
|
||||||
case MPEGTS_PAYLOAD:
|
case MPEGTS_PAYLOAD:
|
||||||
if (buf_size > 0 && pes->buffer) {
|
if (buf_size > 0 && pes->buffer) {
|
||||||
if (pes->data_index+buf_size > pes->total_size) {
|
if (pes->data_index > 0 && pes->data_index+buf_size > pes->total_size) {
|
||||||
new_pes_packet(pes, ts->pkt);
|
new_pes_packet(pes, ts->pkt);
|
||||||
pes->total_size = MAX_PES_PAYLOAD;
|
pes->total_size = MAX_PES_PAYLOAD;
|
||||||
pes->buffer = av_malloc(pes->total_size+FF_INPUT_BUFFER_PADDING_SIZE);
|
pes->buffer = av_malloc(pes->total_size+FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
if (!pes->buffer)
|
if (!pes->buffer)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
ts->stop_parse = 1;
|
ts->stop_parse = 1;
|
||||||
|
} else if (pes->data_index == 0 && buf_size > pes->total_size) {
|
||||||
|
// pes packet size is < ts size packet and pes data is padded with 0xff
|
||||||
|
// not sure if this is legal in ts but see issue #2392
|
||||||
|
buf_size = pes->total_size;
|
||||||
}
|
}
|
||||||
memcpy(pes->buffer+pes->data_index, p, buf_size);
|
memcpy(pes->buffer+pes->data_index, p, buf_size);
|
||||||
pes->data_index += buf_size;
|
pes->data_index += buf_size;
|
||||||
|
|
Loading…
Reference in New Issue