2 * Copyright (c) 2017, Alliance for Open Media. All rights reserved
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
12 #include "third_party/googletest/src/googletest/include/gtest/gtest.h"
14 #include "config/aom_config.h"
16 #include "av1/common/av1_common_int.h"
17 #include "av1/common/blockd.h"
18 #include "av1/common/enums.h"
19 #include "av1/common/mv.h"
20 #include "av1/common/mvref_common.h"
21 #include "av1/common/tile_common.h"
24 TEST(IntrabcTest
, DvValidation
) {
32 const int kSubPelScale
= 8;
33 const int kTileMaxMibWidth
= 8;
34 const DvTestCase kDvCases
[] = {
35 { { 0, 0 }, 0, 0, BLOCK_128X128
, false },
36 { { 0, 0 }, 0, 0, BLOCK_64X64
, false },
37 { { 0, 0 }, 0, 0, BLOCK_32X32
, false },
38 { { 0, 0 }, 0, 0, BLOCK_16X16
, false },
39 { { 0, 0 }, 0, 0, BLOCK_8X8
, false },
40 { { 0, 0 }, 0, 0, BLOCK_4X4
, false },
41 { { -MAX_SB_SIZE
* kSubPelScale
, -MAX_SB_SIZE
* kSubPelScale
},
42 MAX_SB_SIZE
/ MI_SIZE
,
43 MAX_SB_SIZE
/ MI_SIZE
,
46 { { 0, -MAX_SB_SIZE
* kSubPelScale
},
47 MAX_SB_SIZE
/ MI_SIZE
,
48 MAX_SB_SIZE
/ MI_SIZE
,
51 { { -MAX_SB_SIZE
* kSubPelScale
, 0 },
52 MAX_SB_SIZE
/ MI_SIZE
,
53 MAX_SB_SIZE
/ MI_SIZE
,
56 { { MAX_SB_SIZE
* kSubPelScale
, 0 },
57 MAX_SB_SIZE
/ MI_SIZE
,
58 MAX_SB_SIZE
/ MI_SIZE
,
61 { { 0, MAX_SB_SIZE
* kSubPelScale
},
62 MAX_SB_SIZE
/ MI_SIZE
,
63 MAX_SB_SIZE
/ MI_SIZE
,
66 { { -32 * kSubPelScale
, -32 * kSubPelScale
},
67 MAX_SB_SIZE
/ MI_SIZE
,
68 MAX_SB_SIZE
/ MI_SIZE
,
71 { { -32 * kSubPelScale
, -32 * kSubPelScale
},
76 { { -32 * kSubPelScale
- kSubPelScale
/ 2, -32 * kSubPelScale
},
77 MAX_SB_SIZE
/ MI_SIZE
,
78 MAX_SB_SIZE
/ MI_SIZE
,
81 { { -33 * kSubPelScale
, -32 * kSubPelScale
},
82 MAX_SB_SIZE
/ MI_SIZE
,
83 MAX_SB_SIZE
/ MI_SIZE
,
86 { { -32 * kSubPelScale
, -32 * kSubPelScale
- kSubPelScale
/ 2 },
87 MAX_SB_SIZE
/ MI_SIZE
,
88 MAX_SB_SIZE
/ MI_SIZE
,
91 { { -32 * kSubPelScale
, -33 * kSubPelScale
},
92 MAX_SB_SIZE
/ MI_SIZE
,
93 MAX_SB_SIZE
/ MI_SIZE
,
96 { { -MAX_SB_SIZE
* kSubPelScale
, -MAX_SB_SIZE
* kSubPelScale
},
97 MAX_SB_SIZE
/ MI_SIZE
,
98 MAX_SB_SIZE
/ MI_SIZE
,
101 { { -(MAX_SB_SIZE
+ 1) * kSubPelScale
, -MAX_SB_SIZE
* kSubPelScale
},
102 MAX_SB_SIZE
/ MI_SIZE
,
103 MAX_SB_SIZE
/ MI_SIZE
,
106 { { -MAX_SB_SIZE
* kSubPelScale
, -(MAX_SB_SIZE
+ 1) * kSubPelScale
},
107 MAX_SB_SIZE
/ MI_SIZE
,
108 MAX_SB_SIZE
/ MI_SIZE
,
111 { { -(MAX_SB_SIZE
- 1) * kSubPelScale
, -MAX_SB_SIZE
* kSubPelScale
},
112 MAX_SB_SIZE
/ MI_SIZE
,
113 MAX_SB_SIZE
/ MI_SIZE
,
116 { { -MAX_SB_SIZE
* kSubPelScale
, -(MAX_SB_SIZE
- 1) * kSubPelScale
},
117 MAX_SB_SIZE
/ MI_SIZE
,
118 MAX_SB_SIZE
/ MI_SIZE
,
121 { { -(MAX_SB_SIZE
- 1) * kSubPelScale
, -(MAX_SB_SIZE
- 1) * kSubPelScale
},
122 MAX_SB_SIZE
/ MI_SIZE
,
123 MAX_SB_SIZE
/ MI_SIZE
,
126 { { -MAX_SB_SIZE
* kSubPelScale
, MAX_SB_SIZE
* kSubPelScale
},
127 MAX_SB_SIZE
/ MI_SIZE
,
128 MAX_SB_SIZE
/ MI_SIZE
,
131 { { -MAX_SB_SIZE
* kSubPelScale
,
132 (kTileMaxMibWidth
- 2) * MAX_SB_SIZE
* kSubPelScale
},
133 MAX_SB_SIZE
/ MI_SIZE
,
134 MAX_SB_SIZE
/ MI_SIZE
,
137 { { -MAX_SB_SIZE
* kSubPelScale
,
138 ((kTileMaxMibWidth
- 2) * MAX_SB_SIZE
+ 1) * kSubPelScale
},
139 MAX_SB_SIZE
/ MI_SIZE
,
140 MAX_SB_SIZE
/ MI_SIZE
,
146 memset(&xd
, 0, sizeof(xd
));
147 xd
.tile
.mi_row_start
= 8 * MAX_MIB_SIZE
;
148 xd
.tile
.mi_row_end
= 16 * MAX_MIB_SIZE
;
149 xd
.tile
.mi_col_start
= 24 * MAX_MIB_SIZE
;
150 xd
.tile
.mi_col_end
= xd
.tile
.mi_col_start
+ kTileMaxMibWidth
* MAX_MIB_SIZE
;
151 xd
.plane
[1].subsampling_x
= 1;
152 xd
.plane
[1].subsampling_y
= 1;
153 xd
.plane
[2].subsampling_x
= 1;
154 xd
.plane
[2].subsampling_y
= 1;
156 SequenceHeader seq_params
= {};
158 memset(&cm
, 0, sizeof(cm
));
159 cm
.seq_params
= &seq_params
;
161 for (const DvTestCase
&dv_case
: kDvCases
) {
162 const int mi_row
= xd
.tile
.mi_row_start
+ dv_case
.mi_row_offset
;
163 const int mi_col
= xd
.tile
.mi_col_start
+ dv_case
.mi_col_offset
;
164 xd
.is_chroma_ref
= is_chroma_reference(mi_row
, mi_col
, dv_case
.bsize
,
165 xd
.plane
[1].subsampling_x
,
166 xd
.plane
[1].subsampling_y
);
167 EXPECT_EQ(static_cast<int>(dv_case
.valid
),
168 av1_is_dv_valid(dv_case
.dv
, &cm
, &xd
, mi_row
, mi_col
,
169 dv_case
.bsize
, MAX_MIB_SIZE_LOG2
));