lingxia_platform/traits/
stream_decoder.rs1use crate::error::PlatformError;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum VideoCodec {
5 H264,
6 H265,
7}
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum VideoFormat {
11 AnnexB,
12 Avcc,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16pub enum AudioCodec {
17 Aac,
18 PcmS16le,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq)]
22pub struct VideoStreamConfig {
23 pub codec: VideoCodec,
24 pub format: VideoFormat,
25 pub sps: Vec<u8>,
26 pub pps: Vec<u8>,
27 pub vps: Vec<u8>,
28 pub nal_length_size: Option<u8>,
29 pub width: Option<u16>,
30 pub height: Option<u16>,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct AudioStreamConfig {
35 pub codec: AudioCodec,
36 pub audio_specific_config: Vec<u8>,
37 pub sample_rate: Option<u32>,
38 pub channels: Option<u8>,
39 pub aac_is_adts: bool,
40}
41
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub struct VideoFrame {
44 pub data: Vec<u8>,
45 pub dts_ms: u32,
46 pub pts_ms: u32,
47 pub keyframe: bool,
48}
49
50#[derive(Debug, Clone, PartialEq, Eq)]
51pub struct AudioFrame {
52 pub data: Vec<u8>,
53 pub dts_ms: u32,
54 pub pts_ms: u32,
55}
56
57pub trait VideoStreamDecoderHandle: Send + Sync {
58 fn supports_soft_reset(&self) -> bool {
59 false
60 }
61
62 fn supports_in_place_hard_reset(&self) -> bool {
63 false
64 }
65
66 fn reset_stream(&self, _hard: bool) -> Result<(), PlatformError> {
67 Ok(())
68 }
69
70 fn configure_video(&self, config: VideoStreamConfig) -> Result<(), PlatformError>;
71 fn configure_audio(&self, config: AudioStreamConfig) -> Result<(), PlatformError>;
72 fn push_video(&self, frame: VideoFrame) -> Result<(), PlatformError>;
73 fn push_audio(&self, frame: AudioFrame) -> Result<(), PlatformError>;
74 fn stop(&self) -> Result<(), PlatformError>;
75 fn flush(&self) -> Result<(), PlatformError> {
76 Ok(())
77 }
78}
79
80pub trait VideoStreamDecoderManager: Send + Sync + 'static {
81 fn create_stream_decoder(
82 &self,
83 component_id: &str,
84 ) -> Result<Box<dyn VideoStreamDecoderHandle>, PlatformError>;
85}