From c46538d45e12b52791bfee92a63ee9b93d02711c Mon Sep 17 00:00:00 2001 From: Marco Paniconi <marpan@google.com> Date: Wed, 8 Jan 2014 12:34:18 -0800 Subject: [PATCH] Don't use gf_update by default for 1-pass CBR. Change-Id: I5df6abceb0a2a69706feadeb820b593cae88f573 --- vp9/encoder/vp9_firstpass.c | 16 ++++++++++++++++ vp9/encoder/vp9_firstpass.h | 1 + vp9/encoder/vp9_onyx_if.c | 6 +++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index cc7a9587b0..9db30f0004 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -2024,6 +2024,22 @@ void vp9_get_one_pass_params(VP9_COMP *cpi) { } } +void vp9_get_one_pass_cbr_params(VP9_COMP *cpi) { + VP9_COMMON *const cm = &cpi->common; + if ((cm->current_video_frame == 0 || + cm->frame_flags & FRAMEFLAGS_KEY || + cpi->rc.frames_to_key == 0 || + (cpi->oxcf.auto_key && test_for_kf_one_pass(cpi)))) { + cm->frame_type = KEY_FRAME; + cpi->rc.frames_to_key = cpi->key_frame_frequency; + } else { + cm->frame_type = INTER_FRAME; + } + // Don't use gf_update by default in CBR mode. + cpi->rc.frames_till_gf_update_due = INT_MAX; + cpi->rc.baseline_gf_interval = INT_MAX; +} + void vp9_get_first_pass_params(VP9_COMP *cpi) { VP9_COMMON *const cm = &cpi->common; if (!cpi->refresh_alt_ref_frame && diff --git a/vp9/encoder/vp9_firstpass.h b/vp9/encoder/vp9_firstpass.h index 43703c2c53..f89e4cb1c3 100644 --- a/vp9/encoder/vp9_firstpass.h +++ b/vp9/encoder/vp9_firstpass.h @@ -22,6 +22,7 @@ void vp9_end_second_pass(VP9_COMP *cpi); void vp9_get_first_pass_params(VP9_COMP *cpi); void vp9_get_one_pass_params(VP9_COMP *cpi); +void vp9_get_one_pass_cbr_params(VP9_COMP *cpi); void vp9_get_svc_params(VP9_COMP *cpi); #endif // VP9_ENCODER_VP9_FIRSTPASS_H_ diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c index 2cdf45d3fb..2868bd9b8b 100644 --- a/vp9/encoder/vp9_onyx_if.c +++ b/vp9/encoder/vp9_onyx_if.c @@ -3313,7 +3313,11 @@ static void SvcEncode(VP9_COMP *cpi, size_t *size, uint8_t *dest, static void Pass0Encode(VP9_COMP *cpi, size_t *size, uint8_t *dest, unsigned int *frame_flags) { - vp9_get_one_pass_params(cpi); + if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { + vp9_get_one_pass_cbr_params(cpi); + } else { + vp9_get_one_pass_params(cpi); + } encode_frame_to_data_rate(cpi, size, dest, frame_flags); } -- GitLab