29 #define IDCT_ADD_FUNC(NUM, DEPTH, OPT)                                  \    30 void ff_h264_idct ## NUM ## _add_ ## DEPTH ## _ ## OPT(uint8_t *dst,    \    52 #define IDCT_ADD_REP_FUNC(NUM, REP, DEPTH, OPT)                         \    53 void ff_h264_idct ## NUM ## _add ## REP ## _ ## DEPTH ## _ ## OPT       \    54     (uint8_t *dst, const int *block_offset,                             \    55      int16_t *block, int stride, const uint8_t nnzc[6 * 8]);    74 #define IDCT_ADD_REP_FUNC2(NUM, REP, DEPTH, OPT)                      \    75 void ff_h264_idct ## NUM ## _add ## REP ## _ ## DEPTH ## _ ## OPT     \    76     (uint8_t **dst, const int *block_offset,                          \    77      int16_t *block, int stride, const uint8_t nnzc[6 * 8]);    99                                          int bidir, 
int edges, 
int step,
   100                                          int mask_mv0, 
int mask_mv1, 
int field);
   102 #define LF_FUNC(DIR, TYPE, DEPTH, OPT)                                        \   103 void ff_deblock_ ## DIR ## _ ## TYPE ## _ ## DEPTH ## _ ## OPT(uint8_t *pix,  \   108 #define LF_IFUNC(DIR, TYPE, DEPTH, OPT) \   109 void ff_deblock_ ## DIR ## _ ## TYPE ## _ ## DEPTH ## _ ## OPT(uint8_t *pix,  \   114 #define LF_FUNCS(type, depth)                   \   115 LF_FUNC(h,  chroma,          depth, mmxext)     \   116 LF_IFUNC(h, chroma_intra,    depth, mmxext)     \   117 LF_FUNC(h,  chroma422,       depth, mmxext)     \   118 LF_IFUNC(h, chroma422_intra, depth, mmxext)     \   119 LF_FUNC(v,  chroma,          depth, mmxext)     \   120 LF_IFUNC(v, chroma_intra,    depth, mmxext)     \   121 LF_FUNC(h,  luma,            depth, mmxext)     \   122 LF_IFUNC(h, luma_intra,      depth, mmxext)     \   123 LF_FUNC(h,  luma,            depth, sse2)       \   124 LF_IFUNC(h, luma_intra,      depth, sse2)       \   125 LF_FUNC(v,  luma,            depth, sse2)       \   126 LF_IFUNC(v, luma_intra,      depth, sse2)       \   127 LF_FUNC(h,  chroma,          depth, sse2)       \   128 LF_IFUNC(h, chroma_intra,    depth, sse2)       \   129 LF_FUNC(h,  chroma422,       depth, sse2)       \   130 LF_IFUNC(h, chroma422_intra, depth, sse2)       \   131 LF_FUNC(v,  chroma,          depth, sse2)       \   132 LF_IFUNC(v, chroma_intra,    depth, sse2)       \   133 LF_FUNC(h,  luma,            depth, avx)        \   134 LF_IFUNC(h, luma_intra,      depth, avx)        \   135 LF_FUNC(v,  luma,            depth, avx)        \   136 LF_IFUNC(v, luma_intra,      depth, avx)        \   137 LF_FUNC(h,  chroma,          depth, avx)        \   138 LF_IFUNC(h, chroma_intra,    depth, avx)        \   139 LF_FUNC(h,  chroma422,       depth, avx)        \   140 LF_IFUNC(h, chroma422_intra, depth, avx)        \   141 LF_FUNC(v,  chroma,          depth, avx)        \   142 LF_IFUNC(v, chroma_intra,    depth, avx)   150 #if ARCH_X86_32 && HAVE_MMXEXT_EXTERNAL   153                                     int beta, int8_t *tc0)
   155     if ((tc0[0] & tc0[1]) >= 0)
   156         ff_deblock_v8_luma_8_mmxext(pix + 0, stride, alpha, beta, tc0);
   157     if ((tc0[2] & tc0[3]) >= 0)
   158         ff_deblock_v8_luma_8_mmxext(pix + 8, stride, alpha, beta, tc0 + 2);
   161 static void deblock_v_luma_intra_8_mmxext(
uint8_t *pix, 
int stride,
   164     ff_deblock_v8_luma_intra_8_mmxext(pix + 0, stride, alpha, beta);
   165     ff_deblock_v8_luma_intra_8_mmxext(pix + 8, stride, alpha, beta);
   175 #define H264_WEIGHT(W, OPT)                                             \   176 void ff_h264_weight_ ## W ## _ ## OPT(uint8_t *dst, ptrdiff_t stride,   \   177                                       int height, int log2_denom,       \   178                                       int weight, int offset);   180 #define H264_BIWEIGHT(W, OPT)                                           \   181 void ff_h264_biweight_ ## W ## _ ## OPT(uint8_t *dst, uint8_t *src,     \   182                                         ptrdiff_t stride, int height,   \   183                                         int log2_denom, int weightd,    \   184                                         int weights, int offset);   186 #define H264_BIWEIGHT_MMX(W)                    \   187     H264_WEIGHT(W, mmxext)                      \   188     H264_BIWEIGHT(W, mmxext)   190 #define H264_BIWEIGHT_MMX_SSE(W)                \   191     H264_BIWEIGHT_MMX(W)                        \   192     H264_WEIGHT(W, sse2)                        \   193     H264_BIWEIGHT(W, sse2)                      \   194     H264_BIWEIGHT(W, ssse3)   200 #define H264_WEIGHT_10(W, DEPTH, OPT)                                   \   201 void ff_h264_weight_ ## W ## _ ## DEPTH ## _ ## OPT(uint8_t *dst,       \   208 #define H264_BIWEIGHT_10(W, DEPTH, OPT)                                 \   209 void ff_h264_biweight_ ## W ## _ ## DEPTH ## _ ## OPT(uint8_t *dst,     \   218 #define H264_BIWEIGHT_10_SSE(W, DEPTH)          \   219     H264_WEIGHT_10(W, DEPTH, sse2)              \   220     H264_WEIGHT_10(W, DEPTH, sse4)              \   221     H264_BIWEIGHT_10(W, DEPTH, sse2)            \   222     H264_BIWEIGHT_10(W, DEPTH, sse4)   229                                  const 
int chroma_format_idc)
   237     if (bit_depth == 8) {
   239             c->h264_idct_dc_add   =
   240             c->h264_idct_add      = ff_h264_idct_add_8_mmx;
   241             c->h264_idct8_dc_add  =
   242             c->h264_idct8_add     = ff_h264_idct8_add_8_mmx;
   244             c->h264_idct_add16 = ff_h264_idct_add16_8_mmx;
   245             c->h264_idct8_add4 = ff_h264_idct8_add4_8_mmx;
   246             if (chroma_format_idc <= 1) {
   247                 c->h264_idct_add8 = ff_h264_idct_add8_8_mmx;
   249                 c->h264_idct_add8 = ff_h264_idct_add8_422_8_mmx;
   251             c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmx;
   256             c->h264_idct_dc_add  = ff_h264_idct_dc_add_8_mmxext;
   257             c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_mmxext;
   258             c->h264_idct_add16   = ff_h264_idct_add16_8_mmxext;
   259             c->h264_idct8_add4   = ff_h264_idct8_add4_8_mmxext;
   260             if (chroma_format_idc <= 1)
   261                 c->h264_idct_add8 = ff_h264_idct_add8_8_mmxext;
   262             c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmxext;
   264             c->h264_v_loop_filter_chroma       = ff_deblock_v_chroma_8_mmxext;
   265             c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_mmxext;
   266             if (chroma_format_idc <= 1) {
   267                 c->h264_h_loop_filter_chroma       = ff_deblock_h_chroma_8_mmxext;
   268                 c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma_intra_8_mmxext;
   270                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma422_8_mmxext;
   271                 c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma422_intra_8_mmxext;
   273 #if ARCH_X86_32 && HAVE_MMXEXT_EXTERNAL   274             c->h264_v_loop_filter_luma       = deblock_v_luma_8_mmxext;
   275             c->h264_h_loop_filter_luma       = ff_deblock_h_luma_8_mmxext;
   276             c->h264_v_loop_filter_luma_intra = deblock_v_luma_intra_8_mmxext;
   277             c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_mmxext;
   279             c->weight_h264_pixels_tab[0] = ff_h264_weight_16_mmxext;
   280             c->weight_h264_pixels_tab[1] = ff_h264_weight_8_mmxext;
   281             c->weight_h264_pixels_tab[2] = ff_h264_weight_4_mmxext;
   283             c->biweight_h264_pixels_tab[0] = ff_h264_biweight_16_mmxext;
   284             c->biweight_h264_pixels_tab[1] = ff_h264_biweight_8_mmxext;
   285             c->biweight_h264_pixels_tab[2] = ff_h264_biweight_4_mmxext;
   288             c->h264_idct8_add  = ff_h264_idct8_add_8_sse2;
   290             c->h264_idct_add16 = ff_h264_idct_add16_8_sse2;
   291             c->h264_idct8_add4 = ff_h264_idct8_add4_8_sse2;
   292             if (chroma_format_idc <= 1)
   293                 c->h264_idct_add8 = ff_h264_idct_add8_8_sse2;
   294             c->h264_idct_add16intra      = ff_h264_idct_add16intra_8_sse2;
   297             c->weight_h264_pixels_tab[0] = ff_h264_weight_16_sse2;
   298             c->weight_h264_pixels_tab[1] = ff_h264_weight_8_sse2;
   300             c->biweight_h264_pixels_tab[0] = ff_h264_biweight_16_sse2;
   301             c->biweight_h264_pixels_tab[1] = ff_h264_biweight_8_sse2;
   303             c->h264_v_loop_filter_luma       = ff_deblock_v_luma_8_sse2;
   304             c->h264_h_loop_filter_luma       = ff_deblock_h_luma_8_sse2;
   305             c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_sse2;
   306             c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_sse2;
   309             c->h264_h_loop_filter_luma_mbaff = ff_deblock_h_luma_mbaff_8_sse2;
   312             c->h264_v_loop_filter_chroma       = ff_deblock_v_chroma_8_sse2;
   313             c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_sse2;
   314             if (chroma_format_idc <= 1) {
   315                 c->h264_h_loop_filter_chroma       = ff_deblock_h_chroma_8_sse2;
   316                 c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma_intra_8_sse2;
   318                 c->h264_h_loop_filter_chroma       = ff_deblock_h_chroma422_8_sse2;
   319                 c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma422_intra_8_sse2;
   322             c->h264_idct_add        = ff_h264_idct_add_8_sse2;
   323             c->h264_idct_dc_add     = ff_h264_idct_dc_add_8_sse2;
   326             c->biweight_h264_pixels_tab[0] = ff_h264_biweight_16_ssse3;
   327             c->biweight_h264_pixels_tab[1] = ff_h264_biweight_8_ssse3;
   330             c->h264_v_loop_filter_luma       = ff_deblock_v_luma_8_avx;
   331             c->h264_h_loop_filter_luma       = ff_deblock_h_luma_8_avx;
   332             c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_avx;
   333             c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_avx;
   335             c->h264_h_loop_filter_luma_mbaff = ff_deblock_h_luma_mbaff_8_avx;
   338             c->h264_v_loop_filter_chroma       = ff_deblock_v_chroma_8_avx;
   339             c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_avx;
   340             if (chroma_format_idc <= 1) {
   341                 c->h264_h_loop_filter_chroma       = ff_deblock_h_chroma_8_avx;
   342                 c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma_intra_8_avx;
   344                 c->h264_h_loop_filter_chroma       = ff_deblock_h_chroma422_8_avx;
   345                 c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma422_intra_8_avx;
   348             c->h264_idct_add        = ff_h264_idct_add_8_avx;
   349             c->h264_idct_dc_add     = ff_h264_idct_dc_add_8_avx;
   351     } 
else if (bit_depth == 10) {
   354             c->h264_v_loop_filter_chroma       = ff_deblock_v_chroma_10_mmxext;
   355             c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_10_mmxext;
   356             if (chroma_format_idc <= 1) {
   357                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma_10_mmxext;
   359                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma422_10_mmxext;
   361             c->h264_v_loop_filter_luma         = ff_deblock_v_luma_10_mmxext;
   362             c->h264_h_loop_filter_luma         = ff_deblock_h_luma_10_mmxext;
   363             c->h264_v_loop_filter_luma_intra   = ff_deblock_v_luma_intra_10_mmxext;
   364             c->h264_h_loop_filter_luma_intra   = ff_deblock_h_luma_intra_10_mmxext;
   366             c->h264_idct_dc_add = ff_h264_idct_dc_add_10_mmxext;
   369             c->h264_idct_add     = ff_h264_idct_add_10_sse2;
   370             c->h264_idct8_dc_add = ff_h264_idct8_dc_add_10_sse2;
   372             c->h264_idct_add16 = ff_h264_idct_add16_10_sse2;
   373             if (chroma_format_idc <= 1) {
   374                 c->h264_idct_add8 = ff_h264_idct_add8_10_sse2;
   376                 c->h264_idct_add8 = ff_h264_idct_add8_422_10_sse2;
   378             c->h264_idct_add16intra = ff_h264_idct_add16intra_10_sse2;
   379 #if HAVE_ALIGNED_STACK   380             c->h264_idct8_add  = ff_h264_idct8_add_10_sse2;
   381             c->h264_idct8_add4 = ff_h264_idct8_add4_10_sse2;
   384             c->weight_h264_pixels_tab[0] = ff_h264_weight_16_10_sse2;
   385             c->weight_h264_pixels_tab[1] = ff_h264_weight_8_10_sse2;
   386             c->weight_h264_pixels_tab[2] = ff_h264_weight_4_10_sse2;
   388             c->biweight_h264_pixels_tab[0] = ff_h264_biweight_16_10_sse2;
   389             c->biweight_h264_pixels_tab[1] = ff_h264_biweight_8_10_sse2;
   390             c->biweight_h264_pixels_tab[2] = ff_h264_biweight_4_10_sse2;
   392             c->h264_v_loop_filter_chroma       = ff_deblock_v_chroma_10_sse2;
   393             c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_10_sse2;
   394             if (chroma_format_idc <= 1) {
   395                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma_10_sse2;
   397                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma422_10_sse2;
   399 #if HAVE_ALIGNED_STACK   400             c->h264_v_loop_filter_luma       = ff_deblock_v_luma_10_sse2;
   401             c->h264_h_loop_filter_luma       = ff_deblock_h_luma_10_sse2;
   402             c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_10_sse2;
   403             c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_10_sse2;
   407             c->weight_h264_pixels_tab[0] = ff_h264_weight_16_10_sse4;
   408             c->weight_h264_pixels_tab[1] = ff_h264_weight_8_10_sse4;
   409             c->weight_h264_pixels_tab[2] = ff_h264_weight_4_10_sse4;
   411             c->biweight_h264_pixels_tab[0] = ff_h264_biweight_16_10_sse4;
   412             c->biweight_h264_pixels_tab[1] = ff_h264_biweight_8_10_sse4;
   413             c->biweight_h264_pixels_tab[2] = ff_h264_biweight_4_10_sse4;
   416             c->h264_idct_dc_add  =
   417             c->h264_idct_add     = ff_h264_idct_add_10_avx;
   418             c->h264_idct8_dc_add = ff_h264_idct8_dc_add_10_avx;
   420             c->h264_idct_add16 = ff_h264_idct_add16_10_avx;
   421             if (chroma_format_idc <= 1) {
   422                 c->h264_idct_add8 = ff_h264_idct_add8_10_avx;
   424                 c->h264_idct_add8 = ff_h264_idct_add8_422_10_avx;
   426             c->h264_idct_add16intra = ff_h264_idct_add16intra_10_avx;
   427 #if HAVE_ALIGNED_STACK   428             c->h264_idct8_add  = ff_h264_idct8_add_10_avx;
   429             c->h264_idct8_add4 = ff_h264_idct8_add4_10_avx;
   432             c->h264_v_loop_filter_chroma       = ff_deblock_v_chroma_10_avx;
   433             c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_10_avx;
   434             if (chroma_format_idc <= 1) {
   435                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma_10_avx;
   437                 c->h264_h_loop_filter_chroma = ff_deblock_h_chroma422_10_avx;
   439 #if HAVE_ALIGNED_STACK   440             c->h264_v_loop_filter_luma         = ff_deblock_v_luma_10_avx;
   441             c->h264_h_loop_filter_luma         = ff_deblock_h_luma_10_avx;
   442             c->h264_v_loop_filter_luma_intra   = ff_deblock_v_luma_intra_10_avx;
   443             c->h264_h_loop_filter_luma_intra   = ff_deblock_h_luma_intra_10_avx;
 #define LF_FUNCS(type, depth)
#define EXTERNAL_MMX(flags)
static float alpha(float a)
void ff_h264_luma_dc_dequant_idct_sse2(int16_t *output, int16_t *input, int qmul)
#define LF_FUNC(DIR, TYPE, DEPTH, OPT)
#define AV_CPU_FLAG_CMOV
supports cmov instruction 
static atomic_int cpu_flags
Macro definitions for various function/variable attributes. 
#define EXTERNAL_SSE4(flags)
#define IDCT_ADD_REP_FUNC(NUM, REP, DEPTH, OPT)
void ff_h264_luma_dc_dequant_idct_mmx(int16_t *output, int16_t *input, int qmul)
#define EXTERNAL_SSE2(flags)
void ff_h264_loop_filter_strength_mmxext(int16_t bS[2][4][4], uint8_t nnz[40], int8_t ref[2][40], int16_t mv[2][40][2], int bidir, int edges, int step, int mask_mv0, int mask_mv1, int field)
#define H264_BIWEIGHT_MMX_SSE(W)
#define H264_BIWEIGHT_10_SSE(W, DEPTH)
av_cold void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Context for storing H.264 DSP functions. 
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
#define LF_IFUNC(DIR, TYPE, DEPTH, OPT)
static const int8_t mv[256][2]
#define EXTERNAL_SSSE3(flags)
#define IDCT_ADD_FUNC(NUM, DEPTH, OPT)
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU. 
#define EXTERNAL_MMXEXT(flags)
static int ref[MAX_W *MAX_W]
#define IDCT_ADD_REP_FUNC2(NUM, REP, DEPTH, OPT)
#define H264_BIWEIGHT_MMX(W)
#define EXTERNAL_AVX(flags)