32 int16_t *
block,
int n,
int qscale)
45 qadd = (qscale - 1) | 1;
57 "packssdw %%mm6, %%mm6 \n\t" 58 "packssdw %%mm6, %%mm6 \n\t" 60 "pxor %%mm7, %%mm7 \n\t" 61 "packssdw %%mm5, %%mm5 \n\t" 62 "packssdw %%mm5, %%mm5 \n\t" 63 "psubw %%mm5, %%mm7 \n\t" 64 "pxor %%mm4, %%mm4 \n\t" 67 "movq (%0, %3), %%mm0 \n\t" 68 "movq 8(%0, %3), %%mm1 \n\t" 70 "pmullw %%mm6, %%mm0 \n\t" 71 "pmullw %%mm6, %%mm1 \n\t" 73 "movq (%0, %3), %%mm2 \n\t" 74 "movq 8(%0, %3), %%mm3 \n\t" 76 "pcmpgtw %%mm4, %%mm2 \n\t" 77 "pcmpgtw %%mm4, %%mm3 \n\t" 79 "pxor %%mm2, %%mm0 \n\t" 80 "pxor %%mm3, %%mm1 \n\t" 82 "paddw %%mm7, %%mm0 \n\t" 83 "paddw %%mm7, %%mm1 \n\t" 85 "pxor %%mm0, %%mm2 \n\t" 86 "pxor %%mm1, %%mm3 \n\t" 88 "pcmpeqw %%mm7, %%mm0 \n\t" 89 "pcmpeqw %%mm7, %%mm1 \n\t" 91 "pandn %%mm2, %%mm0 \n\t" 92 "pandn %%mm3, %%mm1 \n\t" 94 "movq %%mm0, (%0, %3) \n\t" 95 "movq %%mm1, 8(%0, %3) \n\t" 99 ::
"r" (block+nCoeffs),
"rm"(qmul),
"rm" (qadd),
"r" (2*(-nCoeffs))
107 int16_t *block,
int n,
int qscale)
112 qadd = (qscale - 1) | 1;
119 "movd %1, %%mm6 \n\t" 120 "packssdw %%mm6, %%mm6 \n\t" 121 "packssdw %%mm6, %%mm6 \n\t" 122 "movd %2, %%mm5 \n\t" 123 "pxor %%mm7, %%mm7 \n\t" 124 "packssdw %%mm5, %%mm5 \n\t" 125 "packssdw %%mm5, %%mm5 \n\t" 126 "psubw %%mm5, %%mm7 \n\t" 127 "pxor %%mm4, %%mm4 \n\t" 130 "movq (%0, %3), %%mm0 \n\t" 131 "movq 8(%0, %3), %%mm1 \n\t" 133 "pmullw %%mm6, %%mm0 \n\t" 134 "pmullw %%mm6, %%mm1 \n\t" 136 "movq (%0, %3), %%mm2 \n\t" 137 "movq 8(%0, %3), %%mm3 \n\t" 139 "pcmpgtw %%mm4, %%mm2 \n\t" 140 "pcmpgtw %%mm4, %%mm3 \n\t" 142 "pxor %%mm2, %%mm0 \n\t" 143 "pxor %%mm3, %%mm1 \n\t" 145 "paddw %%mm7, %%mm0 \n\t" 146 "paddw %%mm7, %%mm1 \n\t" 148 "pxor %%mm0, %%mm2 \n\t" 149 "pxor %%mm1, %%mm3 \n\t" 151 "pcmpeqw %%mm7, %%mm0 \n\t" 152 "pcmpeqw %%mm7, %%mm1 \n\t" 154 "pandn %%mm2, %%mm0 \n\t" 155 "pandn %%mm3, %%mm1 \n\t" 157 "movq %%mm0, (%0, %3) \n\t" 158 "movq %%mm1, 8(%0, %3) \n\t" 162 ::
"r" (block+nCoeffs),
"rm"(qmul),
"rm" (qadd),
"r" (2*(-nCoeffs))
168 int16_t *block,
int n,
int qscale)
171 const uint16_t *quant_matrix;
185 "pcmpeqw %%mm7, %%mm7 \n\t" 186 "psrlw $15, %%mm7 \n\t" 187 "movd %2, %%mm6 \n\t" 188 "packssdw %%mm6, %%mm6 \n\t" 189 "packssdw %%mm6, %%mm6 \n\t" 190 "mov %3, %%"REG_a
" \n\t" 193 "movq (%0, %%"REG_a
"), %%mm0 \n\t" 194 "movq 8(%0, %%"REG_a
"), %%mm1 \n\t" 195 "movq (%1, %%"REG_a
"), %%mm4 \n\t" 196 "movq 8(%1, %%"REG_a
"), %%mm5 \n\t" 197 "pmullw %%mm6, %%mm4 \n\t" 198 "pmullw %%mm6, %%mm5 \n\t" 199 "pxor %%mm2, %%mm2 \n\t" 200 "pxor %%mm3, %%mm3 \n\t" 201 "pcmpgtw %%mm0, %%mm2 \n\t" 202 "pcmpgtw %%mm1, %%mm3 \n\t" 203 "pxor %%mm2, %%mm0 \n\t" 204 "pxor %%mm3, %%mm1 \n\t" 205 "psubw %%mm2, %%mm0 \n\t" 206 "psubw %%mm3, %%mm1 \n\t" 207 "pmullw %%mm4, %%mm0 \n\t" 208 "pmullw %%mm5, %%mm1 \n\t" 209 "pxor %%mm4, %%mm4 \n\t" 210 "pxor %%mm5, %%mm5 \n\t" 211 "pcmpeqw (%0, %%"REG_a
"), %%mm4 \n\t" 212 "pcmpeqw 8(%0, %%"REG_a
"), %%mm5\n\t" 213 "psraw $3, %%mm0 \n\t" 214 "psraw $3, %%mm1 \n\t" 215 "psubw %%mm7, %%mm0 \n\t" 216 "psubw %%mm7, %%mm1 \n\t" 217 "por %%mm7, %%mm0 \n\t" 218 "por %%mm7, %%mm1 \n\t" 219 "pxor %%mm2, %%mm0 \n\t" 220 "pxor %%mm3, %%mm1 \n\t" 221 "psubw %%mm2, %%mm0 \n\t" 222 "psubw %%mm3, %%mm1 \n\t" 223 "pandn %%mm0, %%mm4 \n\t" 224 "pandn %%mm1, %%mm5 \n\t" 225 "movq %%mm4, (%0, %%"REG_a
") \n\t" 226 "movq %%mm5, 8(%0, %%"REG_a
") \n\t" 228 "add $16, %%"REG_a
" \n\t" 230 ::
"r" (block+nCoeffs),
"r"(quant_matrix+nCoeffs),
"rm" (qscale),
"g" (-2*nCoeffs)
237 int16_t *block,
int n,
int qscale)
240 const uint16_t *quant_matrix;
248 "pcmpeqw %%mm7, %%mm7 \n\t" 249 "psrlw $15, %%mm7 \n\t" 250 "movd %2, %%mm6 \n\t" 251 "packssdw %%mm6, %%mm6 \n\t" 252 "packssdw %%mm6, %%mm6 \n\t" 253 "mov %3, %%"REG_a
" \n\t" 256 "movq (%0, %%"REG_a
"), %%mm0 \n\t" 257 "movq 8(%0, %%"REG_a
"), %%mm1 \n\t" 258 "movq (%1, %%"REG_a
"), %%mm4 \n\t" 259 "movq 8(%1, %%"REG_a
"), %%mm5 \n\t" 260 "pmullw %%mm6, %%mm4 \n\t" 261 "pmullw %%mm6, %%mm5 \n\t" 262 "pxor %%mm2, %%mm2 \n\t" 263 "pxor %%mm3, %%mm3 \n\t" 264 "pcmpgtw %%mm0, %%mm2 \n\t" 265 "pcmpgtw %%mm1, %%mm3 \n\t" 266 "pxor %%mm2, %%mm0 \n\t" 267 "pxor %%mm3, %%mm1 \n\t" 268 "psubw %%mm2, %%mm0 \n\t" 269 "psubw %%mm3, %%mm1 \n\t" 270 "paddw %%mm0, %%mm0 \n\t" 271 "paddw %%mm1, %%mm1 \n\t" 272 "paddw %%mm7, %%mm0 \n\t" 273 "paddw %%mm7, %%mm1 \n\t" 274 "pmullw %%mm4, %%mm0 \n\t" 275 "pmullw %%mm5, %%mm1 \n\t" 276 "pxor %%mm4, %%mm4 \n\t" 277 "pxor %%mm5, %%mm5 \n\t" 278 "pcmpeqw (%0, %%"REG_a
"), %%mm4 \n\t" 279 "pcmpeqw 8(%0, %%"REG_a
"), %%mm5\n\t" 280 "psraw $4, %%mm0 \n\t" 281 "psraw $4, %%mm1 \n\t" 282 "psubw %%mm7, %%mm0 \n\t" 283 "psubw %%mm7, %%mm1 \n\t" 284 "por %%mm7, %%mm0 \n\t" 285 "por %%mm7, %%mm1 \n\t" 286 "pxor %%mm2, %%mm0 \n\t" 287 "pxor %%mm3, %%mm1 \n\t" 288 "psubw %%mm2, %%mm0 \n\t" 289 "psubw %%mm3, %%mm1 \n\t" 290 "pandn %%mm0, %%mm4 \n\t" 291 "pandn %%mm1, %%mm5 \n\t" 292 "movq %%mm4, (%0, %%"REG_a
") \n\t" 293 "movq %%mm5, 8(%0, %%"REG_a
") \n\t" 295 "add $16, %%"REG_a
" \n\t" 297 ::
"r" (block+nCoeffs),
"r"(quant_matrix+nCoeffs),
"rm" (qscale),
"g" (-2*nCoeffs)
303 int16_t *block,
int n,
int qscale)
306 const uint16_t *quant_matrix;
320 "pcmpeqw %%mm7, %%mm7 \n\t" 321 "psrlw $15, %%mm7 \n\t" 322 "movd %2, %%mm6 \n\t" 323 "packssdw %%mm6, %%mm6 \n\t" 324 "packssdw %%mm6, %%mm6 \n\t" 325 "mov %3, %%"REG_a
" \n\t" 328 "movq (%0, %%"REG_a
"), %%mm0 \n\t" 329 "movq 8(%0, %%"REG_a
"), %%mm1 \n\t" 330 "movq (%1, %%"REG_a
"), %%mm4 \n\t" 331 "movq 8(%1, %%"REG_a
"), %%mm5 \n\t" 332 "pmullw %%mm6, %%mm4 \n\t" 333 "pmullw %%mm6, %%mm5 \n\t" 334 "pxor %%mm2, %%mm2 \n\t" 335 "pxor %%mm3, %%mm3 \n\t" 336 "pcmpgtw %%mm0, %%mm2 \n\t" 337 "pcmpgtw %%mm1, %%mm3 \n\t" 338 "pxor %%mm2, %%mm0 \n\t" 339 "pxor %%mm3, %%mm1 \n\t" 340 "psubw %%mm2, %%mm0 \n\t" 341 "psubw %%mm3, %%mm1 \n\t" 342 "pmullw %%mm4, %%mm0 \n\t" 343 "pmullw %%mm5, %%mm1 \n\t" 344 "pxor %%mm4, %%mm4 \n\t" 345 "pxor %%mm5, %%mm5 \n\t" 346 "pcmpeqw (%0, %%"REG_a
"), %%mm4 \n\t" 347 "pcmpeqw 8(%0, %%"REG_a
"), %%mm5\n\t" 348 "psraw $3, %%mm0 \n\t" 349 "psraw $3, %%mm1 \n\t" 350 "pxor %%mm2, %%mm0 \n\t" 351 "pxor %%mm3, %%mm1 \n\t" 352 "psubw %%mm2, %%mm0 \n\t" 353 "psubw %%mm3, %%mm1 \n\t" 354 "pandn %%mm0, %%mm4 \n\t" 355 "pandn %%mm1, %%mm5 \n\t" 356 "movq %%mm4, (%0, %%"REG_a
") \n\t" 357 "movq %%mm5, 8(%0, %%"REG_a
") \n\t" 359 "add $16, %%"REG_a
" \n\t" 361 ::
"r" (block+nCoeffs),
"r"(quant_matrix+nCoeffs),
"rm" (qscale),
"g" (-2*nCoeffs)
369 int16_t *block,
int n,
int qscale)
372 const uint16_t *quant_matrix;
381 "pcmpeqw %%mm7, %%mm7 \n\t" 382 "psrlq $48, %%mm7 \n\t" 383 "movd %2, %%mm6 \n\t" 384 "packssdw %%mm6, %%mm6 \n\t" 385 "packssdw %%mm6, %%mm6 \n\t" 386 "mov %3, %%"REG_a
" \n\t" 389 "movq (%0, %%"REG_a
"), %%mm0 \n\t" 390 "movq 8(%0, %%"REG_a
"), %%mm1 \n\t" 391 "movq (%1, %%"REG_a
"), %%mm4 \n\t" 392 "movq 8(%1, %%"REG_a
"), %%mm5 \n\t" 393 "pmullw %%mm6, %%mm4 \n\t" 394 "pmullw %%mm6, %%mm5 \n\t" 395 "pxor %%mm2, %%mm2 \n\t" 396 "pxor %%mm3, %%mm3 \n\t" 397 "pcmpgtw %%mm0, %%mm2 \n\t" 398 "pcmpgtw %%mm1, %%mm3 \n\t" 399 "pxor %%mm2, %%mm0 \n\t" 400 "pxor %%mm3, %%mm1 \n\t" 401 "psubw %%mm2, %%mm0 \n\t" 402 "psubw %%mm3, %%mm1 \n\t" 403 "paddw %%mm0, %%mm0 \n\t" 404 "paddw %%mm1, %%mm1 \n\t" 405 "pmullw %%mm4, %%mm0 \n\t" 406 "pmullw %%mm5, %%mm1 \n\t" 407 "paddw %%mm4, %%mm0 \n\t" 408 "paddw %%mm5, %%mm1 \n\t" 409 "pxor %%mm4, %%mm4 \n\t" 410 "pxor %%mm5, %%mm5 \n\t" 411 "pcmpeqw (%0, %%"REG_a
"), %%mm4 \n\t" 412 "pcmpeqw 8(%0, %%"REG_a
"), %%mm5\n\t" 413 "psrlw $4, %%mm0 \n\t" 414 "psrlw $4, %%mm1 \n\t" 415 "pxor %%mm2, %%mm0 \n\t" 416 "pxor %%mm3, %%mm1 \n\t" 417 "psubw %%mm2, %%mm0 \n\t" 418 "psubw %%mm3, %%mm1 \n\t" 419 "pandn %%mm0, %%mm4 \n\t" 420 "pandn %%mm1, %%mm5 \n\t" 421 "pxor %%mm4, %%mm7 \n\t" 422 "pxor %%mm5, %%mm7 \n\t" 423 "movq %%mm4, (%0, %%"REG_a
") \n\t" 424 "movq %%mm5, 8(%0, %%"REG_a
") \n\t" 426 "add $16, %%"REG_a
" \n\t" 428 "movd 124(%0, %3), %%mm0 \n\t" 429 "movq %%mm7, %%mm6 \n\t" 430 "psrlq $32, %%mm7 \n\t" 431 "pxor %%mm6, %%mm7 \n\t" 432 "movq %%mm7, %%mm6 \n\t" 433 "psrlq $16, %%mm7 \n\t" 434 "pxor %%mm6, %%mm7 \n\t" 435 "pslld $31, %%mm7 \n\t" 436 "psrlq $15, %%mm7 \n\t" 437 "pxor %%mm7, %%mm0 \n\t" 438 "movd %%mm0, 124(%0, %3) \n\t" 440 ::
"r" (block+nCoeffs),
"r"(quant_matrix+nCoeffs),
"rm" (qscale),
"r" (-2*nCoeffs)
void(* dct_unquantize_h263_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
int h263_aic
Advanded INTRA Coding (AIC)
Macro definitions for various function/variable attributes.
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#define INLINE_MMX(flags)
av_cold void ff_mpv_common_init_x86(MpegEncContext *s)
void(* dct_unquantize_mpeg1_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
int block_last_index[12]
last non zero coefficient in block
void(* dct_unquantize_mpeg2_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
uint16_t inter_matrix[64]
Libavcodec external API header.
ScanTable intra_scantable
void(* dct_unquantize_mpeg2_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
void(* dct_unquantize_h263_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
int flags
AVCodecContext.flags (HQ, MV4, ...)
uint16_t intra_matrix[64]
matrix transmitted in the bitstream
ScanTable inter_scantable
if inter == intra then intra should be used to reduce tha cache usage
void(* dct_unquantize_mpeg1_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)