summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_pickmode.c
diff options
context:
space:
mode:
authorYaowu Xu <yaowu@google.com>2015-04-02 15:31:06 -0700
committerYaowu Xu <yaowu@google.com>2015-04-02 18:10:55 -0700
commit718feb0f69c471170c2696a6bb0d16e786f5611f (patch)
tree29cd672f2c0d23466899bcfafa7ac0b76f61add7 /vp9/encoder/vp9_pickmode.c
parentf26b8c84f88b3d3efe32cbc96232534f37be2aa5 (diff)
downloadlibvpx-718feb0f69c471170c2696a6bb0d16e786f5611f.tar
libvpx-718feb0f69c471170c2696a6bb0d16e786f5611f.tar.gz
libvpx-718feb0f69c471170c2696a6bb0d16e786f5611f.tar.bz2
libvpx-718feb0f69c471170c2696a6bb0d16e786f5611f.zip
move ref_frame_cost computations into a function
Change-Id: Iebf2ad2b1db7e2874788fda8d55e67f4cb1149f1
Diffstat (limited to 'vp9/encoder/vp9_pickmode.c')
-rw-r--r--vp9/encoder/vp9_pickmode.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c
index 860716209..a9c9fcb9d 100644
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -965,6 +965,24 @@ void vp9_pick_intra_mode(VP9_COMP *cpi, MACROBLOCK *x, RD_COST *rd_cost,
*rd_cost = best_rdc;
}
+static void init_ref_frame_cost(VP9_COMMON *const cm,
+ MACROBLOCKD *const xd,
+ int ref_frame_cost[MAX_REF_FRAMES]) {
+ vp9_prob intra_inter_p = vp9_get_intra_inter_prob(cm, xd);
+ vp9_prob ref_single_p1 = vp9_get_pred_prob_single_ref_p1(cm, xd);
+ vp9_prob ref_single_p2 = vp9_get_pred_prob_single_ref_p2(cm, xd);
+
+ ref_frame_cost[INTRA_FRAME] = vp9_cost_bit(intra_inter_p, 0);
+ ref_frame_cost[LAST_FRAME] = ref_frame_cost[GOLDEN_FRAME] =
+ ref_frame_cost[ALTREF_FRAME] = vp9_cost_bit(intra_inter_p, 1);
+
+ ref_frame_cost[LAST_FRAME] += vp9_cost_bit(ref_single_p1, 0);
+ ref_frame_cost[GOLDEN_FRAME] += vp9_cost_bit(ref_single_p1, 1);
+ ref_frame_cost[ALTREF_FRAME] += vp9_cost_bit(ref_single_p1, 1);
+ ref_frame_cost[GOLDEN_FRAME] += vp9_cost_bit(ref_single_p2, 0);
+ ref_frame_cost[ALTREF_FRAME] += vp9_cost_bit(ref_single_p2, 1);
+}
+
typedef struct {
MV_REFERENCE_FRAME ref_frame;
PREDICTION_MODE pred_mode;
@@ -1043,19 +1061,8 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
int best_pred_sad = INT_MAX;
int best_early_term = 0;
int ref_frame_cost[MAX_REF_FRAMES];
- vp9_prob intra_inter_p = vp9_get_intra_inter_prob(cm, xd);
- vp9_prob ref_single_p1 = vp9_get_pred_prob_single_ref_p1(cm, xd);
- vp9_prob ref_single_p2 = vp9_get_pred_prob_single_ref_p2(cm, xd);
- ref_frame_cost[INTRA_FRAME] = vp9_cost_bit(intra_inter_p, 0);
- ref_frame_cost[LAST_FRAME] = ref_frame_cost[GOLDEN_FRAME] =
- ref_frame_cost[ALTREF_FRAME] = vp9_cost_bit(intra_inter_p, 1);
-
- ref_frame_cost[LAST_FRAME] += vp9_cost_bit(ref_single_p1, 0);
- ref_frame_cost[GOLDEN_FRAME] += vp9_cost_bit(ref_single_p1, 1);
- ref_frame_cost[ALTREF_FRAME] += vp9_cost_bit(ref_single_p1, 1);
- ref_frame_cost[GOLDEN_FRAME] += vp9_cost_bit(ref_single_p2, 0);
- ref_frame_cost[ALTREF_FRAME] += vp9_cost_bit(ref_single_p2, 1);
+ init_ref_frame_cost(cm, xd, ref_frame_cost);
if (reuse_inter_pred) {
int i;