From 21be5ca042bed9a522d984359c00ac7954c21168 Mon Sep 17 00:00:00 2001 From: Marco Paniconi Date: Thu, 20 Mar 2014 16:42:13 -0700 Subject: [PATCH] Some code cleanup for cyclic refresh. Change-Id: I0e4e2462ee27640f9bf4091431241ede6fc97267 --- vp9/encoder/vp9_craq.h | 41 ++++++++++++++++++++++++++++---------- vp9/encoder/vp9_onyx_int.h | 27 +------------------------ 2 files changed, 31 insertions(+), 37 deletions(-) diff --git a/vp9/encoder/vp9_craq.h b/vp9/encoder/vp9_craq.h index 1f81f3e77..fec7748e5 100644 --- a/vp9/encoder/vp9_craq.h +++ b/vp9/encoder/vp9_craq.h @@ -12,26 +12,45 @@ #ifndef VP9_ENCODER_VP9_CRAQ_H_ #define VP9_ENCODER_VP9_CRAQ_H_ -#include "vp9/encoder/vp9_onyx_int.h" +#include "vp9/common/vp9_blockd.h" #ifdef __cplusplus extern "C" { #endif -// Check if we should turn off cyclic refresh based on bitrate condition. -static int apply_cyclic_refresh_bitrate(VP9_COMP *const cpi); +typedef struct { + // Target percentage of blocks per frame that are cyclicly refreshed. + int max_mbs_perframe; + // Maximum q-delta as percentage of base q. + int max_qdelta_perc; + // Block size below which we don't apply cyclic refresh. + BLOCK_SIZE min_block_size; + // Macroblock starting index (unit of 8x8) for cycling through the frame. + int mb_index; + // Controls how long a block will need to wait to be refreshed again. + int time_for_refresh; + // Actual number of blocks that were applied delta-q (segment 1). + int num_seg_blocks; + // Actual encoding bits for segment 1. + int actual_seg_bits; + // RD mult. parameters for segment 1. + int rdmult; + // Cyclic refresh map. + signed char *map; + // Projected rate and distortion for the current superblock. + int64_t projected_rate_sb; + int64_t projected_dist_sb; + // Thresholds applied to projected rate/distortion of the superblock. + int64_t thresh_rate_sb; + int64_t thresh_dist_sb; +} CYCLIC_REFRESH; -// Check if this coding block, of size bsize, should be considered for refresh -// (lower-qp coding). -static int candidate_refresh_aq(VP9_COMP *const cpi, - MODE_INFO *const mi, - int bsize, - int use_rd); +struct VP9_COMP; // Prior to coding a given prediction block, of size bsize at (mi_row, mi_col), // check if we should reset the segment_id, and update the cyclic_refresh map // and segmentation map. -void vp9_update_segment_aq(VP9_COMP *const cpi, +void vp9_update_segment_aq(struct VP9_COMP *const cpi, MODE_INFO *const mi, int mi_row, int mi_col, @@ -39,7 +58,7 @@ void vp9_update_segment_aq(VP9_COMP *const cpi, int use_rd); // Setup cyclic background refresh: set delta q and segmentation map. -void vp9_setup_cyclic_refresh_aq(VP9_COMP *const cpi); +void vp9_setup_cyclic_refresh_aq(struct VP9_COMP *const cpi); #ifdef __cplusplus } // extern "C" diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h index f4b44ce12..e26c67f7e 100644 --- a/vp9/encoder/vp9_onyx_int.h +++ b/vp9/encoder/vp9_onyx_int.h @@ -23,6 +23,7 @@ #include "vp9/common/vp9_entropymode.h" #include "vp9/common/vp9_onyxc_int.h" +#include "vp9/encoder/vp9_craq.h" #include "vp9/encoder/vp9_encodemb.h" #include "vp9/encoder/vp9_firstpass.h" #include "vp9/encoder/vp9_lookahead.h" @@ -430,32 +431,6 @@ typedef enum { USAGE_CONSTANT_QUALITY = 3, } END_USAGE; -typedef struct { - // Target percentage of blocks per frame that are cyclicly refreshed. - int max_mbs_perframe; - // Maximum q-delta as percentage of base q. - int max_qdelta_perc; - // Block size below which we don't apply cyclic refresh. - BLOCK_SIZE min_block_size; - // Macroblock starting index (unit of 8x8) for cycling through the frame. - int mb_index; - // Controls how long a block will need to wait to be refreshed again. - int time_for_refresh; - // Actual number of blocks that were applied delta-q (segment 1). - int num_seg_blocks; - // Actual encoding bits for segment 1. - int actual_seg_bits; - // RD mult. parameters for segment 1. - int rdmult; - // Cyclic refresh map. - signed char *map; - // Projected rate and distortion for the current superblock. - int64_t projected_rate_sb; - int64_t projected_dist_sb; - // Thresholds applied to projected rate/distortion of the superblock. - int64_t thresh_rate_sb; - int64_t thresh_dist_sb; -} CYCLIC_REFRESH; typedef enum { // Good Quality Fast Encoding. The encoder balances quality with the // amount of time it takes to encode the output. (speed setting