37 VP56mv *pmv,
int ref,
int z,
int idx,
int sb)
39 static const int8_t mv_ref_blk_off[
N_BS_SIZES][8][2] = {
40 [
BS_64x64] = { { 3, -1 }, { -1, 3 }, { 4, -1 }, { -1, 4 },
41 { -1, -1 }, { 0, -1 }, { -1, 0 }, { 6, -1 } },
42 [
BS_64x32] = { { 0, -1 }, { -1, 0 }, { 4, -1 }, { -1, 2 },
43 { -1, -1 }, { 0, -3 }, { -3, 0 }, { 2, -1 } },
44 [
BS_32x64] = { { -1, 0 }, { 0, -1 }, { -1, 4 }, { 2, -1 },
45 { -1, -1 }, { -3, 0 }, { 0, -3 }, { -1, 2 } },
46 [
BS_32x32] = { { 1, -1 }, { -1, 1 }, { 2, -1 }, { -1, 2 },
47 { -1, -1 }, { 0, -3 }, { -3, 0 }, { -3, -3 } },
48 [
BS_32x16] = { { 0, -1 }, { -1, 0 }, { 2, -1 }, { -1, -1 },
49 { -1, 1 }, { 0, -3 }, { -3, 0 }, { -3, -3 } },
50 [
BS_16x32] = { { -1, 0 }, { 0, -1 }, { -1, 2 }, { -1, -1 },
51 { 1, -1 }, { -3, 0 }, { 0, -3 }, { -3, -3 } },
52 [
BS_16x16] = { { 0, -1 }, { -1, 0 }, { 1, -1 }, { -1, 1 },
53 { -1, -1 }, { 0, -3 }, { -3, 0 }, { -3, -3 } },
54 [
BS_16x8] = { { 0, -1 }, { -1, 0 }, { 1, -1 }, { -1, -1 },
55 { 0, -2 }, { -2, 0 }, { -2, -1 }, { -1, -2 } },
56 [
BS_8x16] = { { -1, 0 }, { 0, -1 }, { -1, 1 }, { -1, -1 },
57 { -2, 0 }, { 0, -2 }, { -1, -2 }, { -2, -1 } },
58 [
BS_8x8] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 },
59 { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } },
60 [
BS_8x4] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 },
61 { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } },
62 [
BS_4x8] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 },
63 { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } },
64 [
BS_4x4] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 },
65 { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } },
68 int row = b->
row, col = b->
col, row7 = b->
row7;
69 const int8_t (*p)[2] = mv_ref_blk_off[b->
bs];
70 #define INVALID_MV 0x80008000U
74 #define RETURN_DIRECT_MV(mv) \
76 uint32_t m = AV_RN32A(&mv); \
80 } else if (mem == INVALID_MV) { \
82 } else if (m != mem) { \
89 if (sb == 2 || sb == 1) {
97 #define RETURN_MV(mv) \
102 clamp_mv(&tmp, &mv, s); \
103 m = AV_RN32A(&tmp); \
107 } else if (mem == INVALID_MV) { \
109 } else if (m != mem) { \
114 uint32_t m = AV_RN32A(&mv); \
116 clamp_mv(pmv, &mv, s); \
118 } else if (mem == INVALID_MV) { \
120 } else if (m != mem) { \
121 clamp_mv(pmv, &mv, s); \
130 if (mv->
ref[0] == ref)
132 else if (mv->
ref[1] == ref)
138 if (mv->
ref[0] == ref)
140 else if (mv->
ref[1] == ref)
150 int c = p[i][0] + col,
r = p[i][1] + row;
153 r >= 0 && r < s->rows) {
156 if (mv->
ref[0] == ref)
158 else if (mv->
ref[1] == ref)
167 if (mv->
ref[0] == ref)
169 else if (mv->
ref[1] == ref)
173 #define RETURN_SCALE_MV(mv, scale) \
176 VP56mv mv_temp = { -mv.x, -mv.y }; \
177 RETURN_MV(mv_temp); \
184 for (i = 0; i < 8; i++) {
185 int c = p[i][0] + col,
r = p[i][1] + row;
188 r >= 0 && r < s->rows) {
191 if (mv->
ref[0] != ref && mv->
ref[0] >= 0)
194 if (mv->
ref[1] != ref && mv->
ref[1] >= 0 &&
208 if (mv->
ref[0] != ref && mv->
ref[0] >= 0)
211 if (mv->
ref[1] != ref && mv->
ref[1] >= 0 &&
223 #undef RETURN_SCALE_MV
237 for (n = 0, m = 0; m < c; m++) {
264 n = (n << 3) | (bit << 1);
277 return sign ? -(n + 1) : (n + 1);
285 memset(mv, 0,
sizeof(*mv) * 2);
291 mode ==
NEWMV ? -1 : sb);
293 if ((mode ==
NEWMV || sb == -1) &&
295 abs(mv[0].x) < 64 && abs(mv[0].y) < 64)) {
323 mode ==
NEWMV ? -1 : sb);
324 if ((mode ==
NEWMV || sb == -1) &&
326 abs(mv[1].x) < 64 && abs(mv[1].y) < 64)) {