Commit 46b06bd8 authored by Michael Niedermayer's avatar Michael Niedermayer

avcodec/mpegvideo_enc: implement frame skip score normalization

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 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% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment