Skip to main content

virtio_media/io/
le.rs

1// Copyright 2024 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//! Since the wire format of virtio-media uses little-endian, a host using the same ordering does
6//! not need to perform any swapping - hence the definitions here are no-ops.
7
8use v4l2r::bindings;
9
10use crate::io::LeWrapper;
11use crate::CloseCmd;
12use crate::CmdHeader;
13use crate::DequeueBufferEvent;
14use crate::ErrorEvent;
15use crate::IoctlCmd;
16use crate::MmapCmd;
17use crate::MmapResp;
18use crate::MunmapCmd;
19use crate::MunmapResp;
20use crate::OpenCmd;
21use crate::OpenResp;
22use crate::RespHeader;
23use crate::SessionEvent;
24use crate::SgEntry;
25
26/// Trait for types that can be sent as part of the virtio-media protocol.
27pub trait VmediaType: Sized {
28    fn to_le(self) -> LeWrapper<Self> {
29        LeWrapper(self)
30    }
31    fn from_le(le: LeWrapper<Self>) -> Self {
32        le.0
33    }
34}
35
36impl VmediaType for () {}
37impl VmediaType for u32 {}
38impl VmediaType for i32 {}
39
40impl VmediaType for CmdHeader {}
41impl VmediaType for RespHeader {}
42impl VmediaType for OpenCmd {}
43impl VmediaType for OpenResp {}
44impl VmediaType for CloseCmd {}
45impl VmediaType for IoctlCmd {}
46impl VmediaType for SgEntry {}
47impl VmediaType for MmapCmd {}
48impl VmediaType for MmapResp {}
49impl VmediaType for MunmapCmd {}
50impl VmediaType for MunmapResp {}
51impl VmediaType for DequeueBufferEvent {}
52impl VmediaType for SessionEvent {}
53impl VmediaType for ErrorEvent {}
54
55impl VmediaType for bindings::v4l2_buffer {}
56impl VmediaType for bindings::v4l2_standard {}
57impl VmediaType for bindings::v4l2_input {}
58impl VmediaType for bindings::v4l2_control {}
59impl VmediaType for bindings::v4l2_std_id {}
60impl VmediaType for bindings::v4l2_tuner {}
61impl VmediaType for bindings::v4l2_audio {}
62impl VmediaType for bindings::v4l2_plane {}
63impl VmediaType for bindings::v4l2_format {}
64impl VmediaType for bindings::v4l2_enc_idx {}
65impl VmediaType for bindings::v4l2_output {}
66impl VmediaType for bindings::v4l2_audioout {}
67impl VmediaType for bindings::v4l2_modulator {}
68impl VmediaType for bindings::v4l2_frequency {}
69impl VmediaType for bindings::v4l2_frmsizeenum {}
70impl VmediaType for bindings::v4l2_frmivalenum {}
71impl VmediaType for bindings::v4l2_encoder_cmd {}
72impl VmediaType for bindings::v4l2_decoder_cmd {}
73impl VmediaType for bindings::v4l2_dv_timings {}
74impl VmediaType for bindings::v4l2_event_subscription {}
75impl VmediaType for bindings::v4l2_create_buffers {}
76impl VmediaType for bindings::v4l2_selection {}
77impl VmediaType for bindings::v4l2_enum_dv_timings {}
78impl VmediaType for bindings::v4l2_dv_timings_cap {}
79impl VmediaType for bindings::v4l2_frequency_band {}
80impl VmediaType for bindings::v4l2_query_ext_ctrl {}
81impl VmediaType for bindings::v4l2_queryctrl {}
82impl VmediaType for bindings::v4l2_querymenu {}
83impl VmediaType for bindings::v4l2_ext_control {}
84impl VmediaType for bindings::v4l2_ext_controls {}
85impl VmediaType for bindings::v4l2_fmtdesc {}
86impl VmediaType for bindings::v4l2_requestbuffers {}
87impl VmediaType for bindings::v4l2_streamparm {}