FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
vda.h
Go to the documentation of this file.
1
/*
2
* VDA HW acceleration
3
*
4
* copyright (c) 2011 Sebastien Zwickert
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_VDA_H
24
#define AVCODEC_VDA_H
25
26
/**
27
* @file
28
* @ingroup lavc_codec_hwaccel_vda
29
* Public libavcodec VDA header.
30
*/
31
32
#include <stdint.h>
33
34
// emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes
35
// http://openradar.appspot.com/8026390
36
#undef __GNUC_STDC_INLINE__
37
38
#define Picture QuickdrawPicture
39
#include <VideoDecodeAcceleration/VDADecoder.h>
40
#undef Picture
41
42
#include "
libavcodec/version.h
"
43
44
#if FF_API_VDA_ASYNC
45
#include <pthread.h>
46
#endif
47
48
/**
49
* @defgroup lavc_codec_hwaccel_vda VDA
50
* @ingroup lavc_codec_hwaccel
51
*
52
* @{
53
*/
54
55
#if FF_API_VDA_ASYNC
56
/**
57
* This structure is used to store decoded frame information and data.
58
*
59
* @deprecated Use synchronous decoding mode.
60
*/
61
typedef
struct
{
62
/**
63
* The PTS of the frame.
64
*
65
* - encoding: unused
66
* - decoding: Set/Unset by libavcodec.
67
*/
68
int64_t pts;
69
70
/**
71
* The CoreVideo buffer that contains the decoded data.
72
*
73
* - encoding: unused
74
* - decoding: Set/Unset by libavcodec.
75
*/
76
CVPixelBufferRef cv_buffer;
77
78
/**
79
* A pointer to the next frame.
80
*
81
* - encoding: unused
82
* - decoding: Set/Unset by libavcodec.
83
*/
84
struct
vda_frame *next_frame;
85
} vda_frame;
86
#endif
87
88
/**
89
* This structure is used to provide the necessary configurations and data
90
* to the VDA FFmpeg HWAccel implementation.
91
*
92
* The application must make it available as AVCodecContext.hwaccel_context.
93
*/
94
struct
vda_context
{
95
/**
96
* VDA decoder object.
97
*
98
* - encoding: unused
99
* - decoding: Set/Unset by libavcodec.
100
*/
101
VDADecoder
decoder
;
102
103
/**
104
* The Core Video pixel buffer that contains the current image data.
105
*
106
* encoding: unused
107
* decoding: Set by libavcodec. Unset by user.
108
*/
109
CVPixelBufferRef
cv_buffer
;
110
111
/**
112
* Use the hardware decoder in synchronous mode.
113
*
114
* encoding: unused
115
* decoding: Set by user.
116
*/
117
int
use_sync_decoding
;
118
119
#if FF_API_VDA_ASYNC
120
/**
121
* VDA frames queue ordered by presentation timestamp.
122
*
123
* @deprecated Use synchronous decoding mode.
124
*
125
* - encoding: unused
126
* - decoding: Set/Unset by libavcodec.
127
*/
128
vda_frame *queue;
129
130
/**
131
* Mutex for locking queue operations.
132
*
133
* @deprecated Use synchronous decoding mode.
134
*
135
* - encoding: unused
136
* - decoding: Set/Unset by libavcodec.
137
*/
138
pthread_mutex_t
queue_mutex;
139
#endif
140
141
/**
142
* The frame width.
143
*
144
* - encoding: unused
145
* - decoding: Set/Unset by user.
146
*/
147
int
width
;
148
149
/**
150
* The frame height.
151
*
152
* - encoding: unused
153
* - decoding: Set/Unset by user.
154
*/
155
int
height
;
156
157
/**
158
* The frame format.
159
*
160
* - encoding: unused
161
* - decoding: Set/Unset by user.
162
*/
163
int
format
;
164
165
/**
166
* The pixel format for output image buffers.
167
*
168
* - encoding: unused
169
* - decoding: Set/Unset by user.
170
*/
171
OSType
cv_pix_fmt_type
;
172
173
/**
174
* The current bitstream buffer.
175
*
176
* - encoding: unused
177
* - decoding: Set/Unset by libavcodec.
178
*/
179
uint8_t
*
priv_bitstream
;
180
181
/**
182
* The current size of the bitstream.
183
*
184
* - encoding: unused
185
* - decoding: Set/Unset by libavcodec.
186
*/
187
int
priv_bitstream_size
;
188
189
/**
190
* The reference size used for fast reallocation.
191
*
192
* - encoding: unused
193
* - decoding: Set/Unset by libavcodec.
194
*/
195
int
priv_allocated_size
;
196
};
197
198
/** Create the video decoder. */
199
int
ff_vda_create_decoder
(
struct
vda_context
*vda_ctx,
200
uint8_t
*extradata,
201
int
extradata_size);
202
203
/** Destroy the video decoder. */
204
int
ff_vda_destroy_decoder
(
struct
vda_context
*vda_ctx);
205
206
#if FF_API_VDA_ASYNC
207
/**
208
* Return the top frame of the queue.
209
*
210
* @deprecated Use synchronous decoding mode.
211
*/
212
vda_frame *ff_vda_queue_pop(
struct
vda_context
*vda_ctx);
213
214
/**
215
* Release the given frame.
216
*
217
* @deprecated Use synchronous decoding mode.
218
*/
219
void
ff_vda_release_vda_frame(vda_frame *
frame
);
220
#endif
221
222
/**
223
* @}
224
*/
225
226
#endif
/* AVCODEC_VDA_H */
Generated on Sat May 25 2013 04:01:12 for FFmpeg by
1.8.2