jv: detect partial packets in the demuxer

Fixes fate-jv under valgrind which reports a different CRC for the last
frame from a partial read.
This commit is contained in:
Janne Grunau 2014-02-12 20:08:52 +01:00
parent f795a8a8bf
commit 8a2250344b
1 changed files with 10 additions and 4 deletions

View File

@ -184,16 +184,22 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
case JV_VIDEO:
jv->state++;
if (jvf->video_size || jvf->palette_size) {
int ret;
int size = jvf->video_size + jvf->palette_size;
if (av_new_packet(pkt, size + JV_PREAMBLE_SIZE))
return AVERROR(ENOMEM);
AV_WL32(pkt->data, jvf->video_size);
pkt->data[4] = jvf->video_type;
if (avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size) < 0)
return AVERROR(EIO);
pkt->size = size + JV_PREAMBLE_SIZE;
ret = avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size);
if (ret < 0)
return ret;
if (ret < size) {
memset(pkt->data + JV_PREAMBLE_SIZE + ret, 0,
FF_INPUT_BUFFER_PADDING_SIZE);
pkt->flags |= AV_PKT_FLAG_CORRUPT;
}
pkt->size = ret + JV_PREAMBLE_SIZE;
pkt->stream_index = 1;
pkt->pts = jv->pts;
if (jvf->video_type != 1)