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
libavfilter
internal.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 AVFILTER_INTERNAL_H
20
#define AVFILTER_INTERNAL_H
21
22
/**
23
* @file
24
* internal API functions
25
*/
26
27
#include "
libavutil/internal.h
"
28
#include "
avfilter.h
"
29
#include "
avfiltergraph.h
"
30
#include "
formats.h
"
31
#include "
thread.h
"
32
#include "
version.h
"
33
#include "
video.h
"
34
#include "
libavcodec/avcodec.h
"
35
36
#define POOL_SIZE 32
37
typedef
struct
AVFilterPool
{
38
AVFilterBufferRef *
pic
[
POOL_SIZE
];
39
int
count
;
40
int
refcount
;
41
int
draining
;
42
}
AVFilterPool
;
43
44
typedef
struct
AVFilterCommand
{
45
double
time
;
///< time expressed in seconds
46
char
*
command
;
///< command
47
char
*
arg
;
///< optional argument for the command
48
int
flags
;
49
struct
AVFilterCommand
*
next
;
50
}
AVFilterCommand
;
51
52
/**
53
* Update the position of a link in the age heap.
54
*/
55
void
ff_avfilter_graph_update_heap
(
AVFilterGraph
*graph,
AVFilterLink
*link);
56
57
#if !FF_API_AVFILTERPAD_PUBLIC
58
/**
59
* A filter pad used for either input or output.
60
*/
61
struct
AVFilterPad
{
62
/**
63
* Pad name. The name is unique among inputs and among outputs, but an
64
* input may have the same name as an output. This may be NULL if this
65
* pad has no need to ever be referenced by name.
66
*/
67
const
char
*
name
;
68
69
/**
70
* AVFilterPad type.
71
*/
72
enum
AVMediaType
type
;
73
74
/**
75
* Callback function to get a video buffer. If NULL, the filter system will
76
* use ff_default_get_video_buffer().
77
*
78
* Input video pads only.
79
*/
80
AVFrame
*(*get_video_buffer)(
AVFilterLink
*link,
int
w,
int
h);
81
82
/**
83
* Callback function to get an audio buffer. If NULL, the filter system will
84
* use ff_default_get_audio_buffer().
85
*
86
* Input audio pads only.
87
*/
88
AVFrame
*(*get_audio_buffer)(
AVFilterLink
*link,
int
nb_samples);
89
90
/**
91
* Filtering callback. This is where a filter receives a frame with
92
* audio/video data and should do its processing.
93
*
94
* Input pads only.
95
*
96
* @return >= 0 on success, a negative AVERROR on error. This function
97
* must ensure that samplesref is properly unreferenced on error if it
98
* hasn't been passed on to another filter.
99
*/
100
int (*
filter_frame
)(
AVFilterLink
*link,
AVFrame
*
frame
);
101
102
/**
103
* Frame poll callback. This returns the number of immediately available
104
* samples. It should return a positive value if the next request_frame()
105
* is guaranteed to return one frame (with no delay).
106
*
107
* Defaults to just calling the source poll_frame() method.
108
*
109
* Output pads only.
110
*/
111
int (*
poll_frame
)(
AVFilterLink
*link);
112
113
/**
114
* Frame request callback. A call to this should result in at least one
115
* frame being output over the given link. This should return zero on
116
* success, and another value on error.
117
*
118
* Output pads only.
119
*/
120
int (*
request_frame
)(
AVFilterLink
*link);
121
122
/**
123
* Link configuration callback.
124
*
125
* For output pads, this should set the link properties such as
126
* width/height. This should NOT set the format property - that is
127
* negotiated between filters by the filter system using the
128
* query_formats() callback before this function is called.
129
*
130
* For input pads, this should check the properties of the link, and update
131
* the filter's internal state as necessary.
132
*
133
* For both input and output filters, this should return zero on success,
134
* and another value on error.
135
*/
136
int (*
config_props
)(
AVFilterLink
*link);
137
138
/**
139
* The filter expects a fifo to be inserted on its input link,
140
* typically because it has a delay.
141
*
142
* input pads only.
143
*/
144
int
needs_fifo
;
145
146
/**
147
* The filter expects writable frames from its input link,
148
* duplicating data buffers if needed.
149
*
150
* input pads only.
151
*/
152
int
needs_writable
;
153
};
154
#endif
155
156
struct
AVFilterGraphInternal
{
157
void
*
thread
;
158
avfilter_execute_func
*
thread_execute
;
159
};
160
161
struct
AVFilterInternal
{
162
avfilter_execute_func
*
execute
;
163
};
164
165
#if FF_API_AVFILTERBUFFER
166
/** default handler for freeing audio/video buffer when there are no references left */
167
void
ff_avfilter_default_free_buffer(AVFilterBuffer *
buf
);
168
#endif
169
170
/** Tell is a format is contained in the provided list terminated by -1. */
171
int
ff_fmt_is_in
(
int
fmt
,
const
int
*fmts);
172
173
/* Functions to parse audio format arguments */
174
175
/**
176
* Parse a pixel format.
177
*
178
* @param ret pixel format pointer to where the value should be written
179
* @param arg string to parse
180
* @param log_ctx log context
181
* @return >= 0 in case of success, a negative AVERROR code on error
182
*/
183
int
ff_parse_pixel_format
(
enum
AVPixelFormat
*
ret
,
const
char
*
arg
,
void
*log_ctx);
184
185
/**
186
* Parse a sample rate.
187
*
188
* @param ret unsigned integer pointer to where the value should be written
189
* @param arg string to parse
190
* @param log_ctx log context
191
* @return >= 0 in case of success, a negative AVERROR code on error
192
*/
193
int
ff_parse_sample_rate
(
int
*
ret
,
const
char
*
arg
,
void
*log_ctx);
194
195
/**
196
* Parse a time base.
197
*
198
* @param ret unsigned AVRational pointer to where the value should be written
199
* @param arg string to parse
200
* @param log_ctx log context
201
* @return >= 0 in case of success, a negative AVERROR code on error
202
*/
203
int
ff_parse_time_base
(
AVRational
*
ret
,
const
char
*
arg
,
void
*log_ctx);
204
205
/**
206
* Parse a sample format name or a corresponding integer representation.
207
*
208
* @param ret integer pointer to where the value should be written
209
* @param arg string to parse
210
* @param log_ctx log context
211
* @return >= 0 in case of success, a negative AVERROR code on error
212
*/
213
int
ff_parse_sample_format
(
int
*
ret
,
const
char
*
arg
,
void
*log_ctx);
214
215
/**
216
* Parse a channel layout or a corresponding integer representation.
217
*
218
* @param ret 64bit integer pointer to where the value should be written.
219
* @param nret integer pointer to the number of channels;
220
* if not NULL, then unknown channel layouts are accepted
221
* @param arg string to parse
222
* @param log_ctx log context
223
* @return >= 0 in case of success, a negative AVERROR code on error
224
*/
225
int
ff_parse_channel_layout
(int64_t *
ret
,
int
*nret,
const
char
*
arg
,
226
void
*log_ctx);
227
228
void
ff_update_link_current_pts
(
AVFilterLink
*link, int64_t
pts
);
229
230
void
ff_command_queue_pop
(
AVFilterContext
*
filter
);
231
232
/* misc trace functions */
233
234
/* #define FF_AVFILTER_TRACE */
235
236
#ifdef FF_AVFILTER_TRACE
237
# define ff_tlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
238
#else
239
# define ff_tlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0)
240
#endif
241
242
#define FF_TPRINTF_START(ctx, func) ff_tlog(NULL, "%-16s: ", #func)
243
244
char
*
ff_get_ref_perms_string
(
char
*
buf
,
size_t
buf_size,
int
perms);
245
246
void
ff_tlog_ref
(
void
*ctx,
AVFrame
*ref,
int
end
);
247
248
void
ff_tlog_link
(
void
*ctx,
AVFilterLink
*link,
int
end
);
249
250
/**
251
* Insert a new pad.
252
*
253
* @param idx Insertion point. Pad is inserted at the end if this point
254
* is beyond the end of the list of pads.
255
* @param count Pointer to the number of pads in the list
256
* @param padidx_off Offset within an AVFilterLink structure to the element
257
* to increment when inserting a new pad causes link
258
* numbering to change
259
* @param pads Pointer to the pointer to the beginning of the list of pads
260
* @param links Pointer to the pointer to the beginning of the list of links
261
* @param newpad The new pad to add. A copy is made when adding.
262
* @return >= 0 in case of success, a negative AVERROR code on error
263
*/
264
int
ff_insert_pad
(
unsigned
idx,
unsigned
*
count
,
size_t
padidx_off,
265
AVFilterPad
**pads,
AVFilterLink
***links,
266
AVFilterPad
*newpad);
267
268
/** Insert a new input pad for the filter. */
269
static
inline
int
ff_insert_inpad
(
AVFilterContext
*f,
unsigned
index
,
270
AVFilterPad
*p)
271
{
272
int
ret
=
ff_insert_pad
(index, &f->
nb_inputs
, offsetof(
AVFilterLink
, dstpad),
273
&f->
input_pads
, &f->
inputs
, p);
274
#if FF_API_FOO_COUNT
275
FF_DISABLE_DEPRECATION_WARNINGS
276
f->input_count = f->
nb_inputs
;
277
FF_ENABLE_DEPRECATION_WARNINGS
278
#endif
279
return
ret
;
280
}
281
282
/** Insert a new output pad for the filter. */
283
static
inline
int
ff_insert_outpad
(
AVFilterContext
*f,
unsigned
index
,
284
AVFilterPad
*p)
285
{
286
int
ret
=
ff_insert_pad
(index, &f->
nb_outputs
, offsetof(
AVFilterLink
, srcpad),
287
&f->
output_pads
, &f->
outputs
, p);
288
#if FF_API_FOO_COUNT
289
FF_DISABLE_DEPRECATION_WARNINGS
290
f->output_count = f->
nb_outputs
;
291
FF_ENABLE_DEPRECATION_WARNINGS
292
#endif
293
return
ret
;
294
}
295
296
/**
297
* Poll a frame from the filter chain.
298
*
299
* @param link the input link
300
* @return the number of immediately available frames, a negative
301
* number in case of error
302
*/
303
int
ff_poll_frame
(
AVFilterLink
*link);
304
305
/**
306
* Request an input frame from the filter at the other end of the link.
307
*
308
* @param link the input link
309
* @return zero on success
310
*/
311
int
ff_request_frame
(
AVFilterLink
*link);
312
313
#define AVFILTER_DEFINE_CLASS(fname) \
314
static const AVClass fname##_class = { \
315
.class_name = #fname, \
316
.item_name = av_default_item_name, \
317
.option = fname##_options, \
318
.version = LIBAVUTIL_VERSION_INT, \
319
.category = AV_CLASS_CATEGORY_FILTER, \
320
}
321
322
AVFilterBufferRef *
ff_copy_buffer_ref
(
AVFilterLink
*outlink,
323
AVFilterBufferRef *ref);
324
325
/**
326
* Find the index of a link.
327
*
328
* I.e. find i such that link == ctx->(in|out)puts[i]
329
*/
330
#define FF_INLINK_IDX(link) ((int)((link)->dstpad - (link)->dst->input_pads))
331
#define FF_OUTLINK_IDX(link) ((int)((link)->srcpad - (link)->src->output_pads))
332
333
int
ff_buffersink_read_compat
(
AVFilterContext
*ctx, AVFilterBufferRef **
buf
);
334
int
ff_buffersink_read_samples_compat
(
AVFilterContext
*ctx, AVFilterBufferRef **pbuf,
335
int
nb_samples);
336
/**
337
* Send a frame of data to the next filter.
338
*
339
* @param link the output link over which the data is being sent
340
* @param frame a reference to the buffer of data being sent. The
341
* receiving filter will free this reference when it no longer
342
* needs it or pass it on to the next filter.
343
*
344
* @return >= 0 on success, a negative AVERROR on error. The receiving filter
345
* is responsible for unreferencing frame in case of error.
346
*/
347
int
ff_filter_frame
(
AVFilterLink
*link,
AVFrame
*
frame
);
348
349
/**
350
* Flags for AVFilterLink.flags.
351
*/
352
enum
{
353
354
/**
355
* Frame requests may need to loop in order to be fulfilled.
356
* A filter must set this flags on an output link if it may return 0 in
357
* request_frame() without filtering a frame.
358
*/
359
FF_LINK_FLAG_REQUEST_LOOP
= 1,
360
361
};
362
363
/**
364
* Allocate a new filter context and return it.
365
*
366
* @param filter what filter to create an instance of
367
* @param inst_name name to give to the new filter context
368
*
369
* @return newly created filter context or NULL on failure
370
*/
371
AVFilterContext
*
ff_filter_alloc
(
const
AVFilter
*
filter
,
const
char
*inst_name);
372
373
/**
374
* Remove a filter from a graph;
375
*/
376
void
ff_filter_graph_remove_filter
(
AVFilterGraph
*graph,
AVFilterContext
*
filter
);
377
378
/**
379
* Normalize the qscale factor
380
* FIXME the H264 qscale is a log based scale, mpeg1/2 is not, the code below
381
* cannot be optimal
382
*/
383
static
inline
int
ff_norm_qscale
(
int
qscale,
int
type
)
384
{
385
switch
(type) {
386
case
FF_QSCALE_TYPE_MPEG1
:
return
qscale;
387
case
FF_QSCALE_TYPE_MPEG2
:
return
qscale >> 1;
388
case
FF_QSCALE_TYPE_H264
:
return
qscale >> 2;
389
case
FF_QSCALE_TYPE_VP56
:
return
(63 - qscale + 2) >> 2;
390
}
391
return
qscale;
392
}
393
394
#endif
/* AVFILTER_INTERNAL_H */
Generated on Sun Mar 8 2015 02:34:54 for FFmpeg by
1.8.2