439 | 13.5M | } vp9recon.c:inter_pred_scaled_8bpp Line | Count | Source | 31 | 1.94M | { | 32 | 1.94M | static const uint8_t bwlog_tab[2][N_BS_SIZES] = { | 33 | 1.94M | { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, | 34 | 1.94M | { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, | 35 | 1.94M | }; | 36 | 1.94M | const VP9Context *s = td->s; | 37 | 1.94M | VP9Block *b = td->b; | 38 | 1.94M | int row = td->row, col = td->col; | 39 | 1.94M | const ProgressFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; | 40 | 1.94M | const AVFrame *ref1 = tref1->f, *ref2; | 41 | 1.94M | int w1 = ref1->width, h1 = ref1->height, w2, h2; | 42 | 1.94M | ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; | 43 | 1.94M | int bytesperpixel = BYTES_PER_PIXEL; | 44 | | | 45 | 1.94M | if (b->comp) { | 46 | 1.38M | tref2 = &s->s.refs[s->s.h.refidx[b->ref[1]]]; | 47 | 1.38M | ref2 = tref2->f; | 48 | 1.38M | w2 = ref2->width; | 49 | 1.38M | h2 = ref2->height; | 50 | 1.38M | } | 51 | | | 52 | | // y inter pred | 53 | 1.94M | if (b->bs > BS_8x8) { | 54 | 531k | VP9mv uvmv; | 55 | | | 56 | | #if SCALED == 0 | 57 | | if (b->bs == BS_8x4) { | 58 | | mc_luma_dir(td, mc[3][b->filter][0], td->dst[0], ls_y, | 59 | | ref1->data[0], ref1->linesize[0], tref1, | 60 | | row << 3, col << 3, &b->mv[0][0],,,,, 8, 4, w1, h1, 0); | 61 | | mc_luma_dir(td, mc[3][b->filter][0], | 62 | | td->dst[0] + 4 * ls_y, ls_y, | 63 | | ref1->data[0], ref1->linesize[0], tref1, | 64 | | (row << 3) + 4, col << 3, &b->mv[2][0],,,,, 8, 4, w1, h1, 0); | 65 | | w1 = (w1 + s->ss_h) >> s->ss_h; | 66 | | if (s->ss_v) { | 67 | | h1 = (h1 + 1) >> 1; | 68 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 69 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 70 | | td->dst[1], td->dst[2], ls_uv, | 71 | | ref1->data[1], ref1->linesize[1], | 72 | | ref1->data[2], ref1->linesize[2], tref1, | 73 | | row << 2, col << (3 - s->ss_h), | 74 | | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 75 | | } else { | 76 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 77 | | td->dst[1], td->dst[2], ls_uv, | 78 | | ref1->data[1], ref1->linesize[1], | 79 | | ref1->data[2], ref1->linesize[2], tref1, | 80 | | row << 3, col << (3 - s->ss_h), | 81 | | &b->mv[0][0],,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 82 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 83 | | // to get the motion vector for the bottom 4x4 block | 84 | | // https://code.google.com/p/webm/issues/detail?id=993 | 85 | | if (s->ss_h == 0) { | 86 | | uvmv = b->mv[2][0]; | 87 | | } else { | 88 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 89 | | } | 90 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 91 | | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 92 | | ref1->data[1], ref1->linesize[1], | 93 | | ref1->data[2], ref1->linesize[2], tref1, | 94 | | (row << 3) + 4, col << (3 - s->ss_h), | 95 | | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 96 | | } | 97 | | | 98 | | if (b->comp) { | 99 | | mc_luma_dir(td, mc[3][b->filter][1], td->dst[0], ls_y, | 100 | | ref2->data[0], ref2->linesize[0], tref2, | 101 | | row << 3, col << 3, &b->mv[0][1],,,,, 8, 4, w2, h2, 1); | 102 | | mc_luma_dir(td, mc[3][b->filter][1], | 103 | | td->dst[0] + 4 * ls_y, ls_y, | 104 | | ref2->data[0], ref2->linesize[0], tref2, | 105 | | (row << 3) + 4, col << 3, &b->mv[2][1],,,,, 8, 4, w2, h2, 1); | 106 | | w2 = (w2 + s->ss_h) >> s->ss_h; | 107 | | if (s->ss_v) { | 108 | | h2 = (h2 + 1) >> 1; | 109 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 110 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 111 | | td->dst[1], td->dst[2], ls_uv, | 112 | | ref2->data[1], ref2->linesize[1], | 113 | | ref2->data[2], ref2->linesize[2], tref2, | 114 | | row << 2, col << (3 - s->ss_h), | 115 | | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 116 | | } else { | 117 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 118 | | td->dst[1], td->dst[2], ls_uv, | 119 | | ref2->data[1], ref2->linesize[1], | 120 | | ref2->data[2], ref2->linesize[2], tref2, | 121 | | row << 3, col << (3 - s->ss_h), | 122 | | &b->mv[0][1],,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 123 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 124 | | // to get the motion vector for the bottom 4x4 block | 125 | | // https://code.google.com/p/webm/issues/detail?id=993 | 126 | | if (s->ss_h == 0) { | 127 | | uvmv = b->mv[2][1]; | 128 | | } else { | 129 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 130 | | } | 131 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 132 | | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 133 | | ref2->data[1], ref2->linesize[1], | 134 | | ref2->data[2], ref2->linesize[2], tref2, | 135 | | (row << 3) + 4, col << (3 - s->ss_h), | 136 | | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 137 | | } | 138 | | } | 139 | | } else if (b->bs == BS_4x8) { | 140 | | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 141 | | ref1->data[0], ref1->linesize[0], tref1, | 142 | | row << 3, col << 3, &b->mv[0][0],,,,, 4, 8, w1, h1, 0); | 143 | | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 144 | | ref1->data[0], ref1->linesize[0], tref1, | 145 | | row << 3, (col << 3) + 4, &b->mv[1][0],,,,, 4, 8, w1, h1, 0); | 146 | | h1 = (h1 + s->ss_v) >> s->ss_v; | 147 | | if (s->ss_h) { | 148 | | w1 = (w1 + 1) >> 1; | 149 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 150 | | mc_chroma_dir(td, mc[4][b->filter][0], | 151 | | td->dst[1], td->dst[2], ls_uv, | 152 | | ref1->data[1], ref1->linesize[1], | 153 | | ref1->data[2], ref1->linesize[2], tref1, | 154 | | row << (3 - s->ss_v), col << 2, | 155 | | &uvmv,,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 156 | | } else { | 157 | | mc_chroma_dir(td, mc[4][b->filter][0], | 158 | | td->dst[1], td->dst[2], ls_uv, | 159 | | ref1->data[1], ref1->linesize[1], | 160 | | ref1->data[2], ref1->linesize[2], tref1, | 161 | | row << (3 - s->ss_v), col << 3, | 162 | | &b->mv[0][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 163 | | mc_chroma_dir(td, mc[4][b->filter][0], | 164 | | td->dst[1] + 4 * bytesperpixel, | 165 | | td->dst[2] + 4 * bytesperpixel, ls_uv, | 166 | | ref1->data[1], ref1->linesize[1], | 167 | | ref1->data[2], ref1->linesize[2], tref1, | 168 | | row << (3 - s->ss_v), (col << 3) + 4, | 169 | | &b->mv[1][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 170 | | } | 171 | | | 172 | | if (b->comp) { | 173 | | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 174 | | ref2->data[0], ref2->linesize[0], tref2, | 175 | | row << 3, col << 3, &b->mv[0][1],,,,, 4, 8, w2, h2, 1); | 176 | | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 177 | | ref2->data[0], ref2->linesize[0], tref2, | 178 | | row << 3, (col << 3) + 4, &b->mv[1][1],,,,, 4, 8, w2, h2, 1); | 179 | | h2 = (h2 + s->ss_v) >> s->ss_v; | 180 | | if (s->ss_h) { | 181 | | w2 = (w2 + 1) >> 1; | 182 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 183 | | mc_chroma_dir(td, mc[4][b->filter][1], | 184 | | td->dst[1], td->dst[2], ls_uv, | 185 | | ref2->data[1], ref2->linesize[1], | 186 | | ref2->data[2], ref2->linesize[2], tref2, | 187 | | row << (3 - s->ss_v), col << 2, | 188 | | &uvmv,,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 189 | | } else { | 190 | | mc_chroma_dir(td, mc[4][b->filter][1], | 191 | | td->dst[1], td->dst[2], ls_uv, | 192 | | ref2->data[1], ref2->linesize[1], | 193 | | ref2->data[2], ref2->linesize[2], tref2, | 194 | | row << (3 - s->ss_v), col << 3, | 195 | | &b->mv[0][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 196 | | mc_chroma_dir(td, mc[4][b->filter][1], | 197 | | td->dst[1] + 4 * bytesperpixel, | 198 | | td->dst[2] + 4 * bytesperpixel, ls_uv, | 199 | | ref2->data[1], ref2->linesize[1], | 200 | | ref2->data[2], ref2->linesize[2], tref2, | 201 | | row << (3 - s->ss_v), (col << 3) + 4, | 202 | | &b->mv[1][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 203 | | } | 204 | | } | 205 | | } else | 206 | | #endif | 207 | 531k | { | 208 | | #if SCALED == 0 | 209 | | av_assert2(b->bs == BS_4x4); | 210 | | #endif | 211 | | | 212 | | // FIXME if two horizontally adjacent blocks have the same MV, | 213 | | // do a w8 instead of a w4 call | 214 | 531k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 215 | 531k | ref1->data[0], ref1->linesize[0], tref1, | 216 | 531k | row << 3, col << 3, &b->mv[0][0], | 217 | 531k | 0, 0, 8, 8, 4, 4, w1, h1, 0); | 218 | 531k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 219 | 531k | ref1->data[0], ref1->linesize[0], tref1, | 220 | 531k | row << 3, (col << 3) + 4, &b->mv[1][0], | 221 | 531k | 4, 0, 8, 8, 4, 4, w1, h1, 0); | 222 | 531k | mc_luma_dir(td, mc[4][b->filter][0], | 223 | 531k | td->dst[0] + 4 * ls_y, ls_y, | 224 | 531k | ref1->data[0], ref1->linesize[0], tref1, | 225 | 531k | (row << 3) + 4, col << 3, &b->mv[2][0], | 226 | 531k | 0, 4, 8, 8, 4, 4, w1, h1, 0); | 227 | 531k | mc_luma_dir(td, mc[4][b->filter][0], | 228 | 531k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 229 | 531k | ref1->data[0], ref1->linesize[0], tref1, | 230 | 531k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][0], | 231 | 531k | 4, 4, 8, 8, 4, 4, w1, h1, 0); | 232 | 531k | if (s->ss_v) { | 233 | 377k | h1 = (h1 + 1) >> 1; | 234 | 377k | if (s->ss_h) { | 235 | 93.2k | w1 = (w1 + 1) >> 1; | 236 | 93.2k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][0], b->mv[1][0], | 237 | 93.2k | b->mv[2][0], b->mv[3][0]); | 238 | 93.2k | mc_chroma_dir(td, mc[4][b->filter][0], | 239 | 93.2k | td->dst[1], td->dst[2], ls_uv, | 240 | 93.2k | ref1->data[1], ref1->linesize[1], | 241 | 93.2k | ref1->data[2], ref1->linesize[2], tref1, | 242 | 93.2k | row << 2, col << 2, | 243 | 93.2k | &uvmv, 0, 0, 4, 4, 4, 4, w1, h1, 0); | 244 | 284k | } else { | 245 | 284k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 246 | 284k | mc_chroma_dir(td, mc[4][b->filter][0], | 247 | 284k | td->dst[1], td->dst[2], ls_uv, | 248 | 284k | ref1->data[1], ref1->linesize[1], | 249 | 284k | ref1->data[2], ref1->linesize[2], tref1, | 250 | 284k | row << 2, col << 3, | 251 | 284k | &uvmv, 0, 0, 8, 4, 4, 4, w1, h1, 0); | 252 | 284k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[3][0]); | 253 | 284k | mc_chroma_dir(td, mc[4][b->filter][0], | 254 | 284k | td->dst[1] + 4 * bytesperpixel, | 255 | 284k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 256 | 284k | ref1->data[1], ref1->linesize[1], | 257 | 284k | ref1->data[2], ref1->linesize[2], tref1, | 258 | 284k | row << 2, (col << 3) + 4, | 259 | 284k | &uvmv, 4, 0, 8, 4, 4, 4, w1, h1, 0); | 260 | 284k | } | 261 | 377k | } else { | 262 | 154k | if (s->ss_h) { | 263 | 76.4k | w1 = (w1 + 1) >> 1; | 264 | 76.4k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 265 | 76.4k | mc_chroma_dir(td, mc[4][b->filter][0], | 266 | 76.4k | td->dst[1], td->dst[2], ls_uv, | 267 | 76.4k | ref1->data[1], ref1->linesize[1], | 268 | 76.4k | ref1->data[2], ref1->linesize[2], tref1, | 269 | 76.4k | row << 3, col << 2, | 270 | 76.4k | &uvmv, 0, 0, 4, 8, 4, 4, w1, h1, 0); | 271 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 272 | | // bottom block | 273 | | // https://code.google.com/p/webm/issues/detail?id=993 | 274 | 76.4k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[2][0]); | 275 | 76.4k | mc_chroma_dir(td, mc[4][b->filter][0], | 276 | 76.4k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 277 | 76.4k | ref1->data[1], ref1->linesize[1], | 278 | 76.4k | ref1->data[2], ref1->linesize[2], tref1, | 279 | 76.4k | (row << 3) + 4, col << 2, | 280 | 76.4k | &uvmv, 0, 4, 4, 8, 4, 4, w1, h1, 0); | 281 | 77.6k | } else { | 282 | 77.6k | mc_chroma_dir(td, mc[4][b->filter][0], | 283 | 77.6k | td->dst[1], td->dst[2], ls_uv, | 284 | 77.6k | ref1->data[1], ref1->linesize[1], | 285 | 77.6k | ref1->data[2], ref1->linesize[2], tref1, | 286 | 77.6k | row << 3, col << 3, | 287 | 77.6k | &b->mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0); | 288 | 77.6k | mc_chroma_dir(td, mc[4][b->filter][0], | 289 | 77.6k | td->dst[1] + 4 * bytesperpixel, | 290 | 77.6k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 291 | 77.6k | ref1->data[1], ref1->linesize[1], | 292 | 77.6k | ref1->data[2], ref1->linesize[2], tref1, | 293 | 77.6k | row << 3, (col << 3) + 4, | 294 | 77.6k | &b->mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0); | 295 | 77.6k | mc_chroma_dir(td, mc[4][b->filter][0], | 296 | 77.6k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 297 | 77.6k | ref1->data[1], ref1->linesize[1], | 298 | 77.6k | ref1->data[2], ref1->linesize[2], tref1, | 299 | 77.6k | (row << 3) + 4, col << 3, | 300 | 77.6k | &b->mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0); | 301 | 77.6k | mc_chroma_dir(td, mc[4][b->filter][0], | 302 | 77.6k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 303 | 77.6k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 304 | 77.6k | ref1->data[1], ref1->linesize[1], | 305 | 77.6k | ref1->data[2], ref1->linesize[2], tref1, | 306 | 77.6k | (row << 3) + 4, (col << 3) + 4, | 307 | 77.6k | &b->mv[3][0], 4, 4, 8, 8, 4, 4, w1, h1, 0); | 308 | 77.6k | } | 309 | 154k | } | 310 | | | 311 | 531k | if (b->comp) { | 312 | 402k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 313 | 402k | ref2->data[0], ref2->linesize[0], tref2, | 314 | 402k | row << 3, col << 3, &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 315 | 402k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 316 | 402k | ref2->data[0], ref2->linesize[0], tref2, | 317 | 402k | row << 3, (col << 3) + 4, &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 318 | 402k | mc_luma_dir(td, mc[4][b->filter][1], | 319 | 402k | td->dst[0] + 4 * ls_y, ls_y, | 320 | 402k | ref2->data[0], ref2->linesize[0], tref2, | 321 | 402k | (row << 3) + 4, col << 3, &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 322 | 402k | mc_luma_dir(td, mc[4][b->filter][1], | 323 | 402k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 324 | 402k | ref2->data[0], ref2->linesize[0], tref2, | 325 | 402k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 326 | 402k | if (s->ss_v) { | 327 | 300k | h2 = (h2 + 1) >> 1; | 328 | 300k | if (s->ss_h) { | 329 | 65.2k | w2 = (w2 + 1) >> 1; | 330 | 65.2k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][1], b->mv[1][1], | 331 | 65.2k | b->mv[2][1], b->mv[3][1]); | 332 | 65.2k | mc_chroma_dir(td, mc[4][b->filter][1], | 333 | 65.2k | td->dst[1], td->dst[2], ls_uv, | 334 | 65.2k | ref2->data[1], ref2->linesize[1], | 335 | 65.2k | ref2->data[2], ref2->linesize[2], tref2, | 336 | 65.2k | row << 2, col << 2, | 337 | 65.2k | &uvmv, 0, 0, 4, 4, 4, 4, w2, h2, 1); | 338 | 235k | } else { | 339 | 235k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 340 | 235k | mc_chroma_dir(td, mc[4][b->filter][1], | 341 | 235k | td->dst[1], td->dst[2], ls_uv, | 342 | 235k | ref2->data[1], ref2->linesize[1], | 343 | 235k | ref2->data[2], ref2->linesize[2], tref2, | 344 | 235k | row << 2, col << 3, | 345 | 235k | &uvmv, 0, 0, 8, 4, 4, 4, w2, h2, 1); | 346 | 235k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[3][1]); | 347 | 235k | mc_chroma_dir(td, mc[4][b->filter][1], | 348 | 235k | td->dst[1] + 4 * bytesperpixel, | 349 | 235k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 350 | 235k | ref2->data[1], ref2->linesize[1], | 351 | 235k | ref2->data[2], ref2->linesize[2], tref2, | 352 | 235k | row << 2, (col << 3) + 4, | 353 | 235k | &uvmv, 4, 0, 8, 4, 4, 4, w2, h2, 1); | 354 | 235k | } | 355 | 300k | } else { | 356 | 101k | if (s->ss_h) { | 357 | 42.6k | w2 = (w2 + 1) >> 1; | 358 | 42.6k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 359 | 42.6k | mc_chroma_dir(td, mc[4][b->filter][1], | 360 | 42.6k | td->dst[1], td->dst[2], ls_uv, | 361 | 42.6k | ref2->data[1], ref2->linesize[1], | 362 | 42.6k | ref2->data[2], ref2->linesize[2], tref2, | 363 | 42.6k | row << 3, col << 2, | 364 | 42.6k | &uvmv, 0, 0, 4, 8, 4, 4, w2, h2, 1); | 365 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 366 | | // bottom block | 367 | | // https://code.google.com/p/webm/issues/detail?id=993 | 368 | 42.6k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[2][1]); | 369 | 42.6k | mc_chroma_dir(td, mc[4][b->filter][1], | 370 | 42.6k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 371 | 42.6k | ref2->data[1], ref2->linesize[1], | 372 | 42.6k | ref2->data[2], ref2->linesize[2], tref2, | 373 | 42.6k | (row << 3) + 4, col << 2, | 374 | 42.6k | &uvmv, 0, 4, 4, 8, 4, 4, w2, h2, 1); | 375 | 59.0k | } else { | 376 | 59.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 377 | 59.0k | td->dst[1], td->dst[2], ls_uv, | 378 | 59.0k | ref2->data[1], ref2->linesize[1], | 379 | 59.0k | ref2->data[2], ref2->linesize[2], tref2, | 380 | 59.0k | row << 3, col << 3, | 381 | 59.0k | &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 382 | 59.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 383 | 59.0k | td->dst[1] + 4 * bytesperpixel, | 384 | 59.0k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 385 | 59.0k | ref2->data[1], ref2->linesize[1], | 386 | 59.0k | ref2->data[2], ref2->linesize[2], tref2, | 387 | 59.0k | row << 3, (col << 3) + 4, | 388 | 59.0k | &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 389 | 59.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 390 | 59.0k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 391 | 59.0k | ref2->data[1], ref2->linesize[1], | 392 | 59.0k | ref2->data[2], ref2->linesize[2], tref2, | 393 | 59.0k | (row << 3) + 4, col << 3, | 394 | 59.0k | &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 395 | 59.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 396 | 59.0k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 397 | 59.0k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 398 | 59.0k | ref2->data[1], ref2->linesize[1], | 399 | 59.0k | ref2->data[2], ref2->linesize[2], tref2, | 400 | 59.0k | (row << 3) + 4, (col << 3) + 4, | 401 | 59.0k | &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 402 | 59.0k | } | 403 | 101k | } | 404 | 402k | } | 405 | 531k | } | 406 | 1.41M | } else { | 407 | 1.41M | int bwl = bwlog_tab[0][b->bs]; | 408 | 1.41M | int bw = ff_vp9_bwh_tab[0][b->bs][0] * 4; | 409 | 1.41M | int bh = ff_vp9_bwh_tab[0][b->bs][1] * 4; | 410 | 1.41M | int uvbw = ff_vp9_bwh_tab[s->ss_h][b->bs][0] * 4; | 411 | 1.41M | int uvbh = ff_vp9_bwh_tab[s->ss_v][b->bs][1] * 4; | 412 | | | 413 | 1.41M | mc_luma_dir(td, mc[bwl][b->filter][0], td->dst[0], ls_y, | 414 | 1.41M | ref1->data[0], ref1->linesize[0], tref1, | 415 | 1.41M | row << 3, col << 3, &b->mv[0][0], 0, 0, bw, bh, bw, bh, w1, h1, 0); | 416 | 1.41M | w1 = (w1 + s->ss_h) >> s->ss_h; | 417 | 1.41M | h1 = (h1 + s->ss_v) >> s->ss_v; | 418 | 1.41M | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][0], | 419 | 1.41M | td->dst[1], td->dst[2], ls_uv, | 420 | 1.41M | ref1->data[1], ref1->linesize[1], | 421 | 1.41M | ref1->data[2], ref1->linesize[2], tref1, | 422 | 1.41M | row << (3 - s->ss_v), col << (3 - s->ss_h), | 423 | 1.41M | &b->mv[0][0], 0, 0, uvbw, uvbh, uvbw, uvbh, w1, h1, 0); | 424 | | | 425 | 1.41M | if (b->comp) { | 426 | 984k | mc_luma_dir(td, mc[bwl][b->filter][1], td->dst[0], ls_y, | 427 | 984k | ref2->data[0], ref2->linesize[0], tref2, | 428 | 984k | row << 3, col << 3, &b->mv[0][1], 0, 0, bw, bh, bw, bh, w2, h2, 1); | 429 | 984k | w2 = (w2 + s->ss_h) >> s->ss_h; | 430 | 984k | h2 = (h2 + s->ss_v) >> s->ss_v; | 431 | 984k | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][1], | 432 | 984k | td->dst[1], td->dst[2], ls_uv, | 433 | 984k | ref2->data[1], ref2->linesize[1], | 434 | 984k | ref2->data[2], ref2->linesize[2], tref2, | 435 | 984k | row << (3 - s->ss_v), col << (3 - s->ss_h), | 436 | 984k | &b->mv[0][1], 0, 0, uvbw, uvbh, uvbw, uvbh, w2, h2, 1); | 437 | 984k | } | 438 | 1.41M | } | 439 | 1.94M | } |
vp9recon.c:inter_pred_scaled_16bpp Line | Count | Source | 31 | 2.73M | { | 32 | 2.73M | static const uint8_t bwlog_tab[2][N_BS_SIZES] = { | 33 | 2.73M | { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, | 34 | 2.73M | { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, | 35 | 2.73M | }; | 36 | 2.73M | const VP9Context *s = td->s; | 37 | 2.73M | VP9Block *b = td->b; | 38 | 2.73M | int row = td->row, col = td->col; | 39 | 2.73M | const ProgressFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; | 40 | 2.73M | const AVFrame *ref1 = tref1->f, *ref2; | 41 | 2.73M | int w1 = ref1->width, h1 = ref1->height, w2, h2; | 42 | 2.73M | ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; | 43 | 2.73M | int bytesperpixel = BYTES_PER_PIXEL; | 44 | | | 45 | 2.73M | if (b->comp) { | 46 | 2.17M | tref2 = &s->s.refs[s->s.h.refidx[b->ref[1]]]; | 47 | 2.17M | ref2 = tref2->f; | 48 | 2.17M | w2 = ref2->width; | 49 | 2.17M | h2 = ref2->height; | 50 | 2.17M | } | 51 | | | 52 | | // y inter pred | 53 | 2.73M | if (b->bs > BS_8x8) { | 54 | 843k | VP9mv uvmv; | 55 | | | 56 | | #if SCALED == 0 | 57 | | if (b->bs == BS_8x4) { | 58 | | mc_luma_dir(td, mc[3][b->filter][0], td->dst[0], ls_y, | 59 | | ref1->data[0], ref1->linesize[0], tref1, | 60 | | row << 3, col << 3, &b->mv[0][0],,,,, 8, 4, w1, h1, 0); | 61 | | mc_luma_dir(td, mc[3][b->filter][0], | 62 | | td->dst[0] + 4 * ls_y, ls_y, | 63 | | ref1->data[0], ref1->linesize[0], tref1, | 64 | | (row << 3) + 4, col << 3, &b->mv[2][0],,,,, 8, 4, w1, h1, 0); | 65 | | w1 = (w1 + s->ss_h) >> s->ss_h; | 66 | | if (s->ss_v) { | 67 | | h1 = (h1 + 1) >> 1; | 68 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 69 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 70 | | td->dst[1], td->dst[2], ls_uv, | 71 | | ref1->data[1], ref1->linesize[1], | 72 | | ref1->data[2], ref1->linesize[2], tref1, | 73 | | row << 2, col << (3 - s->ss_h), | 74 | | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 75 | | } else { | 76 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 77 | | td->dst[1], td->dst[2], ls_uv, | 78 | | ref1->data[1], ref1->linesize[1], | 79 | | ref1->data[2], ref1->linesize[2], tref1, | 80 | | row << 3, col << (3 - s->ss_h), | 81 | | &b->mv[0][0],,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 82 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 83 | | // to get the motion vector for the bottom 4x4 block | 84 | | // https://code.google.com/p/webm/issues/detail?id=993 | 85 | | if (s->ss_h == 0) { | 86 | | uvmv = b->mv[2][0]; | 87 | | } else { | 88 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 89 | | } | 90 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 91 | | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 92 | | ref1->data[1], ref1->linesize[1], | 93 | | ref1->data[2], ref1->linesize[2], tref1, | 94 | | (row << 3) + 4, col << (3 - s->ss_h), | 95 | | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 96 | | } | 97 | | | 98 | | if (b->comp) { | 99 | | mc_luma_dir(td, mc[3][b->filter][1], td->dst[0], ls_y, | 100 | | ref2->data[0], ref2->linesize[0], tref2, | 101 | | row << 3, col << 3, &b->mv[0][1],,,,, 8, 4, w2, h2, 1); | 102 | | mc_luma_dir(td, mc[3][b->filter][1], | 103 | | td->dst[0] + 4 * ls_y, ls_y, | 104 | | ref2->data[0], ref2->linesize[0], tref2, | 105 | | (row << 3) + 4, col << 3, &b->mv[2][1],,,,, 8, 4, w2, h2, 1); | 106 | | w2 = (w2 + s->ss_h) >> s->ss_h; | 107 | | if (s->ss_v) { | 108 | | h2 = (h2 + 1) >> 1; | 109 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 110 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 111 | | td->dst[1], td->dst[2], ls_uv, | 112 | | ref2->data[1], ref2->linesize[1], | 113 | | ref2->data[2], ref2->linesize[2], tref2, | 114 | | row << 2, col << (3 - s->ss_h), | 115 | | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 116 | | } else { | 117 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 118 | | td->dst[1], td->dst[2], ls_uv, | 119 | | ref2->data[1], ref2->linesize[1], | 120 | | ref2->data[2], ref2->linesize[2], tref2, | 121 | | row << 3, col << (3 - s->ss_h), | 122 | | &b->mv[0][1],,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 123 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 124 | | // to get the motion vector for the bottom 4x4 block | 125 | | // https://code.google.com/p/webm/issues/detail?id=993 | 126 | | if (s->ss_h == 0) { | 127 | | uvmv = b->mv[2][1]; | 128 | | } else { | 129 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 130 | | } | 131 | | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 132 | | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 133 | | ref2->data[1], ref2->linesize[1], | 134 | | ref2->data[2], ref2->linesize[2], tref2, | 135 | | (row << 3) + 4, col << (3 - s->ss_h), | 136 | | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 137 | | } | 138 | | } | 139 | | } else if (b->bs == BS_4x8) { | 140 | | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 141 | | ref1->data[0], ref1->linesize[0], tref1, | 142 | | row << 3, col << 3, &b->mv[0][0],,,,, 4, 8, w1, h1, 0); | 143 | | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 144 | | ref1->data[0], ref1->linesize[0], tref1, | 145 | | row << 3, (col << 3) + 4, &b->mv[1][0],,,,, 4, 8, w1, h1, 0); | 146 | | h1 = (h1 + s->ss_v) >> s->ss_v; | 147 | | if (s->ss_h) { | 148 | | w1 = (w1 + 1) >> 1; | 149 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 150 | | mc_chroma_dir(td, mc[4][b->filter][0], | 151 | | td->dst[1], td->dst[2], ls_uv, | 152 | | ref1->data[1], ref1->linesize[1], | 153 | | ref1->data[2], ref1->linesize[2], tref1, | 154 | | row << (3 - s->ss_v), col << 2, | 155 | | &uvmv,,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 156 | | } else { | 157 | | mc_chroma_dir(td, mc[4][b->filter][0], | 158 | | td->dst[1], td->dst[2], ls_uv, | 159 | | ref1->data[1], ref1->linesize[1], | 160 | | ref1->data[2], ref1->linesize[2], tref1, | 161 | | row << (3 - s->ss_v), col << 3, | 162 | | &b->mv[0][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 163 | | mc_chroma_dir(td, mc[4][b->filter][0], | 164 | | td->dst[1] + 4 * bytesperpixel, | 165 | | td->dst[2] + 4 * bytesperpixel, ls_uv, | 166 | | ref1->data[1], ref1->linesize[1], | 167 | | ref1->data[2], ref1->linesize[2], tref1, | 168 | | row << (3 - s->ss_v), (col << 3) + 4, | 169 | | &b->mv[1][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 170 | | } | 171 | | | 172 | | if (b->comp) { | 173 | | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 174 | | ref2->data[0], ref2->linesize[0], tref2, | 175 | | row << 3, col << 3, &b->mv[0][1],,,,, 4, 8, w2, h2, 1); | 176 | | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 177 | | ref2->data[0], ref2->linesize[0], tref2, | 178 | | row << 3, (col << 3) + 4, &b->mv[1][1],,,,, 4, 8, w2, h2, 1); | 179 | | h2 = (h2 + s->ss_v) >> s->ss_v; | 180 | | if (s->ss_h) { | 181 | | w2 = (w2 + 1) >> 1; | 182 | | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 183 | | mc_chroma_dir(td, mc[4][b->filter][1], | 184 | | td->dst[1], td->dst[2], ls_uv, | 185 | | ref2->data[1], ref2->linesize[1], | 186 | | ref2->data[2], ref2->linesize[2], tref2, | 187 | | row << (3 - s->ss_v), col << 2, | 188 | | &uvmv,,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 189 | | } else { | 190 | | mc_chroma_dir(td, mc[4][b->filter][1], | 191 | | td->dst[1], td->dst[2], ls_uv, | 192 | | ref2->data[1], ref2->linesize[1], | 193 | | ref2->data[2], ref2->linesize[2], tref2, | 194 | | row << (3 - s->ss_v), col << 3, | 195 | | &b->mv[0][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 196 | | mc_chroma_dir(td, mc[4][b->filter][1], | 197 | | td->dst[1] + 4 * bytesperpixel, | 198 | | td->dst[2] + 4 * bytesperpixel, ls_uv, | 199 | | ref2->data[1], ref2->linesize[1], | 200 | | ref2->data[2], ref2->linesize[2], tref2, | 201 | | row << (3 - s->ss_v), (col << 3) + 4, | 202 | | &b->mv[1][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 203 | | } | 204 | | } | 205 | | } else | 206 | | #endif | 207 | 843k | { | 208 | | #if SCALED == 0 | 209 | | av_assert2(b->bs == BS_4x4); | 210 | | #endif | 211 | | | 212 | | // FIXME if two horizontally adjacent blocks have the same MV, | 213 | | // do a w8 instead of a w4 call | 214 | 843k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 215 | 843k | ref1->data[0], ref1->linesize[0], tref1, | 216 | 843k | row << 3, col << 3, &b->mv[0][0], | 217 | 843k | 0, 0, 8, 8, 4, 4, w1, h1, 0); | 218 | 843k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 219 | 843k | ref1->data[0], ref1->linesize[0], tref1, | 220 | 843k | row << 3, (col << 3) + 4, &b->mv[1][0], | 221 | 843k | 4, 0, 8, 8, 4, 4, w1, h1, 0); | 222 | 843k | mc_luma_dir(td, mc[4][b->filter][0], | 223 | 843k | td->dst[0] + 4 * ls_y, ls_y, | 224 | 843k | ref1->data[0], ref1->linesize[0], tref1, | 225 | 843k | (row << 3) + 4, col << 3, &b->mv[2][0], | 226 | 843k | 0, 4, 8, 8, 4, 4, w1, h1, 0); | 227 | 843k | mc_luma_dir(td, mc[4][b->filter][0], | 228 | 843k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 229 | 843k | ref1->data[0], ref1->linesize[0], tref1, | 230 | 843k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][0], | 231 | 843k | 4, 4, 8, 8, 4, 4, w1, h1, 0); | 232 | 843k | if (s->ss_v) { | 233 | 331k | h1 = (h1 + 1) >> 1; | 234 | 331k | if (s->ss_h) { | 235 | 68.0k | w1 = (w1 + 1) >> 1; | 236 | 68.0k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][0], b->mv[1][0], | 237 | 68.0k | b->mv[2][0], b->mv[3][0]); | 238 | 68.0k | mc_chroma_dir(td, mc[4][b->filter][0], | 239 | 68.0k | td->dst[1], td->dst[2], ls_uv, | 240 | 68.0k | ref1->data[1], ref1->linesize[1], | 241 | 68.0k | ref1->data[2], ref1->linesize[2], tref1, | 242 | 68.0k | row << 2, col << 2, | 243 | 68.0k | &uvmv, 0, 0, 4, 4, 4, 4, w1, h1, 0); | 244 | 263k | } else { | 245 | 263k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 246 | 263k | mc_chroma_dir(td, mc[4][b->filter][0], | 247 | 263k | td->dst[1], td->dst[2], ls_uv, | 248 | 263k | ref1->data[1], ref1->linesize[1], | 249 | 263k | ref1->data[2], ref1->linesize[2], tref1, | 250 | 263k | row << 2, col << 3, | 251 | 263k | &uvmv, 0, 0, 8, 4, 4, 4, w1, h1, 0); | 252 | 263k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[3][0]); | 253 | 263k | mc_chroma_dir(td, mc[4][b->filter][0], | 254 | 263k | td->dst[1] + 4 * bytesperpixel, | 255 | 263k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 256 | 263k | ref1->data[1], ref1->linesize[1], | 257 | 263k | ref1->data[2], ref1->linesize[2], tref1, | 258 | 263k | row << 2, (col << 3) + 4, | 259 | 263k | &uvmv, 4, 0, 8, 4, 4, 4, w1, h1, 0); | 260 | 263k | } | 261 | 511k | } else { | 262 | 511k | if (s->ss_h) { | 263 | 60.3k | w1 = (w1 + 1) >> 1; | 264 | 60.3k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 265 | 60.3k | mc_chroma_dir(td, mc[4][b->filter][0], | 266 | 60.3k | td->dst[1], td->dst[2], ls_uv, | 267 | 60.3k | ref1->data[1], ref1->linesize[1], | 268 | 60.3k | ref1->data[2], ref1->linesize[2], tref1, | 269 | 60.3k | row << 3, col << 2, | 270 | 60.3k | &uvmv, 0, 0, 4, 8, 4, 4, w1, h1, 0); | 271 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 272 | | // bottom block | 273 | | // https://code.google.com/p/webm/issues/detail?id=993 | 274 | 60.3k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[2][0]); | 275 | 60.3k | mc_chroma_dir(td, mc[4][b->filter][0], | 276 | 60.3k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 277 | 60.3k | ref1->data[1], ref1->linesize[1], | 278 | 60.3k | ref1->data[2], ref1->linesize[2], tref1, | 279 | 60.3k | (row << 3) + 4, col << 2, | 280 | 60.3k | &uvmv, 0, 4, 4, 8, 4, 4, w1, h1, 0); | 281 | 451k | } else { | 282 | 451k | mc_chroma_dir(td, mc[4][b->filter][0], | 283 | 451k | td->dst[1], td->dst[2], ls_uv, | 284 | 451k | ref1->data[1], ref1->linesize[1], | 285 | 451k | ref1->data[2], ref1->linesize[2], tref1, | 286 | 451k | row << 3, col << 3, | 287 | 451k | &b->mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0); | 288 | 451k | mc_chroma_dir(td, mc[4][b->filter][0], | 289 | 451k | td->dst[1] + 4 * bytesperpixel, | 290 | 451k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 291 | 451k | ref1->data[1], ref1->linesize[1], | 292 | 451k | ref1->data[2], ref1->linesize[2], tref1, | 293 | 451k | row << 3, (col << 3) + 4, | 294 | 451k | &b->mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0); | 295 | 451k | mc_chroma_dir(td, mc[4][b->filter][0], | 296 | 451k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 297 | 451k | ref1->data[1], ref1->linesize[1], | 298 | 451k | ref1->data[2], ref1->linesize[2], tref1, | 299 | 451k | (row << 3) + 4, col << 3, | 300 | 451k | &b->mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0); | 301 | 451k | mc_chroma_dir(td, mc[4][b->filter][0], | 302 | 451k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 303 | 451k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 304 | 451k | ref1->data[1], ref1->linesize[1], | 305 | 451k | ref1->data[2], ref1->linesize[2], tref1, | 306 | 451k | (row << 3) + 4, (col << 3) + 4, | 307 | 451k | &b->mv[3][0], 4, 4, 8, 8, 4, 4, w1, h1, 0); | 308 | 451k | } | 309 | 511k | } | 310 | | | 311 | 843k | if (b->comp) { | 312 | 733k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 313 | 733k | ref2->data[0], ref2->linesize[0], tref2, | 314 | 733k | row << 3, col << 3, &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 315 | 733k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 316 | 733k | ref2->data[0], ref2->linesize[0], tref2, | 317 | 733k | row << 3, (col << 3) + 4, &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 318 | 733k | mc_luma_dir(td, mc[4][b->filter][1], | 319 | 733k | td->dst[0] + 4 * ls_y, ls_y, | 320 | 733k | ref2->data[0], ref2->linesize[0], tref2, | 321 | 733k | (row << 3) + 4, col << 3, &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 322 | 733k | mc_luma_dir(td, mc[4][b->filter][1], | 323 | 733k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 324 | 733k | ref2->data[0], ref2->linesize[0], tref2, | 325 | 733k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 326 | 733k | if (s->ss_v) { | 327 | 294k | h2 = (h2 + 1) >> 1; | 328 | 294k | if (s->ss_h) { | 329 | 56.5k | w2 = (w2 + 1) >> 1; | 330 | 56.5k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][1], b->mv[1][1], | 331 | 56.5k | b->mv[2][1], b->mv[3][1]); | 332 | 56.5k | mc_chroma_dir(td, mc[4][b->filter][1], | 333 | 56.5k | td->dst[1], td->dst[2], ls_uv, | 334 | 56.5k | ref2->data[1], ref2->linesize[1], | 335 | 56.5k | ref2->data[2], ref2->linesize[2], tref2, | 336 | 56.5k | row << 2, col << 2, | 337 | 56.5k | &uvmv, 0, 0, 4, 4, 4, 4, w2, h2, 1); | 338 | 238k | } else { | 339 | 238k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 340 | 238k | mc_chroma_dir(td, mc[4][b->filter][1], | 341 | 238k | td->dst[1], td->dst[2], ls_uv, | 342 | 238k | ref2->data[1], ref2->linesize[1], | 343 | 238k | ref2->data[2], ref2->linesize[2], tref2, | 344 | 238k | row << 2, col << 3, | 345 | 238k | &uvmv, 0, 0, 8, 4, 4, 4, w2, h2, 1); | 346 | 238k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[3][1]); | 347 | 238k | mc_chroma_dir(td, mc[4][b->filter][1], | 348 | 238k | td->dst[1] + 4 * bytesperpixel, | 349 | 238k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 350 | 238k | ref2->data[1], ref2->linesize[1], | 351 | 238k | ref2->data[2], ref2->linesize[2], tref2, | 352 | 238k | row << 2, (col << 3) + 4, | 353 | 238k | &uvmv, 4, 0, 8, 4, 4, 4, w2, h2, 1); | 354 | 238k | } | 355 | 438k | } else { | 356 | 438k | if (s->ss_h) { | 357 | 42.7k | w2 = (w2 + 1) >> 1; | 358 | 42.7k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 359 | 42.7k | mc_chroma_dir(td, mc[4][b->filter][1], | 360 | 42.7k | td->dst[1], td->dst[2], ls_uv, | 361 | 42.7k | ref2->data[1], ref2->linesize[1], | 362 | 42.7k | ref2->data[2], ref2->linesize[2], tref2, | 363 | 42.7k | row << 3, col << 2, | 364 | 42.7k | &uvmv, 0, 0, 4, 8, 4, 4, w2, h2, 1); | 365 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 366 | | // bottom block | 367 | | // https://code.google.com/p/webm/issues/detail?id=993 | 368 | 42.7k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[2][1]); | 369 | 42.7k | mc_chroma_dir(td, mc[4][b->filter][1], | 370 | 42.7k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 371 | 42.7k | ref2->data[1], ref2->linesize[1], | 372 | 42.7k | ref2->data[2], ref2->linesize[2], tref2, | 373 | 42.7k | (row << 3) + 4, col << 2, | 374 | 42.7k | &uvmv, 0, 4, 4, 8, 4, 4, w2, h2, 1); | 375 | 395k | } else { | 376 | 395k | mc_chroma_dir(td, mc[4][b->filter][1], | 377 | 395k | td->dst[1], td->dst[2], ls_uv, | 378 | 395k | ref2->data[1], ref2->linesize[1], | 379 | 395k | ref2->data[2], ref2->linesize[2], tref2, | 380 | 395k | row << 3, col << 3, | 381 | 395k | &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 382 | 395k | mc_chroma_dir(td, mc[4][b->filter][1], | 383 | 395k | td->dst[1] + 4 * bytesperpixel, | 384 | 395k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 385 | 395k | ref2->data[1], ref2->linesize[1], | 386 | 395k | ref2->data[2], ref2->linesize[2], tref2, | 387 | 395k | row << 3, (col << 3) + 4, | 388 | 395k | &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 389 | 395k | mc_chroma_dir(td, mc[4][b->filter][1], | 390 | 395k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 391 | 395k | ref2->data[1], ref2->linesize[1], | 392 | 395k | ref2->data[2], ref2->linesize[2], tref2, | 393 | 395k | (row << 3) + 4, col << 3, | 394 | 395k | &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 395 | 395k | mc_chroma_dir(td, mc[4][b->filter][1], | 396 | 395k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 397 | 395k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 398 | 395k | ref2->data[1], ref2->linesize[1], | 399 | 395k | ref2->data[2], ref2->linesize[2], tref2, | 400 | 395k | (row << 3) + 4, (col << 3) + 4, | 401 | 395k | &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 402 | 395k | } | 403 | 438k | } | 404 | 733k | } | 405 | 843k | } | 406 | 1.89M | } else { | 407 | 1.89M | int bwl = bwlog_tab[0][b->bs]; | 408 | 1.89M | int bw = ff_vp9_bwh_tab[0][b->bs][0] * 4; | 409 | 1.89M | int bh = ff_vp9_bwh_tab[0][b->bs][1] * 4; | 410 | 1.89M | int uvbw = ff_vp9_bwh_tab[s->ss_h][b->bs][0] * 4; | 411 | 1.89M | int uvbh = ff_vp9_bwh_tab[s->ss_v][b->bs][1] * 4; | 412 | | | 413 | 1.89M | mc_luma_dir(td, mc[bwl][b->filter][0], td->dst[0], ls_y, | 414 | 1.89M | ref1->data[0], ref1->linesize[0], tref1, | 415 | 1.89M | row << 3, col << 3, &b->mv[0][0], 0, 0, bw, bh, bw, bh, w1, h1, 0); | 416 | 1.89M | w1 = (w1 + s->ss_h) >> s->ss_h; | 417 | 1.89M | h1 = (h1 + s->ss_v) >> s->ss_v; | 418 | 1.89M | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][0], | 419 | 1.89M | td->dst[1], td->dst[2], ls_uv, | 420 | 1.89M | ref1->data[1], ref1->linesize[1], | 421 | 1.89M | ref1->data[2], ref1->linesize[2], tref1, | 422 | 1.89M | row << (3 - s->ss_v), col << (3 - s->ss_h), | 423 | 1.89M | &b->mv[0][0], 0, 0, uvbw, uvbh, uvbw, uvbh, w1, h1, 0); | 424 | | | 425 | 1.89M | if (b->comp) { | 426 | 1.43M | mc_luma_dir(td, mc[bwl][b->filter][1], td->dst[0], ls_y, | 427 | 1.43M | ref2->data[0], ref2->linesize[0], tref2, | 428 | 1.43M | row << 3, col << 3, &b->mv[0][1], 0, 0, bw, bh, bw, bh, w2, h2, 1); | 429 | 1.43M | w2 = (w2 + s->ss_h) >> s->ss_h; | 430 | 1.43M | h2 = (h2 + s->ss_v) >> s->ss_v; | 431 | 1.43M | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][1], | 432 | 1.43M | td->dst[1], td->dst[2], ls_uv, | 433 | 1.43M | ref2->data[1], ref2->linesize[1], | 434 | 1.43M | ref2->data[2], ref2->linesize[2], tref2, | 435 | 1.43M | row << (3 - s->ss_v), col << (3 - s->ss_h), | 436 | 1.43M | &b->mv[0][1], 0, 0, uvbw, uvbh, uvbw, uvbh, w2, h2, 1); | 437 | 1.43M | } | 438 | 1.89M | } | 439 | 2.73M | } |
vp9recon.c:inter_pred_8bpp Line | Count | Source | 31 | 2.24M | { | 32 | 2.24M | static const uint8_t bwlog_tab[2][N_BS_SIZES] = { | 33 | 2.24M | { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, | 34 | 2.24M | { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, | 35 | 2.24M | }; | 36 | 2.24M | const VP9Context *s = td->s; | 37 | 2.24M | VP9Block *b = td->b; | 38 | 2.24M | int row = td->row, col = td->col; | 39 | 2.24M | const ProgressFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; | 40 | 2.24M | const AVFrame *ref1 = tref1->f, *ref2; | 41 | 2.24M | int w1 = ref1->width, h1 = ref1->height, w2, h2; | 42 | 2.24M | ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; | 43 | 2.24M | int bytesperpixel = BYTES_PER_PIXEL; | 44 | | | 45 | 2.24M | if (b->comp) { | 46 | 833k | tref2 = &s->s.refs[s->s.h.refidx[b->ref[1]]]; | 47 | 833k | ref2 = tref2->f; | 48 | 833k | w2 = ref2->width; | 49 | 833k | h2 = ref2->height; | 50 | 833k | } | 51 | | | 52 | | // y inter pred | 53 | 2.24M | if (b->bs > BS_8x8) { | 54 | 614k | VP9mv uvmv; | 55 | | | 56 | 614k | #if SCALED == 0 | 57 | 614k | if (b->bs == BS_8x4) { | 58 | 207k | mc_luma_dir(td, mc[3][b->filter][0], td->dst[0], ls_y, | 59 | 207k | ref1->data[0], ref1->linesize[0], tref1, | 60 | 207k | row << 3, col << 3, &b->mv[0][0],,,,, 8, 4, w1, h1, 0); | 61 | 207k | mc_luma_dir(td, mc[3][b->filter][0], | 62 | 207k | td->dst[0] + 4 * ls_y, ls_y, | 63 | 207k | ref1->data[0], ref1->linesize[0], tref1, | 64 | 207k | (row << 3) + 4, col << 3, &b->mv[2][0],,,,, 8, 4, w1, h1, 0); | 65 | 207k | w1 = (w1 + s->ss_h) >> s->ss_h; | 66 | 207k | if (s->ss_v) { | 67 | 86.7k | h1 = (h1 + 1) >> 1; | 68 | 86.7k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 69 | 86.7k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 70 | 86.7k | td->dst[1], td->dst[2], ls_uv, | 71 | 86.7k | ref1->data[1], ref1->linesize[1], | 72 | 86.7k | ref1->data[2], ref1->linesize[2], tref1, | 73 | 86.7k | row << 2, col << (3 - s->ss_h), | 74 | 86.7k | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 75 | 120k | } else { | 76 | 120k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 77 | 120k | td->dst[1], td->dst[2], ls_uv, | 78 | 120k | ref1->data[1], ref1->linesize[1], | 79 | 120k | ref1->data[2], ref1->linesize[2], tref1, | 80 | 120k | row << 3, col << (3 - s->ss_h), | 81 | 120k | &b->mv[0][0],,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 82 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 83 | | // to get the motion vector for the bottom 4x4 block | 84 | | // https://code.google.com/p/webm/issues/detail?id=993 | 85 | 120k | if (s->ss_h == 0) { | 86 | 56.4k | uvmv = b->mv[2][0]; | 87 | 64.5k | } else { | 88 | 64.5k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 89 | 64.5k | } | 90 | 120k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 91 | 120k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 92 | 120k | ref1->data[1], ref1->linesize[1], | 93 | 120k | ref1->data[2], ref1->linesize[2], tref1, | 94 | 120k | (row << 3) + 4, col << (3 - s->ss_h), | 95 | 120k | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 96 | 120k | } | 97 | | | 98 | 207k | if (b->comp) { | 99 | 80.9k | mc_luma_dir(td, mc[3][b->filter][1], td->dst[0], ls_y, | 100 | 80.9k | ref2->data[0], ref2->linesize[0], tref2, | 101 | 80.9k | row << 3, col << 3, &b->mv[0][1],,,,, 8, 4, w2, h2, 1); | 102 | 80.9k | mc_luma_dir(td, mc[3][b->filter][1], | 103 | 80.9k | td->dst[0] + 4 * ls_y, ls_y, | 104 | 80.9k | ref2->data[0], ref2->linesize[0], tref2, | 105 | 80.9k | (row << 3) + 4, col << 3, &b->mv[2][1],,,,, 8, 4, w2, h2, 1); | 106 | 80.9k | w2 = (w2 + s->ss_h) >> s->ss_h; | 107 | 80.9k | if (s->ss_v) { | 108 | 43.9k | h2 = (h2 + 1) >> 1; | 109 | 43.9k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 110 | 43.9k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 111 | 43.9k | td->dst[1], td->dst[2], ls_uv, | 112 | 43.9k | ref2->data[1], ref2->linesize[1], | 113 | 43.9k | ref2->data[2], ref2->linesize[2], tref2, | 114 | 43.9k | row << 2, col << (3 - s->ss_h), | 115 | 43.9k | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 116 | 43.9k | } else { | 117 | 37.0k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 118 | 37.0k | td->dst[1], td->dst[2], ls_uv, | 119 | 37.0k | ref2->data[1], ref2->linesize[1], | 120 | 37.0k | ref2->data[2], ref2->linesize[2], tref2, | 121 | 37.0k | row << 3, col << (3 - s->ss_h), | 122 | 37.0k | &b->mv[0][1],,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 123 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 124 | | // to get the motion vector for the bottom 4x4 block | 125 | | // https://code.google.com/p/webm/issues/detail?id=993 | 126 | 37.0k | if (s->ss_h == 0) { | 127 | 27.3k | uvmv = b->mv[2][1]; | 128 | 27.3k | } else { | 129 | 9.68k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 130 | 9.68k | } | 131 | 37.0k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 132 | 37.0k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 133 | 37.0k | ref2->data[1], ref2->linesize[1], | 134 | 37.0k | ref2->data[2], ref2->linesize[2], tref2, | 135 | 37.0k | (row << 3) + 4, col << (3 - s->ss_h), | 136 | 37.0k | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 137 | 37.0k | } | 138 | 80.9k | } | 139 | 406k | } else if (b->bs == BS_4x8) { | 140 | 173k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 141 | 173k | ref1->data[0], ref1->linesize[0], tref1, | 142 | 173k | row << 3, col << 3, &b->mv[0][0],,,,, 4, 8, w1, h1, 0); | 143 | 173k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 144 | 173k | ref1->data[0], ref1->linesize[0], tref1, | 145 | 173k | row << 3, (col << 3) + 4, &b->mv[1][0],,,,, 4, 8, w1, h1, 0); | 146 | 173k | h1 = (h1 + s->ss_v) >> s->ss_v; | 147 | 173k | if (s->ss_h) { | 148 | 106k | w1 = (w1 + 1) >> 1; | 149 | 106k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 150 | 106k | mc_chroma_dir(td, mc[4][b->filter][0], | 151 | 106k | td->dst[1], td->dst[2], ls_uv, | 152 | 106k | ref1->data[1], ref1->linesize[1], | 153 | 106k | ref1->data[2], ref1->linesize[2], tref1, | 154 | 106k | row << (3 - s->ss_v), col << 2, | 155 | 106k | &uvmv,,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 156 | 106k | } else { | 157 | 67.3k | mc_chroma_dir(td, mc[4][b->filter][0], | 158 | 67.3k | td->dst[1], td->dst[2], ls_uv, | 159 | 67.3k | ref1->data[1], ref1->linesize[1], | 160 | 67.3k | ref1->data[2], ref1->linesize[2], tref1, | 161 | 67.3k | row << (3 - s->ss_v), col << 3, | 162 | 67.3k | &b->mv[0][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 163 | 67.3k | mc_chroma_dir(td, mc[4][b->filter][0], | 164 | 67.3k | td->dst[1] + 4 * bytesperpixel, | 165 | 67.3k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 166 | 67.3k | ref1->data[1], ref1->linesize[1], | 167 | 67.3k | ref1->data[2], ref1->linesize[2], tref1, | 168 | 67.3k | row << (3 - s->ss_v), (col << 3) + 4, | 169 | 67.3k | &b->mv[1][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 170 | 67.3k | } | 171 | | | 172 | 173k | if (b->comp) { | 173 | 61.4k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 174 | 61.4k | ref2->data[0], ref2->linesize[0], tref2, | 175 | 61.4k | row << 3, col << 3, &b->mv[0][1],,,,, 4, 8, w2, h2, 1); | 176 | 61.4k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 177 | 61.4k | ref2->data[0], ref2->linesize[0], tref2, | 178 | 61.4k | row << 3, (col << 3) + 4, &b->mv[1][1],,,,, 4, 8, w2, h2, 1); | 179 | 61.4k | h2 = (h2 + s->ss_v) >> s->ss_v; | 180 | 61.4k | if (s->ss_h) { | 181 | 32.0k | w2 = (w2 + 1) >> 1; | 182 | 32.0k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 183 | 32.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 184 | 32.0k | td->dst[1], td->dst[2], ls_uv, | 185 | 32.0k | ref2->data[1], ref2->linesize[1], | 186 | 32.0k | ref2->data[2], ref2->linesize[2], tref2, | 187 | 32.0k | row << (3 - s->ss_v), col << 2, | 188 | 32.0k | &uvmv,,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 189 | 32.0k | } else { | 190 | 29.3k | mc_chroma_dir(td, mc[4][b->filter][1], | 191 | 29.3k | td->dst[1], td->dst[2], ls_uv, | 192 | 29.3k | ref2->data[1], ref2->linesize[1], | 193 | 29.3k | ref2->data[2], ref2->linesize[2], tref2, | 194 | 29.3k | row << (3 - s->ss_v), col << 3, | 195 | 29.3k | &b->mv[0][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 196 | 29.3k | mc_chroma_dir(td, mc[4][b->filter][1], | 197 | 29.3k | td->dst[1] + 4 * bytesperpixel, | 198 | 29.3k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 199 | 29.3k | ref2->data[1], ref2->linesize[1], | 200 | 29.3k | ref2->data[2], ref2->linesize[2], tref2, | 201 | 29.3k | row << (3 - s->ss_v), (col << 3) + 4, | 202 | 29.3k | &b->mv[1][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 203 | 29.3k | } | 204 | 61.4k | } | 205 | 173k | } else | 206 | 232k | #endif | 207 | 232k | { | 208 | 232k | #if SCALED == 0 | 209 | 232k | av_assert2(b->bs == BS_4x4); | 210 | 232k | #endif | 211 | | | 212 | | // FIXME if two horizontally adjacent blocks have the same MV, | 213 | | // do a w8 instead of a w4 call | 214 | 232k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 215 | 232k | ref1->data[0], ref1->linesize[0], tref1, | 216 | 232k | row << 3, col << 3, &b->mv[0][0], | 217 | 232k | 0, 0, 8, 8, 4, 4, w1, h1, 0); | 218 | 232k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 219 | 232k | ref1->data[0], ref1->linesize[0], tref1, | 220 | 232k | row << 3, (col << 3) + 4, &b->mv[1][0], | 221 | 232k | 4, 0, 8, 8, 4, 4, w1, h1, 0); | 222 | 232k | mc_luma_dir(td, mc[4][b->filter][0], | 223 | 232k | td->dst[0] + 4 * ls_y, ls_y, | 224 | 232k | ref1->data[0], ref1->linesize[0], tref1, | 225 | 232k | (row << 3) + 4, col << 3, &b->mv[2][0], | 226 | 232k | 0, 4, 8, 8, 4, 4, w1, h1, 0); | 227 | 232k | mc_luma_dir(td, mc[4][b->filter][0], | 228 | 232k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 229 | 232k | ref1->data[0], ref1->linesize[0], tref1, | 230 | 232k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][0], | 231 | 232k | 4, 4, 8, 8, 4, 4, w1, h1, 0); | 232 | 232k | if (s->ss_v) { | 233 | 79.3k | h1 = (h1 + 1) >> 1; | 234 | 79.3k | if (s->ss_h) { | 235 | 37.9k | w1 = (w1 + 1) >> 1; | 236 | 37.9k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][0], b->mv[1][0], | 237 | 37.9k | b->mv[2][0], b->mv[3][0]); | 238 | 37.9k | mc_chroma_dir(td, mc[4][b->filter][0], | 239 | 37.9k | td->dst[1], td->dst[2], ls_uv, | 240 | 37.9k | ref1->data[1], ref1->linesize[1], | 241 | 37.9k | ref1->data[2], ref1->linesize[2], tref1, | 242 | 37.9k | row << 2, col << 2, | 243 | 37.9k | &uvmv, 0, 0, 4, 4, 4, 4, w1, h1, 0); | 244 | 41.4k | } else { | 245 | 41.4k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 246 | 41.4k | mc_chroma_dir(td, mc[4][b->filter][0], | 247 | 41.4k | td->dst[1], td->dst[2], ls_uv, | 248 | 41.4k | ref1->data[1], ref1->linesize[1], | 249 | 41.4k | ref1->data[2], ref1->linesize[2], tref1, | 250 | 41.4k | row << 2, col << 3, | 251 | 41.4k | &uvmv, 0, 0, 8, 4, 4, 4, w1, h1, 0); | 252 | 41.4k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[3][0]); | 253 | 41.4k | mc_chroma_dir(td, mc[4][b->filter][0], | 254 | 41.4k | td->dst[1] + 4 * bytesperpixel, | 255 | 41.4k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 256 | 41.4k | ref1->data[1], ref1->linesize[1], | 257 | 41.4k | ref1->data[2], ref1->linesize[2], tref1, | 258 | 41.4k | row << 2, (col << 3) + 4, | 259 | 41.4k | &uvmv, 4, 0, 8, 4, 4, 4, w1, h1, 0); | 260 | 41.4k | } | 261 | 153k | } else { | 262 | 153k | if (s->ss_h) { | 263 | 76.9k | w1 = (w1 + 1) >> 1; | 264 | 76.9k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 265 | 76.9k | mc_chroma_dir(td, mc[4][b->filter][0], | 266 | 76.9k | td->dst[1], td->dst[2], ls_uv, | 267 | 76.9k | ref1->data[1], ref1->linesize[1], | 268 | 76.9k | ref1->data[2], ref1->linesize[2], tref1, | 269 | 76.9k | row << 3, col << 2, | 270 | 76.9k | &uvmv, 0, 0, 4, 8, 4, 4, w1, h1, 0); | 271 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 272 | | // bottom block | 273 | | // https://code.google.com/p/webm/issues/detail?id=993 | 274 | 76.9k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[2][0]); | 275 | 76.9k | mc_chroma_dir(td, mc[4][b->filter][0], | 276 | 76.9k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 277 | 76.9k | ref1->data[1], ref1->linesize[1], | 278 | 76.9k | ref1->data[2], ref1->linesize[2], tref1, | 279 | 76.9k | (row << 3) + 4, col << 2, | 280 | 76.9k | &uvmv, 0, 4, 4, 8, 4, 4, w1, h1, 0); | 281 | 76.9k | } else { | 282 | 76.5k | mc_chroma_dir(td, mc[4][b->filter][0], | 283 | 76.5k | td->dst[1], td->dst[2], ls_uv, | 284 | 76.5k | ref1->data[1], ref1->linesize[1], | 285 | 76.5k | ref1->data[2], ref1->linesize[2], tref1, | 286 | 76.5k | row << 3, col << 3, | 287 | 76.5k | &b->mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0); | 288 | 76.5k | mc_chroma_dir(td, mc[4][b->filter][0], | 289 | 76.5k | td->dst[1] + 4 * bytesperpixel, | 290 | 76.5k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 291 | 76.5k | ref1->data[1], ref1->linesize[1], | 292 | 76.5k | ref1->data[2], ref1->linesize[2], tref1, | 293 | 76.5k | row << 3, (col << 3) + 4, | 294 | 76.5k | &b->mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0); | 295 | 76.5k | mc_chroma_dir(td, mc[4][b->filter][0], | 296 | 76.5k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 297 | 76.5k | ref1->data[1], ref1->linesize[1], | 298 | 76.5k | ref1->data[2], ref1->linesize[2], tref1, | 299 | 76.5k | (row << 3) + 4, col << 3, | 300 | 76.5k | &b->mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0); | 301 | 76.5k | mc_chroma_dir(td, mc[4][b->filter][0], | 302 | 76.5k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 303 | 76.5k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 304 | 76.5k | ref1->data[1], ref1->linesize[1], | 305 | 76.5k | ref1->data[2], ref1->linesize[2], tref1, | 306 | 76.5k | (row << 3) + 4, (col << 3) + 4, | 307 | 76.5k | &b->mv[3][0], 4, 4, 8, 8, 4, 4, w1, h1, 0); | 308 | 76.5k | } | 309 | 153k | } | 310 | | | 311 | 232k | if (b->comp) { | 312 | 92.5k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 313 | 92.5k | ref2->data[0], ref2->linesize[0], tref2, | 314 | 92.5k | row << 3, col << 3, &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 315 | 92.5k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 316 | 92.5k | ref2->data[0], ref2->linesize[0], tref2, | 317 | 92.5k | row << 3, (col << 3) + 4, &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 318 | 92.5k | mc_luma_dir(td, mc[4][b->filter][1], | 319 | 92.5k | td->dst[0] + 4 * ls_y, ls_y, | 320 | 92.5k | ref2->data[0], ref2->linesize[0], tref2, | 321 | 92.5k | (row << 3) + 4, col << 3, &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 322 | 92.5k | mc_luma_dir(td, mc[4][b->filter][1], | 323 | 92.5k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 324 | 92.5k | ref2->data[0], ref2->linesize[0], tref2, | 325 | 92.5k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 326 | 92.5k | if (s->ss_v) { | 327 | 38.1k | h2 = (h2 + 1) >> 1; | 328 | 38.1k | if (s->ss_h) { | 329 | 18.0k | w2 = (w2 + 1) >> 1; | 330 | 18.0k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][1], b->mv[1][1], | 331 | 18.0k | b->mv[2][1], b->mv[3][1]); | 332 | 18.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 333 | 18.0k | td->dst[1], td->dst[2], ls_uv, | 334 | 18.0k | ref2->data[1], ref2->linesize[1], | 335 | 18.0k | ref2->data[2], ref2->linesize[2], tref2, | 336 | 18.0k | row << 2, col << 2, | 337 | 18.0k | &uvmv, 0, 0, 4, 4, 4, 4, w2, h2, 1); | 338 | 20.0k | } else { | 339 | 20.0k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 340 | 20.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 341 | 20.0k | td->dst[1], td->dst[2], ls_uv, | 342 | 20.0k | ref2->data[1], ref2->linesize[1], | 343 | 20.0k | ref2->data[2], ref2->linesize[2], tref2, | 344 | 20.0k | row << 2, col << 3, | 345 | 20.0k | &uvmv, 0, 0, 8, 4, 4, 4, w2, h2, 1); | 346 | 20.0k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[3][1]); | 347 | 20.0k | mc_chroma_dir(td, mc[4][b->filter][1], | 348 | 20.0k | td->dst[1] + 4 * bytesperpixel, | 349 | 20.0k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 350 | 20.0k | ref2->data[1], ref2->linesize[1], | 351 | 20.0k | ref2->data[2], ref2->linesize[2], tref2, | 352 | 20.0k | row << 2, (col << 3) + 4, | 353 | 20.0k | &uvmv, 4, 0, 8, 4, 4, 4, w2, h2, 1); | 354 | 20.0k | } | 355 | 54.4k | } else { | 356 | 54.4k | if (s->ss_h) { | 357 | 12.6k | w2 = (w2 + 1) >> 1; | 358 | 12.6k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 359 | 12.6k | mc_chroma_dir(td, mc[4][b->filter][1], | 360 | 12.6k | td->dst[1], td->dst[2], ls_uv, | 361 | 12.6k | ref2->data[1], ref2->linesize[1], | 362 | 12.6k | ref2->data[2], ref2->linesize[2], tref2, | 363 | 12.6k | row << 3, col << 2, | 364 | 12.6k | &uvmv, 0, 0, 4, 8, 4, 4, w2, h2, 1); | 365 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 366 | | // bottom block | 367 | | // https://code.google.com/p/webm/issues/detail?id=993 | 368 | 12.6k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[2][1]); | 369 | 12.6k | mc_chroma_dir(td, mc[4][b->filter][1], | 370 | 12.6k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 371 | 12.6k | ref2->data[1], ref2->linesize[1], | 372 | 12.6k | ref2->data[2], ref2->linesize[2], tref2, | 373 | 12.6k | (row << 3) + 4, col << 2, | 374 | 12.6k | &uvmv, 0, 4, 4, 8, 4, 4, w2, h2, 1); | 375 | 41.7k | } else { | 376 | 41.7k | mc_chroma_dir(td, mc[4][b->filter][1], | 377 | 41.7k | td->dst[1], td->dst[2], ls_uv, | 378 | 41.7k | ref2->data[1], ref2->linesize[1], | 379 | 41.7k | ref2->data[2], ref2->linesize[2], tref2, | 380 | 41.7k | row << 3, col << 3, | 381 | 41.7k | &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 382 | 41.7k | mc_chroma_dir(td, mc[4][b->filter][1], | 383 | 41.7k | td->dst[1] + 4 * bytesperpixel, | 384 | 41.7k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 385 | 41.7k | ref2->data[1], ref2->linesize[1], | 386 | 41.7k | ref2->data[2], ref2->linesize[2], tref2, | 387 | 41.7k | row << 3, (col << 3) + 4, | 388 | 41.7k | &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 389 | 41.7k | mc_chroma_dir(td, mc[4][b->filter][1], | 390 | 41.7k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 391 | 41.7k | ref2->data[1], ref2->linesize[1], | 392 | 41.7k | ref2->data[2], ref2->linesize[2], tref2, | 393 | 41.7k | (row << 3) + 4, col << 3, | 394 | 41.7k | &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 395 | 41.7k | mc_chroma_dir(td, mc[4][b->filter][1], | 396 | 41.7k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 397 | 41.7k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 398 | 41.7k | ref2->data[1], ref2->linesize[1], | 399 | 41.7k | ref2->data[2], ref2->linesize[2], tref2, | 400 | 41.7k | (row << 3) + 4, (col << 3) + 4, | 401 | 41.7k | &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 402 | 41.7k | } | 403 | 54.4k | } | 404 | 92.5k | } | 405 | 232k | } | 406 | 1.63M | } else { | 407 | 1.63M | int bwl = bwlog_tab[0][b->bs]; | 408 | 1.63M | int bw = ff_vp9_bwh_tab[0][b->bs][0] * 4; | 409 | 1.63M | int bh = ff_vp9_bwh_tab[0][b->bs][1] * 4; | 410 | 1.63M | int uvbw = ff_vp9_bwh_tab[s->ss_h][b->bs][0] * 4; | 411 | 1.63M | int uvbh = ff_vp9_bwh_tab[s->ss_v][b->bs][1] * 4; | 412 | | | 413 | 1.63M | mc_luma_dir(td, mc[bwl][b->filter][0], td->dst[0], ls_y, | 414 | 1.63M | ref1->data[0], ref1->linesize[0], tref1, | 415 | 1.63M | row << 3, col << 3, &b->mv[0][0], 0, 0, bw, bh, bw, bh, w1, h1, 0); | 416 | 1.63M | w1 = (w1 + s->ss_h) >> s->ss_h; | 417 | 1.63M | h1 = (h1 + s->ss_v) >> s->ss_v; | 418 | 1.63M | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][0], | 419 | 1.63M | td->dst[1], td->dst[2], ls_uv, | 420 | 1.63M | ref1->data[1], ref1->linesize[1], | 421 | 1.63M | ref1->data[2], ref1->linesize[2], tref1, | 422 | 1.63M | row << (3 - s->ss_v), col << (3 - s->ss_h), | 423 | 1.63M | &b->mv[0][0], 0, 0, uvbw, uvbh, uvbw, uvbh, w1, h1, 0); | 424 | | | 425 | 1.63M | if (b->comp) { | 426 | 598k | mc_luma_dir(td, mc[bwl][b->filter][1], td->dst[0], ls_y, | 427 | 598k | ref2->data[0], ref2->linesize[0], tref2, | 428 | 598k | row << 3, col << 3, &b->mv[0][1], 0, 0, bw, bh, bw, bh, w2, h2, 1); | 429 | 598k | w2 = (w2 + s->ss_h) >> s->ss_h; | 430 | 598k | h2 = (h2 + s->ss_v) >> s->ss_v; | 431 | 598k | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][1], | 432 | 598k | td->dst[1], td->dst[2], ls_uv, | 433 | 598k | ref2->data[1], ref2->linesize[1], | 434 | 598k | ref2->data[2], ref2->linesize[2], tref2, | 435 | 598k | row << (3 - s->ss_v), col << (3 - s->ss_h), | 436 | 598k | &b->mv[0][1], 0, 0, uvbw, uvbh, uvbw, uvbh, w2, h2, 1); | 437 | 598k | } | 438 | 1.63M | } | 439 | 2.24M | } |
vp9recon.c:inter_pred_16bpp Line | Count | Source | 31 | 6.61M | { | 32 | 6.61M | static const uint8_t bwlog_tab[2][N_BS_SIZES] = { | 33 | 6.61M | { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, | 34 | 6.61M | { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, | 35 | 6.61M | }; | 36 | 6.61M | const VP9Context *s = td->s; | 37 | 6.61M | VP9Block *b = td->b; | 38 | 6.61M | int row = td->row, col = td->col; | 39 | 6.61M | const ProgressFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; | 40 | 6.61M | const AVFrame *ref1 = tref1->f, *ref2; | 41 | 6.61M | int w1 = ref1->width, h1 = ref1->height, w2, h2; | 42 | 6.61M | ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; | 43 | 6.61M | int bytesperpixel = BYTES_PER_PIXEL; | 44 | | | 45 | 6.61M | if (b->comp) { | 46 | 4.47M | tref2 = &s->s.refs[s->s.h.refidx[b->ref[1]]]; | 47 | 4.47M | ref2 = tref2->f; | 48 | 4.47M | w2 = ref2->width; | 49 | 4.47M | h2 = ref2->height; | 50 | 4.47M | } | 51 | | | 52 | | // y inter pred | 53 | 6.61M | if (b->bs > BS_8x8) { | 54 | 2.30M | VP9mv uvmv; | 55 | | | 56 | 2.30M | #if SCALED == 0 | 57 | 2.30M | if (b->bs == BS_8x4) { | 58 | 873k | mc_luma_dir(td, mc[3][b->filter][0], td->dst[0], ls_y, | 59 | 873k | ref1->data[0], ref1->linesize[0], tref1, | 60 | 873k | row << 3, col << 3, &b->mv[0][0],,,,, 8, 4, w1, h1, 0); | 61 | 873k | mc_luma_dir(td, mc[3][b->filter][0], | 62 | 873k | td->dst[0] + 4 * ls_y, ls_y, | 63 | 873k | ref1->data[0], ref1->linesize[0], tref1, | 64 | 873k | (row << 3) + 4, col << 3, &b->mv[2][0],,,,, 8, 4, w1, h1, 0); | 65 | 873k | w1 = (w1 + s->ss_h) >> s->ss_h; | 66 | 873k | if (s->ss_v) { | 67 | 268k | h1 = (h1 + 1) >> 1; | 68 | 268k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 69 | 268k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 70 | 268k | td->dst[1], td->dst[2], ls_uv, | 71 | 268k | ref1->data[1], ref1->linesize[1], | 72 | 268k | ref1->data[2], ref1->linesize[2], tref1, | 73 | 268k | row << 2, col << (3 - s->ss_h), | 74 | 268k | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 75 | 604k | } else { | 76 | 604k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 77 | 604k | td->dst[1], td->dst[2], ls_uv, | 78 | 604k | ref1->data[1], ref1->linesize[1], | 79 | 604k | ref1->data[2], ref1->linesize[2], tref1, | 80 | 604k | row << 3, col << (3 - s->ss_h), | 81 | 604k | &b->mv[0][0],,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 82 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 83 | | // to get the motion vector for the bottom 4x4 block | 84 | | // https://code.google.com/p/webm/issues/detail?id=993 | 85 | 604k | if (s->ss_h == 0) { | 86 | 498k | uvmv = b->mv[2][0]; | 87 | 498k | } else { | 88 | 106k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 89 | 106k | } | 90 | 604k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], | 91 | 604k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 92 | 604k | ref1->data[1], ref1->linesize[1], | 93 | 604k | ref1->data[2], ref1->linesize[2], tref1, | 94 | 604k | (row << 3) + 4, col << (3 - s->ss_h), | 95 | 604k | &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); | 96 | 604k | } | 97 | | | 98 | 873k | if (b->comp) { | 99 | 576k | mc_luma_dir(td, mc[3][b->filter][1], td->dst[0], ls_y, | 100 | 576k | ref2->data[0], ref2->linesize[0], tref2, | 101 | 576k | row << 3, col << 3, &b->mv[0][1],,,,, 8, 4, w2, h2, 1); | 102 | 576k | mc_luma_dir(td, mc[3][b->filter][1], | 103 | 576k | td->dst[0] + 4 * ls_y, ls_y, | 104 | 576k | ref2->data[0], ref2->linesize[0], tref2, | 105 | 576k | (row << 3) + 4, col << 3, &b->mv[2][1],,,,, 8, 4, w2, h2, 1); | 106 | 576k | w2 = (w2 + s->ss_h) >> s->ss_h; | 107 | 576k | if (s->ss_v) { | 108 | 92.8k | h2 = (h2 + 1) >> 1; | 109 | 92.8k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 110 | 92.8k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 111 | 92.8k | td->dst[1], td->dst[2], ls_uv, | 112 | 92.8k | ref2->data[1], ref2->linesize[1], | 113 | 92.8k | ref2->data[2], ref2->linesize[2], tref2, | 114 | 92.8k | row << 2, col << (3 - s->ss_h), | 115 | 92.8k | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 116 | 483k | } else { | 117 | 483k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 118 | 483k | td->dst[1], td->dst[2], ls_uv, | 119 | 483k | ref2->data[1], ref2->linesize[1], | 120 | 483k | ref2->data[2], ref2->linesize[2], tref2, | 121 | 483k | row << 3, col << (3 - s->ss_h), | 122 | 483k | &b->mv[0][1],,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 123 | | // BUG for 4:2:2 bs=8x4, libvpx uses the wrong block index | 124 | | // to get the motion vector for the bottom 4x4 block | 125 | | // https://code.google.com/p/webm/issues/detail?id=993 | 126 | 483k | if (s->ss_h == 0) { | 127 | 435k | uvmv = b->mv[2][1]; | 128 | 435k | } else { | 129 | 48.1k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 130 | 48.1k | } | 131 | 483k | mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], | 132 | 483k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 133 | 483k | ref2->data[1], ref2->linesize[1], | 134 | 483k | ref2->data[2], ref2->linesize[2], tref2, | 135 | 483k | (row << 3) + 4, col << (3 - s->ss_h), | 136 | 483k | &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); | 137 | 483k | } | 138 | 576k | } | 139 | 1.43M | } else if (b->bs == BS_4x8) { | 140 | 479k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 141 | 479k | ref1->data[0], ref1->linesize[0], tref1, | 142 | 479k | row << 3, col << 3, &b->mv[0][0],,,,, 4, 8, w1, h1, 0); | 143 | 479k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 144 | 479k | ref1->data[0], ref1->linesize[0], tref1, | 145 | 479k | row << 3, (col << 3) + 4, &b->mv[1][0],,,,, 4, 8, w1, h1, 0); | 146 | 479k | h1 = (h1 + s->ss_v) >> s->ss_v; | 147 | 479k | if (s->ss_h) { | 148 | 96.8k | w1 = (w1 + 1) >> 1; | 149 | 96.8k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 150 | 96.8k | mc_chroma_dir(td, mc[4][b->filter][0], | 151 | 96.8k | td->dst[1], td->dst[2], ls_uv, | 152 | 96.8k | ref1->data[1], ref1->linesize[1], | 153 | 96.8k | ref1->data[2], ref1->linesize[2], tref1, | 154 | 96.8k | row << (3 - s->ss_v), col << 2, | 155 | 96.8k | &uvmv,,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 156 | 382k | } else { | 157 | 382k | mc_chroma_dir(td, mc[4][b->filter][0], | 158 | 382k | td->dst[1], td->dst[2], ls_uv, | 159 | 382k | ref1->data[1], ref1->linesize[1], | 160 | 382k | ref1->data[2], ref1->linesize[2], tref1, | 161 | 382k | row << (3 - s->ss_v), col << 3, | 162 | 382k | &b->mv[0][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 163 | 382k | mc_chroma_dir(td, mc[4][b->filter][0], | 164 | 382k | td->dst[1] + 4 * bytesperpixel, | 165 | 382k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 166 | 382k | ref1->data[1], ref1->linesize[1], | 167 | 382k | ref1->data[2], ref1->linesize[2], tref1, | 168 | 382k | row << (3 - s->ss_v), (col << 3) + 4, | 169 | 382k | &b->mv[1][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); | 170 | 382k | } | 171 | | | 172 | 479k | if (b->comp) { | 173 | 335k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 174 | 335k | ref2->data[0], ref2->linesize[0], tref2, | 175 | 335k | row << 3, col << 3, &b->mv[0][1],,,,, 4, 8, w2, h2, 1); | 176 | 335k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 177 | 335k | ref2->data[0], ref2->linesize[0], tref2, | 178 | 335k | row << 3, (col << 3) + 4, &b->mv[1][1],,,,, 4, 8, w2, h2, 1); | 179 | 335k | h2 = (h2 + s->ss_v) >> s->ss_v; | 180 | 335k | if (s->ss_h) { | 181 | 55.8k | w2 = (w2 + 1) >> 1; | 182 | 55.8k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 183 | 55.8k | mc_chroma_dir(td, mc[4][b->filter][1], | 184 | 55.8k | td->dst[1], td->dst[2], ls_uv, | 185 | 55.8k | ref2->data[1], ref2->linesize[1], | 186 | 55.8k | ref2->data[2], ref2->linesize[2], tref2, | 187 | 55.8k | row << (3 - s->ss_v), col << 2, | 188 | 55.8k | &uvmv,,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 189 | 279k | } else { | 190 | 279k | mc_chroma_dir(td, mc[4][b->filter][1], | 191 | 279k | td->dst[1], td->dst[2], ls_uv, | 192 | 279k | ref2->data[1], ref2->linesize[1], | 193 | 279k | ref2->data[2], ref2->linesize[2], tref2, | 194 | 279k | row << (3 - s->ss_v), col << 3, | 195 | 279k | &b->mv[0][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 196 | 279k | mc_chroma_dir(td, mc[4][b->filter][1], | 197 | 279k | td->dst[1] + 4 * bytesperpixel, | 198 | 279k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 199 | 279k | ref2->data[1], ref2->linesize[1], | 200 | 279k | ref2->data[2], ref2->linesize[2], tref2, | 201 | 279k | row << (3 - s->ss_v), (col << 3) + 4, | 202 | 279k | &b->mv[1][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); | 203 | 279k | } | 204 | 335k | } | 205 | 479k | } else | 206 | 953k | #endif | 207 | 953k | { | 208 | 953k | #if SCALED == 0 | 209 | 953k | av_assert2(b->bs == BS_4x4); | 210 | 953k | #endif | 211 | | | 212 | | // FIXME if two horizontally adjacent blocks have the same MV, | 213 | | // do a w8 instead of a w4 call | 214 | 953k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, | 215 | 953k | ref1->data[0], ref1->linesize[0], tref1, | 216 | 953k | row << 3, col << 3, &b->mv[0][0], | 217 | 953k | 0, 0, 8, 8, 4, 4, w1, h1, 0); | 218 | 953k | mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, | 219 | 953k | ref1->data[0], ref1->linesize[0], tref1, | 220 | 953k | row << 3, (col << 3) + 4, &b->mv[1][0], | 221 | 953k | 4, 0, 8, 8, 4, 4, w1, h1, 0); | 222 | 953k | mc_luma_dir(td, mc[4][b->filter][0], | 223 | 953k | td->dst[0] + 4 * ls_y, ls_y, | 224 | 953k | ref1->data[0], ref1->linesize[0], tref1, | 225 | 953k | (row << 3) + 4, col << 3, &b->mv[2][0], | 226 | 953k | 0, 4, 8, 8, 4, 4, w1, h1, 0); | 227 | 953k | mc_luma_dir(td, mc[4][b->filter][0], | 228 | 953k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 229 | 953k | ref1->data[0], ref1->linesize[0], tref1, | 230 | 953k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][0], | 231 | 953k | 4, 4, 8, 8, 4, 4, w1, h1, 0); | 232 | 953k | if (s->ss_v) { | 233 | 250k | h1 = (h1 + 1) >> 1; | 234 | 250k | if (s->ss_h) { | 235 | 92.2k | w1 = (w1 + 1) >> 1; | 236 | 92.2k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][0], b->mv[1][0], | 237 | 92.2k | b->mv[2][0], b->mv[3][0]); | 238 | 92.2k | mc_chroma_dir(td, mc[4][b->filter][0], | 239 | 92.2k | td->dst[1], td->dst[2], ls_uv, | 240 | 92.2k | ref1->data[1], ref1->linesize[1], | 241 | 92.2k | ref1->data[2], ref1->linesize[2], tref1, | 242 | 92.2k | row << 2, col << 2, | 243 | 92.2k | &uvmv, 0, 0, 4, 4, 4, 4, w1, h1, 0); | 244 | 158k | } else { | 245 | 158k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); | 246 | 158k | mc_chroma_dir(td, mc[4][b->filter][0], | 247 | 158k | td->dst[1], td->dst[2], ls_uv, | 248 | 158k | ref1->data[1], ref1->linesize[1], | 249 | 158k | ref1->data[2], ref1->linesize[2], tref1, | 250 | 158k | row << 2, col << 3, | 251 | 158k | &uvmv, 0, 0, 8, 4, 4, 4, w1, h1, 0); | 252 | 158k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[3][0]); | 253 | 158k | mc_chroma_dir(td, mc[4][b->filter][0], | 254 | 158k | td->dst[1] + 4 * bytesperpixel, | 255 | 158k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 256 | 158k | ref1->data[1], ref1->linesize[1], | 257 | 158k | ref1->data[2], ref1->linesize[2], tref1, | 258 | 158k | row << 2, (col << 3) + 4, | 259 | 158k | &uvmv, 4, 0, 8, 4, 4, 4, w1, h1, 0); | 260 | 158k | } | 261 | 702k | } else { | 262 | 702k | if (s->ss_h) { | 263 | 67.0k | w1 = (w1 + 1) >> 1; | 264 | 67.0k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); | 265 | 67.0k | mc_chroma_dir(td, mc[4][b->filter][0], | 266 | 67.0k | td->dst[1], td->dst[2], ls_uv, | 267 | 67.0k | ref1->data[1], ref1->linesize[1], | 268 | 67.0k | ref1->data[2], ref1->linesize[2], tref1, | 269 | 67.0k | row << 3, col << 2, | 270 | 67.0k | &uvmv, 0, 0, 4, 8, 4, 4, w1, h1, 0); | 271 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 272 | | // bottom block | 273 | | // https://code.google.com/p/webm/issues/detail?id=993 | 274 | 67.0k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[2][0]); | 275 | 67.0k | mc_chroma_dir(td, mc[4][b->filter][0], | 276 | 67.0k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 277 | 67.0k | ref1->data[1], ref1->linesize[1], | 278 | 67.0k | ref1->data[2], ref1->linesize[2], tref1, | 279 | 67.0k | (row << 3) + 4, col << 2, | 280 | 67.0k | &uvmv, 0, 4, 4, 8, 4, 4, w1, h1, 0); | 281 | 635k | } else { | 282 | 635k | mc_chroma_dir(td, mc[4][b->filter][0], | 283 | 635k | td->dst[1], td->dst[2], ls_uv, | 284 | 635k | ref1->data[1], ref1->linesize[1], | 285 | 635k | ref1->data[2], ref1->linesize[2], tref1, | 286 | 635k | row << 3, col << 3, | 287 | 635k | &b->mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0); | 288 | 635k | mc_chroma_dir(td, mc[4][b->filter][0], | 289 | 635k | td->dst[1] + 4 * bytesperpixel, | 290 | 635k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 291 | 635k | ref1->data[1], ref1->linesize[1], | 292 | 635k | ref1->data[2], ref1->linesize[2], tref1, | 293 | 635k | row << 3, (col << 3) + 4, | 294 | 635k | &b->mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0); | 295 | 635k | mc_chroma_dir(td, mc[4][b->filter][0], | 296 | 635k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 297 | 635k | ref1->data[1], ref1->linesize[1], | 298 | 635k | ref1->data[2], ref1->linesize[2], tref1, | 299 | 635k | (row << 3) + 4, col << 3, | 300 | 635k | &b->mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0); | 301 | 635k | mc_chroma_dir(td, mc[4][b->filter][0], | 302 | 635k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 303 | 635k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 304 | 635k | ref1->data[1], ref1->linesize[1], | 305 | 635k | ref1->data[2], ref1->linesize[2], tref1, | 306 | 635k | (row << 3) + 4, (col << 3) + 4, | 307 | 635k | &b->mv[3][0], 4, 4, 8, 8, 4, 4, w1, h1, 0); | 308 | 635k | } | 309 | 702k | } | 310 | | | 311 | 953k | if (b->comp) { | 312 | 723k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, | 313 | 723k | ref2->data[0], ref2->linesize[0], tref2, | 314 | 723k | row << 3, col << 3, &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 315 | 723k | mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, | 316 | 723k | ref2->data[0], ref2->linesize[0], tref2, | 317 | 723k | row << 3, (col << 3) + 4, &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 318 | 723k | mc_luma_dir(td, mc[4][b->filter][1], | 319 | 723k | td->dst[0] + 4 * ls_y, ls_y, | 320 | 723k | ref2->data[0], ref2->linesize[0], tref2, | 321 | 723k | (row << 3) + 4, col << 3, &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 322 | 723k | mc_luma_dir(td, mc[4][b->filter][1], | 323 | 723k | td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, | 324 | 723k | ref2->data[0], ref2->linesize[0], tref2, | 325 | 723k | (row << 3) + 4, (col << 3) + 4, &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 326 | 723k | if (s->ss_v) { | 327 | 123k | h2 = (h2 + 1) >> 1; | 328 | 123k | if (s->ss_h) { | 329 | 78.1k | w2 = (w2 + 1) >> 1; | 330 | 78.1k | uvmv = ROUNDED_DIV_MVx4(b->mv[0][1], b->mv[1][1], | 331 | 78.1k | b->mv[2][1], b->mv[3][1]); | 332 | 78.1k | mc_chroma_dir(td, mc[4][b->filter][1], | 333 | 78.1k | td->dst[1], td->dst[2], ls_uv, | 334 | 78.1k | ref2->data[1], ref2->linesize[1], | 335 | 78.1k | ref2->data[2], ref2->linesize[2], tref2, | 336 | 78.1k | row << 2, col << 2, | 337 | 78.1k | &uvmv, 0, 0, 4, 4, 4, 4, w2, h2, 1); | 338 | 78.1k | } else { | 339 | 45.3k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); | 340 | 45.3k | mc_chroma_dir(td, mc[4][b->filter][1], | 341 | 45.3k | td->dst[1], td->dst[2], ls_uv, | 342 | 45.3k | ref2->data[1], ref2->linesize[1], | 343 | 45.3k | ref2->data[2], ref2->linesize[2], tref2, | 344 | 45.3k | row << 2, col << 3, | 345 | 45.3k | &uvmv, 0, 0, 8, 4, 4, 4, w2, h2, 1); | 346 | 45.3k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[3][1]); | 347 | 45.3k | mc_chroma_dir(td, mc[4][b->filter][1], | 348 | 45.3k | td->dst[1] + 4 * bytesperpixel, | 349 | 45.3k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 350 | 45.3k | ref2->data[1], ref2->linesize[1], | 351 | 45.3k | ref2->data[2], ref2->linesize[2], tref2, | 352 | 45.3k | row << 2, (col << 3) + 4, | 353 | 45.3k | &uvmv, 4, 0, 8, 4, 4, 4, w2, h2, 1); | 354 | 45.3k | } | 355 | 600k | } else { | 356 | 600k | if (s->ss_h) { | 357 | 37.5k | w2 = (w2 + 1) >> 1; | 358 | 37.5k | uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); | 359 | 37.5k | mc_chroma_dir(td, mc[4][b->filter][1], | 360 | 37.5k | td->dst[1], td->dst[2], ls_uv, | 361 | 37.5k | ref2->data[1], ref2->linesize[1], | 362 | 37.5k | ref2->data[2], ref2->linesize[2], tref2, | 363 | 37.5k | row << 3, col << 2, | 364 | 37.5k | &uvmv, 0, 0, 4, 8, 4, 4, w2, h2, 1); | 365 | | // BUG libvpx uses wrong block index for 4:2:2 bs=4x4 | 366 | | // bottom block | 367 | | // https://code.google.com/p/webm/issues/detail?id=993 | 368 | 37.5k | uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[2][1]); | 369 | 37.5k | mc_chroma_dir(td, mc[4][b->filter][1], | 370 | 37.5k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 371 | 37.5k | ref2->data[1], ref2->linesize[1], | 372 | 37.5k | ref2->data[2], ref2->linesize[2], tref2, | 373 | 37.5k | (row << 3) + 4, col << 2, | 374 | 37.5k | &uvmv, 0, 4, 4, 8, 4, 4, w2, h2, 1); | 375 | 562k | } else { | 376 | 562k | mc_chroma_dir(td, mc[4][b->filter][1], | 377 | 562k | td->dst[1], td->dst[2], ls_uv, | 378 | 562k | ref2->data[1], ref2->linesize[1], | 379 | 562k | ref2->data[2], ref2->linesize[2], tref2, | 380 | 562k | row << 3, col << 3, | 381 | 562k | &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); | 382 | 562k | mc_chroma_dir(td, mc[4][b->filter][1], | 383 | 562k | td->dst[1] + 4 * bytesperpixel, | 384 | 562k | td->dst[2] + 4 * bytesperpixel, ls_uv, | 385 | 562k | ref2->data[1], ref2->linesize[1], | 386 | 562k | ref2->data[2], ref2->linesize[2], tref2, | 387 | 562k | row << 3, (col << 3) + 4, | 388 | 562k | &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); | 389 | 562k | mc_chroma_dir(td, mc[4][b->filter][1], | 390 | 562k | td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, | 391 | 562k | ref2->data[1], ref2->linesize[1], | 392 | 562k | ref2->data[2], ref2->linesize[2], tref2, | 393 | 562k | (row << 3) + 4, col << 3, | 394 | 562k | &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); | 395 | 562k | mc_chroma_dir(td, mc[4][b->filter][1], | 396 | 562k | td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, | 397 | 562k | td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, | 398 | 562k | ref2->data[1], ref2->linesize[1], | 399 | 562k | ref2->data[2], ref2->linesize[2], tref2, | 400 | 562k | (row << 3) + 4, (col << 3) + 4, | 401 | 562k | &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); | 402 | 562k | } | 403 | 600k | } | 404 | 723k | } | 405 | 953k | } | 406 | 4.31M | } else { | 407 | 4.31M | int bwl = bwlog_tab[0][b->bs]; | 408 | 4.31M | int bw = ff_vp9_bwh_tab[0][b->bs][0] * 4; | 409 | 4.31M | int bh = ff_vp9_bwh_tab[0][b->bs][1] * 4; | 410 | 4.31M | int uvbw = ff_vp9_bwh_tab[s->ss_h][b->bs][0] * 4; | 411 | 4.31M | int uvbh = ff_vp9_bwh_tab[s->ss_v][b->bs][1] * 4; | 412 | | | 413 | 4.31M | mc_luma_dir(td, mc[bwl][b->filter][0], td->dst[0], ls_y, | 414 | 4.31M | ref1->data[0], ref1->linesize[0], tref1, | 415 | 4.31M | row << 3, col << 3, &b->mv[0][0], 0, 0, bw, bh, bw, bh, w1, h1, 0); | 416 | 4.31M | w1 = (w1 + s->ss_h) >> s->ss_h; | 417 | 4.31M | h1 = (h1 + s->ss_v) >> s->ss_v; | 418 | 4.31M | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][0], | 419 | 4.31M | td->dst[1], td->dst[2], ls_uv, | 420 | 4.31M | ref1->data[1], ref1->linesize[1], | 421 | 4.31M | ref1->data[2], ref1->linesize[2], tref1, | 422 | 4.31M | row << (3 - s->ss_v), col << (3 - s->ss_h), | 423 | 4.31M | &b->mv[0][0], 0, 0, uvbw, uvbh, uvbw, uvbh, w1, h1, 0); | 424 | | | 425 | 4.31M | if (b->comp) { | 426 | 2.83M | mc_luma_dir(td, mc[bwl][b->filter][1], td->dst[0], ls_y, | 427 | 2.83M | ref2->data[0], ref2->linesize[0], tref2, | 428 | 2.83M | row << 3, col << 3, &b->mv[0][1], 0, 0, bw, bh, bw, bh, w2, h2, 1); | 429 | 2.83M | w2 = (w2 + s->ss_h) >> s->ss_h; | 430 | 2.83M | h2 = (h2 + s->ss_v) >> s->ss_v; | 431 | 2.83M | mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][1], | 432 | 2.83M | td->dst[1], td->dst[2], ls_uv, | 433 | 2.83M | ref2->data[1], ref2->linesize[1], | 434 | 2.83M | ref2->data[2], ref2->linesize[2], tref2, | 435 | 2.83M | row << (3 - s->ss_v), col << (3 - s->ss_h), | 436 | 2.83M | &b->mv[0][1], 0, 0, uvbw, uvbh, uvbw, uvbh, w2, h2, 1); | 437 | 2.83M | } | 438 | 4.31M | } | 439 | 6.61M | } |
|