Enable encode_breakout in real time encoding

In real time encoding, we enable encode_breakout to make encoding
fast. A speed feature "use_encode_breakout" is defined to set
encode_breakout thresholds for different speeds.

However, currently, static_thresh is an encoder option. The encode_
breakout can be turned off if user sets static_thresh=0 specifically.

The rtc set borg test result: (need to set --static_thresh=1)
speed -5, psnr loss -3.543%;
speed -4, psnr loss -2.358%;
speed -3, psnr loss -0.771%.

Encoding speed test:
speed -5, 11% - 60% speedup;
speed -4, 5.5% - 28% speedup;
speed -3, 0.8% - 7% speedup.

Change-Id: Icde592ffbe77eac7446f872a2e9eb2051733677b
This commit is contained in:
Yunqing Wang
2014-02-04 11:09:34 -08:00
parent f6bc927070
commit 507fd5220b
5 changed files with 49 additions and 25 deletions

View File

@@ -208,6 +208,15 @@ typedef enum {
ALLOW_RECODE = 3,
} RECODE_LOOP_TYPE;
typedef enum {
// encode_breakout is disabled.
ENCODE_BREAKOUT_DISABLED = 0,
// encode_breakout is enabled.
ENCODE_BREAKOUT_ENABLED = 1,
// encode_breakout is enabled with small max_thresh limit.
ENCODE_BREAKOUT_LIMITED = 2
} ENCODE_BREAKOUT_TYPE;
typedef struct {
// Frame level coding parameter update
int frame_parameter_update;
@@ -392,6 +401,10 @@ typedef struct {
// This flag controls the use of non-RD mode decision.
int use_pick_mode;
// This variable sets the encode_breakout threshold. Currently, it is only
// enabled in real time mode.
int encode_breakout_thresh;
} SPEED_FEATURES;
typedef struct {
@@ -546,6 +559,13 @@ typedef struct VP9_COMP {
unsigned int max_mv_magnitude;
int mv_step_param;
// Default value is 1. From first pass stats, encode_breakout may be disabled.
ENCODE_BREAKOUT_TYPE allow_encode_breakout;
// Get threshold from external input. In real time mode, it can be
// overwritten according to encoding speed.
int encode_breakout;
unsigned char *segmentation_map;
// segment threashold for encode breakout
@@ -636,9 +656,6 @@ typedef struct VP9_COMP {
LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS];
} svc;
int enable_encode_breakout; // Default value is 1. From first pass stats,
// encode_breakout may be disabled.
#if CONFIG_MULTIPLE_ARF
// ARF tracking variables.
int multi_arf_enabled;