diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2013-06-05 20:30:48 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2013-06-16 15:53:33 +0200 |
commit | dac0d4f354fe5ae93910cc6b30df9b992cca6be0 (patch) | |
tree | 44ea0438e8f6dc697e5959f8bbf4ca6cafb81fb4 | |
parent | 3f71c0c1b08a815609fba9a9378171d1181083d3 (diff) | |
download | ffmpeg-dac0d4f354fe5ae93910cc6b30df9b992cca6be0.tar.gz |
4xm: fold last_picture lazy allocation in decode_p_frame
(cherry picked from commit 50ec1db62d977b6e864f315a53c1c580a6d7efa4)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Conflicts:
libavcodec/4xm.c
-rw-r--r-- | libavcodec/4xm.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c index f0e1b48975..ceaacee5a6 100644 --- a/libavcodec/4xm.c +++ b/libavcodec/4xm.c @@ -395,6 +395,16 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length) const int stride = f->current_picture.linesize[0] >> 1; unsigned int bitstream_size, bytestream_size, wordstream_size, extra, bytestream_offset, wordstream_offset; + int ret; + + if (!f->last_picture.data[0]) { + if ((ret = ff_get_buffer(f->avctx, &f->last_picture)) < 0) { + av_log(f->avctx, AV_LOG_ERROR, "get_buffer() failed\n"); + return ret; + } + memset(f->last_picture.data[0], 0, + f->avctx->height * FFABS(f->last_picture.linesize[0])); + } if (f->version > 1) { extra = 20; @@ -852,14 +862,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, if (decode_i_frame(f, buf, frame_size) < 0) return -1; } else if (frame_4cc == AV_RL32("pfrm") || frame_4cc == AV_RL32("pfr2")) { - if (!f->last_picture.data[0]) { - f->last_picture.reference = 1; - if (ff_get_buffer(avctx, &f->last_picture) < 0) { - av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); - return -1; - } - memset(f->last_picture.data[0], 0, avctx->height * FFABS(f->last_picture.linesize[0])); - } p->pict_type = AV_PICTURE_TYPE_P; if (decode_p_frame(f, buf, frame_size) < 0) |