54 #if FF_API_SWS_PARAM_OPTION
70 #define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, pts)\
71 if (c->w != width || c->h != height || c->pix_fmt != format) {\
72 av_log(s, AV_LOG_INFO, "filter context - w: %d h: %d fmt: %d, incoming frame - w: %d h: %d fmt: %d pts_time: %s\n",\
73 c->w, c->h, c->pix_fmt, width, height, format, av_ts2timestr(pts, &s->outputs[0]->time_base));\
74 av_log(s, AV_LOG_WARNING, "Changing video frame properties on the fly is not supported by all filters.\n");\
77 #define CHECK_AUDIO_PARAM_CHANGE(s, c, srate, ch_layout, ch_count, format, pts)\
78 if (c->sample_fmt != format || c->sample_rate != srate ||\
79 c->channel_layout != ch_layout || c->channels != ch_count) {\
80 av_log(s, AV_LOG_INFO, "filter context - fmt: %s r: %d layout: %"PRIX64" ch: %d, incoming frame - fmt: %s r: %d layout: %"PRIX64" ch: %d pts_time: %s\n",\
81 av_get_sample_fmt_name(c->sample_fmt), c->sample_rate, c->channel_layout, c->channels,\
82 av_get_sample_fmt_name(format), srate, ch_layout, ch_count, av_ts2timestr(pts, &s->outputs[0]->time_base));\
83 av_log(s, AV_LOG_ERROR, "Changing audio frame properties on the fly is not supported.\n");\
84 return AVERROR(EINVAL);\
105 switch (
ctx->filter->outputs[0].type) {
110 if (param->
width > 0)
121 if (!
s->hw_frames_ctx)
174 av_log(
ctx,
AV_LOG_ERROR,
"Layout indicates a different number of channels than actually present\n");
178 s->nb_failed_requests = 0;
189 switch (
ctx->outputs[0]->type) {
254 c->time_base.num,
c->time_base.den,
c->frame_rate.num,
c->frame_rate.den,
255 c->pixel_aspect.num,
c->pixel_aspect.den);
257 #if FF_API_SWS_PARAM_OPTION
270 #define OFFSET(x) offsetof(BufferSourceContext, x)
271 #define A AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_AUDIO_PARAM
272 #define V AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
283 #if FF_API_SWS_PARAM_OPTION
312 if (
s->channel_layout_str ||
s->channel_layout) {
315 if (!
s->channel_layout) {
317 if (!
s->channel_layout) {
319 s->channel_layout_str);
325 if (n !=
s->channels) {
327 "Mismatching channel count %d and layout '%s' "
329 s->channels,
s->channel_layout_str, n);
334 }
else if (!
s->channels) {
336 "channel layout specified\n");
340 if (!
s->time_base.num)
344 "tb:%d/%d samplefmt:%s samplerate:%d chlayout:%s\n",
346 s->sample_rate,
s->channel_layout_str);
365 switch (
ctx->outputs[0]->type) {
379 c->channel_layout ?
c->channel_layout :
396 switch (link->
type) {
402 if (
c->hw_frames_ctx) {
409 if (!
c->channel_layout)
427 c->nb_failed_requests++;
443 .description =
NULL_IF_CONFIG_SMALL(
"Buffer video frames, and make them accessible to the filterchain."),
452 .priv_class = &buffer_class,
467 .description =
NULL_IF_CONFIG_SMALL(
"Buffer audio frames, and make them accessible to the filterchain."),
476 .priv_class = &abuffer_class,
static const AVFilterPad inputs[]
static const AVFilterPad outputs[]
simple assert() macros that are a bit more flexible than ISO C assert().
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
void ff_avfilter_link_set_in_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
Main libavfilter public API header.
int ff_filter_graph_run_once(AVFilterGraph *graph)
Run one round of processing on a filter graph.
static av_cold int init(AVCodecContext *avctx)
static const AVFilterPad avfilter_asrc_abuffer_outputs[]
static int push_frame(AVFilterGraph *graph)
#define CHECK_AUDIO_PARAM_CHANGE(s, c, srate, ch_layout, ch_count, format, pts)
#define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, pts)
static int query_formats(AVFilterContext *ctx)
AVFILTER_DEFINE_CLASS(buffer)
static const AVFilterPad avfilter_vsrc_buffer_outputs[]
static int request_frame(AVFilterLink *link)
static const AVOption buffer_options[]
static av_cold int init_audio(AVFilterContext *ctx)
static av_cold int init_video(AVFilterContext *ctx)
static av_cold void uninit(AVFilterContext *ctx)
static const AVOption abuffer_options[]
static int config_props(AVFilterLink *link)
Memory buffer source API.
#define flags(name, subs,...)
audio channel layout utility functions
common internal and external API header
static const uint16_t channel_layouts[7]
static enum AVPixelFormat pix_fmt
reference-counted frame API
@ AV_OPT_TYPE_IMAGE_SIZE
offset must point to two consecutive integers
uint64_t av_get_channel_layout(const char *name)
Return a channel layout id that matches name, or 0 if no match is found.
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param)
Initialize the buffersrc or abuffersrc filter with the provided parameters.
int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
Add a frame to the buffer source.
int attribute_align_arg av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame)
Add a frame to the buffer source.
int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags)
Close the buffer source after EOF.
int attribute_align_arg av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame)
Add a frame to the buffer source.
unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src)
Get the number of failed requests.
AVBufferSrcParameters * av_buffersrc_parameters_alloc(void)
Allocate a new AVBufferSrcParameters instance.
@ AV_BUFFERSRC_FLAG_KEEP_REF
Keep a reference to the frame.
@ AV_BUFFERSRC_FLAG_PUSH
Immediately push the frame to the output.
@ AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT
Do not check for format changes.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_EOF
End of file.
void av_frame_move_ref(AVFrame *dst, AVFrame *src)
Move everything contained in src to dst and reset src.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
AVSampleFormat
Audio sample formats.
#define AV_NOPTS_VALUE
Undefined timestamp value.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define attribute_align_arg
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
AVPixelFormat
Pixel format.
A reference to a data buffer.
This structure contains the parameters describing the frames that will be passed to this filter.
AVRational frame_rate
Video only, the frame rate of the input video.
int sample_rate
Audio only, the audio sampling rate in samples per second.
int format
video: the pixel format, value corresponds to enum AVPixelFormat audio: the sample format,...
int width
Video only, the display dimensions of the input frames.
AVRational time_base
The timebase to be used for the timestamps on the input frames.
AVBufferRef * hw_frames_ctx
Video with a hwaccel pixel format only.
AVRational sample_aspect_ratio
Video only, the sample (pixel) aspect ratio.
uint64_t channel_layout
Audio only, the audio channel layout.
Describe the class of an AVClass context structure.
A list of supported channel layouts.
void * priv
private data for use by the filter
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
enum AVMediaType type
filter media type
AVFilterContext * src
source filter
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link.
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames.
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable; if left to 0/0,...
uint64_t channel_layout
channel layout of current buffer (see libavutil/channel_layout.h)
A filter pad used for either input or output.
const char * name
Pad name.
const char * name
Filter name.
This structure describes decoded (raw) audio or video data.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
int channels
number of audio channels, only used for audio.
uint64_t channel_layout
Channel layout of the audio data.
int sample_rate
Sample rate of the audio data.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
Rational number (pair of numerator and denominator).
enum AVPixelFormat pix_fmt
AVRational time_base
time_base to set in the output link
unsigned nb_failed_requests
AVBufferRef * hw_frames_ctx
enum AVSampleFormat sample_fmt
char * channel_layout_str
AVRational frame_rate
frame_rate to set in the output link
timestamp utils, mostly useful for debugging/logging purposes
static void copy(const float *p1, float *p2, const int length)