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
avdct.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2014 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
#include "
avcodec.h
"
22
#include "
idctdsp.h
"
23
#include "
fdctdsp.h
"
24
#include "
pixblockdsp.h
"
25
#include "
avdct.h
"
26
27
#define OFFSET(x) offsetof(AVDCT,x)
28
#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
29
//these names are too long to be readable
30
#define V AV_OPT_FLAG_VIDEO_PARAM
31
#define A AV_OPT_FLAG_AUDIO_PARAM
32
#define E AV_OPT_FLAG_ENCODING_PARAM
33
#define D AV_OPT_FLAG_DECODING_PARAM
34
35
static
const
AVOption
avdct_options
[] = {
36
{
"dct"
,
"DCT algorithm"
,
OFFSET
(dct_algo),
AV_OPT_TYPE_INT
, {.i64 =
DEFAULT
}, 0, INT_MAX,
V
|
E
,
"dct"
},
37
{
"auto"
,
"autoselect a good one (default)"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_DCT_AUTO
}, INT_MIN, INT_MAX,
V
|
E
,
"dct"
},
38
{
"fastint"
,
"fast integer (experimental / for debugging)"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_DCT_FASTINT
}, INT_MIN, INT_MAX,
V
|
E
,
"dct"
},
39
{
"int"
,
"accurate integer"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_DCT_INT
}, INT_MIN, INT_MAX,
V
|
E
,
"dct"
},
40
{
"mmx"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_DCT_MMX
}, INT_MIN, INT_MAX,
V
|
E
,
"dct"
},
41
{
"altivec"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_DCT_ALTIVEC
}, INT_MIN, INT_MAX,
V
|
E
,
"dct"
},
42
{
"faan"
,
"floating point AAN DCT (experimental / for debugging)"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_DCT_FAAN
}, INT_MIN, INT_MAX,
V
|
E
,
"dct"
},
43
44
{
"idct"
,
"select IDCT implementation"
,
OFFSET
(idct_algo),
AV_OPT_TYPE_INT
, {.i64 =
DEFAULT
}, 0, INT_MAX,
V
|
E
|
D
,
"idct"
},
45
{
"auto"
,
"autoselect a good one (default)"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_AUTO
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
46
{
"int"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_INT
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
47
{
"simple"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLE
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
48
{
"simplemmx"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLEMMX
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
49
{
"arm"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_ARM
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
50
{
"altivec"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_ALTIVEC
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
51
#if FF_API_ARCH_SH4
52
{
"sh4"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SH4
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
53
#endif
54
{
"simplearm"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLEARM
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
55
{
"simplearmv5te"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLEARMV5TE
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
56
{
"simplearmv6"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLEARMV6
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
57
{
"simpleneon"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLENEON
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
58
#if FF_API_ARCH_ALPHA
59
{
"simplealpha"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLEALPHA
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
60
#endif
61
{
"ipp"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_IPP
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
62
{
"xvid"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_XVID
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
63
{
"xvidmmx"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_XVID
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
64
{
"faani"
,
"floating point AAN IDCT (experimental / for debugging)"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_FAAN
}, INT_MIN, INT_MAX,
V
|
D
|
E
,
"idct"
},
65
{
"simpleauto"
,
"experimental / for debugging"
, 0,
AV_OPT_TYPE_CONST
, {.i64 =
FF_IDCT_SIMPLEAUTO
}, INT_MIN, INT_MAX,
V
|
E
|
D
,
"idct"
},
66
{NULL},
67
};
68
69
static
const
AVClass
avdct_class
= {
70
.
class_name
=
"AVDCT"
,
71
.option =
avdct_options
,
72
.version =
LIBAVUTIL_VERSION_INT
,
73
};
74
75
const
AVClass
*
avcodec_dct_get_class
(
void
)
76
{
77
return
&
avdct_class
;
78
}
79
80
AVDCT
*
avcodec_dct_alloc
(
void
)
81
{
82
AVDCT
*dsp =
av_mallocz
(
sizeof
(
AVDCT
));
83
84
if
(!dsp)
85
return
NULL;
86
87
dsp->
av_class
= &
avdct_class
;
88
av_opt_set_defaults
(dsp);
89
90
return
dsp;
91
}
92
93
int
avcodec_dct_init
(
AVDCT
*dsp)
94
{
95
AVCodecContext
*avctx =
avcodec_alloc_context3
(NULL);
96
97
if
(!avctx)
98
return
AVERROR
(ENOMEM);
99
100
avctx->
idct_algo
= dsp->
idct_algo
;
101
avctx->
dct_algo
= dsp->
dct_algo
;
102
103
#define COPY(src, name) memcpy(&dsp->name, &src.name, sizeof(dsp->name))
104
105
#if CONFIG_IDCTDSP
106
{
107
IDCTDSPContext
idsp;
108
ff_idctdsp_init
(&idsp, avctx);
109
COPY
(idsp,
idct
);
110
COPY
(idsp, idct_permutation);
111
}
112
#endif
113
114
#if CONFIG_FDCTDSP
115
{
116
FDCTDSPContext
fdsp;
117
ff_fdctdsp_init
(&fdsp, avctx);
118
COPY
(fdsp, fdct);
119
}
120
#endif
121
122
#if CONFIG_PIXBLOCKDSP
123
{
124
PixblockDSPContext
pdsp;
125
ff_pixblockdsp_init
(&pdsp, avctx);
126
COPY
(pdsp,
get_pixels
);
127
}
128
#endif
129
130
avcodec_close
(avctx);
131
av_free
(avctx);
132
133
return
0;
134
}
Generated on Sun Sep 14 2014 18:55:52 for FFmpeg by
1.8.2