blob: 8d84cd2cbfde846d9aa67f928d7b0a74e7cb4f09 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use fidl_fuchsia_media::*;
use std::path::Path;
use std::{fs, io};
use stream_processor_test::*;
/// Represents an CVSD elementary stream.
pub struct CvsdStream {
data: Vec<u8>,
chunk_frames: usize,
}
impl CvsdStream {
/// Constructs an CVSD elementary stream from a file with raw elementary stream data.
pub fn from_file(filename: impl AsRef<Path>, chunk_frames: usize) -> io::Result<Self> {
Ok(CvsdStream { data: fs::read(filename)?, chunk_frames })
}
/// Constructs an CVSD elementary stream from raw data.
pub fn from_data(data: Vec<u8>, chunk_frames: usize) -> Self {
CvsdStream { data, chunk_frames }
}
}
impl ElementaryStream for CvsdStream {
fn format_details(&self, version_ordinal: u64) -> FormatDetails {
FormatDetails {
format_details_version_ordinal: Some(version_ordinal),
mime_type: Some(String::from("audio/cvsd")),
..Default::default()
}
}
fn is_access_units(&self) -> bool {
false
}
fn stream<'a>(&'a self) -> Box<dyn Iterator<Item = ElementaryStreamChunk> + 'a> {
Box::new(self.data.chunks(self.chunk_frames).map(|frame| ElementaryStreamChunk {
start_access_unit: false,
known_end_access_unit: false,
data: frame.to_vec(),
significance: Significance::Audio(AudioSignificance::Encoded),
timestamp: None,
}))
}
}