ref: b1021be91504af8b4842d1b075aba1fdab39b402
parent: 733d356fa77d9f0c9bf7a3070b53de3db961bfd8
author: angiebird <angiebird@google.com>
date: Mon Nov 4 14:40:19 EST 2019
Add g_timebase/g_timebase_in_ts to oxcf Use get_g_timebase_in_ts() to set priv->timestamp_ratio and oxcf->g_timebase_in_ts Change-Id: Iea9d589cb7e5611067bcedfdf6f5becd4592d3cf
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -22,6 +22,7 @@
#include "vpx_dsp/variance.h"
#include "vpx_ports/system_state.h"
#include "vpx_util/vpx_thread.h"
+#include "vpx_util/vpx_timestamp.h"
#include "vp9/common/vp9_alloccommon.h"
#include "vp9/common/vp9_ppflags.h"
@@ -152,7 +153,10 @@
int height; // height of data passed to the compressor
unsigned int input_bit_depth; // Input bit depth.
double init_framerate; // set to passed in framerate
- int64_t target_bandwidth; // bandwidth to be used in bits per second
+ vpx_rational_t g_timebase; // equivalent to g_timebase in vpx_codec_enc_cfg_t
+ vpx_rational64_t g_timebase_in_ts; // g_timebase * TICKS_PER_SEC
+
+ int64_t target_bandwidth; // bandwidth to be used in bits per second
int noise_sensitivity; // pre processing blur: recommendation 0
int sharpness; // sharpening output: recommendation 0:
--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -22,6 +22,7 @@
#include "vpx/vp8cx.h"
#include "vp9/common/vp9_alloccommon.h"
#include "vp9/encoder/vp9_firstpass.h"
+#include "vp9/encoder/vp9_lookahead.h"
#include "vp9/vp9_cx_iface.h"
#include "vp9/vp9_iface_common.h"
@@ -468,6 +469,15 @@
}
}
+static vpx_rational64_t get_g_timebase_in_ts(vpx_rational_t g_timebase) {
+ vpx_rational64_t g_timebase_in_ts;
+ g_timebase_in_ts.den = g_timebase.den;
+ g_timebase_in_ts.num = g_timebase.num;
+ g_timebase_in_ts.num *= TICKS_PER_SEC;
+ reduce_ratio(&g_timebase_in_ts);
+ return g_timebase_in_ts;
+}
+
static vpx_codec_err_t set_encoder_config(
VP9EncoderConfig *oxcf, const vpx_codec_enc_cfg_t *cfg,
const struct vp9_extracfg *extra_cfg) {
@@ -479,9 +489,13 @@
oxcf->height = cfg->g_h;
oxcf->bit_depth = cfg->g_bit_depth;
oxcf->input_bit_depth = cfg->g_input_bit_depth;
+ // TODO(angiebird): Figure out if we can just use g_timebase to indicate the
+ // inverse of framerate
// guess a frame rate if out of whack, use 30
oxcf->init_framerate = (double)cfg->g_timebase.den / cfg->g_timebase.num;
if (oxcf->init_framerate > 180) oxcf->init_framerate = 30;
+ oxcf->g_timebase = cfg->g_timebase;
+ oxcf->g_timebase_in_ts = get_g_timebase_in_ts(oxcf->g_timebase);
oxcf->mode = GOOD;
@@ -943,10 +957,9 @@
if (res == VPX_CODEC_OK) {
priv->pts_offset_initialized = 0;
- priv->timestamp_ratio.den = priv->cfg.g_timebase.den;
- priv->timestamp_ratio.num = (int64_t)priv->cfg.g_timebase.num;
- priv->timestamp_ratio.num *= TICKS_PER_SEC;
- reduce_ratio(&priv->timestamp_ratio);
+ // TODO(angiebird): Replace priv->timestamp_ratio by
+ // oxcf->g_timebase_in_ts
+ priv->timestamp_ratio = get_g_timebase_in_ts(priv->cfg.g_timebase);
set_encoder_config(&priv->oxcf, &priv->cfg, &priv->extra_cfg);
#if CONFIG_VP9_HIGHBITDEPTH