74#define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, csp, range, alpha, pts)\
75 c->link_delta = c->w != width || c->h != height || c->pix_fmt != format ||\
76 c->color_space != csp || c->color_range != range || c->alpha_mode != alpha;\
77 c->prev_delta = c->prev_w != width || c->prev_h != height || c->prev_pix_fmt != format ||\
78 c->prev_color_space != csp || c->prev_color_range != range || c->prev_alpha_mode != alpha;\
80 int loglevel = c->prev_delta ? AV_LOG_WARNING : AV_LOG_DEBUG;\
81 av_log(s, loglevel, "Changing video frame properties on the fly is not supported by all filters.\n");\
82 av_log(s, loglevel, "filter context - w: %d h: %d fmt: %d csp: %s range: %s alpha: %s, incoming frame - w: %d h: %d fmt: %d csp: %s range: %s alpha: %s pts_time: %s\n",\
83 c->w, c->h, c->pix_fmt, av_color_space_name(c->color_space), av_color_range_name(c->color_range), av_alpha_mode_name(c->alpha_mode),\
84 width, height, format, av_color_space_name(csp), av_color_range_name(range), av_alpha_mode_name(alpha),\
85 av_ts2timestr(pts, &s->outputs[0]->time_base));\
89 av_log(s, AV_LOG_VERBOSE, "video frame properties congruent with link at pts_time: %s\n", av_ts2timestr(pts, &s->outputs[0]->time_base));\
92 c->prev_pix_fmt = format;\
93 c->prev_color_space = csp;\
94 c->prev_color_range = range;\
95 c->prev_alpha_mode = alpha;\
98#define CHECK_AUDIO_PARAM_CHANGE(s, c, srate, layout, format, pts)\
99 if (c->sample_fmt != format || c->sample_rate != srate ||\
100 av_channel_layout_compare(&c->ch_layout, &layout) || c->channels != layout.nb_channels) {\
101 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",\
102 av_get_sample_fmt_name(c->sample_fmt), c->sample_rate, c->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? c->ch_layout.u.mask : 0, c->channels,\
103 av_get_sample_fmt_name(format), srate, layout.order == AV_CHANNEL_ORDER_NATIVE ? layout.u.mask : 0, layout.nb_channels, av_ts2timestr(pts, &s->outputs[0]->time_base));\
104 av_log(s, AV_LOG_ERROR, "Changing audio frame properties on the fly is not supported.\n");\
105 return AVERROR(EINVAL);\
129 switch (
ctx->filter->outputs[0].type) {
132 s->pix_fmt =
s->prev_pix_fmt = param->
format;
134 if (param->
width > 0)
135 s->w =
s->prev_w = param->
width;
145 if (!
s->hw_frames_ctx)
216 s->nb_failed_requests = 0;
225 refcounted = !!
frame->buf[0];
229 switch (
ctx->outputs[0]->type) {
262 copy->colorspace =
ctx->outputs[0]->colorspace;
264 copy->color_range =
ctx->outputs[0]->color_range;
266 copy->alpha_mode =
ctx->outputs[0]->alpha_mode;
279 if (
s->warning_limit &&
282 "%d buffers queued in %s, something may be wrong.\n",
285 s->warning_limit *= 10;
314 c->warning_limit = 100;
327 if (!
c->hw_frames_ctx) {
329 "to a HW format requires hw_frames_ctx to be non-NULL!\n");
333 if (
c->w <= 0 ||
c->h <= 0) {
337 if (
av_q2d(
c->time_base) <= 0) {
344 c->time_base.num,
c->time_base.den,
c->frame_rate.num,
c->frame_rate.den,
345 c->pixel_aspect.num,
c->pixel_aspect.den,
357#define OFFSET(x) offsetof(BufferSourceContext, x)
358#define A AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_AUDIO_PARAM
359#define V AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
431 n =
s->ch_layout.nb_channels;
434 if (n !=
s->channels) {
436 "Mismatching channel count %d and layout '%s' "
438 s->channels, buf, n);
443 }
else if (!
s->channels) {
445 "channel layout specified\n");
452 if (
s->sample_rate <= 0) {
457 if (!
s->time_base.num)
461 "tb:%d/%d samplefmt:%s samplerate:%d chlayout:%s\n",
463 s->sample_rate, buf);
489 switch (
ctx->outputs[0]->type) {
554 switch (link->
type) {
560 if (
c->hw_frames_ctx) {
577 for (
int i = 0;
i <
c->nb_side_data;
i++) {
607 c->nb_failed_requests++;
621 .p.description =
NULL_IF_CONFIG_SMALL(
"Buffer video frames, and make them accessible to the filterchain."),
622 .p.priv_class = &buffer_class,
642 .p.description =
NULL_IF_CONFIG_SMALL(
"Buffer audio frames, and make them accessible to the filterchain."),
643 .p.priv_class = &abuffer_class,
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
const FFFilter ff_vsrc_buffer
const FFFilter ff_asrc_abuffer
int ff_outlink_get_status(AVFilterLink *link)
Get the status on an output link.
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.
int ff_fmt_is_forced_full_range(enum AVPixelFormat fmt)
Returns true if a YUV pixel format is forced full range (i.e.
int ff_fmt_is_regular_yuv(enum AVPixelFormat fmt)
Returns true if a pixel format is "regular YUV", which includes all pixel formats that are affected b...
static BitStreamFilterLinkInternal * ff_link_internal(AVBitStreamFilterLink *link)
static int init_audio(AVFilterContext *ctx)
static int init_video(AVFilterContext *ctx)
static const AVFilterPad avfilter_asrc_abuffer_outputs[]
static int push_frame(AVFilterGraph *graph)
#define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, csp, range, alpha, pts)
static av_cold int common_init(AVFilterContext *ctx)
static const AVFilterPad avfilter_vsrc_buffer_outputs[]
#define CHECK_AUDIO_PARAM_CHANGE(s, c, srate, layout, format, pts)
static av_cold int init_audio(AVFilterContext *ctx)
static av_cold int init_video(AVFilterContext *ctx)
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
static int activate(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,...)
#define i(width, name, range_min, range_max)
Public libavutil channel layout APIs header.
static const uint16_t channel_layouts[7]
static enum AVPixelFormat pix_fmt
int(* init)(AVBSFContext *ctx)
reference-counted frame API
static size_t ff_framequeue_queued_frames(const FFFrameQueue *fq)
Get the number of queued frames.
@ AV_OPT_TYPE_IMAGE_SIZE
Underlying C type is two consecutive integers.
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_PIXEL_FMT
Underlying C type is enum AVPixelFormat.
@ AV_OPT_TYPE_SAMPLE_FMT
Underlying C type is enum AVSampleFormat.
@ AV_OPT_TYPE_RATIONAL
Underlying C type is AVRational.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_CHLAYOUT
Underlying C type is AVChannelLayout.
int av_buffersrc_get_status(AVFilterContext *ctx)
Returns 0 or a negative AVERROR code.
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_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
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(const 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_side_data_free(AVFrameSideData ***sd, int *nb_sd)
Free all side data entries and their contents, then zeroes out the values which the pointers are poin...
void av_frame_move_ref(AVFrame *dst, AVFrame *src)
Move everything contained in src to dst and reset src.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, const AVFrameSideData *src, unsigned int flags)
Add a new side data entry to an array based on existing side data, taking a reference towards the con...
AVFrame * av_frame_clone(const AVFrame *src)
Create a new frame that references the same data as src.
#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.
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
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.
static av_cold void uninit(AVBitStreamFilterContext *ctx)
static int activate(AVBitStreamFilterContext *ctx)
#define FILTER_OUTPUTS(array)
#define FFERROR_BUFFERSRC_EMPTY
static void ff_outlink_set_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
static FilterLink * ff_filter_link(AVFilterLink *link)
#define AVFILTER_DEFINE_CLASS(fname)
#define FILTER_QUERY_FUNC2(func)
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
Memory handling functions.
const char * av_color_space_name(enum AVColorSpace space)
const char * av_color_range_name(enum AVColorRange range)
const char * av_alpha_mode_name(enum AVAlphaMode mode)
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.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
AVColorRange
Visual content value range.
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
@ AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_NB
Not part of ABI.
@ AVCOL_RANGE_JPEG
Full range content.
AVAlphaMode
Correlation between the alpha channel and color values.
@ AVALPHA_MODE_STRAIGHT
Alpha channel is independent of color values.
@ AVALPHA_MODE_UNSPECIFIED
Unknown alpha handling, or no alpha channel.
@ AVALPHA_MODE_PREMULTIPLIED
Alpha channel is multiplied into color values.
AVPixelFormat
Pixel format.
AVColorSpace
YUV colorspace type.
@ AVCOL_SPC_YCGCO_RE
YCgCo-R, even addition of bits.
@ AVCOL_SPC_BT709
also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B
@ AVCOL_SPC_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
@ AVCOL_SPC_CHROMA_DERIVED_CL
Chromaticity-derived constant luminance system.
@ AVCOL_SPC_BT2020_CL
ITU-R BT2020 constant luminance system.
@ AVCOL_SPC_NB
Not part of ABI.
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
@ AVCOL_SPC_BT2020_NCL
ITU-R BT2020 non-constant luminance system.
@ AVCOL_SPC_SMPTE2085
SMPTE 2085, Y'D'zD'x.
@ AVCOL_SPC_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
@ AVCOL_SPC_FCC
FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
@ AVCOL_SPC_CHROMA_DERIVED_NCL
Chromaticity-derived non-constant luminance system.
@ AVCOL_SPC_SMPTE240M
derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries
@ AVCOL_SPC_YCGCO_RO
YCgCo-R, odd addition of bits.
@ AVCOL_SPC_YCGCO
used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
@ AVCOL_SPC_ICTCP
ITU-R BT.2100-0, ICtCp.
@ AVCOL_SPC_IPT_C2
SMPTE ST 2128, IPT-C2.
static const AVOption buffer_options[]
static int config_props(AVBitStreamFilterLink *link)
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.
AVFrameSideData ** side_data
enum AVColorRange color_range
AVChannelLayout ch_layout
Audio only, the audio channel layout.
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.
enum AVColorSpace color_space
Video only, the YUV colorspace and range.
enum AVAlphaMode alpha_mode
Video only, the alpha mode.
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.
An AVChannelLayout holds information about the channel layout of audio data.
int nb_channels
Number of channels in this 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.
AVChannelLayout ch_layout
channel layout of current buffer (see libavutil/channel_layout.h)
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
AVFrameSideData ** side_data
A filter pad used for either input or output.
Structure to hold side data for an AVFrame.
This structure describes decoded (raw) audio or video data.
This struct describes a set or pool of "hardware" frames (i.e.
uint64_t flags
Combination of AV_PIX_FMT_FLAG_... flags.
Rational number (pair of numerator and denominator).
AVFrameSideData ** side_data
enum AVPixelFormat pix_fmt prev_pix_fmt
enum AVColorRange color_range prev_color_range
enum AVColorSpace color_space prev_color_space
AVRational time_base
time_base to set in the output link
unsigned nb_failed_requests
AVBufferRef * hw_frames_ctx
enum AVSampleFormat sample_fmt
enum AVAlphaMode alpha_mode prev_alpha_mode
AVChannelLayout ch_layout
AVRational frame_rate
frame_rate to set in the output link
FFFrameQueue fifo
Queue of frames waiting to be filtered.
Link properties exposed to filter code, but not external callers.
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable.
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames.
static AVFormatContext * ctx
timestamp utils, mostly useful for debugging/logging purposes
static void copy(const float *p1, float *p2, const int length)