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