FFmpeg
|
#include "config.h"
#include "buffer.h"
#include "common.h"
#include "hwcontext.h"
#include "hwcontext_internal.h"
#include "imgutils.h"
#include "log.h"
#include "mem.h"
#include "pixdesc.h"
#include "pixfmt.h"
Go to the source code of this file.
Variables | |
static const HWContextType * | hw_table [] |
static const AVClass | hwdevice_ctx_class |
static const AVClass | hwframe_ctx_class |
Definition at line 56 of file hwcontext.c.
Referenced by av_hwdevice_ctx_alloc().
AVBufferRef* av_hwdevice_ctx_alloc | ( | enum AVHWDeviceType | type | ) |
Allocate an AVHWDeviceContext for a given hardware type.
type | the type of the hardware device to allocate. |
Definition at line 74 of file hwcontext.c.
Referenced by av_hwdevice_ctx_create(), ff_vaapi_decode_init(), and qsv_init_child_ctx().
int av_hwdevice_ctx_init | ( | AVBufferRef * | ref | ) |
Finalize the device context before use.
This function must be called after the context is filled with all the required information and before it is used in any way.
ref | a reference to the AVHWDeviceContext |
Definition at line 132 of file hwcontext.c.
Referenced by av_hwdevice_ctx_create(), and qsv_init_child_ctx().
Definition at line 156 of file hwcontext.c.
Referenced by av_hwframe_ctx_alloc().
AVBufferRef* av_hwframe_ctx_alloc | ( | AVBufferRef * | device_ctx | ) |
Allocate an AVHWFramesContext tied to a given device context.
device_ctx | a reference to a AVHWDeviceContext. This function will make a new reference for internal use, the one passed to the function remains owned by the caller. |
Definition at line 182 of file hwcontext.c.
Referenced by av_hwframe_ctx_create_derived(), cudaupload_config_output(), cuvid_decode_init(), cuvid_init(), deint_vaapi_config_output(), dxva2_create_decoder(), ff_vaapi_decode_init(), ff_vdpau_common_init(), hwmap_config_output(), hwupload_config_output(), init_out_pool(), init_stage(), qsv_frame_alloc(), qsv_init(), qsv_init_child_ctx(), scale_vaapi_config_output(), vaapi_decode_init(), vaapi_encode_create_recon_frames(), and vdpau_alloc().
|
static |
Definition at line 240 of file hwcontext.c.
Referenced by av_hwframe_ctx_init().
int av_hwframe_ctx_init | ( | AVBufferRef * | ref | ) |
Finalize the context before use.
This function must be called after the context is filled with all the required information and before it is attached to any frames.
ref | a reference to the AVHWFramesContext |
Definition at line 268 of file hwcontext.c.
Referenced by av_hwframe_ctx_create_derived(), cudaupload_config_output(), cuvid_init(), deint_vaapi_config_output(), dxva2_create_decoder(), ff_vaapi_decode_init(), ff_vdpau_common_init(), hwmap_config_output(), hwupload_config_output(), init_out_pool(), init_stage(), qsv_frame_alloc(), qsv_init(), qsv_init_child_ctx(), scale_vaapi_config_output(), vaapi_decode_init(), vaapi_encode_create_recon_frames(), and vdpau_alloc().
int av_hwframe_transfer_get_formats | ( | AVBufferRef * | hwframe_ctx, |
enum AVHWFrameTransferDirection | dir, | ||
enum AVPixelFormat ** | formats, | ||
int | flags | ||
) |
Get a list of possible source or target formats usable in av_hwframe_transfer_data().
hwframe_ctx | the frame context to obtain the information for |
dir | the direction of the transfer |
formats | the pointer to the output format list will be written here. The list is terminated with AV_PIX_FMT_NONE and must be freed by the caller when no longer needed using av_free(). If this function returns successfully, the format list will have at least one item (not counting the terminator). On failure, the contents of this pointer are unspecified. |
flags | currently unused, should be set to zero |
Definition at line 320 of file hwcontext.c.
Referenced by hwdownload_config_output(), and transfer_data_alloc().
Definition at line 332 of file hwcontext.c.
Referenced by av_hwframe_transfer_data().
Copy data to or from a hw surface.
At least one of dst/src must have an AVHWFramesContext attached.
If src has an AVHWFramesContext attached, then the format of dst (if set) must use one of the formats returned by av_hwframe_transfer_get_formats(src, AV_HWFRAME_TRANSFER_DIRECTION_FROM). If dst has an AVHWFramesContext attached, then the format of src must use one of the formats returned by av_hwframe_transfer_get_formats(dst, AV_HWFRAME_TRANSFER_DIRECTION_TO)
dst may be "clean" (i.e. with data/buf pointers unset), in which case the data buffers will be allocated by this function using av_frame_get_buffer(). If dst->format is set, then this format will be used, otherwise (when dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen.
The two frames must have matching allocated dimensions (i.e. equal to AVHWFramesContext.width/height), since not all device types support transferring a sub-rectangle of the whole surface. The display dimensions (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but also have to be equal for both frames. When the display dimensions are smaller than the allocated dimensions, the content of the padding in the destination frame is unspecified.
dst | the destination frame. dst is not touched on failure. |
src | the source frame. |
flags | currently unused, should be set to zero |
Definition at line 378 of file hwcontext.c.
Referenced by cudaupload_filter_frame(), cuvid_output_frame(), dxva2_retrieve_data(), hwdownload_filter_frame(), hwupload_filter_frame(), qsv_transfer_data_child(), transfer_data_alloc(), vaapi_retrieve_data(), and vdpau_retrieve_data().
int av_hwframe_get_buffer | ( | AVBufferRef * | hwframe_ctx, |
AVFrame * | frame, | ||
int | flags | ||
) |
Allocate a new frame attached to the given AVHWFramesContext.
hwframe_ctx | a reference to an AVHWFramesContext |
frame | an empty (freshly allocated or unreffed) frame to be filled with newly allocated buffers. |
flags | currently unused, should be set to zero |
Definition at line 404 of file hwcontext.c.
Referenced by av_hwframe_get_buffer(), avcodec_default_get_buffer2(), cuvid_output_frame(), deint_vaapi_filter_frame(), dxva2_get_buffer(), ff_default_get_video_buffer(), hwframe_pool_prealloc(), init_stage(), nppscale_scale(), qsv_get_buffer(), vaapi_encode_issue(), vaapi_get_buffer(), and vdpau_get_buffer().
void* av_hwdevice_hwconfig_alloc | ( | AVBufferRef * | device_ctx | ) |
Allocate a HW-specific configuration structure for a given HW device.
After use, the user must free all members as required by the specific hardware structure being used, then free the structure itself with av_free().
device_ctx | a reference to the associated AVHWDeviceContext. |
Definition at line 457 of file hwcontext.c.
Referenced by deint_vaapi_config_output(), scale_vaapi_config_output(), vaapi_decode_make_config(), and vaapi_encode_create_recon_frames().
AVHWFramesConstraints* av_hwdevice_get_hwframe_constraints | ( | AVBufferRef * | ref, |
const void * | hwconfig | ||
) |
Get the constraints on HW frames given a device and the HW-specific configuration to be used with that device.
If no HW-specific configuration is provided, returns the maximum possible capabilities of the device.
device_ctx | a reference to the associated AVHWDeviceContext. |
hwconfig | a filled HW-specific configuration structure, or NULL to return the maximum possible capabilities of the device. |
Definition at line 468 of file hwcontext.c.
Referenced by deint_vaapi_config_output(), hwupload_query_formats(), scale_vaapi_config_output(), vaapi_decode_make_config(), and vaapi_encode_create_recon_frames().
void av_hwframe_constraints_free | ( | AVHWFramesConstraints ** | constraints | ) |
Free an AVHWFrameConstraints structure.
constraints | The (filled or unfilled) AVHWFrameConstraints structure. |
Definition at line 493 of file hwcontext.c.
Referenced by av_hwdevice_get_hwframe_constraints(), deint_vaapi_config_output(), hwupload_query_formats(), scale_vaapi_config_output(), vaapi_decode_make_config(), and vaapi_encode_create_recon_frames().
int av_hwdevice_ctx_create | ( | AVBufferRef ** | device_ctx, |
enum AVHWDeviceType | type, | ||
const char * | device, | ||
AVDictionary * | opts, | ||
int | flags | ||
) |
Open a device of the specified type and create an AVHWDeviceContext for it.
This is a convenience function intended to cover the simple cases. Callers who need to fine-tune device creation/management should open the device manually and then wrap it in an AVHWDeviceContext using av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init().
The returned context is already initialized and ready for use, the caller should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of the created AVHWDeviceContext are set by this function and should not be touched by the caller.
device_ctx | On success, a reference to the newly-created device context will be written here. The reference is owned by the caller and must be released with av_buffer_unref() when no longer needed. On failure, NULL will be written to this pointer. |
type | The type of the device to create. |
device | A type-specific string identifying the device to open. |
opts | A dictionary of additional (type-specific) options to use in opening the device. The dictionary remains owned by the caller. |
flags | currently unused |
Definition at line 502 of file hwcontext.c.
Referenced by cudaupload_init(), cuvid_decode_init(), cuvid_init(), dxva2_alloc(), qsv_device_create(), qsv_device_init(), vaapi_device_init(), and vdpau_alloc().
Definition at line 538 of file hwcontext.c.
Referenced by ff_hwframe_map_create().
int ff_hwframe_map_create | ( | AVBufferRef * | hwframe_ref, |
AVFrame * | dst, | ||
const AVFrame * | src, | ||
void(*)(AVHWFramesContext *ctx, HWMapDescriptor *hwmap) | unmap, | ||
void * | priv | ||
) |
Definition at line 553 of file hwcontext.c.
Referenced by dxva2_map_frame(), and vaapi_map_frame().
Map a hardware frame.
This has a number of different possible effects, depending on the format and origin of the src and dst frames. On input, src should be a usable frame with valid buffers and dst should be blank (typically as just created by av_frame_alloc()). src should have an associated hwframe context, and dst may optionally have a format and associated hwframe context.
If src was created by mapping a frame from the hwframe context of dst, then this function undoes the mapping - dst is replaced by a reference to the frame that src was originally mapped from.
If both src and dst have an associated hwframe context, then this function attempts to map the src frame from its hardware context to that of dst and then fill dst with appropriate data to be usable there. This will only be possible if the hwframe contexts and associated devices are compatible - given compatible devices, av_hwframe_ctx_create_derived() can be used to create a hwframe context for dst in which mapping should be possible.
If src has a hwframe context but dst does not, then the src frame is mapped to normal memory and should thereafter be usable as a normal frame. If the format is set on dst, then the mapping will attempt to create dst with that format and fail if it is not possible. If format is unset (is AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate format to use is (probably the sw_format of the src hwframe context).
A return value of AVERROR(ENOSYS) indicates that the mapping is not possible with the given arguments and hwframe setup, while other return values indicate that it failed somehow.
dst | Destination frame, to contain the mapping. |
src | Source frame, to be mapped. |
flags | Some combination of AV_HWFRAME_MAP_* flags. |
Definition at line 605 of file hwcontext.c.
Referenced by av_hwframe_get_buffer(), hwmap_filter_frame(), hwmap_get_buffer(), qsv_frame_lock(), and qsv_map_from().
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 different device.
av_hwframe_ctx_init() should not be called after this.
derived_frame_ctx | On success, a reference to the newly created AVHWFramesContext. |
derived_device_ctx | A reference to the device to create the new AVHWFramesContext on. |
source_frame_ctx | A reference to an existing AVHWFramesContext which will be mapped to the derived context. |
flags | Currently unused; should be set to zero. |
Definition at line 663 of file hwcontext.c.
Referenced by hwmap_config_output().
|
static |
Definition at line 31 of file hwcontext.c.
|
static |
Definition at line 50 of file hwcontext.c.
Referenced by av_hwdevice_ctx_alloc().
|
static |
Definition at line 150 of file hwcontext.c.
Referenced by av_hwframe_ctx_alloc().