[FFmpeg-cvslog] vulkan_ffv1: fallback to upload if mapping packet fails, fix fallback
Lynne
git at videolan.org
Mon Apr 14 07:16:14 EEST 2025
ffmpeg | branch: master | Lynne <dev at lynne.ee> | Sat Apr 5 05:13:02 2025 +0000| [b72ada0a9652c24ac0bd7133e51839e727bdae8a] | committer: Lynne
vulkan_ffv1: fallback to upload if mapping packet fails, fix fallback
The commit which added support for host mapping accidentally broke the
original, upload route.
For drivers without host-mapping (very few), fix it.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b72ada0a9652c24ac0bd7133e51839e727bdae8a
---
libavcodec/vulkan_ffv1.c | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/libavcodec/vulkan_ffv1.c b/libavcodec/vulkan_ffv1.c
index 9747721f0d..ccff927200 100644
--- a/libavcodec/vulkan_ffv1.c
+++ b/libavcodec/vulkan_ffv1.c
@@ -182,14 +182,11 @@ static int vk_ffv1_start_frame(AVCodecContext *avctx,
fp->crc_checked = f->ec && (avctx->err_recognition & AV_EF_CRCCHECK);
/* Host map the input slices data if supported */
- if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY) {
- err = ff_vk_host_map_buffer(&ctx->s, &vp->slices_buf, buffer_ref->data,
- buffer_ref,
- VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
- VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
- if (err < 0)
- return err;
- }
+ if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY)
+ ff_vk_host_map_buffer(&ctx->s, &vp->slices_buf, buffer_ref->data,
+ buffer_ref,
+ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
+ VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
/* Allocate slice state data */
if (f->picture.f->flags & AV_FRAME_FLAG_KEY) {
@@ -266,16 +263,14 @@ static int vk_ffv1_decode_slice(AVCodecContext *avctx,
uint32_t size)
{
FFV1Context *f = avctx->priv_data;
- FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
- FFVulkanDecodeShared *ctx = dec->shared_ctx;
FFv1VulkanDecodePicture *fp = f->hwaccel_picture_private;
FFVulkanDecodePicture *vp = &fp->vp;
FFVkBuffer *slice_offset = (FFVkBuffer *)fp->slice_offset_buf->data;
+ FFVkBuffer *slices_buf = vp->slices_buf ? (FFVkBuffer *)vp->slices_buf->data : NULL;
- if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY) {
- FFVkBuffer *slices_buf = (FFVkBuffer *)vp->slices_buf->data;
+ if (slices_buf && slices_buf->host_ref) {
AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 0)*sizeof(uint32_t),
data - slices_buf->mapped_mem);
AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 1)*sizeof(uint32_t),
More information about the ffmpeg-cvslog
mailing list