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:
parent
f795a8a8bf
commit
8a2250344b
@ -184,16 +184,22 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
case JV_VIDEO:
|
case JV_VIDEO:
|
||||||
jv->state++;
|
jv->state++;
|
||||||
if (jvf->video_size || jvf->palette_size) {
|
if (jvf->video_size || jvf->palette_size) {
|
||||||
|
int ret;
|
||||||
int size = jvf->video_size + jvf->palette_size;
|
int size = jvf->video_size + jvf->palette_size;
|
||||||
if (av_new_packet(pkt, size + JV_PREAMBLE_SIZE))
|
if (av_new_packet(pkt, size + JV_PREAMBLE_SIZE))
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
AV_WL32(pkt->data, jvf->video_size);
|
AV_WL32(pkt->data, jvf->video_size);
|
||||||
pkt->data[4] = jvf->video_type;
|
pkt->data[4] = jvf->video_type;
|
||||||
if (avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size) < 0)
|
ret = avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size);
|
||||||
return AVERROR(EIO);
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
pkt->size = size + JV_PREAMBLE_SIZE;
|
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->stream_index = 1;
|
||||||
pkt->pts = jv->pts;
|
pkt->pts = jv->pts;
|
||||||
if (jvf->video_type != 1)
|
if (jvf->video_type != 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user