ffmpeg / libavcodec / h264dsp.h @ af0b2d67
History | View | Annotate | Download (4.09 KB)
1 |
/*
|
---|---|
2 |
* Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at>
|
3 |
*
|
4 |
* This file is part of FFmpeg.
|
5 |
*
|
6 |
* FFmpeg is free software; you can redistribute it and/or
|
7 |
* modify it under the terms of the GNU Lesser General Public
|
8 |
* License as published by the Free Software Foundation; either
|
9 |
* version 2.1 of the License, or (at your option) any later version.
|
10 |
*
|
11 |
* FFmpeg is distributed in the hope that it will be useful,
|
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
|
17 |
* License along with FFmpeg; if not, write to the Free Software
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
19 |
*/
|
20 |
|
21 |
/**
|
22 |
* @file
|
23 |
* H.264 DSP functions.
|
24 |
* @author Michael Niedermayer <michaelni@gmx.at>
|
25 |
*/
|
26 |
|
27 |
#ifndef AVCODEC_H264DSP_H
|
28 |
#define AVCODEC_H264DSP_H
|
29 |
|
30 |
#include <stdint.h> |
31 |
#include "dsputil.h" |
32 |
|
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);
|
34 |
typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset); |
35 |
typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset); |
36 |
|
37 |
/**
|
38 |
* Context for storing H.264 DSP functions
|
39 |
*/
|
40 |
typedef struct H264DSPContext{ |
41 |
/* weighted MC */
|
42 |
h264_weight_func weight_h264_pixels_tab[10];
|
43 |
h264_biweight_func biweight_h264_pixels_tab[10];
|
44 |
|
45 |
/* loop filter */
|
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 */
|
49 |
void (*h264_v_loop_filter_luma_intra)(uint8_t *pix, int stride, int alpha, int beta); |
50 |
void (*h264_h_loop_filter_luma_intra)(uint8_t *pix, int stride, int alpha, int beta); |
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); |
55 |
// h264_loop_filter_strength: simd only. the C version is inlined in h264.c
|
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], |
57 |
int bidir, int edges, int step, int mask_mv0, int mask_mv1, int field); |
58 |
|
59 |
/* IDCT */
|
60 |
void (*h264_idct_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride); |
61 |
void (*h264_idct8_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride); |
62 |
void (*h264_idct_dc_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride); |
63 |
void (*h264_idct8_dc_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride); |
64 |
|
65 |
void (*h264_dct)(DCTELEM block[4][4]); |
66 |
void (*h264_idct_add16)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]); |
67 |
void (*h264_idct8_add4)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]); |
68 |
void (*h264_idct_add8)(uint8_t **dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]); |
69 |
void (*h264_idct_add16intra)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]); |
70 |
void (*h264_luma_dc_dequant_idct)(DCTELEM *output, DCTELEM *input/*align 16*/, int qmul); |
71 |
void (*h264_chroma_dc_dequant_idct)(DCTELEM *block, int qmul); |
72 |
}H264DSPContext; |
73 |
|
74 |
void ff_h264dsp_init(H264DSPContext *c);
|
75 |
void ff_h264dsp_init_arm(H264DSPContext *c);
|
76 |
void ff_h264dsp_init_ppc(H264DSPContext *c);
|
77 |
void ff_h264dsp_init_x86(H264DSPContext *c);
|
78 |
|
79 |
#endif /* AVCODEC_H264DSP_H */ |