Mercurial > libavcodec.hg
annotate h264dsp.h @ 12266:48d6738904a9 libavcodec
Fix SPLATB_REG mess. Used to be a if/elseif/elseif/elseif spaghetti, so this
splits it into small optimization-specific macros which are selected for each
DSP function. The advantage of this approach is that the sse4 functions now
use the ssse3 codepath also without needing an explicit sse4 codepath.
author | rbultje |
---|---|
date | Sat, 24 Jul 2010 19:33:05 +0000 |
parents | 7dd2a45249a9 |
children |
rev | line source |
---|---|
429 | 1 /* |
11499 | 2 * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at> |
429 | 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 | 7 * modify it under the terms of the GNU Lesser General Public |
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 | 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 | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 * Lesser General Public License for more details. | |
15 * | |
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 | 19 */ |
1102 | 20 |
21 /** | |
11644
7dd2a45249a9
Remove explicit filename from Doxygen @file commands.
diego
parents:
11499
diff
changeset
|
22 * @file |
11499 | 23 * H.264 DSP functions. |
24 * @author Michael Niedermayer <michaelni@gmx.at> | |
1102 | 25 */ |
26 | |
11499 | 27 #ifndef AVCODEC_H264DSP_H |
28 #define AVCODEC_H264DSP_H | |
0 | 29 |
11499 | 30 #include <stdint.h> |
31 #include "dsputil.h" | |
3245 | 32 |
11499 | 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 | 34 typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset); |
3029 | 35 typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset); |
0 | 36 |
1102 | 37 /** |
11499 | 38 * Context for storing H.264 DSP functions |
1102 | 39 */ |
11499 | 40 typedef struct H264DSPContext{ |
41 /* weighted MC */ | |
2415 | 42 h264_weight_func weight_h264_pixels_tab[10]; |
43 h264_biweight_func biweight_h264_pixels_tab[10]; | |
2967 | 44 |
11499 | 45 /* loop filter */ |
7579 | 46 void (*h264_v_loop_filter_luma)(uint8_t *pix/*align 16*/, int stride, int alpha, int beta, int8_t *tc0); |
47 void (*h264_h_loop_filter_luma)(uint8_t *pix/*align 4 */, int stride, int alpha, int beta, int8_t *tc0); | |
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 | 51 void (*h264_v_loop_filter_chroma)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta, int8_t *tc0); |
52 void (*h264_h_loop_filter_chroma)(uint8_t *pix/*align 4*/, int stride, int alpha, int beta, int8_t *tc0); | |
53 void (*h264_v_loop_filter_chroma_intra)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta); | |
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 | 58 |
11499 | 59 /* IDCT */ |
8403 | 60 /* NOTE!!! if you implement any of h264_idct8_add, h264_idct8_add4 then you must implement all of them |
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 | |
62 The reason for above, is that no 2 out of one list may use a different permutation. | |
63 */ | |
7678 | 64 void (*h264_idct_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride); |
65 void (*h264_idct8_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride); | |
66 void (*h264_idct_dc_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride); | |
67 void (*h264_idct8_dc_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride); | |
4279 | 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 | 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 | 75 void ff_h264dsp_init(H264DSPContext *c); |
76 void ff_h264dsp_init_arm(H264DSPContext *c); | |
77 void ff_h264dsp_init_ppc(H264DSPContext *c); | |
78 void ff_h264dsp_init_x86(H264DSPContext *c); | |
936 | 79 |
11499 | 80 #endif /* AVCODEC_H264DSP_H */ |