#include <stdlib.h>
#include <string.h>
+#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "bytestream.h"
#include "hpeldsp.h"
}
}
if (bytestream2_get_bytes_left(&s->stream_ptr) > 1) {
- av_log(s->avctx, AV_LOG_ERROR,
+ av_log(s->avctx, AV_LOG_DEBUG,
"decode finished with %d bytes left over\n",
bytestream2_get_bytes_left(&s->stream_ptr));
}
AVFrame *frame = data;
int ret;
+ if (buf_size < 2)
+ return AVERROR_INVALIDDATA;
+
/* decoding map contains 4 bits of information per 8x8 block */
- s->decoding_map_size = avctx->width * avctx->height / (8 * 8 * 2);
+ s->decoding_map_size = AV_RL16(avpkt->data);
/* compressed buffer needs to be large enough to at least hold an entire
* decoding map */
- if (buf_size < s->decoding_map_size)
+ if (buf_size < s->decoding_map_size + 2)
return buf_size;
if (av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, NULL)) {
av_frame_unref(s->second_last_frame);
}
- s->decoding_map = buf;
- bytestream2_init(&s->stream_ptr, buf + s->decoding_map_size,
+ s->decoding_map = buf + 2;
+ bytestream2_init(&s->stream_ptr, buf + 2 + s->decoding_map_size,
buf_size - s->decoding_map_size);
if ((ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF)) < 0)