summaryrefslogtreecommitdiff
path: root/vp9/common/vp9_pred_common.c
diff options
context:
space:
mode:
authorDmitry Kovalev <dkovalev@google.com>2013-07-16 10:44:48 -0700
committerDmitry Kovalev <dkovalev@google.com>2013-07-16 10:44:48 -0700
commit863138a2ad8cb47da20e268f80195dde99a4f225 (patch)
treee194553d75668bdb6289b95409bb0a3e470d1bc5 /vp9/common/vp9_pred_common.c
parent90ebfe621fccf231c25f4d55aa93da2df90f2d00 (diff)
downloadlibvpx-863138a2ad8cb47da20e268f80195dde99a4f225.tar
libvpx-863138a2ad8cb47da20e268f80195dde99a4f225.tar.gz
libvpx-863138a2ad8cb47da20e268f80195dde99a4f225.tar.bz2
libvpx-863138a2ad8cb47da20e268f80195dde99a4f225.zip
Rewriting vp9_set_pred_flag_{seg_id, mbskip}.
Making implementation of vp9_set_pred_flag_{seg_id, mbskip} consistent with vp9_get_segment_id without using confusing sub(a, b) macro. Passing mi_row and mi_col to functions explicitly instead of replying on mb_to_right_edge and mb_to_bottom_edge. Change-Id: I54c1087dd2ba9036f8ba7eb165b073e807d00435
Diffstat (limited to 'vp9/common/vp9_pred_common.c')
-rw-r--r--vp9/common/vp9_pred_common.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/vp9/common/vp9_pred_common.c b/vp9/common/vp9_pred_common.c
index 19ac492a1..5c8e34630 100644
--- a/vp9/common/vp9_pred_common.c
+++ b/vp9/common/vp9_pred_common.c
@@ -16,21 +16,6 @@
#include "vp9/common/vp9_seg_common.h"
#include "vp9/common/vp9_treecoder.h"
-void vp9_set_pred_flag_seg_id(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize,
- unsigned char pred_flag) {
- const int mis = xd->mode_info_stride;
- const int bh = 1 << mi_height_log2(bsize);
- const int bw = 1 << mi_width_log2(bsize);
-#define sub(a, b) (b) < 0 ? (a) + (b) : (a)
- const int x_mis = sub(bw, xd->mb_to_right_edge >> (3 + LOG2_MI_SIZE));
- const int y_mis = sub(bh, xd->mb_to_bottom_edge >> (3 + LOG2_MI_SIZE));
-#undef sub
- int x, y;
-
- for (y = 0; y < y_mis; y++)
- for (x = 0; x < x_mis; x++)
- xd->mode_info_context[y * mis + x].mbmi.seg_id_predicted = pred_flag;
-}
// Returns a context number for the given MB prediction signal
unsigned char vp9_get_pred_context_switchable_interp(const VP9_COMMON *cm,
const MACROBLOCKD *xd) {
@@ -423,22 +408,32 @@ unsigned char vp9_get_pred_context_tx_size(const VP9_COMMON *cm,
return above_context + left_context > max_tx_size;
}
-// This function sets the status of the given prediction signal.
-// I.e. is the predicted value for the given signal correct.
-void vp9_set_pred_flag_mbskip(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize,
- unsigned char pred_flag) {
- const int mis = xd->mode_info_stride;
+void vp9_set_pred_flag_seg_id(VP9_COMMON *cm, BLOCK_SIZE_TYPE bsize,
+ int mi_row, int mi_col, uint8_t pred_flag) {
+ MODE_INFO *mi = &cm->mi[mi_row * cm->mode_info_stride + mi_col];
+ const int bw = 1 << mi_width_log2(bsize);
const int bh = 1 << mi_height_log2(bsize);
+ const int xmis = MIN(cm->mi_cols - mi_col, bw);
+ const int ymis = MIN(cm->mi_rows - mi_row, bh);
+ int x, y;
+
+ for (y = 0; y < ymis; y++)
+ for (x = 0; x < xmis; x++)
+ mi[y * cm->mode_info_stride + x].mbmi.seg_id_predicted = pred_flag;
+}
+
+void vp9_set_pred_flag_mbskip(VP9_COMMON *cm, BLOCK_SIZE_TYPE bsize,
+ int mi_row, int mi_col, uint8_t pred_flag) {
+ MODE_INFO *mi = &cm->mi[mi_row * cm->mode_info_stride + mi_col];
const int bw = 1 << mi_width_log2(bsize);
-#define sub(a, b) (b) < 0 ? (a) + (b) : (a)
- const int x_mis = sub(bw, xd->mb_to_right_edge >> (3 + LOG2_MI_SIZE));
- const int y_mis = sub(bh, xd->mb_to_bottom_edge >> (3 + LOG2_MI_SIZE));
-#undef sub
+ const int bh = 1 << mi_height_log2(bsize);
+ const int xmis = MIN(cm->mi_cols - mi_col, bw);
+ const int ymis = MIN(cm->mi_rows - mi_row, bh);
int x, y;
- for (y = 0; y < y_mis; y++)
- for (x = 0; x < x_mis; x++)
- xd->mode_info_context[y * mis + x].mbmi.mb_skip_coeff = pred_flag;
+ for (y = 0; y < ymis; y++)
+ for (x = 0; x < xmis; x++)
+ mi[y * cm->mode_info_stride + x].mbmi.mb_skip_coeff = pred_flag;
}
int vp9_get_segment_id(VP9_COMMON *cm, const uint8_t *segment_ids,