Statistics
| Branch: | Revision:

ffmpeg / libavcodec / h264dsp.c @ 8dbe5856

History | View | Annotate | Download (5.06 KB)

1
/*
2
 * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
3
 * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at>
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21

    
22
/**
23
 * @file
24
 * H.264 / AVC / MPEG4 part10 DSP functions.
25
 * @author Michael Niedermayer <michaelni@gmx.at>
26
 */
27

    
28
#include <stdint.h>
29
#include "avcodec.h"
30
#include "h264dsp.h"
31

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

    
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
43

    
44
void ff_h264dsp_init(H264DSPContext *c, const int bit_depth)
45
{
46
#undef FUNC
47
#define FUNC(a, depth) a ## _ ## depth ## _c
48

    
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);\
90
    c->h264_loop_filter_strength= NULL;
91

    
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);
107
}