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