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