summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-06-27 04:45:04 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-06-27 04:49:09 +0200
commitb96c9513f35a109b6ee06e6e22deea84c5fdab4b (patch)
treead12ae34c14c935e73d9a9cbf910bd189fa8a89a /libavcodec
parent134beb9e02222a33fc2534176c64aeeed0549851 (diff)
avcodec/snow: factor ff_snow_get_buffer() out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/snow.c32
-rw-r--r--libavcodec/snow.h1
-rw-r--r--libavcodec/snowenc.c13
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;