annotate h264dsp.h @ 12289:bc679bd1c66d libavcodec

perform the clipping on luma_dc_qmul[1] and chroma_qmul[0] earlier
author skal
date Tue, 27 Jul 2010 22:23:50 +0000
parents 7dd2a45249a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
1 /*
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
2 * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at>
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
3 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
4 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
5 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
8 * 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
9 * version 2.1 of the License, or (at your option) any later version.
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
10 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3807
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
14 * Lesser General Public License for more details.
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
15 *
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
16 * 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
17 * 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
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
429
718a22dc121f license/copyright change
glantau
parents: 403
diff changeset
19 */
1102
eeaa1e837efb more dox
michaelni
parents: 1092
diff changeset
20
eeaa1e837efb more dox
michaelni
parents: 1092
diff changeset
21 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11499
diff changeset
22 * @file
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
23 * H.264 DSP functions.
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
24 * @author Michael Niedermayer <michaelni@gmx.at>
1102
eeaa1e837efb more dox
michaelni
parents: 1092
diff changeset
25 */
eeaa1e837efb more dox
michaelni
parents: 1092
diff changeset
26
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
27 #ifndef AVCODEC_H264DSP_H
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
28 #define AVCODEC_H264DSP_H
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
29
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
30 #include <stdint.h>
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
31 #include "dsputil.h"
3245
c2c29be6282e remove mpegvideo.c img resample dependancy
michael
parents: 3217
diff changeset
32
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
33 //typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y);
2415
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2388
diff changeset
34 typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset);
3029
7a92269a3ccd tweak h264_biweight
lorenm
parents: 3020
diff changeset
35 typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
36
1102
eeaa1e837efb more dox
michaelni
parents: 1092
diff changeset
37 /**
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
38 * Context for storing H.264 DSP functions
1102
eeaa1e837efb more dox
michaelni
parents: 1092
diff changeset
39 */
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
40 typedef struct H264DSPContext{
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
41 /* weighted MC */
2415
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2388
diff changeset
42 h264_weight_func weight_h264_pixels_tab[10];
db2cf6005d19 H.264 weighted prediction.
lorenm
parents: 2388
diff changeset
43 h264_biweight_func biweight_h264_pixels_tab[10];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2887
diff changeset
44
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
45 /* loop filter */
7579
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
46 void (*h264_v_loop_filter_luma)(uint8_t *pix/*align 16*/, int stride, int alpha, int beta, int8_t *tc0);
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
47 void (*h264_h_loop_filter_luma)(uint8_t *pix/*align 4 */, int stride, int alpha, int beta, int8_t *tc0);
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
48 /* v/h_loop_filter_luma_intra: align 16 */
8395
195cba8f6257 Move filter_luma_intra into dsputil for later addition of asm.
darkshikari
parents: 8375
diff changeset
49 void (*h264_v_loop_filter_luma_intra)(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
50 void (*h264_h_loop_filter_luma_intra)(uint8_t *pix, int stride, int alpha, int beta);
7579
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
51 void (*h264_v_loop_filter_chroma)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta, int8_t *tc0);
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
52 void (*h264_h_loop_filter_chroma)(uint8_t *pix/*align 4*/, int stride, int alpha, int beta, int8_t *tc0);
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
53 void (*h264_v_loop_filter_chroma_intra)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta);
30bc7ba91daa document some dsp alignments
lorenm
parents: 7573
diff changeset
54 void (*h264_h_loop_filter_chroma_intra)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta);
3645
47821be55b6c mmx implementation of deblocking strength decision.
lorenm
parents: 3574
diff changeset
55 // h264_loop_filter_strength: simd only. the C version is inlined in h264.c
47821be55b6c mmx implementation of deblocking strength decision.
lorenm
parents: 3574
diff changeset
56 void (*h264_loop_filter_strength)(int16_t bS[2][4][4], uint8_t nnz[40], int8_t ref[2][40], int16_t mv[2][40][2],
7327
483421b11d98 Fix h264_loop_filter_strength_mmx2() so it works with PAFF.
michael
parents: 7286
diff changeset
57 int bidir, int edges, int step, int mask_mv0, int mask_mv1, int field);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2887
diff changeset
58
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
59 /* IDCT */
8403
c9918d072bdb Document new idct requirements.
michael
parents: 8395
diff changeset
60 /* NOTE!!! if you implement any of h264_idct8_add, h264_idct8_add4 then you must implement all of them
c9918d072bdb Document new idct requirements.
michael
parents: 8395
diff changeset
61 NOTE!!! if you implement any of h264_idct_add, h264_idct_add16, h264_idct_add16intra, h264_idct_add8 then you must implement all of them
c9918d072bdb Document new idct requirements.
michael
parents: 8395
diff changeset
62 The reason for above, is that no 2 out of one list may use a different permutation.
c9918d072bdb Document new idct requirements.
michael
parents: 8395
diff changeset
63 */
7678
081c54b62e56 document some dsp alignments
lorenm
parents: 7579
diff changeset
64 void (*h264_idct_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride);
081c54b62e56 document some dsp alignments
lorenm
parents: 7579
diff changeset
65 void (*h264_idct8_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride);
081c54b62e56 document some dsp alignments
lorenm
parents: 7579
diff changeset
66 void (*h264_idct_dc_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride);
081c54b62e56 document some dsp alignments
lorenm
parents: 7579
diff changeset
67 void (*h264_idct8_dc_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride);
4279
1f84e4f18aa1 Added entry for H.264 DCT to the DSP context.
takis
parents: 4268
diff changeset
68 void (*h264_dct)(DCTELEM block[4][4]);
8375
de2509cf3c44 H.264 idct functions that include the chroma, inter luma and intra16 luma loops
michael
parents: 8359
diff changeset
69 void (*h264_idct_add16)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
de2509cf3c44 H.264 idct functions that include the chroma, inter luma and intra16 luma loops
michael
parents: 8359
diff changeset
70 void (*h264_idct8_add4)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
de2509cf3c44 H.264 idct functions that include the chroma, inter luma and intra16 luma loops
michael
parents: 8359
diff changeset
71 void (*h264_idct_add8)(uint8_t **dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
de2509cf3c44 H.264 idct functions that include the chroma, inter luma and intra16 luma loops
michael
parents: 8359
diff changeset
72 void (*h264_idct_add16intra)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
73 }H264DSPContext;
853
eacc2dd8fd9d * using DSPContext - so each codec could use its local (sub)set of CPU extension
kabi
parents: 838
diff changeset
74
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
75 void ff_h264dsp_init(H264DSPContext *c);
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
76 void ff_h264dsp_init_arm(H264DSPContext *c);
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
77 void ff_h264dsp_init_ppc(H264DSPContext *c);
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
78 void ff_h264dsp_init_x86(H264DSPContext *c);
936
caa77cd960c0 qpel encoding
michaelni
parents: 894
diff changeset
79
11499
2a4dc3c0b012 Move H264 dsputil functions into their own struct
mru
parents: 11485
diff changeset
80 #endif /* AVCODEC_H264DSP_H */