aboutsummaryrefslogtreecommitdiff
path: root/libavcodec/qdrw.c
diff options
context:
space:
mode:
authorMichael Niedermayer2015-05-14 12:25:05 +0200
committerMichael Niedermayer2015-05-14 12:35:39 +0200
commit019daa07759727ac81f5871eb3ce582432ae483a (patch)
treeb95f2708e0853454c9347de1d03b4ecfd775b9c4 /libavcodec/qdrw.c
parent5c8e4bf7c4f4264fb317db0f771b1defabafba81 (diff)
avcodec/qdrw: Fix the code which asks for version 1 samples
The new code only asks for version 1 if its actually version 1 and prints the version bytes if its something else Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/qdrw.c')
-rw-r--r--libavcodec/qdrw.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libavcodec/qdrw.c b/libavcodec/qdrw.c
index 3b174659ff..6c920aa460 100644
--- a/libavcodec/qdrw.c
+++ b/libavcodec/qdrw.c
@@ -145,6 +145,7 @@ static int decode_frame(AVCodecContext *avctx,
GetByteContext gbc;
int colors;
int w, h, ret;
+ int ver;
bytestream2_init(&gbc, avpkt->data, avpkt->size);
if ( bytestream2_get_bytes_left(&gbc) >= 552
@@ -153,6 +154,8 @@ static int decode_frame(AVCodecContext *avctx,
)
bytestream2_skip(&gbc, 512);
+ ver = check_header(gbc.buffer, bytestream2_get_bytes_left(&gbc));
+
/* smallest PICT header */
if (bytestream2_get_bytes_left(&gbc) < 40) {
av_log(avctx, AV_LOG_ERROR, "Frame is too small %d\n",
@@ -170,12 +173,15 @@ static int decode_frame(AVCodecContext *avctx,
/* version 1 is identified by 0x1101
* it uses byte-aligned opcodes rather than word-aligned */
- if (bytestream2_get_be32(&gbc) != 0x001102FF) {
+ if (ver == 1) {
avpriv_request_sample(avctx, "QuickDraw version 1");
return AVERROR_PATCHWELCOME;
+ } else if (ver != 2) {
+ avpriv_request_sample(avctx, "QuickDraw version unknown (%X)", bytestream2_get_be32(&gbc));
+ return AVERROR_PATCHWELCOME;
}
- bytestream2_skip(&gbc, 26);
+ bytestream2_skip(&gbc, 4+26);
while (bytestream2_get_bytes_left(&gbc) >= 4) {
int bppcnt, bpp;