annotate h264dsp.h @ 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
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 */