提交 46b06bd8 编写于 作者: M Michael Niedermayer

avcodec/mpegvideo_enc: implement frame skip score normalization

Signed-off-by: NMichael Niedermayer <michaelni@gmx.at>
上级 21a2fb7e
......@@ -877,6 +877,9 @@ Set frame skip factor.
@item skip_exp @var{integer} (@emph{encoding,video})
Set frame skip exponent.
Negative values behave identical to the corresponding positive ones, except
that the score is normalized.
Positive values exist primarly for compatibility reasons and are not so useful.
@item skipcmp @var{integer} (@emph{encoding,video})
Set frame skip compare function.
......
......@@ -1145,7 +1145,7 @@ static int skip_check(MpegEncContext *s, Picture *p, Picture *ref)
uint8_t *rptr = ref->f.data[plane] + 8 * (x + y * stride);
int v = s->dsp.frame_skip_cmp[1](s, dptr, rptr, stride, 8);
switch (s->avctx->frame_skip_exp) {
switch (FFABS(s->avctx->frame_skip_exp)) {
case 0: score = FFMAX(score, v); break;
case 1: score += FFABS(v); break;
case 2: score64 += v * (int64_t)v; break;
......@@ -1155,9 +1155,13 @@ static int skip_check(MpegEncContext *s, Picture *p, Picture *ref)
}
}
}
emms_c();
if (score)
score64 = score;
if (s->avctx->frame_skip_exp < 0)
score64 = pow(score64 / (double)(s->mb_width * s->mb_height),
-1.0/s->avctx->frame_skip_exp);
if (score64 < s->avctx->frame_skip_threshold)
return 1;
......@@ -1307,7 +1311,6 @@ static int select_input_picture(MpegEncContext *s)
// FIXME check that te gop check above is +-1 correct
av_frame_unref(&s->input_picture[0]->f);
emms_c();
ff_vbv_update(s, 0);
goto no_output_pic;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册