Age | Commit message (Collapse) | Author |
|
This commit adds the necessary code to initialize and use a Vulkan device
within the hwcontext libavutil framework.
Currently direct mapping to VAAPI and DRM frames is functional, and
transfers to CUDA and native frames are supported.
Lets hope the future Vulkan video decode extension fits well within this
framework.
|
|
We are beginning to consider scenarios where a given HW Context
may be able to transfer frames to another HW Context without
passing via system memory - this would usually be when two
contexts represent different APIs on the same device (eg: Vulkan
and CUDA).
This is modelled as a transfer, as we have today, but where both
the src and the dst are hardware frames with hw contexts. We need
to be careful to ensure the contexts are compatible - particularly,
we cannot do transfers where one of the frames has been mapped via
a derived frames context - we can only do transfers for frames that
were directly allocated by the specified context.
Additionally, as we have two hardware contexts, the transfer function
could be implemented by either (or indeed both). To handle this
uncertainty, we explicitly look for ENOSYS as an indicator to try
the transfer in the other direction before giving up.
|
|
Used to fix unmapping when no direct interop exists between APIs.
Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
|
|
The change in 309d660775e2b47af6723a0477c4d753bc0c54f4 to call device_init
when doing derivation missed this case - we should only call it if we
actually made a new device.
|
|
* commit '2eb396b175e55e515aa6a13c5b1789a2a18d3935':
hwcontext: Fix memory leak on derived frame allocation failure
Merged-by: James Almer <jamrial@gmail.com>
|
|
|
|
Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>
|
|
|
|
|
|
* commit '1bd986ed4b0e95ded368a8eeb5c044853c090f9b':
hwcontext: Move NONE to the be the first member of AVHWDeviceType
Merged-by: James Almer <jamrial@gmail.com>
|
|
The initialisation should be common. For libmfx, it was previously
happening in the derivation function and this moves it out. For VAAPI,
it fixes some failures when deriving from a DRM device because this
initialisation did not run.
|
|
* commit 'fd9212f2edfe9b107c3c08ba2df5fd2cba5ab9e3':
Mark some arrays that never change as const.
Merged-by: James Almer <jamrial@gmail.com>
|
|
|
|
To be used with the new d3d11 hwaccel decode API.
With the new hwaccel API, we don't want surfaces to depend on the
decoder (other than the required dimension and format). The old D3D11VA
pixfmt uses ID3D11VideoDecoderOutputView pointers, which include the
decoder configuration, and thus is incompatible with the new hwaccel
API. This patch introduces AV_PIX_FMT_D3D11, which uses ID3D11Texture2D
and an index. It's simpler and compatible with the new hwaccel API.
The introduced hwcontext supports only the new pixfmt.
Frame upload code untested.
Significantly based on work by Steve Lhomme <robux4@gmail.com>, but with
heavy changes/rewrites.
Merges Libav commit fff90422d181744cd75dbf011687ee7095f02875.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
|
|
|
|
Use the flags argument of av_hwframe_ctx_create_derived() to pass the
mapping flags which will be used on allocation. Also, set the format
and hardware context on the allocated frame automatically - the user
should not be required to do this themselves.
(cherry picked from commit c5714b51aad41fef56dddac1d542e7fc6b984627)
|
|
Some frames contexts are not usable without additional format-specific
state in hwctx. This change adds new functions frames_derive_from and
frames_derive_to to initialise this state appropriately when deriving
a frames context which will require it to be set.
(cherry picked from commit 27978155bc661eec9f22bcf82c9cfc099cff4365)
|
|
Adds functions to convert to/from strings and a function to iterate
over all supported device types. Also adds a new invalid type
AV_HWDEVICE_TYPE_NONE, which acts as a sentinel value.
(cherry picked from commit b7487f4f3c39b4b202e1ea7bb2de13902f2dee45)
|
|
Creates a new device context from another of a different type which
refers to the same underlying hardware.
(cherry picked from commit b266ad56fe0e4ce5bb70118ba2e2b1dabfaf76ce)
|
|
To be used with the new d3d11 hwaccel decode API.
With the new hwaccel API, we don't want surfaces to depend on the
decoder (other than the required dimension and format). The old D3D11VA
pixfmt uses ID3D11VideoDecoderOutputView pointers, which include the
decoder configuration, and thus is incompatible with the new hwaccel
API. This patch introduces AV_PIX_FMT_D3D11, which uses ID3D11Texture2D
and an index. It's simpler and compatible with the new hwaccel API.
The introduced hwcontext supports only the new pixfmt.
Frame upload code untested.
Significantly based on work by Steve Lhomme <robux4@gmail.com>, but with
heavy changes/rewrites.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
|
|
This adds tons of code for no other benefit than making VideoToolbox
support conform with the new hwaccel API (using hw_device_ctx and
hw_frames_ctx).
Since VideoToolbox decoding does not actually require the user to
allocate frames, the new code does mostly nothing.
One benefit is that ffmpeg_videotoolbox.c can be dropped once generic
hwaccel support for ffmpeg.c is merged from Libav.
Does not consider VDA or VideoToolbox encoding.
Fun fact: the frame transfer functions are copied from vaapi, as the
mapping makes copying generic boilerplate. Mapping itself is not
exported by the VT code, because I don't know how to test.
|
|
Use the flags argument of av_hwframe_ctx_create_derived() to pass the
mapping flags which will be used on allocation. Also, set the format
and hardware context on the allocated frame automatically - the user
should not be required to do this themselves.
|
|
Some frames contexts are not usable without additional format-specific
state in hwctx. This change adds new functions frames_derive_from and
frames_derive_to to initialise this state appropriately when deriving
a frames context which will require it to be set.
|
|
* commit 'd06aa24ba583ad08025da9e1b29afcd8218ff9b0':
hwcontext: Hardware frame mapping
Merged-by: Clément Bœsch <cboesch@gopro.com>
|
|
Also use that to fix a warning in av_hwdevice_get_type_name().
|
|
Adds functions to convert to/from strings and a function to iterate
over all supported device types. Also adds a new invalid type
AV_HWDEVICE_TYPE_NONE, which acts as a sentinel value.
|
|
Creates a new device context from another of a different type which
refers to the same underlying hardware.
|
|
|
|
* commit 'fdfe01365d579189d9a55b3741dba2ac46eb1df8':
hwcontext: allocate the destination frame for the pool size
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
|
|
Adds the new av_hwframe_map() function, which allows mapping between
hardware frames and normal memory, along with internal support for
implementing it.
Also adds av_hwframe_ctx_create_derived(), for creating a hardware
frames context associated with one device using frames mapped from
another by some hardware-specific means.
|
|
See "[FFmpeg-devel] [PATCH] hwcontext: add a QSV implementation"
Suggested-by: nablet developer <sdk@nablet.com>
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
* commit '59e7361cc791e5103be1712dc59a2055f118d0da':
hwcontext: add a QSV implementation
Conflicts:
doc/APIchanges
libavutil/version.h
Merged-by: James Almer <jamrial@gmail.com>
|
|
The source frame may be cropped, so that its dimensions are smaller than
the pool dimensions. The transfer_data API requires the allocated size
of the destination frame to be the same as the pool size.
|
|
* commit '1c9e8616c535ef496e7ee8a5cbc5e9e972a6977d':
hwcontext: add a function for opening devices
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
|
|
* commit 'c46db38cde8e8fd8ecb1c6602f10ec0e002f29a8':
hwcontext: add a dxva2 implementation
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
|
|
|
|
|
|
|
|
* commit 'a0f469da744db83db32f3fe13186ee4aa2bc7dc5':
hwcontext: initialize sw_format in av_hwframe_ctx_alloc()
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
|
|
|
|
* commit '551c6775abb5e0ad34c26d7e23bc6fbbe8ccc9d4':
lavu: VAAPI hwcontext implementation
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
|
|
* commit 'b1f01e85a92d401a9b29c79f23db36b7685e8c09':
lavu: add a way to query hwcontext frame constraints
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
|
|
Signed-off-by: Anton Khirnov <anton@khirnov.net>
|
|
Signed-off-by: Anton Khirnov <anton@khirnov.net>
|
|
* commit 'ad884d100259e55cb51a4239cd8a4fd5154c2073':
hwcontext: add a CUDA implementation
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
|
|
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
|
|
* commit 'a001ce31bc2bcf875a39b5fb22dae49120293b42':
hwcontext: add a VDPAU implementation
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
|
|
* commit '89923e418b494e337683442ab896d754bc07341a':
lavu: add a framework for handling hwaccel frames
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
|
|
|
|
|