diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c index cbf2ab8194..0e03df1ccb 100644 --- a/libavcodec/vulkan_decode.c +++ b/libavcodec/vulkan_decode.c @@ -1113,6 +1113,9 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) hwfc->create_pnext = &prof->profile_list; } else { switch (frames_ctx->sw_format) { + /* Vulkan's formats are all LSB-padded */ + case AV_PIX_FMT_GRAY10: frames_ctx->sw_format = AV_PIX_FMT_GRAY10MSB; break; + case AV_PIX_FMT_GRAY12: frames_ctx->sw_format = AV_PIX_FMT_GRAY12MSB; break; case AV_PIX_FMT_GBRAP16: /* This should be more efficient for downloading and using */ frames_ctx->sw_format = AV_PIX_FMT_RGBA64; diff --git a/libavcodec/vulkan_video.c b/libavcodec/vulkan_video.c index 819940460f..471cfd5ad5 100644 --- a/libavcodec/vulkan_video.c +++ b/libavcodec/vulkan_video.c @@ -29,6 +29,8 @@ static const struct FFVkFormatMapEntry { } vk_format_map[] = { /* Gray formats */ { VK_FORMAT_R8_UNORM, AV_PIX_FMT_GRAY8, VK_IMAGE_ASPECT_COLOR_BIT }, + { VK_FORMAT_R10X6_UNORM_PACK16, AV_PIX_FMT_GRAY10MSB, VK_IMAGE_ASPECT_COLOR_BIT }, + { VK_FORMAT_R12X4_UNORM_PACK16, AV_PIX_FMT_GRAY12MSB, VK_IMAGE_ASPECT_COLOR_BIT }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY16, VK_IMAGE_ASPECT_COLOR_BIT }, { VK_FORMAT_R32_SFLOAT, AV_PIX_FMT_GRAYF32, VK_IMAGE_ASPECT_COLOR_BIT }, diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index ae4b07c698..8af99fda54 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -359,8 +359,8 @@ static const struct FFVkFormatEntry { } vk_formats_list[] = { /* Gray formats */ { VK_FORMAT_R8_UNORM, AV_PIX_FMT_GRAY8, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R8_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY10, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, - { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY12, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_R10X6_UNORM_PACK16, AV_PIX_FMT_GRAY10MSB, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, + { VK_FORMAT_R12X4_UNORM_PACK16, AV_PIX_FMT_GRAY12MSB, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY14, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R16_UNORM, AV_PIX_FMT_GRAY16, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16_UNORM } }, { VK_FORMAT_R32_UINT, AV_PIX_FMT_GRAY32, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R32_UINT } }, diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index ef755ad6f7..8a14f8a6c3 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1672,8 +1672,8 @@ const char *ff_vk_shader_rep_fmt(enum AVPixelFormat pix_fmt, }; return rep_tab[rep_fmt]; }; - case AV_PIX_FMT_GRAY10: - case AV_PIX_FMT_GRAY12: + case AV_PIX_FMT_GRAY10MSB: + case AV_PIX_FMT_GRAY12MSB: case AV_PIX_FMT_GRAY14: case AV_PIX_FMT_GRAY16: case AV_PIX_FMT_GBRAP10: