xref: /aosp_15_r20/external/crosvm/devices/src/virtio/video/event.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2020 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker //! Events can happen in virtio video devices.
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker use std::io;
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le32;
10*bb4ee6a4SAndroid Build Coastguard Worker use enumn::N;
11*bb4ee6a4SAndroid Build Coastguard Worker 
12*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::video::protocol::*;
13*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::video::response::Response;
14*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::Writer;
15*bb4ee6a4SAndroid Build Coastguard Worker 
16*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Copy, Clone, N)]
17*bb4ee6a4SAndroid Build Coastguard Worker pub enum EvtType {
18*bb4ee6a4SAndroid Build Coastguard Worker     Error = VIRTIO_VIDEO_EVENT_ERROR as isize,
19*bb4ee6a4SAndroid Build Coastguard Worker     #[cfg(feature = "video-decoder")]
20*bb4ee6a4SAndroid Build Coastguard Worker     DecResChanged = VIRTIO_VIDEO_EVENT_DECODER_RESOLUTION_CHANGED as isize,
21*bb4ee6a4SAndroid Build Coastguard Worker }
22*bb4ee6a4SAndroid Build Coastguard Worker 
23*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Clone)]
24*bb4ee6a4SAndroid Build Coastguard Worker pub struct VideoEvt {
25*bb4ee6a4SAndroid Build Coastguard Worker     pub typ: EvtType,
26*bb4ee6a4SAndroid Build Coastguard Worker     pub stream_id: u32,
27*bb4ee6a4SAndroid Build Coastguard Worker }
28*bb4ee6a4SAndroid Build Coastguard Worker 
29*bb4ee6a4SAndroid Build Coastguard Worker impl Response for VideoEvt {
write(&self, w: &mut Writer) -> Result<(), io::Error>30*bb4ee6a4SAndroid Build Coastguard Worker     fn write(&self, w: &mut Writer) -> Result<(), io::Error> {
31*bb4ee6a4SAndroid Build Coastguard Worker         w.write_obj(virtio_video_event {
32*bb4ee6a4SAndroid Build Coastguard Worker             event_type: Le32::from(self.typ as u32),
33*bb4ee6a4SAndroid Build Coastguard Worker             stream_id: Le32::from(self.stream_id),
34*bb4ee6a4SAndroid Build Coastguard Worker         })
35*bb4ee6a4SAndroid Build Coastguard Worker     }
36*bb4ee6a4SAndroid Build Coastguard Worker }
37