1 // Copyright 2022 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 use vmm_vhost::message::VhostUserProtocolFeatures; 6 7 use crate::virtio::device_constants::video::all_backend_virtio_features; 8 use crate::virtio::device_constants::video::VideoDeviceType; 9 use crate::virtio::device_constants::video::QUEUE_SIZES; 10 use crate::virtio::vhost::user::vmm::Connection; 11 use crate::virtio::vhost::user::vmm::QueueSizes; 12 use crate::virtio::vhost::user::vmm::Result; 13 use crate::virtio::vhost::user::vmm::VhostUserVirtioDevice; 14 use crate::virtio::DeviceType; 15 16 impl VhostUserVirtioDevice { new_video( base_features: u64, connection: Connection, device_type: VideoDeviceType, ) -> Result<VhostUserVirtioDevice>17 pub fn new_video( 18 base_features: u64, 19 connection: Connection, 20 device_type: VideoDeviceType, 21 ) -> Result<VhostUserVirtioDevice> { 22 let queue_sizes = QueueSizes::Fixed(QUEUE_SIZES.to_vec()); 23 let max_queues = QUEUE_SIZES.len(); 24 25 let allow_features = all_backend_virtio_features(); 26 27 let allow_protocol_features = VhostUserProtocolFeatures::CONFIG; 28 29 VhostUserVirtioDevice::new( 30 connection, 31 match device_type { 32 VideoDeviceType::Decoder => DeviceType::VideoDec, 33 VideoDeviceType::Encoder => DeviceType::VideoEnc, 34 }, 35 queue_sizes, 36 max_queues, 37 allow_features, 38 allow_protocol_features, 39 base_features, 40 None, 41 false, 42 ) 43 } 44 } 45