FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
h264dsp.h
Go to the documentation of this file.
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
32
typedef
void
(*
h264_weight_func
)(
uint8_t
*
block
,
int
stride
,
int
height
,
33
int
log2_denom,
int
weight
,
int
offset
);
34
typedef
void
(*
h264_biweight_func
)(
uint8_t
*dst,
uint8_t
*
src
,
35
int
stride
,
int
height
,
int
log2_denom,
36
int
weightd,
int
weights,
int
offset
);
37
38
/**
39
* Context for storing H.264 DSP functions
40
*/
41
typedef
struct
H264DSPContext
{
42
/* weighted MC */
43
h264_weight_func
weight_h264_pixels_tab
[4];
44
h264_biweight_func
biweight_h264_pixels_tab
[4];
45
46
/* loop filter */
47
void
(*
h264_v_loop_filter_luma
)(
uint8_t
*pix
/*align 16*/
,
int
stride
,
48
int
alpha
,
int
beta, int8_t *tc0);
49
void
(*
h264_h_loop_filter_luma
)(
uint8_t
*pix
/*align 4 */
,
int
stride
,
50
int
alpha
,
int
beta, int8_t *tc0);
51
void
(*
h264_h_loop_filter_luma_mbaff
)(
uint8_t
*pix
/*align 16*/
,
int
stride
,
52
int
alpha
,
int
beta, int8_t *tc0);
53
/* v/h_loop_filter_luma_intra: align 16 */
54
void
(*
h264_v_loop_filter_luma_intra
)(
uint8_t
*pix,
int
stride
,
55
int
alpha
,
int
beta);
56
void
(*
h264_h_loop_filter_luma_intra
)(
uint8_t
*pix,
int
stride
,
57
int
alpha
,
int
beta);
58
void
(*
h264_h_loop_filter_luma_mbaff_intra
)(
uint8_t
*pix
/*align 16*/
,
59
int
stride
,
int
alpha
,
int
beta);
60
void
(*
h264_v_loop_filter_chroma
)(
uint8_t
*pix
/*align 8*/
,
int
stride
,
61
int
alpha
,
int
beta, int8_t *tc0);
62
void
(*
h264_h_loop_filter_chroma
)(
uint8_t
*pix
/*align 4*/
,
int
stride
,
63
int
alpha
,
int
beta, int8_t *tc0);
64
void
(*
h264_h_loop_filter_chroma_mbaff
)(
uint8_t
*pix
/*align 8*/
,
65
int
stride
,
int
alpha
,
int
beta,
66
int8_t *tc0);
67
void
(*
h264_v_loop_filter_chroma_intra
)(
uint8_t
*pix
/*align 8*/
,
68
int
stride
,
int
alpha
,
int
beta);
69
void
(*
h264_h_loop_filter_chroma_intra
)(
uint8_t
*pix
/*align 8*/
,
70
int
stride
,
int
alpha
,
int
beta);
71
void
(*
h264_h_loop_filter_chroma_mbaff_intra
)(
uint8_t
*pix
/*align 8*/
,
72
int
stride
,
int
alpha
,
int
beta);
73
// h264_loop_filter_strength: simd only. the C version is inlined in h264.c
74
void
(*
h264_loop_filter_strength
)(int16_t bS[2][4][4],
uint8_t
nnz[40],
75
int8_t ref[2][40], int16_t
mv
[2][40][2],
76
int
bidir,
int
edges,
int
step,
77
int
mask_mv0,
int
mask_mv1,
int
field);
78
79
/* IDCT */
80
void
(*
h264_idct_add
)(
uint8_t
*dst
/*align 4*/
,
81
int16_t *
block
/*align 16*/
,
int
stride
);
82
void
(*
h264_idct8_add
)(
uint8_t
*dst
/*align 8*/
,
83
int16_t *
block
/*align 16*/
,
int
stride
);
84
void
(*
h264_idct_dc_add
)(
uint8_t
*dst
/*align 4*/
,
85
int16_t *
block
/*align 16*/
,
int
stride
);
86
void
(*
h264_idct8_dc_add
)(
uint8_t
*dst
/*align 8*/
,
87
int16_t *
block
/*align 16*/
,
int
stride
);
88
89
void
(*
h264_idct_add16
)(
uint8_t
*dst
/*align 16*/
,
const
int
*blockoffset,
90
int16_t *
block
/*align 16*/
,
int
stride
,
91
const
uint8_t
nnzc[15 * 8]);
92
void
(*
h264_idct8_add4
)(
uint8_t
*dst
/*align 16*/
,
const
int
*blockoffset,
93
int16_t *
block
/*align 16*/
,
int
stride
,
94
const
uint8_t
nnzc[15 * 8]);
95
void
(*
h264_idct_add8
)(
uint8_t
**dst
/*align 16*/
,
const
int
*blockoffset,
96
int16_t *
block
/*align 16*/
,
int
stride
,
97
const
uint8_t
nnzc[15 * 8]);
98
void
(*
h264_idct_add16intra
)(
uint8_t
*dst
/*align 16*/
,
const
int
*blockoffset,
99
int16_t *
block
/*align 16*/
,
100
int
stride
,
const
uint8_t
nnzc[15 * 8]);
101
void
(*
h264_luma_dc_dequant_idct
)(int16_t *output,
102
int16_t *input
/*align 16*/
,
int
qmul);
103
void
(*
h264_chroma_dc_dequant_idct
)(int16_t *
block
,
int
qmul);
104
105
/* bypass-transform */
106
void
(*
h264_add_pixels8_clear
)(
uint8_t
*dst, int16_t *
block
,
int
stride
);
107
void
(*
h264_add_pixels4_clear
)(
uint8_t
*dst, int16_t *
block
,
int
stride
);
108
109
/**
110
* Search buf from the start for up to size bytes. Return the index
111
* of a zero byte, or >= size if not found. Ideally, use lookahead
112
* to filter out any zero bytes that are known to not be followed by
113
* one or more further zero bytes and a one byte. Better still, filter
114
* out any bytes that form the trailing_zero_8bits syntax element too.
115
*/
116
int (*
startcode_find_candidate
)(
const
uint8_t
*
buf
,
int
size
);
117
}
H264DSPContext
;
118
119
void
ff_h264dsp_init
(
H264DSPContext
*
c
,
const
int
bit_depth,
120
const
int
chroma_format_idc);
121
void
ff_h264dsp_init_aarch64
(
H264DSPContext
*
c
,
const
int
bit_depth,
122
const
int
chroma_format_idc);
123
void
ff_h264dsp_init_arm
(
H264DSPContext
*
c
,
const
int
bit_depth,
124
const
int
chroma_format_idc);
125
void
ff_h264dsp_init_ppc
(
H264DSPContext
*
c
,
const
int
bit_depth,
126
const
int
chroma_format_idc);
127
void
ff_h264dsp_init_x86
(
H264DSPContext
*
c
,
const
int
bit_depth,
128
const
int
chroma_format_idc);
129
130
#endif
/* AVCODEC_H264DSP_H */
Generated on Fri Dec 5 2014 04:41:55 for FFmpeg by
1.8.2