media/libvpx/vp8/common/sad_c.c

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

michael@0 1 /*
michael@0 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
michael@0 3 *
michael@0 4 * Use of this source code is governed by a BSD-style license
michael@0 5 * that can be found in the LICENSE file in the root of the source
michael@0 6 * tree. An additional intellectual property rights grant can be found
michael@0 7 * in the file PATENTS. All contributing project authors may
michael@0 8 * be found in the AUTHORS file in the root of the source tree.
michael@0 9 */
michael@0 10
michael@0 11
michael@0 12 #include <limits.h>
michael@0 13 #include <stdlib.h>
michael@0 14 #include "vpx_config.h"
michael@0 15 #include "vpx/vpx_integer.h"
michael@0 16
michael@0 17 static unsigned int sad_mx_n_c(const unsigned char *src_ptr, int src_stride,
michael@0 18 const unsigned char *ref_ptr, int ref_stride,
michael@0 19 unsigned int max_sad, int m, int n)
michael@0 20 {
michael@0 21 int r, c;
michael@0 22 unsigned int sad = 0;
michael@0 23
michael@0 24 for (r = 0; r < n; r++)
michael@0 25 {
michael@0 26 for (c = 0; c < m; c++)
michael@0 27 {
michael@0 28 sad += abs(src_ptr[c] - ref_ptr[c]);
michael@0 29 }
michael@0 30
michael@0 31 if (sad > max_sad)
michael@0 32 break;
michael@0 33
michael@0 34 src_ptr += src_stride;
michael@0 35 ref_ptr += ref_stride;
michael@0 36 }
michael@0 37
michael@0 38 return sad;
michael@0 39 }
michael@0 40
michael@0 41 /* max_sad is provided as an optional optimization point. Alternative
michael@0 42 * implementations of these functions are not required to check it.
michael@0 43 */
michael@0 44
michael@0 45 unsigned int vp8_sad16x16_c(const unsigned char *src_ptr, int src_stride,
michael@0 46 const unsigned char *ref_ptr, int ref_stride,
michael@0 47 unsigned int max_sad)
michael@0 48 {
michael@0 49 return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 16, 16);
michael@0 50 }
michael@0 51
michael@0 52 unsigned int vp8_sad8x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 53 const unsigned char *ref_ptr, int ref_stride,
michael@0 54 unsigned int max_sad)
michael@0 55 {
michael@0 56 return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 8, 8);
michael@0 57 }
michael@0 58
michael@0 59 unsigned int vp8_sad16x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 60 const unsigned char *ref_ptr, int ref_stride,
michael@0 61 unsigned int max_sad)
michael@0 62 {
michael@0 63 return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 16, 8);
michael@0 64
michael@0 65 }
michael@0 66
michael@0 67 unsigned int vp8_sad8x16_c(const unsigned char *src_ptr, int src_stride,
michael@0 68 const unsigned char *ref_ptr, int ref_stride,
michael@0 69 unsigned int max_sad)
michael@0 70 {
michael@0 71 return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 8, 16);
michael@0 72 }
michael@0 73
michael@0 74 unsigned int vp8_sad4x4_c(const unsigned char *src_ptr, int src_stride,
michael@0 75 const unsigned char *ref_ptr, int ref_stride,
michael@0 76 unsigned int max_sad)
michael@0 77 {
michael@0 78 return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 4, 4);
michael@0 79 }
michael@0 80
michael@0 81 void vp8_sad16x16x3_c(const unsigned char *src_ptr, int src_stride,
michael@0 82 const unsigned char *ref_ptr, int ref_stride,
michael@0 83 unsigned int *sad_array)
michael@0 84 {
michael@0 85 sad_array[0] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 86 sad_array[1] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 87 sad_array[2] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 88 }
michael@0 89
michael@0 90 void vp8_sad16x16x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 91 const unsigned char *ref_ptr, int ref_stride,
michael@0 92 unsigned short *sad_array)
michael@0 93 {
michael@0 94 sad_array[0] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 95 sad_array[1] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 96 sad_array[2] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 97 sad_array[3] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX);
michael@0 98 sad_array[4] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX);
michael@0 99 sad_array[5] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX);
michael@0 100 sad_array[6] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX);
michael@0 101 sad_array[7] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX);
michael@0 102 }
michael@0 103
michael@0 104 void vp8_sad16x8x3_c(const unsigned char *src_ptr, int src_stride,
michael@0 105 const unsigned char *ref_ptr, int ref_stride,
michael@0 106 unsigned int *sad_array)
michael@0 107 {
michael@0 108 sad_array[0] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 109 sad_array[1] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 110 sad_array[2] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 111 }
michael@0 112
michael@0 113 void vp8_sad16x8x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 114 const unsigned char *ref_ptr, int ref_stride,
michael@0 115 unsigned short *sad_array)
michael@0 116 {
michael@0 117 sad_array[0] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 118 sad_array[1] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 119 sad_array[2] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 120 sad_array[3] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX);
michael@0 121 sad_array[4] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX);
michael@0 122 sad_array[5] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX);
michael@0 123 sad_array[6] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX);
michael@0 124 sad_array[7] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX);
michael@0 125 }
michael@0 126
michael@0 127 void vp8_sad8x8x3_c(const unsigned char *src_ptr, int src_stride,
michael@0 128 const unsigned char *ref_ptr, int ref_stride,
michael@0 129 unsigned int *sad_array)
michael@0 130 {
michael@0 131 sad_array[0] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 132 sad_array[1] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 133 sad_array[2] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 134 }
michael@0 135
michael@0 136 void vp8_sad8x8x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 137 const unsigned char *ref_ptr, int ref_stride,
michael@0 138 unsigned short *sad_array)
michael@0 139 {
michael@0 140 sad_array[0] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 141 sad_array[1] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 142 sad_array[2] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 143 sad_array[3] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX);
michael@0 144 sad_array[4] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX);
michael@0 145 sad_array[5] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX);
michael@0 146 sad_array[6] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX);
michael@0 147 sad_array[7] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX);
michael@0 148 }
michael@0 149
michael@0 150 void vp8_sad8x16x3_c(const unsigned char *src_ptr, int src_stride,
michael@0 151 const unsigned char *ref_ptr, int ref_stride,
michael@0 152 unsigned int *sad_array)
michael@0 153 {
michael@0 154 sad_array[0] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 155 sad_array[1] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 156 sad_array[2] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 157 }
michael@0 158
michael@0 159 void vp8_sad8x16x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 160 const unsigned char *ref_ptr, int ref_stride,
michael@0 161 unsigned short *sad_array)
michael@0 162 {
michael@0 163 sad_array[0] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 164 sad_array[1] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 165 sad_array[2] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 166 sad_array[3] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX);
michael@0 167 sad_array[4] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX);
michael@0 168 sad_array[5] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX);
michael@0 169 sad_array[6] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX);
michael@0 170 sad_array[7] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX);
michael@0 171 }
michael@0 172
michael@0 173 void vp8_sad4x4x3_c(const unsigned char *src_ptr, int src_stride,
michael@0 174 const unsigned char *ref_ptr, int ref_stride,
michael@0 175 unsigned int *sad_array)
michael@0 176 {
michael@0 177 sad_array[0] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 178 sad_array[1] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 179 sad_array[2] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 180 }
michael@0 181
michael@0 182 void vp8_sad4x4x8_c(const unsigned char *src_ptr, int src_stride,
michael@0 183 const unsigned char *ref_ptr, int ref_stride,
michael@0 184 unsigned short *sad_array)
michael@0 185 {
michael@0 186 sad_array[0] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX);
michael@0 187 sad_array[1] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX);
michael@0 188 sad_array[2] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX);
michael@0 189 sad_array[3] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX);
michael@0 190 sad_array[4] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX);
michael@0 191 sad_array[5] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX);
michael@0 192 sad_array[6] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX);
michael@0 193 sad_array[7] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX);
michael@0 194 }
michael@0 195
michael@0 196 void vp8_sad16x16x4d_c(const unsigned char *src_ptr, int src_stride,
michael@0 197 const unsigned char * const ref_ptr[], int ref_stride,
michael@0 198 unsigned int *sad_array)
michael@0 199 {
michael@0 200 sad_array[0] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX);
michael@0 201 sad_array[1] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX);
michael@0 202 sad_array[2] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX);
michael@0 203 sad_array[3] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX);
michael@0 204 }
michael@0 205
michael@0 206 void vp8_sad16x8x4d_c(const unsigned char *src_ptr, int src_stride,
michael@0 207 const unsigned char * const ref_ptr[], int ref_stride,
michael@0 208 unsigned int *sad_array)
michael@0 209 {
michael@0 210 sad_array[0] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX);
michael@0 211 sad_array[1] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX);
michael@0 212 sad_array[2] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX);
michael@0 213 sad_array[3] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX);
michael@0 214 }
michael@0 215
michael@0 216 void vp8_sad8x8x4d_c(const unsigned char *src_ptr, int src_stride,
michael@0 217 const unsigned char * const ref_ptr[], int ref_stride,
michael@0 218 unsigned int *sad_array)
michael@0 219 {
michael@0 220 sad_array[0] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX);
michael@0 221 sad_array[1] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX);
michael@0 222 sad_array[2] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX);
michael@0 223 sad_array[3] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX);
michael@0 224 }
michael@0 225
michael@0 226 void vp8_sad8x16x4d_c(const unsigned char *src_ptr, int src_stride,
michael@0 227 const unsigned char * const ref_ptr[], int ref_stride,
michael@0 228 unsigned int *sad_array)
michael@0 229 {
michael@0 230 sad_array[0] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX);
michael@0 231 sad_array[1] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX);
michael@0 232 sad_array[2] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX);
michael@0 233 sad_array[3] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX);
michael@0 234 }
michael@0 235
michael@0 236 void vp8_sad4x4x4d_c(const unsigned char *src_ptr, int src_stride,
michael@0 237 const unsigned char * const ref_ptr[], int ref_stride,
michael@0 238 unsigned int *sad_array)
michael@0 239 {
michael@0 240 sad_array[0] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX);
michael@0 241 sad_array[1] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX);
michael@0 242 sad_array[2] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX);
michael@0 243 sad_array[3] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX);
michael@0 244 }
michael@0 245
michael@0 246 /* Copy 2 macroblocks to a buffer */
michael@0 247 void vp8_copy32xn_c(unsigned char *src_ptr, int src_stride,
michael@0 248 unsigned char *dst_ptr, int dst_stride,
michael@0 249 int height)
michael@0 250 {
michael@0 251 int r;
michael@0 252
michael@0 253 for (r = 0; r < height; r++)
michael@0 254 {
michael@0 255 #if !(CONFIG_FAST_UNALIGNED)
michael@0 256 dst_ptr[0] = src_ptr[0];
michael@0 257 dst_ptr[1] = src_ptr[1];
michael@0 258 dst_ptr[2] = src_ptr[2];
michael@0 259 dst_ptr[3] = src_ptr[3];
michael@0 260 dst_ptr[4] = src_ptr[4];
michael@0 261 dst_ptr[5] = src_ptr[5];
michael@0 262 dst_ptr[6] = src_ptr[6];
michael@0 263 dst_ptr[7] = src_ptr[7];
michael@0 264 dst_ptr[8] = src_ptr[8];
michael@0 265 dst_ptr[9] = src_ptr[9];
michael@0 266 dst_ptr[10] = src_ptr[10];
michael@0 267 dst_ptr[11] = src_ptr[11];
michael@0 268 dst_ptr[12] = src_ptr[12];
michael@0 269 dst_ptr[13] = src_ptr[13];
michael@0 270 dst_ptr[14] = src_ptr[14];
michael@0 271 dst_ptr[15] = src_ptr[15];
michael@0 272 dst_ptr[16] = src_ptr[16];
michael@0 273 dst_ptr[17] = src_ptr[17];
michael@0 274 dst_ptr[18] = src_ptr[18];
michael@0 275 dst_ptr[19] = src_ptr[19];
michael@0 276 dst_ptr[20] = src_ptr[20];
michael@0 277 dst_ptr[21] = src_ptr[21];
michael@0 278 dst_ptr[22] = src_ptr[22];
michael@0 279 dst_ptr[23] = src_ptr[23];
michael@0 280 dst_ptr[24] = src_ptr[24];
michael@0 281 dst_ptr[25] = src_ptr[25];
michael@0 282 dst_ptr[26] = src_ptr[26];
michael@0 283 dst_ptr[27] = src_ptr[27];
michael@0 284 dst_ptr[28] = src_ptr[28];
michael@0 285 dst_ptr[29] = src_ptr[29];
michael@0 286 dst_ptr[30] = src_ptr[30];
michael@0 287 dst_ptr[31] = src_ptr[31];
michael@0 288 #else
michael@0 289 ((uint32_t *)dst_ptr)[0] = ((uint32_t *)src_ptr)[0] ;
michael@0 290 ((uint32_t *)dst_ptr)[1] = ((uint32_t *)src_ptr)[1] ;
michael@0 291 ((uint32_t *)dst_ptr)[2] = ((uint32_t *)src_ptr)[2] ;
michael@0 292 ((uint32_t *)dst_ptr)[3] = ((uint32_t *)src_ptr)[3] ;
michael@0 293 ((uint32_t *)dst_ptr)[4] = ((uint32_t *)src_ptr)[4] ;
michael@0 294 ((uint32_t *)dst_ptr)[5] = ((uint32_t *)src_ptr)[5] ;
michael@0 295 ((uint32_t *)dst_ptr)[6] = ((uint32_t *)src_ptr)[6] ;
michael@0 296 ((uint32_t *)dst_ptr)[7] = ((uint32_t *)src_ptr)[7] ;
michael@0 297 #endif
michael@0 298 src_ptr += src_stride;
michael@0 299 dst_ptr += dst_stride;
michael@0 300
michael@0 301 }
michael@0 302 }

mercurial