Skip to content

Commit a879d7d

Browse files
committed
Add support for VkVideoSession
1 parent 70b5e6b commit a879d7d

File tree

3 files changed

+407
-4
lines changed

3 files changed

+407
-4
lines changed

examples/src/bin/video.rs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ use std::sync::Arc;
33
use vulkano::{
44
device::{Device, DeviceCreateInfo, DeviceExtensions, QueueCreateInfo, QueueFlags},
55
image::ImageUsage,
6-
instance::{Instance, InstanceCreateFlags, InstanceCreateInfo, InstanceExtensions},
6+
instance::{Instance, InstanceCreateFlags, InstanceCreateInfo},
77
video::{
88
VideoDecodeCapabilityFlags, VideoDecodeH264PictureLayoutFlags, VideoDecodeH264ProfileInfo,
9-
VideoFormatInfo, VideoProfileInfo, VideoProfileListInfo,
9+
VideoFormatInfo, VideoProfileInfo, VideoProfileListInfo, VideoSession,
10+
VideoSessionCreateInfo,
1011
},
1112
VulkanLibrary,
1213
};
@@ -151,9 +152,31 @@ fn main() {
151152
},
152153
};
153154

154-
let formats = physical_device
155+
let mut formats = physical_device
155156
.video_format_properties(video_format_info)
156157
.unwrap();
157158

158159
println!("video formats: {:#?}", formats);
160+
161+
let format = formats.pop().unwrap();
162+
let h264_extension_properties = physical_device
163+
.extension_properties()
164+
.iter()
165+
.find(|&p| p.extension_name == "VK_STD_vulkan_video_codec_h264_decode")
166+
.expect("h264 extension not found");
167+
168+
let video_session_create_info = VideoSessionCreateInfo {
169+
queue_family_index: video_queue_family_index,
170+
video_profile: profile_info,
171+
picture_format: format.format,
172+
max_coded_extent: video_caps.max_coded_extent,
173+
reference_picture_format: format.format,
174+
max_dpb_slots: video_caps.max_dpb_slots,
175+
max_active_reference_pictures: video_caps.max_active_reference_pictures,
176+
std_header_version: h264_extension_properties.clone(),
177+
..Default::default()
178+
};
179+
180+
let video_session = VideoSession::new(Arc::clone(&device), video_session_create_info).unwrap();
181+
println!("video session: {:#?}", video_session);
159182
}

vulkano/src/device/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ use crate::{
119119
instance::{Instance, InstanceOwned, InstanceOwnedDebugWrapper},
120120
macros::{impl_id_counter, vulkan_bitflags},
121121
memory::ExternalMemoryHandleType,
122+
video::{VideoSession, VideoSessionCreateInfo},
122123
Requires, RequiresAllOf, RequiresOneOf, Validated, ValidationError, Version, VulkanError,
123124
VulkanObject,
124125
};

0 commit comments

Comments
 (0)