fuchsia_stream_processors/
types.rs
1use fidl_table_validation::*;
6
7use fidl_fuchsia_media::{
8 Packet, PacketHeader, StreamBufferConstraints, StreamBufferSettings, StreamOutputConstraints,
9};
10
11#[derive(ValidFidlTable)]
12#[fidl_table_src(StreamBufferConstraints)]
13#[fidl_table_validator(StreamBufferConstraintsValidator)]
14pub struct ValidStreamBufferConstraints {
15 pub buffer_constraints_version_ordinal: u64,
16 #[fidl_field_type(optional)]
17 pub default_settings: Option<StreamBufferSettings>,
18 #[fidl_field_type(optional)]
19 pub per_packet_buffer_bytes_min: Option<u32>,
20 #[fidl_field_type(optional)]
21 pub per_packet_buffer_bytes_recommended: Option<u32>,
22 #[fidl_field_type(optional)]
23 pub per_packet_buffer_bytes_max: Option<u32>,
24 #[fidl_field_type(optional)]
25 pub packet_count_for_server_min: Option<u32>,
26 #[fidl_field_type(optional)]
27 pub packet_count_for_server_recommended: Option<u32>,
28 #[fidl_field_type(optional)]
29 pub packet_count_for_server_recommended_max: Option<u32>,
30 #[fidl_field_type(optional)]
31 pub packet_count_for_server_max: Option<u32>,
32 #[fidl_field_type(optional)]
33 pub packet_count_for_client_min: Option<u32>,
34 #[fidl_field_type(optional)]
35 pub packet_count_for_client_max: Option<u32>,
36 #[fidl_field_type(optional)]
37 pub single_buffer_mode_allowed: Option<bool>,
38 #[fidl_field_type(optional)]
39 pub is_physically_contiguous_required: Option<bool>,
40}
41
42pub struct StreamBufferConstraintsValidator;
43
44#[derive(Debug)]
45pub enum StreamBufferConstraintsError {
46 VersionOrdinalZero,
47 SingleBufferMode,
48 ConstraintsNoBtiHandleForPhysicalBuffers,
49}
50
51impl Validate<ValidStreamBufferConstraints> for StreamBufferConstraintsValidator {
52 type Error = StreamBufferConstraintsError;
53 fn validate(candidate: &ValidStreamBufferConstraints) -> std::result::Result<(), Self::Error> {
54 if candidate.buffer_constraints_version_ordinal == 0 {
55 return Err(StreamBufferConstraintsError::VersionOrdinalZero);
57 }
58
59 Ok(())
60 }
61}
62
63#[derive(ValidFidlTable)]
64#[fidl_table_src(StreamOutputConstraints)]
65pub struct ValidStreamOutputConstraints {
66 pub stream_lifetime_ordinal: u64,
67 pub buffer_constraints_action_required: bool,
68 pub buffer_constraints: ValidStreamBufferConstraints,
69}
70
71#[derive(ValidFidlTable, Clone, Copy, Debug, PartialEq)]
72#[fidl_table_src(PacketHeader)]
73pub struct ValidPacketHeader {
74 pub buffer_lifetime_ordinal: u64,
75 pub packet_index: u32,
76}
77
78#[derive(ValidFidlTable, Clone, Copy, Debug, PartialEq)]
79#[fidl_table_src(Packet)]
80pub struct ValidPacket {
81 pub header: ValidPacketHeader,
82 pub buffer_index: u32,
83 pub stream_lifetime_ordinal: u64,
84 pub start_offset: u32,
85 pub valid_length_bytes: u32,
86 #[fidl_field_type(optional)]
87 pub timestamp_ish: Option<u64>,
88 #[fidl_field_type(default = false)]
89 pub start_access_unit: bool,
90 #[fidl_field_type(default = false)]
91 pub known_end_access_unit: bool,
92}
93
94#[cfg(test)]
95mod test {
96
97 use super::*;
98
99 #[test]
100 fn validate_stream_buffer_constraints() {
101 let invalid_version_ordinal = StreamBufferConstraints {
102 buffer_constraints_version_ordinal: Some(0),
103 ..Default::default()
104 };
105
106 let err = ValidStreamBufferConstraints::try_from(invalid_version_ordinal);
107
108 assert!(err.is_err());
109
110 let invalid_single_buffer = StreamBufferConstraints {
111 buffer_constraints_version_ordinal: Some(0),
112 ..Default::default()
113 };
114
115 let err = ValidStreamBufferConstraints::try_from(invalid_single_buffer);
116
117 assert!(err.is_err());
118
119 let invalid_continuous = StreamBufferConstraints {
120 buffer_constraints_version_ordinal: Some(0),
121 ..Default::default()
122 };
123
124 let err = ValidStreamBufferConstraints::try_from(invalid_continuous);
125
126 assert!(err.is_err());
127 }
128}