Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
h264dsp.c
Go to the documentation of this file.
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 Libav.
6
*
7
* Libav 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
* Libav 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 Libav; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
28
#include <stdint.h>
29
#include "
avcodec.h
"
30
#include "
h264dsp.h
"
31
32
#define BIT_DEPTH 8
33
#include "
h264dsp_template.c
"
34
#undef BIT_DEPTH
35
36
#define BIT_DEPTH 9
37
#include "
h264dsp_template.c
"
38
#undef BIT_DEPTH
39
40
#define BIT_DEPTH 10
41
#include "
h264dsp_template.c
"
42
#undef BIT_DEPTH
43
44
void
ff_h264dsp_init
(
H264DSPContext
*c,
const
int
bit_depth,
const
int
chroma_format_idc)
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
if (chroma_format_idc <= 1)\
57
c->h264_idct_add8 = FUNC(ff_h264_idct_add8, depth);\
58
else\
59
c->h264_idct_add8 = FUNC(ff_h264_idct_add8_422, depth);\
60
c->h264_idct_add16intra= FUNC(ff_h264_idct_add16intra, depth);\
61
c->h264_luma_dc_dequant_idct= FUNC(ff_h264_luma_dc_dequant_idct, depth);\
62
if (chroma_format_idc <= 1)\
63
c->h264_chroma_dc_dequant_idct= FUNC(ff_h264_chroma_dc_dequant_idct, depth);\
64
else\
65
c->h264_chroma_dc_dequant_idct= FUNC(ff_h264_chroma422_dc_dequant_idct, depth);\
66
\
67
c->weight_h264_pixels_tab[0]= FUNC(weight_h264_pixels16, depth);\
68
c->weight_h264_pixels_tab[1]= FUNC(weight_h264_pixels8, depth);\
69
c->weight_h264_pixels_tab[2]= FUNC(weight_h264_pixels4, depth);\
70
c->weight_h264_pixels_tab[3]= FUNC(weight_h264_pixels2, depth);\
71
c->biweight_h264_pixels_tab[0]= FUNC(biweight_h264_pixels16, depth);\
72
c->biweight_h264_pixels_tab[1]= FUNC(biweight_h264_pixels8, depth);\
73
c->biweight_h264_pixels_tab[2]= FUNC(biweight_h264_pixels4, depth);\
74
c->biweight_h264_pixels_tab[3]= FUNC(biweight_h264_pixels2, depth);\
75
\
76
c->h264_v_loop_filter_luma= FUNC(h264_v_loop_filter_luma, depth);\
77
c->h264_h_loop_filter_luma= FUNC(h264_h_loop_filter_luma, depth);\
78
c->h264_h_loop_filter_luma_mbaff= FUNC(h264_h_loop_filter_luma_mbaff, depth);\
79
c->h264_v_loop_filter_luma_intra= FUNC(h264_v_loop_filter_luma_intra, depth);\
80
c->h264_h_loop_filter_luma_intra= FUNC(h264_h_loop_filter_luma_intra, depth);\
81
c->h264_h_loop_filter_luma_mbaff_intra= FUNC(h264_h_loop_filter_luma_mbaff_intra, depth);\
82
c->h264_v_loop_filter_chroma= FUNC(h264_v_loop_filter_chroma, depth);\
83
if (chroma_format_idc <= 1)\
84
c->h264_h_loop_filter_chroma= FUNC(h264_h_loop_filter_chroma, depth);\
85
else\
86
c->h264_h_loop_filter_chroma= FUNC(h264_h_loop_filter_chroma422, depth);\
87
if (chroma_format_idc <= 1)\
88
c->h264_h_loop_filter_chroma_mbaff= FUNC(h264_h_loop_filter_chroma_mbaff, depth);\
89
else\
90
c->h264_h_loop_filter_chroma_mbaff= FUNC(h264_h_loop_filter_chroma422_mbaff, depth);\
91
c->h264_v_loop_filter_chroma_intra= FUNC(h264_v_loop_filter_chroma_intra, depth);\
92
if (chroma_format_idc <= 1)\
93
c->h264_h_loop_filter_chroma_intra= FUNC(h264_h_loop_filter_chroma_intra, depth);\
94
else\
95
c->h264_h_loop_filter_chroma_intra= FUNC(h264_h_loop_filter_chroma422_intra, depth);\
96
if (chroma_format_idc <= 1)\
97
c->h264_h_loop_filter_chroma_mbaff_intra= FUNC(h264_h_loop_filter_chroma_mbaff_intra, depth);\
98
else\
99
c->h264_h_loop_filter_chroma_mbaff_intra= FUNC(h264_h_loop_filter_chroma422_mbaff_intra, depth);\
100
c->h264_loop_filter_strength= NULL;
101
102
switch
(bit_depth) {
103
case
9:
104
H264_DSP
(9);
105
break
;
106
case
10:
107
H264_DSP
(10);
108
break
;
109
default
:
110
H264_DSP
(8);
111
break
;
112
}
113
114
if
(
ARCH_ARM
)
ff_h264dsp_init_arm
(c, bit_depth, chroma_format_idc);
115
if
(
HAVE_ALTIVEC
)
ff_h264dsp_init_ppc
(c, bit_depth, chroma_format_idc);
116
if
(
HAVE_MMX
)
ff_h264dsp_init_x86
(c, bit_depth, chroma_format_idc);
117
}
h264dsp.h
H.264 DSP functions.
ff_h264dsp_init_arm
void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Definition:
h264dsp_init_arm.c:98
ARCH_ARM
#define ARCH_ARM
Definition:
config.h:14
HAVE_ALTIVEC
#define HAVE_ALTIVEC
Definition:
config.h:34
H264DSPContext
Context for storing H.264 DSP functions.
Definition:
h264dsp.h:42
HAVE_MMX
#define HAVE_MMX
Definition:
config.h:44
ff_h264dsp_init_ppc
void ff_h264dsp_init_ppc(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Definition:
h264_altivec.c:1002
h264dsp_template.c
H.264 / AVC / MPEG4 part10 DSP functions.
ff_h264dsp_init
void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Definition:
h264dsp.c:44
avcodec.h
external API header
ff_h264dsp_init_x86
void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
Definition:
h264dsp_mmx.c:343
H264_DSP
#define H264_DSP(depth)