mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-02 21:01:56 +00:00
avcodec/mpegvideo_enc: implement frame skip score normalization
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
21a2fb7e05
commit
46b06bd894
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user