Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Unified Diff: source/libvpx/vp9/common/vp9_pred_common.c

Issue 11974002: libvpx: Pull from upstream (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/vp9/common/vp9_pred_common.h ('k') | source/libvpx/vp9/common/vp9_quant_common.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp9/common/vp9_pred_common.c
===================================================================
--- source/libvpx/vp9/common/vp9_pred_common.c (revision 177019)
+++ source/libvpx/vp9/common/vp9_pred_common.c (working copy)
@@ -9,8 +9,10 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include "vp9/common/vp9_common.h"
#include "vp9/common/vp9_pred_common.h"
#include "vp9/common/vp9_seg_common.h"
+#include "vp9/common/vp9_treecoder.h"
// TBD prediction functions for various bitstream signals
@@ -221,54 +223,57 @@
void vp9_set_pred_flag(MACROBLOCKD *const xd,
PRED_ID pred_id,
unsigned char pred_flag) {
-#if CONFIG_SUPERBLOCKS
const int mis = xd->mode_info_stride;
-#endif
switch (pred_id) {
case PRED_SEG_ID:
xd->mode_info_context->mbmi.seg_id_predicted = pred_flag;
-#if CONFIG_SUPERBLOCKS
- if (xd->mode_info_context->mbmi.encoded_as_sb) {
- if (xd->mb_to_right_edge >= 0)
- xd->mode_info_context[1].mbmi.seg_id_predicted = pred_flag;
- if (xd->mb_to_bottom_edge >= 0) {
- xd->mode_info_context[mis].mbmi.seg_id_predicted = pred_flag;
- if (xd->mb_to_right_edge >= 0)
- xd->mode_info_context[mis + 1].mbmi.seg_id_predicted = pred_flag;
+ if (xd->mode_info_context->mbmi.sb_type) {
+#define sub(a, b) (b) < 0 ? (a) + (b) : (a)
+ const int n_mbs = 1 << xd->mode_info_context->mbmi.sb_type;
+ const int x_mbs = sub(n_mbs, xd->mb_to_right_edge >> 7);
+ const int y_mbs = sub(n_mbs, xd->mb_to_bottom_edge >> 7);
+ int x, y;
+
+ for (y = 0; y < y_mbs; y++) {
+ for (x = !y; x < x_mbs; x++) {
+ xd->mode_info_context[y * mis + x].mbmi.seg_id_predicted =
+ pred_flag;
+ }
}
}
-#endif
break;
case PRED_REF:
xd->mode_info_context->mbmi.ref_predicted = pred_flag;
-#if CONFIG_SUPERBLOCKS
- if (xd->mode_info_context->mbmi.encoded_as_sb) {
- if (xd->mb_to_right_edge >= 0)
- xd->mode_info_context[1].mbmi.ref_predicted = pred_flag;
- if (xd->mb_to_bottom_edge >= 0) {
- xd->mode_info_context[mis].mbmi.ref_predicted = pred_flag;
- if (xd->mb_to_right_edge >= 0)
- xd->mode_info_context[mis + 1].mbmi.ref_predicted = pred_flag;
+ if (xd->mode_info_context->mbmi.sb_type) {
+ const int n_mbs = 1 << xd->mode_info_context->mbmi.sb_type;
+ const int x_mbs = sub(n_mbs, xd->mb_to_right_edge >> 7);
+ const int y_mbs = sub(n_mbs, xd->mb_to_bottom_edge >> 7);
+ int x, y;
+
+ for (y = 0; y < y_mbs; y++) {
+ for (x = !y; x < x_mbs; x++) {
+ xd->mode_info_context[y * mis + x].mbmi.ref_predicted = pred_flag;
+ }
}
}
-#endif
break;
case PRED_MBSKIP:
xd->mode_info_context->mbmi.mb_skip_coeff = pred_flag;
-#if CONFIG_SUPERBLOCKS
- if (xd->mode_info_context->mbmi.encoded_as_sb) {
- if (xd->mb_to_right_edge >= 0)
- xd->mode_info_context[1].mbmi.mb_skip_coeff = pred_flag;
- if (xd->mb_to_bottom_edge >= 0) {
- xd->mode_info_context[mis].mbmi.mb_skip_coeff = pred_flag;
- if (xd->mb_to_right_edge >= 0)
- xd->mode_info_context[mis + 1].mbmi.mb_skip_coeff = pred_flag;
+ if (xd->mode_info_context->mbmi.sb_type) {
+ const int n_mbs = 1 << xd->mode_info_context->mbmi.sb_type;
+ const int x_mbs = sub(n_mbs, xd->mb_to_right_edge >> 7);
+ const int y_mbs = sub(n_mbs, xd->mb_to_bottom_edge >> 7);
+ int x, y;
+
+ for (y = 0; y < y_mbs; y++) {
+ for (x = !y; x < x_mbs; x++) {
+ xd->mode_info_context[y * mis + x].mbmi.mb_skip_coeff = pred_flag;
+ }
}
}
-#endif
break;
default:
@@ -286,25 +291,25 @@
const MACROBLOCKD *const xd, int MbIndex) {
// Currently the prediction for the macroblock segment ID is
// the value stored for this macroblock in the previous frame.
-#if CONFIG_SUPERBLOCKS
- if (!xd->mode_info_context->mbmi.encoded_as_sb) {
-#endif
+ if (!xd->mode_info_context->mbmi.sb_type) {
return cm->last_frame_seg_map[MbIndex];
-#if CONFIG_SUPERBLOCKS
} else {
- int seg_id = cm->last_frame_seg_map[MbIndex];
- int mb_col = MbIndex % cm->mb_cols;
- int mb_row = MbIndex / cm->mb_cols;
- if (mb_col + 1 < cm->mb_cols)
- seg_id = seg_id && cm->last_frame_seg_map[MbIndex + 1];
- if (mb_row + 1 < cm->mb_rows) {
- seg_id = seg_id && cm->last_frame_seg_map[MbIndex + cm->mb_cols];
- if (mb_col + 1 < cm->mb_cols)
- seg_id = seg_id && cm->last_frame_seg_map[MbIndex + cm->mb_cols + 1];
+ const int n_mbs = 1 << xd->mode_info_context->mbmi.sb_type;
+ const int mb_col = MbIndex % cm->mb_cols;
+ const int mb_row = MbIndex / cm->mb_cols;
+ const int x_mbs = MIN(n_mbs, cm->mb_cols - mb_col);
+ const int y_mbs = MIN(n_mbs, cm->mb_rows - mb_row);
+ int x, y;
+ unsigned seg_id = -1;
+
+ for (y = mb_row; y < mb_row + y_mbs; y++) {
+ for (x = mb_col; x < mb_col + x_mbs; x++) {
+ seg_id = MIN(seg_id, cm->last_frame_seg_map[cm->mb_cols * y + x]);
+ }
}
+
return seg_id;
}
-#endif
}
MV_REFERENCE_FRAME vp9_get_pred_ref(const VP9_COMMON *const cm,
@@ -383,26 +388,13 @@
int tot_count;
tot_count = count[0] + count[1] + count[2] + count[3];
- if (tot_count) {
- probs[0] = (vp9_prob)((count[0] * 255 + (tot_count >> 1)) / tot_count);
- probs[0] += !probs[0];
- } else
- probs[0] = 128;
+ probs[0] = get_prob(count[0], tot_count);
tot_count -= count[0];
- if (tot_count) {
- probs[1] = (vp9_prob)((count[1] * 255 + (tot_count >> 1)) / tot_count);
- probs[1] += !probs[1];
- } else
- probs[1] = 128;
+ probs[1] = get_prob(count[1], tot_count);
tot_count -= count[1];
- if (tot_count) {
- probs[2] = (vp9_prob)((count[2] * 255 + (tot_count >> 1)) / tot_count);
- probs[2] += !probs[2];
- } else
- probs[2] = 128;
-
+ probs[2] = get_prob(count[2], tot_count);
}
// Computes a set of modified conditional probabilities for the reference frame
« no previous file with comments | « source/libvpx/vp9/common/vp9_pred_common.h ('k') | source/libvpx/vp9/common/vp9_quant_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698