Browse Source

avcodec/snow: only allocate space for edges when encoding

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.4
Michael Niedermayer 11 years ago
parent
commit
aa1d096d02
1 changed files with 16 additions and 9 deletions
  1. +16
    -9
      libavcodec/snow.c

+ 16
- 9
libavcodec/snow.c View File

@@ -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;
}


Loading…
Cancel
Save