Revision 8dbe5856 libavcodec/h264dsp.c

View differences:

libavcodec/h264dsp.c
29 29
#include "avcodec.h"
30 30
#include "h264dsp.h"
31 31

  
32
#define BIT_DEPTH 8
32 33
#include "h264dsp_internal.h"
34
#undef BIT_DEPTH
33 35

  
34
void ff_h264dsp_init(H264DSPContext *c)
35
{
36
    c->h264_idct_add= ff_h264_idct_add_c;
37
    c->h264_idct8_add= ff_h264_idct8_add_c;
38
    c->h264_idct_dc_add= ff_h264_idct_dc_add_c;
39
    c->h264_idct8_dc_add= ff_h264_idct8_dc_add_c;
40
    c->h264_idct_add16     = ff_h264_idct_add16_c;
41
    c->h264_idct8_add4     = ff_h264_idct8_add4_c;
42
    c->h264_idct_add8      = ff_h264_idct_add8_c;
43
    c->h264_idct_add16intra= ff_h264_idct_add16intra_c;
44
    c->h264_luma_dc_dequant_idct= ff_h264_luma_dc_dequant_idct_c;
45
    c->h264_chroma_dc_dequant_idct= ff_h264_chroma_dc_dequant_idct_c;
36
#define BIT_DEPTH 9
37
#include "h264dsp_internal.h"
38
#undef BIT_DEPTH
39

  
40
#define BIT_DEPTH 10
41
#include "h264dsp_internal.h"
42
#undef BIT_DEPTH
46 43

  
47
    c->weight_h264_pixels_tab[0]= weight_h264_pixels16x16_c;
48
    c->weight_h264_pixels_tab[1]= weight_h264_pixels16x8_c;
49
    c->weight_h264_pixels_tab[2]= weight_h264_pixels8x16_c;
50
    c->weight_h264_pixels_tab[3]= weight_h264_pixels8x8_c;
51
    c->weight_h264_pixels_tab[4]= weight_h264_pixels8x4_c;
52
    c->weight_h264_pixels_tab[5]= weight_h264_pixels4x8_c;
53
    c->weight_h264_pixels_tab[6]= weight_h264_pixels4x4_c;
54
    c->weight_h264_pixels_tab[7]= weight_h264_pixels4x2_c;
55
    c->weight_h264_pixels_tab[8]= weight_h264_pixels2x4_c;
56
    c->weight_h264_pixels_tab[9]= weight_h264_pixels2x2_c;
57
    c->biweight_h264_pixels_tab[0]= biweight_h264_pixels16x16_c;
58
    c->biweight_h264_pixels_tab[1]= biweight_h264_pixels16x8_c;
59
    c->biweight_h264_pixels_tab[2]= biweight_h264_pixels8x16_c;
60
    c->biweight_h264_pixels_tab[3]= biweight_h264_pixels8x8_c;
61
    c->biweight_h264_pixels_tab[4]= biweight_h264_pixels8x4_c;
62
    c->biweight_h264_pixels_tab[5]= biweight_h264_pixels4x8_c;
63
    c->biweight_h264_pixels_tab[6]= biweight_h264_pixels4x4_c;
64
    c->biweight_h264_pixels_tab[7]= biweight_h264_pixels4x2_c;
65
    c->biweight_h264_pixels_tab[8]= biweight_h264_pixels2x4_c;
66
    c->biweight_h264_pixels_tab[9]= biweight_h264_pixels2x2_c;
44
void ff_h264dsp_init(H264DSPContext *c, const int bit_depth)
45
{
46
#undef FUNC
47
#define FUNC(a, depth) a ## _ ## depth ## _c
67 48

  
68
    c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_c;
69
    c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_c;
70
    c->h264_v_loop_filter_luma_intra= h264_v_loop_filter_luma_intra_c;
71
    c->h264_h_loop_filter_luma_intra= h264_h_loop_filter_luma_intra_c;
72
    c->h264_v_loop_filter_chroma= h264_v_loop_filter_chroma_c;
73
    c->h264_h_loop_filter_chroma= h264_h_loop_filter_chroma_c;
74
    c->h264_v_loop_filter_chroma_intra= h264_v_loop_filter_chroma_intra_c;
75
    c->h264_h_loop_filter_chroma_intra= h264_h_loop_filter_chroma_intra_c;
49
#define H264_DSP(depth) \
50
    c->h264_idct_add                   = FUNC(ff_h264_idct_add               , depth);\
51
    c->h264_idct8_add                  = FUNC(ff_h264_idct8_add              , depth);\
52
    c->h264_idct_dc_add                = FUNC(ff_h264_idct_dc_add            , depth);\
53
    c->h264_idct8_dc_add               = FUNC(ff_h264_idct8_dc_add           , depth);\
54
    c->h264_idct_add16                 = FUNC(ff_h264_idct_add16             , depth);\
55
    c->h264_idct8_add4                 = FUNC(ff_h264_idct8_add4             , depth);\
56
    c->h264_idct_add8                  = FUNC(ff_h264_idct_add8              , depth);\
57
    c->h264_idct_add16intra            = FUNC(ff_h264_idct_add16intra        , depth);\
58
    c->h264_luma_dc_dequant_idct       = FUNC(ff_h264_luma_dc_dequant_idct   , depth);\
59
    c->h264_chroma_dc_dequant_idct     = FUNC(ff_h264_chroma_dc_dequant_idct , depth);\
60
\
61
    c->weight_h264_pixels_tab[0]       = FUNC(  weight_h264_pixels16x16      , depth);\
62
    c->weight_h264_pixels_tab[1]       = FUNC(  weight_h264_pixels16x8       , depth);\
63
    c->weight_h264_pixels_tab[2]       = FUNC(  weight_h264_pixels8x16       , depth);\
64
    c->weight_h264_pixels_tab[3]       = FUNC(  weight_h264_pixels8x8        , depth);\
65
    c->weight_h264_pixels_tab[4]       = FUNC(  weight_h264_pixels8x4        , depth);\
66
    c->weight_h264_pixels_tab[5]       = FUNC(  weight_h264_pixels4x8        , depth);\
67
    c->weight_h264_pixels_tab[6]       = FUNC(  weight_h264_pixels4x4        , depth);\
68
    c->weight_h264_pixels_tab[7]       = FUNC(  weight_h264_pixels4x2        , depth);\
69
    c->weight_h264_pixels_tab[8]       = FUNC(  weight_h264_pixels2x4        , depth);\
70
    c->weight_h264_pixels_tab[9]       = FUNC(  weight_h264_pixels2x2        , depth);\
71
    c->biweight_h264_pixels_tab[0]     = FUNC(biweight_h264_pixels16x16      , depth);\
72
    c->biweight_h264_pixels_tab[1]     = FUNC(biweight_h264_pixels16x8       , depth);\
73
    c->biweight_h264_pixels_tab[2]     = FUNC(biweight_h264_pixels8x16       , depth);\
74
    c->biweight_h264_pixels_tab[3]     = FUNC(biweight_h264_pixels8x8        , depth);\
75
    c->biweight_h264_pixels_tab[4]     = FUNC(biweight_h264_pixels8x4        , depth);\
76
    c->biweight_h264_pixels_tab[5]     = FUNC(biweight_h264_pixels4x8        , depth);\
77
    c->biweight_h264_pixels_tab[6]     = FUNC(biweight_h264_pixels4x4        , depth);\
78
    c->biweight_h264_pixels_tab[7]     = FUNC(biweight_h264_pixels4x2        , depth);\
79
    c->biweight_h264_pixels_tab[8]     = FUNC(biweight_h264_pixels2x4        , depth);\
80
    c->biweight_h264_pixels_tab[9]     = FUNC(biweight_h264_pixels2x2        , depth);\
81
\
82
    c->h264_v_loop_filter_luma         = FUNC(h264_v_loop_filter_luma        , depth);\
83
    c->h264_h_loop_filter_luma         = FUNC(h264_h_loop_filter_luma        , depth);\
84
    c->h264_v_loop_filter_luma_intra   = FUNC(h264_v_loop_filter_luma_intra  , depth);\
85
    c->h264_h_loop_filter_luma_intra   = FUNC(h264_h_loop_filter_luma_intra  , depth);\
86
    c->h264_v_loop_filter_chroma       = FUNC(h264_v_loop_filter_chroma      , depth);\
87
    c->h264_h_loop_filter_chroma       = FUNC(h264_h_loop_filter_chroma      , depth);\
88
    c->h264_v_loop_filter_chroma_intra = FUNC(h264_v_loop_filter_chroma_intra, depth);\
89
    c->h264_h_loop_filter_chroma_intra = FUNC(h264_h_loop_filter_chroma_intra, depth);\
76 90
    c->h264_loop_filter_strength= NULL;
77 91

  
78
    if (ARCH_ARM) ff_h264dsp_init_arm(c);
79
    if (HAVE_ALTIVEC) ff_h264dsp_init_ppc(c);
80
    if (HAVE_MMX) ff_h264dsp_init_x86(c);
92
    switch (bit_depth) {
93
        case 9:
94
            H264_DSP(9);
95
            break;
96
        case 10:
97
            H264_DSP(10);
98
            break;
99
        default:
100
            H264_DSP(8);
101
            break;
102
    }
103

  
104
    if (ARCH_ARM) ff_h264dsp_init_arm(c, bit_depth);
105
    if (HAVE_ALTIVEC) ff_h264dsp_init_ppc(c, bit_depth);
106
    if (HAVE_MMX) ff_h264dsp_init_x86(c, bit_depth);
81 107
}

Also available in: Unified diff