summaryrefslogtreecommitdiff
path: root/vp8/encoder/onyx_if.c
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2011-11-02 13:30:10 +0000
committerPaul Wilkins <paulwilkins@google.com>2011-11-02 13:31:54 +0000
commit87ff8620b27a70c8411bf0941eb846e358e03ca1 (patch)
treec80b77f7b2fbbb691ba2b182e8601402301453d7 /vp8/encoder/onyx_if.c
parent2b450a460fa847c7460f51ab38ecb9ab10f18218 (diff)
downloadlibvpx-87ff8620b27a70c8411bf0941eb846e358e03ca1.tar
libvpx-87ff8620b27a70c8411bf0941eb846e358e03ca1.tar.gz
libvpx-87ff8620b27a70c8411bf0941eb846e358e03ca1.tar.bz2
libvpx-87ff8620b27a70c8411bf0941eb846e358e03ca1.zip
Segmentation: Reference frames
Modify reference frame segmentation so that ONE or MORE reference frames may be marked as a available for a given segment. Fixed bugs relating to segment coding of INTRA and some INTER modes at the segment level. Modified Q boost for static areas based on ambient average Q. Strong results now on clips with significant static areas. (some data points in derf set as high as 9% and some static & slide show type content in YT set > 20%) Change-Id: Ia79f912efa84b977f35a23683ae3643251e24f0c
Diffstat (limited to 'vp8/encoder/onyx_if.c')
-rw-r--r--vp8/encoder/onyx_if.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
index 35b45673c..ee3a59eeb 100644
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -531,7 +531,8 @@ static void init_seg_features(VP8_COMP *cpi)
xd->update_mb_segmentation_map = 1;
xd->update_mb_segmentation_data = 1;
- xd->segment_feature_data[1][SEG_LVL_ALT_Q] = -3;
+ xd->segment_feature_data[1][SEG_LVL_ALT_Q] =
+ -(2+(cpi->ni_av_qi >> 3));
xd->segment_feature_data[1][SEG_LVL_ALT_LF] = -2;
enable_segfeature(xd, 1, SEG_LVL_ALT_Q);
@@ -563,8 +564,7 @@ static void init_seg_features(VP8_COMP *cpi)
if ( high_q )
{
- xd->segment_feature_data[1]
- [SEG_LVL_REF_FRAME] = ALTREF_FRAME;
+ set_segref(xd, 1, ALTREF_FRAME);
xd->segment_feature_data[1][SEG_LVL_MODE] = ZEROMV;
xd->segment_feature_data[1][SEG_LVL_EOB] = 0;
@@ -598,10 +598,12 @@ static void init_seg_features(VP8_COMP *cpi)
enable_segfeature(xd, 0, SEG_LVL_REF_FRAME);
enable_segfeature(xd, 0, SEG_LVL_MODE);
- // All mbs should use ALTREF_FRAME, ZEROMV
- xd->segment_feature_data[0][SEG_LVL_REF_FRAME] = ALTREF_FRAME;
+ // All mbs should use ALTREF_FRAME, ZEROMV exclusively
+ clear_segref(xd, 0);
+ set_segref(xd, 0, ALTREF_FRAME);
+ clear_segref(xd, 1);
+ set_segref(xd, 1, ALTREF_FRAME);
xd->segment_feature_data[0][SEG_LVL_MODE] = ZEROMV;
- xd->segment_feature_data[1][SEG_LVL_REF_FRAME] = ALTREF_FRAME;
xd->segment_feature_data[1][SEG_LVL_MODE] = ZEROMV;
// Skip all MBs if high Q