61 int err, device_is_derived;
70 device_is_derived = 0;
89 "device context: %d.\n", err);
92 device_is_derived = 1;
109 "required to map to a hardware format.\n");
120 "frames context: %d.\n", err);
150 "target frames context: %d.\n", err);
161 "derived source frames context: %d.\n", err);
190 "hwmap: from %s (%s) to %s.\n",
205 "required to create new frames with reverse "
228 "context for reverse mapping: %d.\n", err);
234 "context (a device, or frames on input).\n");
244 outlink->
w = inlink->
w;
245 outlink->
h = inlink->
h;
247 if (device_is_derived)
252 if (device_is_derived)
271 "frame for software mapping.\n");
284 "software: %d.\n", err);
364 #define OFFSET(x) offsetof(HWMapContext, x)
365 #define FLAGS (AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM)
367 {
"mode",
"Frame mapping mode",
370 0, INT_MAX,
FLAGS,
"mode" },
372 {
"read",
"Mapping should be readable",
374 INT_MIN, INT_MAX,
FLAGS,
"mode" },
375 {
"write",
"Mapping should be writeable",
377 INT_MIN, INT_MAX,
FLAGS,
"mode" },
378 {
"overwrite",
"Mapping will always overwrite the entire frame",
380 INT_MIN, INT_MAX,
FLAGS,
"mode" },
381 {
"direct",
"Mapping should not involve any copying",
383 INT_MIN, INT_MAX,
FLAGS,
"mode" },
385 {
"derive_device",
"Derive a new device of this type",
388 {
"reverse",
"Map in reverse (create and allocate in the sink)",
390 { .i64 = 0 }, 0, 1,
FLAGS },
421 .priv_class = &hwmap_class,
#define FF_FILTER_FLAG_HWFRAME_AWARE
The filter is aware of hardware frames, and any hardware frame context should not be automatically pr...
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
static int hwmap_filter_frame(AVFilterLink *link, AVFrame *input)
Main libavfilter public API header.
enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name)
Look up an AVHWDeviceType by name.
int h
agreed upon image height
int width
The allocated dimensions of the frames in this pool.
AVBufferRef * hw_device_ctx
For filters which will create hardware frames, sets the device the filter should create them in...
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type.
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
static av_cold void hwmap_uninit(AVFilterContext *avctx)
The mapping must be readable.
AVBufferRef * hw_frames_ctx
For hwaccel-format frames, this should be a reference to the AVHWFramesContext describing the frame...
const char * name
Pad name.
AVFilterLink ** inputs
array of pointers to input links
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, enum AVPixelFormat format, AVBufferRef *derived_device_ctx, AVBufferRef *source_frame_ctx, int flags)
Create and initialise an AVHWFramesContext as a mapping of another existing AVHWFramesContext on a di...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
static int hwmap_query_formats(AVFilterContext *avctx)
static uint32_t reverse(uint32_t num, int bits)
AVFILTER_DEFINE_CLASS(hwmap)
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
static const AVOption hwmap_options[]
static const AVFilterPad hwmap_inputs[]
A filter pad used for either input or output.
A link between two filters.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
The mapping must be direct.
AVBufferRef * hwframes_ref
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
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
AVFilterFormats * in_formats
Lists of formats and channel layouts supported by the input and output filters respectively.
int av_hwframe_ctx_init(AVBufferRef *ref)
Finalize the context before use.
int w
agreed upon image width
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
int initial_pool_size
Initial size of the frame pool.
AVBufferRef * hw_frames_ctx
For hwaccel pixel formats, this should be a reference to the AVHWFramesContext describing the frames...
int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ref_ptr, enum AVHWDeviceType type, AVBufferRef *src_ref, int flags)
Create a new device of the specified type from an existing device.
AVFilterContext * src
source filter
static const AVFilterPad outputs[]
int format
agreed upon media format
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
static AVFrame * hwmap_get_buffer(AVFilterLink *inlink, int w, int h)
static const AVFilterPad inputs[]
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
uint8_t * data
The data buffer.
Describe the class of an AVClass context structure.
This struct describes a set or pool of "hardware" frames (i.e.
refcounted data buffer API
const char * name
Filter name.
const VDPAUPixFmtMap * map
static const AVFilterPad hwmap_outputs[]
AVFilterLink ** outputs
array of pointers to output links
AVBufferRef * device_ref
A reference to the parent AVHWDeviceContext.
AVFrame * ff_default_get_video_buffer(AVFilterLink *link, int w, int h)
static int hwmap_config_output(AVFilterLink *outlink)
A reference to a data buffer.
static int query_formats(AVFilterContext *ctx)
int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags)
Map a hardware frame.
The mapped frame will be overwritten completely in subsequent operations, so the current frame data n...
AVBufferRef * av_hwframe_ctx_alloc(AVBufferRef *device_ref_in)
Allocate an AVHWFramesContext tied to a given device context.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
The mapping must be writeable.
AVFilterContext * dst
dest filter
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.
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames.
char * derive_device_type
mode
Use these values in ebur128_init (or'ed).
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
AVFilterFormats * out_formats