• Yaowu Xu's avatar
    Enabled adaptive UV intra coding for inter frames · be360d47
    Yaowu Xu authored
    Previously, Y-adaptive UV intra coding only enabled on key frames in
    UVINTRA experiment. This commit enabled the same coding for inter
    frames, so the encoding of UV intra modes are consistent cross all
    frame types. Tests on derf set showed a very small overall gain around
    .04%:
    
    http://www.corp.google.com/~yaowu/no_crawl/interUVintra.html
    
    The gain looks to be reasonable given inta coded MBs is only a
    small portion of MBs in inter frames.
    
    Change-Id: Ic6fc261923f2c253f4a0c9f8bccf4797557b9e16
    be360d47
modecosts.c 2.04 KiB
/*
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
#include "vp8/common/blockd.h"
#include "onyx_int.h"
#include "treewriter.h"
#include "vp8/common/entropymode.h"
void vp8_init_mode_costs(VP8_COMP *c)
    VP8_COMMON *x = &c->common;
        const vp8_tree_p T = vp8_bmode_tree;
        int i = 0;
            int j = 0;
                vp8_cost_tokens((int *)c->mb.bmode_costs[i][j], x->kf_bmode_prob[i][j], T);
            while (++j < VP8_BINTRAMODES);
        while (++i < VP8_BINTRAMODES);
        vp8_cost_tokens((int *)c->mb.inter_bmode_costs, x->fc.bmode_prob, T);
    vp8_cost_tokens((int *)c->mb.inter_bmode_costs,
        x->fc.sub_mv_ref_prob, vp8_sub_mv_ref_tree);
    vp8_cost_tokens(c->mb.mbmode_cost[1], x->fc.ymode_prob, vp8_ymode_tree);
#if CONFIG_QIMODE
    vp8_cost_tokens(c->mb.mbmode_cost[0],
                    x->kf_ymode_prob[c->common.kf_ymode_probs_index],
                    vp8_kf_ymode_tree);
#else
    vp8_cost_tokens(c->mb.mbmode_cost[0],
                    x->kf_ymode_prob, vp8_kf_ymode_tree);
#endif
#if CONFIG_UVINTRA
    vp8_cost_tokens(c->mb.intra_uv_mode_cost[1],
                    x->fc.uv_mode_prob[VP8_YMODES-1], vp8_uv_mode_tree);
    vp8_cost_tokens(c->mb.intra_uv_mode_cost[0],
                    x->kf_uv_mode_prob[VP8_YMODES-1], vp8_uv_mode_tree);
#else
    vp8_cost_tokens(c->mb.intra_uv_mode_cost[1],
                    x->fc.uv_mode_prob, vp8_uv_mode_tree);
    vp8_cost_tokens(c->mb.intra_uv_mode_cost[0],
                    x->kf_uv_mode_prob, vp8_uv_mode_tree);
#endif
    vp8_cost_tokens(c->mb.i8x8_mode_costs,
                    x->i8x8_mode_prob,vp8_i8x8_mode_tree);