mpegps: Handle buffer exhaustion when reading packets.

This commit is contained in:
Alex Converse 2011-09-23 16:28:23 -07:00
parent 0c378ea1f7
commit 9fba8ebe0a

View File

@ -418,7 +418,7 @@ static int mpegps_read_packet(AVFormatContext *s,
{
MpegDemuxContext *m = s->priv_data;
AVStream *st;
int len, startcode, i, es_type;
int len, startcode, i, es_type, ret;
enum CodecID codec_id = CODEC_ID_NONE;
enum AVMediaType type;
int64_t pts, dts, dummy_pos; //dummy_pos is needed for the index building to work
@ -562,7 +562,13 @@ static int mpegps_read_packet(AVFormatContext *s,
return AVERROR(EINVAL);
}
av_new_packet(pkt, len);
avio_read(s->pb, pkt->data, pkt->size);
ret = avio_read(s->pb, pkt->data, pkt->size);
if (ret < 0) {
pkt->size = 0;
} else if (ret < pkt->size) {
pkt->size = ret;
memset(pkt->data + ret, 0, FF_INPUT_BUFFER_PADDING_SIZE);
}
pkt->pts = pts;
pkt->dts = dts;
pkt->pos = dummy_pos;
@ -571,7 +577,7 @@ static int mpegps_read_packet(AVFormatContext *s,
pkt->stream_index, pkt->pts / 90000.0, pkt->dts / 90000.0,
pkt->size);
return 0;
return (ret < 0) ? ret : 0;
}
static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index,