diff options
author | Dmitry Kovalev <dkovalev@google.com> | 2013-07-16 10:44:48 -0700 |
---|---|---|
committer | Dmitry Kovalev <dkovalev@google.com> | 2013-07-16 10:44:48 -0700 |
commit | 863138a2ad8cb47da20e268f80195dde99a4f225 (patch) | |
tree | e194553d75668bdb6289b95409bb0a3e470d1bc5 /vp9/common/vp9_pred_common.c | |
parent | 90ebfe621fccf231c25f4d55aa93da2df90f2d00 (diff) | |
download | libvpx-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.c | 49 |
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, |