diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-07-16 04:57:42 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-07-16 04:57:42 +0200 |
commit | aa1d096d027be4fe901062f04a0b2adfb75af82f (patch) | |
tree | 5ce42ab398ad5766eb7a0ba3a04c065b8e76d9b5 | |
parent | 8156e036e52777532b15d509c3962fb883dabbc9 (diff) | |
download | ffmpeg-aa1d096d027be4fe901062f04a0b2adfb75af82f.tar.gz |
avcodec/snow: only allocate space for edges when encoding
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/snow.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c index e3518eb9eb..7cce7a583a 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -69,19 +69,26 @@ void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride, uint8_ int ff_snow_get_buffer(SnowContext *s, AVFrame *frame) { int ret, i; + int edges_needed = av_codec_is_encoder(s->avctx->codec); - frame->width = s->avctx->width + 2 * EDGE_WIDTH; - frame->height = s->avctx->height + 2 * EDGE_WIDTH; + frame->width = s->avctx->width ; + frame->height = s->avctx->height; + if (edges_needed) { + frame->width += 2 * EDGE_WIDTH; + frame->height += 2 * EDGE_WIDTH; + } if ((ret = ff_get_buffer(s->avctx, frame, AV_GET_BUFFER_FLAG_REF)) < 0) return ret; - for (i = 0; frame->data[i]; i++) { - int offset = (EDGE_WIDTH >> (i ? s->chroma_v_shift : 0)) * - frame->linesize[i] + - (EDGE_WIDTH >> (i ? s->chroma_h_shift : 0)); - frame->data[i] += offset; + if (edges_needed) { + for (i = 0; frame->data[i]; i++) { + int offset = (EDGE_WIDTH >> (i ? s->chroma_v_shift : 0)) * + frame->linesize[i] + + (EDGE_WIDTH >> (i ? s->chroma_h_shift : 0)); + frame->data[i] += offset; + } + frame->width = s->avctx->width; + frame->height = s->avctx->height; } - frame->width = s->avctx->width; - frame->height = s->avctx->height; return 0; } |