[FFmpeg-devel] [GSOC][PATCH 1/4] factoring obmc out of snow
Michael Niedermayer
michael at niedermayer.cc
Sun Aug 21 17:51:02 EEST 2016
On Sun, Aug 21, 2016 at 09:32:31AM +0300, Станислав Долганов wrote:
> Sorry, I forgot to return ok from encode init. Here updated patch.
>
> 2016-08-20 23:44 GMT+03:00 Michael Niedermayer <michael at niedermayer.cc>:
>
> > On Sat, Aug 20, 2016 at 11:01:29PM +0300, Станислав Долганов wrote:
> > > Fixed it.
> >
> > breaks fate (this worked with the previous patch)
> >
> > make: *** [fate-vsynth1-snow] Error 139
> > make: *** [fate-vsynth1-snow-hpel] Error 139
> > make: *** [fate-vsynth1-snow-ll] Error 139
> > make: *** [fate-filter-mcdeint-fast] Error 139
> > make: *** [fate-filter-mcdeint-medium] Error 139
> > make: *** [fate-vsynth2-snow] Error 139
> > make: *** [fate-vsynth2-snow-hpel] Error 139
> > make: *** [fate-vsynth2-snow-ll] Error 139
> > make: *** [fate-vsynth_lena-snow] Error 139
> > make: *** [fate-vsynth_lena-snow-hpel] Error 139
> > make: *** [fate-vsynth_lena-snow-ll] Error 139
> >
> > [...]
> >
> >
> > --
> > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
> >
> > Modern terrorism, a quick summary: Need oil, start war with country that
> > has oil, kill hundread thousand in war. Let country fall into chaos,
> > be surprised about raise of fundamantalists. Drop more bombs, kill more
> > people, be surprised about them taking revenge and drop even more bombs
> > and strip your own citizens of their rights and freedoms. to be continued
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> >
>
>
> --
> Станислав Долганов
> b/libavcodec/Makefile | 8
> b/libavcodec/obmc.c | 61 +
> b/libavcodec/obmc.h | 30
> b/libavcodec/obme.c | 1131 ++++++++++++++++++++++++++++++++++++
> b/libavcodec/obme.h | 33 +
> b/libavcodec/obmemc.c | 652 ++++++++++++++++++++
> b/libavcodec/obmemc.h | 522 ++++++++++++++++
> b/libavcodec/obmemc_data.h | 132 ++++
> b/libavcodec/snow.c | 571 ------------------
> b/libavcodec/snow.h | 356 -----------
> b/libavcodec/snowdec.c | 235 ++-----
> b/libavcodec/snowenc.c | 1408 +++++++--------------------------------------
> libavcodec/snowdata.h | 132 ----
> 13 files changed, 2896 insertions(+), 2375 deletions(-)
> 7fd1c474b26a198cac3d5a85ef27ef1acc47c80b 0001-factoring-obmc-out-of-snow.patch
> From 936143b88dbbe666d2c9be38fe37f715c3e91e6b Mon Sep 17 00:00:00 2001
> From: Stanislav Dolganov <dolganov at qst.hk>
> Date: Thu, 18 Aug 2016 14:07:35 +0300
> Subject: [PATCH 1/4] factoring obmc out of snow
>
> ---
> libavcodec/Makefile | 8 +-
> libavcodec/obmc.c | 61 ++
> libavcodec/obmc.h | 30 +
> libavcodec/obme.c | 1131 +++++++++++++++++++++++++++++++++++++
> libavcodec/obme.h | 33 ++
> libavcodec/obmemc.c | 652 +++++++++++++++++++++
> libavcodec/obmemc.h | 522 +++++++++++++++++
> libavcodec/obmemc_data.h | 132 +++++
> libavcodec/snow.c | 571 +------------------
> libavcodec/snow.h | 356 +-----------
> libavcodec/snowdata.h | 132 -----
> libavcodec/snowdec.c | 235 +++-----
> libavcodec/snowenc.c | 1408 ++++++++--------------------------------------
> 13 files changed, 2896 insertions(+), 2375 deletions(-)
> create mode 100644 libavcodec/obmc.c
> create mode 100644 libavcodec/obmc.h
> create mode 100644 libavcodec/obme.c
> create mode 100644 libavcodec/obme.h
> create mode 100644 libavcodec/obmemc.c
> create mode 100644 libavcodec/obmemc.h
> create mode 100644 libavcodec/obmemc_data.h
> delete mode 100644 libavcodec/snowdata.h
>
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index b375720..f24cd81 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -511,9 +511,11 @@ OBJS-$(CONFIG_SMACKAUD_DECODER) += smacker.o
> OBJS-$(CONFIG_SMACKER_DECODER) += smacker.o
> OBJS-$(CONFIG_SMC_DECODER) += smc.o
> OBJS-$(CONFIG_SMVJPEG_DECODER) += smvjpegdec.o
> -OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o snow_dwt.o
> -OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o snow_dwt.o \
> - h263.o ituh263enc.o
> +OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o snow_dwt.o\
> + obmemc.o obmc.o
inconsistent indention and tabs
> +OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o snow_dwt.o\
> + h263.o ituh263enc.o\
> + obmemc.o obme.o
> OBJS-$(CONFIG_SOL_DPCM_DECODER) += dpcm.o
> OBJS-$(CONFIG_SONIC_DECODER) += sonic.o
> OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o
> diff --git a/libavcodec/obmc.c b/libavcodec/obmc.c
> new file mode 100644
> index 0000000..10a3afe
> --- /dev/null
> +++ b/libavcodec/obmc.c
> @@ -0,0 +1,61 @@
> +/*
> + * Copyright (C) 2004 Michael Niedermayer <michaelni at gmx.at>
> + * Copyright (C) 2006 Robert Edele <yartrebo at earthlink.net>
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> + #include "obmc.h"
> +
> +int ff_obmc_decode_init(OBMCContext *f) {
> + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(f->avctx->pix_fmt);
> + if (!desc)
> + return AVERROR_INVALIDDATA;
> + int i;
> + f->nb_planes = 0;
> + for (i = 0; i < desc->nb_components; i++)
> + f->nb_planes = FFMAX(f->nb_planes, desc->comp[i].plane + 1);
> +
> + avcodec_get_chroma_sub_sample(f->avctx->pix_fmt, &f->chroma_h_shift, &f->chroma_v_shift);
> +
> + return 0;
> +}
> +
> +int ff_obmc_predecode_frame(OBMCContext *f) {
> + int plane_index, ret;
> + for(plane_index=0; plane_index < f->nb_planes; plane_index++){
> + PlaneObmc *pc= &f->plane[plane_index];
> + pc->fast_mc= pc->diag_mc && pc->htaps==6 && pc->hcoeff[0]==40
> + && pc->hcoeff[1]==-10
> + && pc->hcoeff[2]==2;
> + }
> +
> + ff_obmc_alloc_blocks(f);
missing return code check
[...]
> diff --git a/libavcodec/obmc.h b/libavcodec/obmc.h
> new file mode 100644
> index 0000000..019ffe2
> --- /dev/null
> +++ b/libavcodec/obmc.h
> @@ -0,0 +1,30 @@
> +/*
> + * Copyright (C) 2004 Michael Niedermayer <michaelni at gmx.at>
> + * Copyright (C) 2006 Robert Edele <yartrebo at earthlink.net>
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#ifndef AVCODEC_OBMC_H
> +#define AVCODEC_OBMC_H
> +
> +#include "obmemc.h"
> +
> +int ff_obmc_decode_init(OBMCContext *f);
> +int ff_obmc_predecode_frame(OBMCContext *f);
Missing doxy documentation for non static functions
> +
> +#endif /* AVCODEC_OBMC_H */
> diff --git a/libavcodec/obme.c b/libavcodec/obme.c
> new file mode 100644
> index 0000000..b7edaca
> --- /dev/null
> +++ b/libavcodec/obme.c
> @@ -0,0 +1,1131 @@
> +/*
> + * Copyright (C) 2004 Michael Niedermayer <michaelni at gmx.at>
> + * Copyright (C) 2006 Robert Edele <yartrebo at earthlink.net>
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#include "obme.h"
> +#include "h263.h"
> +
> +int ff_obmc_encode_init(OBMCContext *s, AVCodecContext *avctx)
> +{
> + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
> + int plane_index, i, ret;
> +
> + #if FF_API_MOTION_EST
> + FF_DISABLE_DEPRECATION_WARNINGS
> + if (avctx->me_method == ME_ITER)
> + s->motion_est = FF_ME_ITER;
> + FF_ENABLE_DEPRECATION_WARNINGS
> + #endif
> +
> + s->mv_scale = (avctx->flags & AV_CODEC_FLAG_QPEL) ? 2 : 4;
> + s->block_max_depth= (avctx->flags & AV_CODEC_FLAG_4MV ) ? 1 : 0;
> +
> + avcodec_get_chroma_sub_sample(avctx->pix_fmt, &s->chroma_h_shift, &s->chroma_v_shift);
> +
> + for(plane_index=0; plane_index<3; plane_index++){
> + s->plane[plane_index].diag_mc= 1;
> + s->plane[plane_index].htaps= 6;
> + s->plane[plane_index].hcoeff[0]= 40;
> + s->plane[plane_index].hcoeff[1]= -10;
> + s->plane[plane_index].hcoeff[2]= 2;
> + s->plane[plane_index].fast_mc= 1;
> + }
> +
> + ff_mpegvideoencdsp_init(&s->mpvencdsp, avctx);
> +
> + ff_obmc_alloc_blocks(s);
missing return code check
[...]
> @@ -422,6 +345,7 @@ static int decode_blocks(SnowContext *s){
> return res;
> }
> }
> +
> return 0;
> }
>
stray change
[...]
> @@ -1582,124 +722,54 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
> int hshift= i ? s->chroma_h_shift : 0;
> int vshift= i ? s->chroma_v_shift : 0;
> for(y=0; y<AV_CEIL_RSHIFT(height, vshift); y++)
> - memcpy(&s->input_picture->data[i][y * s->input_picture->linesize[i]],
> + memcpy(&s->obmc.input_picture->data[i][y * s->obmc.input_picture->linesize[i]],
> &pict->data[i][y * pict->linesize[i]],
> AV_CEIL_RSHIFT(width, hshift));
> - s->mpvencdsp.draw_edges(s->input_picture->data[i], s->input_picture->linesize[i],
> + s->obmc.mpvencdsp.draw_edges(s->obmc.input_picture->data[i], s->obmc.input_picture->linesize[i],
> AV_CEIL_RSHIFT(width, hshift), AV_CEIL_RSHIFT(height, vshift),
> EDGE_WIDTH >> hshift, EDGE_WIDTH >> vshift,
> EDGE_TOP | EDGE_BOTTOM);
>
> }
> emms_c();
> - pic = s->input_picture;
> + pic = s->obmc.input_picture;
> pic->pict_type = pict->pict_type;
> pic->quality = pict->quality;
>
> - s->m.picture_number= avctx->frame_number;
> + s->obmc.m.picture_number= avctx->frame_number;
> if(avctx->flags&AV_CODEC_FLAG_PASS2){
> - s->m.pict_type = pic->pict_type = s->m.rc_context.entry[avctx->frame_number].new_pict_type;
> + s->obmc.m.pict_type = pic->pict_type = s->obmc.m.rc_context.entry[avctx->frame_number].new_pict_type;
> s->keyframe = pic->pict_type == AV_PICTURE_TYPE_I;
> + s->obmc.keyframe = s->keyframe;
> if(!(avctx->flags&AV_CODEC_FLAG_QSCALE)) {
> - pic->quality = ff_rate_estimate_qscale(&s->m, 0);
> + pic->quality = ff_rate_estimate_qscale(&s->obmc.m, 0);
> if (pic->quality < 0)
> return -1;
> }
> }else{
> s->keyframe= avctx->gop_size==0 || avctx->frame_number % avctx->gop_size == 0;
> - s->m.pict_type = pic->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
> + s->obmc.m.pict_type = pic->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
> + s->obmc.keyframe = s->keyframe;
> }
>
> if(s->pass1_rc && avctx->frame_number == 0)
> pic->quality = 2*FF_QP2LAMBDA;
> if (pic->quality) {
> s->qlog = qscale2qlog(pic->quality);
> - s->lambda = pic->quality * 3/2;
> + s->obmc.lambda = pic->quality * 3/2;
> }
> if (s->qlog < 0 || (!pic->quality && (avctx->flags & AV_CODEC_FLAG_QSCALE))) {
> s->qlog= LOSSLESS_QLOG;
> - s->lambda = 0;
> + s->obmc.lambda = 0;
> }//else keep previous frame's qlog until after motion estimation
>
> - if (s->current_picture->data[0]
> -#if FF_API_EMU_EDGE
> - && !(s->avctx->flags&CODEC_FLAG_EMU_EDGE)
> -#endif
> - ) {
> - int w = s->avctx->width;
> - int h = s->avctx->height;
> -
> - s->mpvencdsp.draw_edges(s->current_picture->data[0],
> - s->current_picture->linesize[0], w , h ,
> - EDGE_WIDTH , EDGE_WIDTH , EDGE_TOP | EDGE_BOTTOM);
> - if (s->current_picture->data[2]) {
> - s->mpvencdsp.draw_edges(s->current_picture->data[1],
> - s->current_picture->linesize[1], w>>s->chroma_h_shift, h>>s->chroma_v_shift,
> - EDGE_WIDTH>>s->chroma_h_shift, EDGE_WIDTH>>s->chroma_v_shift, EDGE_TOP | EDGE_BOTTOM);
> - s->mpvencdsp.draw_edges(s->current_picture->data[2],
> - s->current_picture->linesize[2], w>>s->chroma_h_shift, h>>s->chroma_v_shift,
> - EDGE_WIDTH>>s->chroma_h_shift, EDGE_WIDTH>>s->chroma_v_shift, EDGE_TOP | EDGE_BOTTOM);
> - }
> - }
> -
> - ff_snow_frame_start(s);
> - av_frame_unref(avctx->coded_frame);
> - ret = av_frame_ref(avctx->coded_frame, s->current_picture);
> - if (ret < 0)
> - return ret;
> -
> - s->m.current_picture_ptr= &s->m.current_picture;
> - s->m.current_picture.f = s->current_picture;
> - s->m.current_picture.f->pts = pict->pts;
> - if(pic->pict_type == AV_PICTURE_TYPE_P){
> - int block_width = (width +15)>>4;
> - int block_height= (height+15)>>4;
> - int stride= s->current_picture->linesize[0];
> -
> - av_assert0(s->current_picture->data[0]);
> - av_assert0(s->last_picture[0]->data[0]);
> -
> - s->m.avctx= s->avctx;
> - s->m. last_picture.f = s->last_picture[0];
> - s->m. new_picture.f = s->input_picture;
> - s->m. last_picture_ptr= &s->m. last_picture;
> - s->m.linesize = stride;
> - s->m.uvlinesize= s->current_picture->linesize[1];
> - s->m.width = width;
> - s->m.height= height;
> - s->m.mb_width = block_width;
> - s->m.mb_height= block_height;
> - s->m.mb_stride= s->m.mb_width+1;
> - s->m.b8_stride= 2*s->m.mb_width+1;
> - s->m.f_code=1;
> - s->m.pict_type = pic->pict_type;
> -#if FF_API_MOTION_EST
> - s->m.me_method= s->avctx->me_method;
> -#endif
> - s->m.motion_est= s->motion_est;
> - s->m.me.scene_change_score=0;
> - s->m.me.dia_size = avctx->dia_size;
> - s->m.quarter_sample= (s->avctx->flags & AV_CODEC_FLAG_QPEL)!=0;
> - s->m.out_format= FMT_H263;
> - s->m.unrestricted_mv= 1;
> -
> - s->m.lambda = s->lambda;
> - s->m.qscale= (s->m.lambda*139 + FF_LAMBDA_SCALE*64) >> (FF_LAMBDA_SHIFT + 7);
> - s->lambda2= s->m.lambda2= (s->m.lambda*s->m.lambda + FF_LAMBDA_SCALE/2) >> FF_LAMBDA_SHIFT;
> -
> - s->m.mecc= s->mecc; //move
> - s->m.qdsp= s->qdsp; //move
> - s->m.hdsp = s->hdsp;
> - ff_init_me(&s->m);
> - s->hdsp = s->m.hdsp;
> - s->mecc= s->m.mecc;
> - }
> -
> if(s->pass1_rc){
> memcpy(rc_header_bak, s->header_state, sizeof(s->header_state));
> memcpy(rc_block_bak, s->block_state, sizeof(s->block_state));
> }
>
> + ff_obmc_pre_encode_frame(&s->obmc, avctx, pict);
missing return code check
> +static void put_encoder_symbol(ObmcCoderContext *c, int ctx, int v, int sign)
> +{
> + SnowContext *s = (SnowContext *)c->avctx->priv_data;
> + RangeCoder *rc = &s->c;
> + uint8_t *state = s->block_state;
> + if (c->priv_data) {
> + RangeEncoderContext *coder = (RangeEncoderContext *)c->priv_data;
> + rc = &coder->c; state = coder->state;
> + }
> + put_symbol(rc, &state[ctx], v, sign);
> +}
if theres a callback to encode a symbol, that should take a context,
a symbol and a place to encode it to maybe.
its very confusing and not well split if it checks private contexts
and uses this to implement around the calling code using it to write
to 2 different places
> --- a/libavcodec/snow.c
> +++ b/libavcodec/obmemc.c
> @@ -1,5 +1,6 @@
> /*
> * Copyright (C) 2004 Michael Niedermayer <michaelni at gmx.at>
> + * Copyright (C) 2006 Robert Edele <yartrebo at earthlink.net>
> *
> * This file is part of FFmpeg.
> *
What code from robert was added in obmemc.c compared to snow.c ?
i see mostly code removials
> @@ -628,7 +543,11 @@ static int halfpel_interpol(SnowContext *s, uint8_t *halfpel[4][4], AVFrame *fra
> for(x=0; x<w; x++){
> int i= y*ls + x;
>
> - halfpel[3][p][i]= (20*(src[i] + src[i+ls]) - 5*(src[i-ls] + src[i+2*ls]) + (src[i-2*ls] + src[i+3*ls]) + 16 )>>5;
> + halfpel[3][p][i]= (
> + 20*(src[i] + src[i+ls<h*w?i+ls:i-ls]) -
> + 5*(src[i-ls<0?i+ls:i-ls] + src[i+2*ls<h*w?i+2*ls:i-2*ls]) +
> + (src[i-2*ls<0?i+2*ls:i-2*ls] + src[i+3*ls<h*w?i+3*ls:i-3*ls]) + 16
> + )>>5;
> }
> }
i mentioned this previously
the checks should be removed from the inner loop
either by having seperate loops or allocating large enough arrays
> @@ -511,22 +456,21 @@ fail:
> return AVERROR(ENOMEM);
> }
>
> -int ff_snow_common_init_after_header(AVCodecContext *avctx) {
> - SnowContext *s = avctx->priv_data;
> - int plane_index, level, orientation;
> +int ff_obmc_common_init_after_header(OBMCContext *s)
> +{
> + int plane_index;//, level, orientation;
stray comment
> - s->max_ref_frames=1; //just make sure it's not an invalid value in case of no initial keyframe
> - s->spatial_decomposition_count = 1;
> + int width, height, i, j;
> +
> + width = avctx->width;
> + height = avctx->height;
>
> ff_me_cmp_init(&s->mecc, avctx);
> ff_hpeldsp_init(&s->hdsp, avctx->flags);
> @@ -442,6 +394,8 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){
> ff_dwt_init(&s->dwt);
> ff_h264qpel_init(&s->h264qpel, 8);
>
> + s->max_ref_frames = 1
lost comment
> +int ff_obmc_encode_init(OBMCContext *s, AVCodecContext *avctx);
> +int ff_obmc_pre_encode_frame(OBMCContext *f, AVCodecContext *avctx, const AVFrame *pict);
> +void ff_obmc_encode_blocks(OBMCContext *s, int search);
Missing API doxy-documentation
How could anyone know how to use the factored out code with no docs
[...]
> --- a/HEAD^:libavcodec/snowenc.c
> +++ b/HEAD:libavcodec/obme.c
> @@ -1,5 +1,6 @@
> /*
> * Copyright (C) 2004 Michael Niedermayer <michaelni at gmx.at>
> + * Copyright (C) 2006 Robert Edele <yartrebo at earthlink.net>
> *
> * This file is part of FFmpeg.
> *
git diff -w --stat HEAD^:libavcodec/snowenc.c HEAD:libavcodec/obme.c
HEAD^:libavcodec/snowenc.c => HEAD:libavcodec/obme.c | 1114 ++++++++++++++++++++++++++++++++-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 file changed, 144 insertions(+), 970 deletions(-)
The change mostly removes things, Where does the extra copyright come
from?
I would understand if you added yourself, as you work on the code
but code from 2006 ?
where is that code ?
> - int plane_index, ret;
> - int i;
> + int plane_index, i, ret;
stray change
> @@ -214,7 +151,6 @@ static inline int get_penalty_factor(int lambda, int lambda2, int type){
> }
> }
>
> -//FIXME copy&paste
> #define P_LEFT P[1]
> #define P_TOP P[2]
> #define P_TOPRIGHT P[3]
Whatever the fixme meant, it should stay
> @@ -266,7 +198,7 @@ static int encode_q_branch(SnowContext *s, int level, int x, int y){
> int s_context= 2*left->level + 2*top->level + tl->level + tr->level;
> int ref, best_ref, ref_score, ref_mx, ref_my;
>
> - av_assert0(sizeof(s->block_state) >= 256);
> + //av_assert0(sizeof(s->block_state) >= 256);
> if(s->keyframe){
> set_blocks(s, level, x, y, pl, pcb, pcr, 0, 0, 0, BLOCK_INTRA);
> return 0;
Why is the assert disabled ?
> - int stride= s->current_picture->linesize[0];
> -
> - av_assert0(s->current_picture->data[0]);
> - av_assert0(s->last_picture[0]->data[0]);
> -
> - s->m.avctx= s->avctx;
> - s->m. last_picture.f = s->last_picture[0];
> - s->m. new_picture.f = s->input_picture;
> - s->m. last_picture_ptr= &s->m. last_picture;
> - s->m.linesize = stride;
> - s->m.uvlinesize= s->current_picture->linesize[1];
> - s->m.width = width;
> - s->m.height= height;
> - s->m.mb_width = block_width;
> - s->m.mb_height= block_height;
> - s->m.mb_stride= s->m.mb_width+1;
> - s->m.b8_stride= 2*s->m.mb_width+1;
> - s->m.f_code=1;
> - s->m.pict_type = pic->pict_type;
> + int stride= f->current_picture->linesize[0];
> +
> + av_assert0(f->current_picture->data[0]);
> + av_assert0(f->last_pictures[0]->data[0]);
> +
> + f->m.avctx= f->avctx;
> + f->m.last_picture.f = f->last_pictures[0];
> + f->m.new_picture.f = f->input_picture;
> + f->m.last_picture_ptr= &f->m.last_picture;
> + f->m.linesize = stride;
> + f->m.uvlinesize= f->current_picture->linesize[1];
> + f->m.width = width;
> + f->m.height= height;
> + f->m.mb_width = block_width;
> + f->m.mb_height= block_height;
> + f->m.mb_stride= f->m.mb_width+1;
> + f->m.b8_stride= 2*f->m.mb_width+1;
> + f->m.f_code=1;
> + /* s->m.pict_type = pic->pict_type; // DELETED */
> #if FF_API_MOTION_EST
Please dont rename variables, it makes reviewing the changes much
harder
Thanks
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
The real ebay dictionary, page 2
"100% positive feedback" - "All either got their money back or didnt complain"
"Best seller ever, very honest" - "Seller refunded buyer after failed scam"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160821/67fb127f/attachment.sig>
More information about the ffmpeg-devel
mailing list