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
67
{
"bits_per_sample"
,
""
,
OFFSET
(bits_per_sample),
AV_OPT_TYPE_INT
, {.i64 = 8 }, 0, 14, 0,},
68
{
NULL
},
69
};
70
71
static
const
AVClass
avdct_class
= {
72
.
class_name
=
"AVDCT"
,
73
.option =
avdct_options
,
74
.version =
LIBAVUTIL_VERSION_INT
,
75
};
76
77
const
AVClass
*
avcodec_dct_get_class
(
void
)
78
{
79
return
&
avdct_class
;
80
}
81
82
AVDCT
*
avcodec_dct_alloc
(
void
)
83
{
84
AVDCT
*dsp =
av_mallocz
(
sizeof
(
AVDCT
));
85
86
if
(!dsp)
87
return
NULL
;
88
89
dsp->
av_class
= &
avdct_class
;
90
av_opt_set_defaults
(dsp);
91
92
return
dsp;
93
}
94
95
int
avcodec_dct_init
(
AVDCT
*dsp)
96
{
97
AVCodecContext
*avctx =
avcodec_alloc_context3
(
NULL
);
98
99
if
(!avctx)
100
return
AVERROR
(ENOMEM);
101
102
avctx->
idct_algo
= dsp->
idct_algo
;
103
avctx->
dct_algo
= dsp->
dct_algo
;
104
avctx->
bits_per_raw_sample
= dsp->
bits_per_sample
;
105
106
#define COPY(src, name) memcpy(&dsp->name, &src.name, sizeof(dsp->name))
107
108
#if CONFIG_IDCTDSP
109
{
110
IDCTDSPContext
idsp;
111
ff_idctdsp_init
(&idsp, avctx);
112
COPY
(idsp,
idct
);
113
COPY
(idsp, idct_permutation);
114
}
115
#endif
116
117
#if CONFIG_FDCTDSP
118
{
119
FDCTDSPContext
fdsp;
120
ff_fdctdsp_init
(&fdsp, avctx);
121
COPY
(fdsp, fdct);
122
}
123
#endif
124
125
#if CONFIG_PIXBLOCKDSP
126
{
127
PixblockDSPContext
pdsp;
128
ff_pixblockdsp_init
(&pdsp, avctx);
129
COPY
(pdsp,
get_pixels
);
130
}
131
#endif
132
133
avcodec_close
(avctx);
134
av_free
(avctx);
135
136
return
0;
137
}
Generated on Sun Mar 8 2015 02:34:49 for FFmpeg by
1.8.2