Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-02-14 04:47:06 +0400
committerMichael Niedermayer <michaelni@gmx.at>2014-02-14 04:51:17 +0400
commitabb6821e43e74bfce1565c4a6ed75cfb666a2e6d (patch)
treeb00a4cb982289f9047dd452bfeacb2c2bdb40abb
parent84873794ad922cbcbdb5f62deda6c1ed16668bcc (diff)
parent8a2250344b19a343d830a902dbcf4c0b929ea49b (diff)
Merge commit '8a2250344b19a343d830a902dbcf4c0b929ea49b'
* commit '8a2250344b19a343d830a902dbcf4c0b929ea49b': jv: detect partial packets in the demuxer Conflicts: libavformat/jvdec.c See: 9d0c71e5e34dec2c6246bf47da8d9674c92f85c1 See: b948ab8132e24d215072120e210139dc456d4997 Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/jvdec.c17
-rw-r--r--tests/ref/fate/jv-demux2
2 files changed, 12 insertions, 7 deletions
diff --git a/libavformat/jvdec.c b/libavformat/jvdec.c
index e8d44b0fd8..eab450d862 100644
--- a/libavformat/jvdec.c
+++ b/libavformat/jvdec.c
@@ -184,17 +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 ((size = avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size)) < 0)
- return AVERROR(EIO);
- memset(pkt->data + JV_PREAMBLE_SIZE + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-
- pkt->size = size + JV_PREAMBLE_SIZE;
+ pkt->data[4] = jvf->video_type;
+ 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)
diff --git a/tests/ref/fate/jv-demux b/tests/ref/fate/jv-demux
index c57fce0217..51638df1a8 100644
--- a/tests/ref/fate/jv-demux
+++ b/tests/ref/fate/jv-demux
@@ -9,7 +9,7 @@
0, 5, 5, 1, 13940, 0x064c350a
0, 6, 6, 1, 14418, 0x078d2dd2
0, 7, 7, 1, 14539, 0x145167ed
-0, 8, 8, 1, 2552, 0xcf2b1db7
+0, 8, 8, 1, 2552, 0xcf2b1db7, F=0x3
1, 131072, 131072, 1764, 1764, 0x30be734d
1, 132836, 132836, 1764, 1764, 0xa4c873a7
1, 134600, 134600, 1764, 1764, 0xd5f17443