Microsoft анонсувала Video Encode API для ефективного кодування відео в кодеках H264 та HEVC
Microsoft анонсувала API відеокодування для ефективного кодування відео в кодеках H264 і HEVC
Microsoft анонсувала VIDEO Encode API, призначений для ефективного кодування відео в кодеках H264 і HEVC за допомогою графічного процесора відповідно до стандартів DirectX 12. API вбудований в Windows 11 і вже доступний розробникам в DirectX 12 Agility SDK (1,700.10-попередній перегляд або новішої версії).
Заявлені підтримувані платформи і необхідні версії драйверів:
Продюсер | Підтримувані платформи | Мінімальна версія драйвера |
Amd |
|
У розробці . Він вийде у другому кварталі 2022 року. |
Інтел |
|
30.0.100.9955 |
NVIDIA |
|
471.41 |
Microsoft каже, що за допомогою цього API ви можете налаштувати різні аспекти процесу кодування та зробити їх найбільш придатними для ваших сценаріїв.
Введення
Сьогодні DirectX 12 надає API для підтримки прискорення графічного процесора для кількох відео-додатків, таких як декодування відео, обробка відео та оцінка руху, як детально описано в Огляді відео Direct3D 12.
Ми раді повідомити, що D3D12 додав нову функцію Video Encode до існуючих сімейств відео API з новим набором інтерфейсів, які дозволяють розробникам виконувати кодування відео за допомогою відеодвигунів, прискорених графічним процесором.
Ця функція забезпечує новий спосіб для додатків реалізувати кодування відео відповідно до принципів і стилю DirectX 12.
Зображення API кодування відео
З точки зору потоку даних, API приймає кожен відеокадр, представлений текстурами ID3D12Resource , і стискає їх у буфер ID3D12Resource , який містить заголовки фрагментів та корисне навантаження кожного закодованого кадру. Наразі доступні лише DXGI_FORMAT_NV12 та DXGI_FORMAT_P010 залежно від підтримки драйверів, тому вхідний вміст може потребувати перетворення кольорів та зменшення вибірки раніше користувачем API.
Сьогодні доступними кодеками є H264 та HEVC , і конкретна підтримка кожного кодека та їх інструментів кодування повинна бути запитана за допомогою ID3D12VideoDevice::CheckFeatureSupport , оскільки існують вимоги до підтримки драйверів.
Відповідальність за обробку решти заголовків кодеків bitstream (тобто SEI/VUI/VPS/SPS/PPS) повністю делегується користувачеві, який буде генерувати та упаковувати їх у кінцевий бітовий потік разом із стисненим бітовим потоком, отриманим від операції графічного процесора для кожного кадру.
Дотримуючись принципів і стилю DirectX 12, довідкові фрейми управляються явно, а їх пам'ять повністю відстежується користувачем API. Це дозволяє чітко використовувати масив текстур або текстурних масивів для зберігання DPB з явним контролем бюджетування/управління пам'яттю та дозволяє користувачеві API мати повний контроль над розміром DPB та стратегіями вибору еталонних зображень. Інші аспекти еталонного керування зображеннями, такі як вибір типу зображення I/P/B та переупорядкування групи зображень B-кадру, також контролюються користувачем, який відстежуватиме топологію впорядкування відображення та залежностей від контрольних кадрів та надсилатиме операції графічного процесора в порядку кодування з потрібним типом зображення.
Цей API надає користувачеві значну кількість параметрів, що конфігуруються, щоб налаштувати різні аспекти процесу кодування та зробити їх найкращими для своїх сценаріїв, таких як: схема розбиття на власні фрагменти, активна (тобто .CBR, VBR, QBVR) та пасивна (абсолютні/дельта користувацькі карти QP) режими конфігурації контролю швидкості, використання інструментів кодування кодеків, власні розміри блоків кодеків та трансформувань, обмеження точності вектора руху, явне використання сеансів внутрішнього оновлення, динамічне перенастроювання роздільної здатності відеопотоку/керування швидкістю/розділення фрагментів тощо.
Цей API також повідомляє статистику кодування і може використовуватися разом із функціями SetPredication та Timestamp D3D12.
Ресурси документації API для кодування відео
Використання API схоже на інші існуючі функції Video DirectX 12, а кроки високого рівня:
- Виклик ID3D12VideoDevice::CheckFeatureSupport , щоб перевірити деталі підтримки операцій кодування відео DirectX12. Передайте значення зі списку D3D12_FEATURE_VIDEO , щоб указати функцію, для якої ви запитуєте інформацію про підтримку.
- Виклик ID3D12VideoDevice::CreateVideoEncoder для створення екземпляра інтерфейсу ID3D12VideoEncoder , в якому зберігається стан сеансу кодування.
- Виклик ID3D12ВідеоПристрій::CreateVideoEncoderHeap для створення екземпляра інтерфейсу ID3D12VideoEncoderHeap . Цей об'єкт містить залежні від роздільної здатності ресурси драйвера і стан.
- Щоб закодувати кадр:
- Всі вхідні і вихідні параметри для операцій кодування відео організовані в структури вхідних і вихідних параметрів: D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS і D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS для запису команди ID3D12VideoCommandList2::EncodeFrame.
- Після операції кодування користувач також повинен виконати ID3D12VideoCommandList2::ResolveEncoderOutputMetadata для розпізнавання апаратно залежних результатів кодування від D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS в D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS.
- Коли список команд належним чином записаний, викликайте ID3D12CommandQueue::ExecuteCommandLists у черзі команд відео, щоб надіслати операції кодування кадрів та обробки метаданих до графічного процесора.
Детальне визначення інтерфейсів та структур API можна знайти тут.
Щоб знайти більше деталей дизайну та детальної документації для API, будь ласка, зверніться до цього документа.
Платформи , що підтримуються API відео-кодування
API Video Encode включений як частина Windows 11 , а також його можна знайти в DirectX 12 Agility SDK (версія 1.700.10 - попередній перегляд або новіша).
Будь ласка, перегляньте нижче список апаратних платформ, які в даний час підтримують Video Encode як для кодеків H264, так і для HEVC, а також їх мінімальні вимоги до версії драйвера.
Постачальник | Підтримувані платформи | Мінімальна версія відеодрайвера |
Amd |
|
У розробці – ETA Q2 '2022 |
Інтел |
|
v30.0.100.9955 |
NVIDIA |
|
v471.41 |