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
idctdsp.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef AVCODEC_IDCTDSP_H
20
#define AVCODEC_IDCTDSP_H
21
22
#include <stdint.h>
23
24
#include "
avcodec.h
"
25
26
/**
27
* Scantable.
28
*/
29
typedef
struct
ScanTable
{
30
const
uint8_t
*
scantable
;
31
uint8_t
permutated
[64];
32
uint8_t
raster_end
[64];
33
}
ScanTable
;
34
35
enum
idct_permutation_type
{
36
FF_IDCT_PERM_NONE
,
37
FF_IDCT_PERM_LIBMPEG2
,
38
FF_IDCT_PERM_SIMPLE
,
39
FF_IDCT_PERM_TRANSPOSE
,
40
FF_IDCT_PERM_PARTTRANS
,
41
FF_IDCT_PERM_SSE2
,
42
};
43
44
void
ff_init_scantable
(
uint8_t
*permutation,
ScanTable
*st,
45
const
uint8_t
*src_scantable);
46
void
ff_init_scantable_permutation
(
uint8_t
*idct_permutation,
47
enum
idct_permutation_type
perm_type);
48
int
ff_init_scantable_permutation_x86
(
uint8_t
*idct_permutation,
49
enum
idct_permutation_type
perm_type);
50
51
typedef
struct
IDCTDSPContext
{
52
/* pixel ops : interface with DCT */
53
void
(*
put_pixels_clamped
)(
const
int16_t *
block
/* align 16 */
,
54
uint8_t
*pixels
/* align 8 */
,
55
ptrdiff_t line_size);
56
void
(*
put_signed_pixels_clamped
)(
const
int16_t *
block
/* align 16 */
,
57
uint8_t
*pixels
/* align 8 */
,
58
ptrdiff_t line_size);
59
void
(*
add_pixels_clamped
)(
const
int16_t *
block
/* align 16 */
,
60
uint8_t
*pixels
/* align 8 */
,
61
ptrdiff_t line_size);
62
63
void
(*
idct
)(int16_t *
block
/* align 16 */
);
64
65
/**
66
* block -> idct -> clip to unsigned 8 bit -> dest.
67
* (-1392, 0, 0, ...) -> idct -> (-174, -174, ...) -> put -> (0, 0, ...)
68
* @param line_size size in bytes of a horizontal line of dest
69
*/
70
void
(*
idct_put
)(
uint8_t
*dest
/* align 8 */
,
71
int
line_size, int16_t *
block
/* align 16 */
);
72
73
/**
74
* block -> idct -> add dest -> clip to unsigned 8 bit -> dest.
75
* @param line_size size in bytes of a horizontal line of dest
76
*/
77
void
(*
idct_add
)(
uint8_t
*dest
/* align 8 */
,
78
int
line_size, int16_t *
block
/* align 16 */
);
79
80
/**
81
* IDCT input permutation.
82
* Several optimized IDCTs need a permutated input (relative to the
83
* normal order of the reference IDCT).
84
* This permutation must be performed before the idct_put/add.
85
* Note, normally this can be merged with the zigzag/alternate scan<br>
86
* An example to avoid confusion:
87
* - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...)
88
* - (x -> reference DCT -> reference IDCT -> x)
89
* - (x -> reference DCT -> simple_mmx_perm = idct_permutation
90
* -> simple_idct_mmx -> x)
91
* - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant
92
* -> simple_idct_mmx -> ...)
93
*/
94
uint8_t
idct_permutation
[64];
95
enum
idct_permutation_type
perm_type
;
96
}
IDCTDSPContext
;
97
98
extern
void
(*
ff_put_pixels_clamped
)(
const
int16_t *
block
,
uint8_t
*pixels, ptrdiff_t line_size);
99
extern
void
(*
ff_add_pixels_clamped
)(
const
int16_t *
block
,
uint8_t
*pixels, ptrdiff_t line_size);
100
101
void
ff_idctdsp_init
(
IDCTDSPContext
*
c
,
AVCodecContext
*avctx);
102
103
void
ff_idctdsp_init_alpha
(
IDCTDSPContext
*
c
,
AVCodecContext
*avctx,
104
unsigned
high_bit_depth);
105
void
ff_idctdsp_init_arm
(
IDCTDSPContext
*
c
,
AVCodecContext
*avctx,
106
unsigned
high_bit_depth);
107
void
ff_idctdsp_init_ppc
(
IDCTDSPContext
*
c
,
AVCodecContext
*avctx,
108
unsigned
high_bit_depth);
109
void
ff_idctdsp_init_x86
(
IDCTDSPContext
*
c
,
AVCodecContext
*avctx,
110
unsigned
high_bit_depth);
111
112
#endif
/* AVCODEC_IDCTDSP_H */
Generated on Sun Mar 8 2015 02:34:53 for FFmpeg by
1.8.2