annotate h264dsp.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 7dd2a45249a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
2 * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
3 * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at>
5214
470601203f44 Group all copyright and author notices together.
diego
parents: 5151
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
15 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
16 *
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 3029
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
20 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
21
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
22 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11506
diff changeset
23 * @file
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
24 * H.264 / AVC / MPEG4 part10 DSP functions.
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
25 * @author Michael Niedermayer <michaelni@gmx.at>
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1101
diff changeset
26 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
27
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
28 #include <stdint.h>
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
29 #include "avcodec.h"
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
30 #include "h264dsp.h"
1168
5af9aeadbdc3 H264 decoder & demuxer
michaelni
parents: 1106
diff changeset
31
4594
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
32 #define op_scale1(x) block[x] = av_clip_uint8( (block[x]*weight + offset) >> log2_denom )
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
33 #define op_scale2(x) dst[x] = av_clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1))
2415
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
34 #define H264_WEIGHT(W,H) \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
35 static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \
3029
7a92269a3ccd tweak h264_biweight
lorenm
parents: 3020
diff changeset
36 int y; \
2415
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
37 offset <<= log2_denom; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
38 if(log2_denom) offset += 1<<(log2_denom-1); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
39 for(y=0; y<H; y++, block += stride){ \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
40 op_scale1(0); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
41 op_scale1(1); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
42 if(W==2) continue; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
43 op_scale1(2); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
44 op_scale1(3); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
45 if(W==4) continue; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
46 op_scale1(4); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
47 op_scale1(5); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
48 op_scale1(6); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
49 op_scale1(7); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
50 if(W==8) continue; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
51 op_scale1(8); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
52 op_scale1(9); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
53 op_scale1(10); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
54 op_scale1(11); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
55 op_scale1(12); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
56 op_scale1(13); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
57 op_scale1(14); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
58 op_scale1(15); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
59 } \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
60 } \
3029
7a92269a3ccd tweak h264_biweight
lorenm
parents: 3020
diff changeset
61 static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset){ \
7a92269a3ccd tweak h264_biweight
lorenm
parents: 3020
diff changeset
62 int y; \
7a92269a3ccd tweak h264_biweight
lorenm
parents: 3020
diff changeset
63 offset = ((offset + 1) | 1) << log2_denom; \
2415
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
64 for(y=0; y<H; y++, dst += stride, src += stride){ \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
65 op_scale2(0); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
66 op_scale2(1); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
67 if(W==2) continue; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
68 op_scale2(2); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
69 op_scale2(3); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
70 if(W==4) continue; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
71 op_scale2(4); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
72 op_scale2(5); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
73 op_scale2(6); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
74 op_scale2(7); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
75 if(W==8) continue; \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
76 op_scale2(8); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
77 op_scale2(9); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
78 op_scale2(10); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
79 op_scale2(11); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
80 op_scale2(12); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
81 op_scale2(13); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
82 op_scale2(14); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
83 op_scale2(15); \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
84 } \
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
85 }
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
86
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
87 H264_WEIGHT(16,16)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
88 H264_WEIGHT(16,8)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
89 H264_WEIGHT(8,16)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
90 H264_WEIGHT(8,8)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
91 H264_WEIGHT(8,4)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
92 H264_WEIGHT(4,8)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
93 H264_WEIGHT(4,4)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
94 H264_WEIGHT(4,2)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
95 H264_WEIGHT(2,4)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
96 H264_WEIGHT(2,2)
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
97
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
98 #undef op_scale1
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
99 #undef op_scale2
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
100 #undef H264_WEIGHT
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
101
10941
28edcc8c54c0 Mark the h264 c loop filter as av_always_inline av_flatten to make sure its
michael
parents: 10940
diff changeset
102 static av_always_inline av_flatten void h264_loop_filter_luma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int8_t *tc0)
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
103 {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
104 int i, d;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
105 for( i = 0; i < 4; i++ ) {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
106 if( tc0[i] < 0 ) {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
107 pix += 4*ystride;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
108 continue;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
109 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
110 for( d = 0; d < 4; d++ ) {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
111 const int p0 = pix[-1*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
112 const int p1 = pix[-2*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
113 const int p2 = pix[-3*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
114 const int q0 = pix[0];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
115 const int q1 = pix[1*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
116 const int q2 = pix[2*xstride];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
117
4001
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
118 if( FFABS( p0 - q0 ) < alpha &&
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
119 FFABS( p1 - p0 ) < beta &&
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
120 FFABS( q1 - q0 ) < beta ) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
121
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
122 int tc = tc0[i];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
123 int i_delta;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
124
4001
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
125 if( FFABS( p2 - p0 ) < beta ) {
10940
563cb9b1a9b7 skip outer pixels if possible in h264_loop_filter_luma_c().
michael
parents: 10878
diff changeset
126 if(tc0[i])
4594
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
127 pix[-2*xstride] = p1 + av_clip( (( p2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - p1, -tc0[i], tc0[i] );
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
128 tc++;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
129 }
4001
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
130 if( FFABS( q2 - q0 ) < beta ) {
10940
563cb9b1a9b7 skip outer pixels if possible in h264_loop_filter_luma_c().
michael
parents: 10878
diff changeset
131 if(tc0[i])
4594
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
132 pix[ xstride] = q1 + av_clip( (( q2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - q1, -tc0[i], tc0[i] );
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
133 tc++;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
134 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
135
4594
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
136 i_delta = av_clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc );
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
137 pix[-xstride] = av_clip_uint8( p0 + i_delta ); /* p0' */
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
138 pix[0] = av_clip_uint8( q0 - i_delta ); /* q0' */
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
139 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
140 pix += ystride;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
141 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
142 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
143 }
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
144 static void h264_v_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
145 {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
146 h264_loop_filter_luma_c(pix, stride, 1, alpha, beta, tc0);
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
147 }
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
148 static void h264_h_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
149 {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
150 h264_loop_filter_luma_c(pix, 1, stride, alpha, beta, tc0);
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
151 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
152
10941
28edcc8c54c0 Mark the h264 c loop filter as av_always_inline av_flatten to make sure its
michael
parents: 10940
diff changeset
153 static av_always_inline av_flatten void h264_loop_filter_luma_intra_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta)
8395
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
154 {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
155 int d;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
156 for( d = 0; d < 16; d++ ) {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
157 const int p2 = pix[-3*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
158 const int p1 = pix[-2*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
159 const int p0 = pix[-1*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
160
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
161 const int q0 = pix[ 0*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
162 const int q1 = pix[ 1*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
163 const int q2 = pix[ 2*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
164
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
165 if( FFABS( p0 - q0 ) < alpha &&
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
166 FFABS( p1 - p0 ) < beta &&
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
167 FFABS( q1 - q0 ) < beta ) {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
168
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
169 if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
170 if( FFABS( p2 - p0 ) < beta)
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
171 {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
172 const int p3 = pix[-4*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
173 /* p0', p1', p2' */
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
174 pix[-1*xstride] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
175 pix[-2*xstride] = ( p2 + p1 + p0 + q0 + 2 ) >> 2;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
176 pix[-3*xstride] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
177 } else {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
178 /* p0' */
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
179 pix[-1*xstride] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
180 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
181 if( FFABS( q2 - q0 ) < beta)
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
182 {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
183 const int q3 = pix[3*xstride];
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
184 /* q0', q1', q2' */
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
185 pix[0*xstride] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
186 pix[1*xstride] = ( p0 + q0 + q1 + q2 + 2 ) >> 2;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
187 pix[2*xstride] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
188 } else {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
189 /* q0' */
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
190 pix[0*xstride] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
191 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
192 }else{
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
193 /* p0', q0' */
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
194 pix[-1*xstride] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
195 pix[ 0*xstride] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
196 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
197 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
198 pix += ystride;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
199 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
200 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
201 static void h264_v_loop_filter_luma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
202 {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
203 h264_loop_filter_luma_intra_c(pix, stride, 1, alpha, beta);
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
204 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
205 static void h264_h_loop_filter_luma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
206 {
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
207 h264_loop_filter_luma_intra_c(pix, 1, stride, alpha, beta);
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
208 }
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
209
10941
28edcc8c54c0 Mark the h264 c loop filter as av_always_inline av_flatten to make sure its
michael
parents: 10940
diff changeset
210 static av_always_inline av_flatten void h264_loop_filter_chroma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int8_t *tc0)
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
211 {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
212 int i, d;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
213 for( i = 0; i < 4; i++ ) {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
214 const int tc = tc0[i];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
215 if( tc <= 0 ) {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
216 pix += 2*ystride;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
217 continue;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
218 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
219 for( d = 0; d < 2; d++ ) {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
220 const int p0 = pix[-1*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
221 const int p1 = pix[-2*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
222 const int q0 = pix[0];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
223 const int q1 = pix[1*xstride];
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
224
4001
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
225 if( FFABS( p0 - q0 ) < alpha &&
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
226 FFABS( p1 - p0 ) < beta &&
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
227 FFABS( q1 - q0 ) < beta ) {
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
228
4594
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
229 int delta = av_clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc );
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
230
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
231 pix[-xstride] = av_clip_uint8( p0 + delta ); /* p0' */
a96d905dcbaa Add av_ prefix to clip functions
reimar
parents: 4296
diff changeset
232 pix[0] = av_clip_uint8( q0 - delta ); /* q0' */
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
233 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
234 pix += ystride;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
235 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
236 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
237 }
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
238 static void h264_v_loop_filter_chroma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
239 {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
240 h264_loop_filter_chroma_c(pix, stride, 1, alpha, beta, tc0);
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
241 }
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
242 static void h264_h_loop_filter_chroma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
243 {
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
244 h264_loop_filter_chroma_c(pix, 1, stride, alpha, beta, tc0);
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
245 }
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
246
10941
28edcc8c54c0 Mark the h264 c loop filter as av_always_inline av_flatten to make sure its
michael
parents: 10940
diff changeset
247 static av_always_inline av_flatten void h264_loop_filter_chroma_intra_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta)
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
248 {
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
249 int d;
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
250 for( d = 0; d < 8; d++ ) {
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
251 const int p0 = pix[-1*xstride];
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
252 const int p1 = pix[-2*xstride];
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
253 const int q0 = pix[0];
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
254 const int q1 = pix[1*xstride];
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
255
4001
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
256 if( FFABS( p0 - q0 ) < alpha &&
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
257 FFABS( p1 - p0 ) < beta &&
34fdffe98bd0 Rename ABS macro to FFABS.
diego
parents: 3947
diff changeset
258 FFABS( q1 - q0 ) < beta ) {
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
259
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
260 pix[-xstride] = ( 2*p1 + p0 + q1 + 2 ) >> 2; /* p0' */
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
261 pix[0] = ( 2*q1 + q0 + p1 + 2 ) >> 2; /* q0' */
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
262 }
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
263 pix += ystride;
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
264 }
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
265 }
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
266 static void h264_v_loop_filter_chroma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
267 {
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
268 h264_loop_filter_chroma_intra_c(pix, stride, 1, alpha, beta);
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
269 }
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
270 static void h264_h_loop_filter_chroma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
271 {
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
272 h264_loop_filter_chroma_intra_c(pix, 1, stride, alpha, beta);
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
273 }
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
274
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
275 void ff_h264dsp_init(H264DSPContext *c)
296
c1a8a1b4a24b sizeof(s->block) isnt 64*6*2 anymore bugfix
michaelni
parents: 294
diff changeset
276 {
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
277 c->h264_idct_add= ff_h264_idct_add_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
278 c->h264_idct8_add= ff_h264_idct8_add_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
279 c->h264_idct_dc_add= ff_h264_idct_dc_add_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
280 c->h264_idct8_dc_add= ff_h264_idct8_dc_add_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
281 c->h264_idct_add16 = ff_h264_idct_add16_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
282 c->h264_idct8_add4 = ff_h264_idct8_add4_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
283 c->h264_idct_add8 = ff_h264_idct_add8_c;
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
284 c->h264_idct_add16intra= ff_h264_idct_add16intra_c;
857
b510a7b6decd 100l for kabi (fixing qpel)
michaelni
parents: 853
diff changeset
285
2415
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
286 c->weight_h264_pixels_tab[0]= weight_h264_pixels16x16_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
287 c->weight_h264_pixels_tab[1]= weight_h264_pixels16x8_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
288 c->weight_h264_pixels_tab[2]= weight_h264_pixels8x16_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
289 c->weight_h264_pixels_tab[3]= weight_h264_pixels8x8_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
290 c->weight_h264_pixels_tab[4]= weight_h264_pixels8x4_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
291 c->weight_h264_pixels_tab[5]= weight_h264_pixels4x8_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
292 c->weight_h264_pixels_tab[6]= weight_h264_pixels4x4_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
293 c->weight_h264_pixels_tab[7]= weight_h264_pixels4x2_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
294 c->weight_h264_pixels_tab[8]= weight_h264_pixels2x4_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
295 c->weight_h264_pixels_tab[9]= weight_h264_pixels2x2_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
296 c->biweight_h264_pixels_tab[0]= biweight_h264_pixels16x16_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
297 c->biweight_h264_pixels_tab[1]= biweight_h264_pixels16x8_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
298 c->biweight_h264_pixels_tab[2]= biweight_h264_pixels8x16_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
299 c->biweight_h264_pixels_tab[3]= biweight_h264_pixels8x8_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
300 c->biweight_h264_pixels_tab[4]= biweight_h264_pixels8x4_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
301 c->biweight_h264_pixels_tab[5]= biweight_h264_pixels4x8_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
302 c->biweight_h264_pixels_tab[6]= biweight_h264_pixels4x4_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
303 c->biweight_h264_pixels_tab[7]= biweight_h264_pixels4x2_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
304 c->biweight_h264_pixels_tab[8]= biweight_h264_pixels2x4_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
305 c->biweight_h264_pixels_tab[9]= biweight_h264_pixels2x2_c;
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2382
diff changeset
306
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
307 c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_c;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
308 c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_c;
8395
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
309 c->h264_v_loop_filter_luma_intra= h264_v_loop_filter_luma_intra_c;
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
310 c->h264_h_loop_filter_luma_intra= h264_h_loop_filter_luma_intra_c;
2633
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
311 c->h264_v_loop_filter_chroma= h264_v_loop_filter_chroma_c;
72e6ffa1f3a5 MMX for H.264 deblocking filter
lorenm
parents: 2522
diff changeset
312 c->h264_h_loop_filter_chroma= h264_h_loop_filter_chroma_c;
2707
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
313 c->h264_v_loop_filter_chroma_intra= h264_v_loop_filter_chroma_intra_c;
360024d31dab H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
lorenm
parents: 2696
diff changeset
314 c->h264_h_loop_filter_chroma_intra= h264_h_loop_filter_chroma_intra_c;
3645
47821be55b6c mmx implementation of deblocking strength decision.
lorenm
parents: 3568
diff changeset
315 c->h264_loop_filter_strength= NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2834
diff changeset
316
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
317 if (ARCH_ARM) ff_h264dsp_init_arm(c);
11506
c7743bcad821 Fix compilation on PPC 470.
cehoyos
parents: 11499
diff changeset
318 if (HAVE_ALTIVEC) ff_h264dsp_init_ppc(c);
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
319 if (HAVE_MMX) ff_h264dsp_init_x86(c);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
320 }