diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-06-27 04:45:04 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-06-27 04:49:09 +0200 |
commit | b96c9513f35a109b6ee06e6e22deea84c5fdab4b (patch) | |
tree | ad12ae34c14c935e73d9a9cbf910bd189fa8a89a | |
parent | 134beb9e02222a33fc2534176c64aeeed0549851 (diff) | |
download | ffmpeg-b96c9513f35a109b6ee06e6e22deea84c5fdab4b.tar.gz |
avcodec/snow: factor ff_snow_get_buffer() out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/snow.c | 32 | ||||
-rw-r--r-- | libavcodec/snow.h | 1 | ||||
-rw-r--r-- | libavcodec/snowenc.c | 13 |
3 files changed, 24 insertions, 22 deletions
diff --git a/libavcodec/snow.c b/libavcodec/snow.c index 616d1170af..e1ed29793d 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -66,6 +66,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; + + frame->width = s->avctx->width + 2 * EDGE_WIDTH; + frame->height = s->avctx->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; + } + frame->width = s->avctx->width; + frame->height = s->avctx->height; + + return 0; +} + void ff_snow_reset_contexts(SnowContext *s){ //FIXME better initial contexts int plane_index, level, orientation; @@ -661,18 +681,8 @@ int ff_snow_frame_start(SnowContext *s){ return -1; } } - s->current_picture->width = s->avctx->width + 2 * EDGE_WIDTH; - s->current_picture->height = s->avctx->height + 2 * EDGE_WIDTH; - if ((ret = ff_get_buffer(s->avctx, s->current_picture, AV_GET_BUFFER_FLAG_REF)) < 0) + if ((ret = ff_snow_get_buffer(s, s->current_picture)) < 0) return ret; - for (i = 0; s->current_picture->data[i]; i++) { - int offset = (EDGE_WIDTH >> (i ? s->chroma_v_shift : 0)) * - s->current_picture->linesize[i] + - (EDGE_WIDTH >> (i ? s->chroma_h_shift : 0)); - s->current_picture->data[i] += offset; - } - s->current_picture->width = s->avctx->width; - s->current_picture->height = s->avctx->height; s->current_picture->key_frame= s->keyframe; diff --git a/libavcodec/snow.h b/libavcodec/snow.h index d0e5c5ba0b..a9c8518d75 100644 --- a/libavcodec/snow.h +++ b/libavcodec/snow.h @@ -232,6 +232,7 @@ int ff_snow_frame_start(SnowContext *s); void ff_snow_pred_block(SnowContext *s, uint8_t *dst, uint8_t *tmp, ptrdiff_t stride, int sx, int sy, int b_w, int b_h, BlockNode *block, int plane_index, int w, int h); +int ff_snow_get_buffer(SnowContext *s, AVFrame *frame); /* common inline functions */ //XXX doublecheck all of them should stay inlined diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index d14b88e35e..a39cd84403 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -125,18 +125,9 @@ static av_cold int encode_init(AVCodecContext *avctx) s->input_picture = av_frame_alloc(); if (!s->input_picture) return AVERROR(ENOMEM); - s->input_picture->width = s->avctx->width + 2 * EDGE_WIDTH; - s->input_picture->height = s->avctx->height + 2 * EDGE_WIDTH; - if ((ret = ff_get_buffer(s->avctx, s->input_picture, AV_GET_BUFFER_FLAG_REF)) < 0) + + if ((ret = ff_snow_get_buffer(s, s->input_picture)) < 0) return ret; - for (i = 0; s->input_picture->data[i]; i++) { - int offset = (EDGE_WIDTH >> (i ? s->chroma_v_shift : 0)) * - s->input_picture->linesize[i] + - (EDGE_WIDTH >> (i ? s->chroma_h_shift : 0)); - s->input_picture->data[i] += offset; - } - s->input_picture->width = s->avctx->width; - s->input_picture->height = s->avctx->height; if(s->avctx->me_method == ME_ITER){ int size= s->b_width * s->b_height << 2*s->block_max_depth; |