44 #define DURATION_LONGEST 0 45 #define DURATION_SHORTEST 1 46 #define DURATION_FIRST 2 48 #define OFFSET(x) offsetof(InterleaveContext, x) 50 #define DEFINE_OPTIONS(filt_name, flags_) \ 51 static const AVOption filt_name##_options[] = { \ 52 { "nb_inputs", "set number of inputs", OFFSET(nb_inputs), AV_OPT_TYPE_INT, {.i64 = 2}, 1, INT_MAX, .flags = flags_ }, \ 53 { "n", "set number of inputs", OFFSET(nb_inputs), AV_OPT_TYPE_INT, {.i64 = 2}, 1, INT_MAX, .flags = flags_ }, \ 54 { "duration", "how to determine the end-of-stream", \ 55 OFFSET(duration_mode), AV_OPT_TYPE_INT, { .i64 = DURATION_LONGEST }, 0, 2, flags_, "duration" }, \ 56 { "longest", "Duration of longest input", 0, AV_OPT_TYPE_CONST, { .i64 = DURATION_LONGEST }, 0, 0, flags_, "duration" }, \ 57 { "shortest", "Duration of shortest input", 0, AV_OPT_TYPE_CONST, { .i64 = DURATION_SHORTEST }, 0, 0, flags_, "duration" }, \ 58 { "first", "Duration of first input", 0, AV_OPT_TYPE_CONST, { .i64 = DURATION_FIRST }, 0, 0, flags_, "duration" }, \ 66 int64_t q_pts,
pts = INT64_MAX;
67 int i, nb_eofs = 0, input_idx = -1;
68 int nb_inputs_with_frames = 0;
75 nb_inputs_with_frames++;
78 if (nb_inputs_with_frames > 0) {
90 "NOPTS value for input frame cannot be accepted, frame discarded\n");
105 if (input_idx >= 0) {
160 switch (outpad->
type) {
191 outlink->
w = inlink0->
w;
192 outlink->
h = inlink0->
h;
199 if (outlink->
w != inlink->
w ||
200 outlink->
h != inlink->
h ||
204 "(size %dx%d, SAR %d:%d) do not match the corresponding " 205 "output link parameters (%dx%d, SAR %d:%d)\n",
209 outlink->
w, outlink->
h,
219 #if CONFIG_INTERLEAVE_FILTER 234 .
name =
"interleave",
241 .priv_class = &interleave_class,
247 #if CONFIG_AINTERLEAVE_FILTER 262 .
name =
"ainterleave",
268 .
outputs = ainterleave_outputs,
269 .priv_class = &ainterleave_class,
int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe)
Take a frame from the link's FIFO and update the link's stats.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static int activate(AVFilterContext *ctx)
#define AV_LOG_WARNING
Something somehow does not look correct.
#define FF_FILTER_FORWARD_STATUS_BACK_ALL(outlink, filter)
Forward the status on an output link to all input links.
Main libavfilter public API header.
int h
agreed upon image height
#define AVFILTER_FLAG_DYNAMIC_INPUTS
The number of the filter inputs is not determined just by AVFilter.inputs.
#define AV_OPT_FLAG_AUDIO_PARAM
AVFrame * ff_null_get_video_buffer(AVFilterLink *link, int w, int h)
AVFilter ff_af_ainterleave
#define FFERROR_NOT_READY
Filters implementation helper functions.
enum AVMediaType type
AVFilterPad type.
static int config_output(AVFilterLink *outlink)
static void ff_outlink_set_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
void ff_inlink_request_frame(AVFilterLink *link)
Mark that a frame is wanted on the link.
static int ff_outlink_frame_wanted(AVFilterLink *link)
Test if a frame is wanted on an output link.
const char * name
Pad name.
AVFilterLink ** inputs
array of pointers to input links
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
AVFilter ff_vf_interleave
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
#define AVERROR_EOF
End of file.
#define DEFINE_OPTIONS(filt_name, flags_)
A filter pad used for either input or output.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
A link between two filters.
AVFilterPad * input_pads
array of input pads
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable; if left to 0/0, will be automatically copied from the first input of the source filter if it exists.
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void * priv
private data for use by the filter
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
simple assert() macros that are a bit more flexible than ISO C assert().
int w
agreed upon image width
char * av_asprintf(const char *fmt,...)
AVFrame *(* get_video_buffer)(AVFilterLink *link, int w, int h)
Callback function to get a video buffer.
unsigned nb_inputs
number of input pads
static av_cold void uninit(AVFilterContext *ctx)
#define DURATION_SHORTEST
static av_cold int init(AVFilterContext *ctx)
AVFilterContext * src
source filter
AVFrame * ff_null_get_audio_buffer(AVFilterLink *link, int nb_samples)
get_audio_buffer() handler for filters which simply pass audio along
AVFrame * ff_inlink_peek_frame(AVFilterLink *link, size_t idx)
Access a frame in the link fifo without consuming it.
static const AVFilterPad outputs[]
int format
agreed upon media format
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
#define AV_OPT_FLAG_VIDEO_PARAM
static av_always_inline void RENAME() interleave(TYPE *dst, TYPE *src0, TYPE *src1, int w2, int add, int shift)
AVFrame *(* get_audio_buffer)(AVFilterLink *link, int nb_samples)
Callback function to get an audio buffer.
Describe the class of an AVClass context structure.
int ff_outlink_get_status(AVFilterLink *link)
Get the status on an output link.
Rational number (pair of numerator and denominator).
const char * name
Filter name.
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
size_t ff_inlink_queued_frames(AVFilterLink *link)
Get the number of frames available on the link.
AVFilterLink ** outputs
array of pointers to output links
#define flags(name, subs,...)
enum AVMediaType type
filter media type
void ff_filter_set_ready(AVFilterContext *filter, unsigned priority)
Mark a filter ready and schedule it for activation.
#define AVFILTER_DEFINE_CLASS(fname)
const AVFilterPad * outputs
List of outputs, terminated by a zeroed element.
const AVFilter * filter
the AVFilter of which this is an instance
#define AV_NOPTS_VALUE
Undefined timestamp value.
static int ff_insert_inpad(AVFilterContext *f, unsigned index, AVFilterPad *p)
Insert a new input pad for the filter.