@@ -3,10 +3,11 @@ use std::sync::Arc;
33use 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}
0 commit comments