summaryrefslogtreecommitdiff
path: root/vp8/common
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2011-05-26 11:44:18 -0400
committerJohn Koleszar <jkoleszar@google.com>2011-05-26 11:44:36 -0400
commit9dccdc1f0884426d5c7340129660787b64812dbe (patch)
tree6fe02110f5b5e74bc1543911ad9d28fb9b86d0cc /vp8/common
parentf7044d4058fe22e81179727d87a7a425026538ee (diff)
parent117fcb207e2e655cd334b6a8522af7d713b1fcee (diff)
downloadlibvpx-9dccdc1f0884426d5c7340129660787b64812dbe.tar
libvpx-9dccdc1f0884426d5c7340129660787b64812dbe.tar.gz
libvpx-9dccdc1f0884426d5c7340129660787b64812dbe.tar.bz2
libvpx-9dccdc1f0884426d5c7340129660787b64812dbe.zip
Merge remote branch 'internal/upstream-experimental' into HEAD
Conflicts: vp8/encoder/encodeframe.c vp8/encoder/ethreading.c Change-Id: I4becf6f101756923de6b98ca6a2132c3605c6ea5
Diffstat (limited to 'vp8/common')
-rw-r--r--vp8/common/blockd.h29
-rw-r--r--vp8/common/debugmodes.c2
-rw-r--r--vp8/common/findnearmv.c23
-rw-r--r--vp8/common/findnearmv.h56
4 files changed, 79 insertions, 31 deletions
diff --git a/vp8/common/blockd.h b/vp8/common/blockd.h
index 51c7bfefd..330f1611c 100644
--- a/vp8/common/blockd.h
+++ b/vp8/common/blockd.h
@@ -167,14 +167,16 @@ typedef struct
unsigned char segment_id; /* Which set of segmentation parameters should be used for this MB */
} MB_MODE_INFO;
-
typedef struct
{
MB_MODE_INFO mbmi;
- B_MODE_INFO bmi[16];
+ union
+ {
+ B_PREDICTION_MODE as_mode;
+ int_mv mv;
+ } bmi[16];
} MODE_INFO;
-
typedef struct
{
short *qcoeff;
@@ -197,7 +199,6 @@ typedef struct
int eob;
B_MODE_INFO bmi;
-
} BLOCKD;
typedef struct
@@ -285,4 +286,24 @@ typedef struct
extern void vp8_build_block_doffsets(MACROBLOCKD *x);
extern void vp8_setup_block_dptrs(MACROBLOCKD *x);
+static void update_blockd_bmi(MACROBLOCKD *xd)
+{
+ int i;
+ if (xd->mode_info_context->mbmi.mode == SPLITMV)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ BLOCKD *d = &xd->block[i];
+ d->bmi.mv.as_int = xd->mode_info_context->bmi[i].mv.as_int;
+ }
+ }else if (xd->mode_info_context->mbmi.mode == B_PRED)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ BLOCKD *d = &xd->block[i];
+ d->bmi.mode = xd->mode_info_context->bmi[i].as_mode;
+ }
+ }
+}
+
#endif /* __INC_BLOCKD_H */
diff --git a/vp8/common/debugmodes.c b/vp8/common/debugmodes.c
index 8c03480fa..46064e61d 100644
--- a/vp8/common/debugmodes.c
+++ b/vp8/common/debugmodes.c
@@ -97,7 +97,7 @@ void vp8_print_modes_and_motion_vectors(MODE_INFO *mi, int rows, int cols, int f
bindex = (b_row & 3) * 4 + (b_col & 3);
if (mi[mb_index].mbmi.mode == B_PRED)
- fprintf(mvs, "%2d ", mi[mb_index].bmi[bindex].mode);
+ fprintf(mvs, "%2d ", mi[mb_index].bmi[bindex].as_mode);
else
fprintf(mvs, "xx ");
diff --git a/vp8/common/findnearmv.c b/vp8/common/findnearmv.c
index d5019d32a..c1022363e 100644
--- a/vp8/common/findnearmv.c
+++ b/vp8/common/findnearmv.c
@@ -153,26 +153,3 @@ vp8_prob *vp8_mv_ref_probs(
return p;
}
-const B_MODE_INFO *vp8_left_bmi(const MODE_INFO *cur_mb, int b)
-{
- if (!(b & 3))
- {
- /* On L edge, get from MB to left of us */
- --cur_mb;
- b += 4;
- }
-
- return cur_mb->bmi + b - 1;
-}
-
-const B_MODE_INFO *vp8_above_bmi(const MODE_INFO *cur_mb, int b, int mi_stride)
-{
- if (!(b >> 2))
- {
- /* On top edge, get from MB above us */
- cur_mb -= mi_stride;
- b += 16;
- }
-
- return cur_mb->bmi + b - 4;
-}
diff --git a/vp8/common/findnearmv.h b/vp8/common/findnearmv.h
index 20a77a57a..135e60b83 100644
--- a/vp8/common/findnearmv.h
+++ b/vp8/common/findnearmv.h
@@ -85,10 +85,60 @@ vp8_prob *vp8_mv_ref_probs(
vp8_prob p[VP8_MVREFS-1], const int near_mv_ref_ct[4]
);
-const B_MODE_INFO *vp8_left_bmi(const MODE_INFO *cur_mb, int b);
+extern const unsigned char vp8_mbsplit_offset[4][16];
-const B_MODE_INFO *vp8_above_bmi(const MODE_INFO *cur_mb, int b, int mi_stride);
-extern const unsigned char vp8_mbsplit_offset[4][16];
+static int left_block_mv(const MODE_INFO *cur_mb, int b)
+{
+ if (!(b & 3))
+ {
+ /* On L edge, get from MB to left of us */
+ --cur_mb;
+
+ if(cur_mb->mbmi.mode != SPLITMV)
+ return cur_mb->mbmi.mv.as_int;
+ b += 4;
+ }
+
+ return (cur_mb->bmi + b - 1)->mv.as_int;
+}
+
+static int above_block_mv(const MODE_INFO *cur_mb, int b, int mi_stride)
+{
+ if (!(b >> 2))
+ {
+ /* On top edge, get from MB above us */
+ cur_mb -= mi_stride;
+
+ if(cur_mb->mbmi.mode != SPLITMV)
+ return cur_mb->mbmi.mv.as_int;
+ b += 16;
+ }
+
+ return (cur_mb->bmi + b - 4)->mv.as_int;
+}
+static B_PREDICTION_MODE left_block_mode(const MODE_INFO *cur_mb, int b)
+{
+ if (!(b & 3))
+ {
+ /* On L edge, get from MB to left of us */
+ --cur_mb;
+ b += 4;
+ }
+
+ return (cur_mb->bmi + b - 1)->as_mode;
+}
+
+static B_PREDICTION_MODE above_block_mode(const MODE_INFO *cur_mb, int b, int mi_stride)
+{
+ if (!(b >> 2))
+ {
+ /* On top edge, get from MB above us */
+ cur_mb -= mi_stride;
+ b += 16;
+ }
+
+ return (cur_mb->bmi + b - 4)->as_mode;
+}
#endif