En avril 2021, le groupe de travail Vulkan de Khronos a publié un ensemble d’extensions provisoires, collectivement appelées « Vulkan Video », pour intégrer de manière transparente la compression et la décompression vidéo accélérées par le matériel dans l’API Vulkan. Aujourd’hui, Khronos publie des extensions finalisées qui intègrent les commentaires de l’industrie et exposent les fonctionnalités de base et de décodage de Vulkan Video pour fournir un décodage H.264 et H.265 entièrement accéléré.

Khronos publiera une série continue d’extensions Vulkan Video pour activer des codecs supplémentaires et accélérer l’encodage ainsi que le décodage. Ce blog est un aperçu général de l’architecture Vulkan Video et fournit également des détails sur les extensions finalisées et des liens vers des ressources importantes pour vous aider à créer vos premières applications Vulkan Video.

Introduction

Vulkan Video adhère à la philosophie Vulkan consistant à fournir aux applications un contrôle flexible et précis de la planification, de la synchronisation et de l’allocation de mémoire. En tirant parti du cadre d’API Vulkan existant, les extensions Vulkan Video permettent une utilisation efficace, à faible latence et à faible surcharge des ressources de traitement pour un traitement vidéo accéléré, y compris la distribution des tâches de traitement de flux sur plusieurs cœurs de processeur et matériel de codec vidéo, le tout avec une portabilité d’application à travers plusieurs plates-formes et appareils allant des petits appareils embarqués aux serveurs hautes performances prenant en charge Windows et Linux.

Présentation des extensions vidéo Vulkan

Les GPU contiennent généralement des moteurs d’accélération de décodage et d’encodage vidéo dédiés qui sont indépendants des autres moteurs graphiques et de calcul. En fait, certains périphériques physiques peuvent uniquement prendre en charge le décodage vidéo et/ou l’accélération de l’encodage vidéo. Par conséquent, Vulkan Video ajoute des files d’attente de décodage et d’encodage vidéo pour prendre en charge ces opérations vidéo.

De plus, le domaine des codecs vidéo est en constante évolution. Des outils de codage vidéo plus avancés et spécifiques à un domaine facilitent la compression et la décompression de la vidéo, ce qui conduit à de nouveaux codecs et extensions de codec. Ainsi, Vulkan Video a été conçu pour être suffisamment flexible pour prendre en charge une large gamme de codecs existants et futurs. Pour ce faire, il inclut à la fois des extensions universelles « de base » qui devraient être utiles pour tous les codecs et des extensions spécifiques aux codecs qui ne sont utiles que pour un type de codec. La figure 2 illustre les extensions Vulkan Video ainsi que leur statut et leurs relations.

Cette version de Vulkan Video finalise les extensions suivantes :

  • VK_KHR_video_queue : API communes pour toutes les opérations de codage vidéo.
  • VK_KHR_video_decode_queue : API communes pour toutes les opérations de décodage vidéo.
  • VK_KHR_video_decode_h264 : capacités et paramètres spécifiques au décodage H.264 (promus de EXT à KHR dans cette version finale).
  • VK_KHR_video_decode_h265 : capacités et paramètres spécifiques au décodage H.265 (promus de EXT à KHR dans cette version finale).

Collectivement, les extensions ci-dessus permettent d’exposer l’accélération du décodage vidéo H.264 et H.265 via Vulkan.

Les extensions suivantes liées à l’encodage restent provisoires et devraient être finalisées en 2023 avec de nouvelles extensions à introduire pour les opérations de décodage VP9 et de décodage/encodage AV1 :

  • VK_KHR_video_encode_queue : API communes pour toutes les opérations d’encodage vidéo.
  • VK_EXT_video_encode_h264 : capacités et paramètres spécifiques à l’encodage H.264.
  • VK_EXT_video_encode_h265 : capacités et paramètres spécifiques à l’encodage H.265.

Par exemple, une implémentation de Vulkan Video qui ne prend en charge que le décodage H.264 n’exposerait que la prise en charge des extensions VK_KHR_video_queue, VK_KHR_video_decode_queue et VK_KHR_video_decode_h264, et une application utiliserait les trois extensions ensemble pour effectuer des opérations de décodage H.264 sur cet appareil cible.

L’API standard vkGetPhysicalDeviceQueueFamilyProperties2 peut être utilisée pour déterminer la prise en charge des opérations de codec, telles que le décodage H.264, en enchaînant VkVideoQueueFamilyPropertiesKHR pour récupérer VkVideoCodecOperationFlagsKHR.

Pour plus d’informations, visitez cette page.