| use serde::{Deserialize, Serialize}; | |
| #[derive(Serialize, Deserialize, Clone, Debug)] | |
| pub struct ProgressRequest { | |
| pub stream_name: String, | |
| } | |
| #[derive(Serialize, Deserialize, Clone, Debug)] | |
| pub struct DecodeProgress { | |
| pub decoded_frames: usize, | |
| pub total_frames: usize, | |
| } | |
| // TODO(comc): Add timeout state? | |
| #[derive(Serialize, Deserialize, Clone, Debug)] | |
| pub enum DecodeState { | |
| /// Upload request sent by client, not yet acknowledged by server. | |
| Uploading, | |
| /// Upload was successful and the server sent confirmation. | |
| UploadComplete, | |
| /// Decode (extract_proto) is is progress. | |
| Pending(DecodeProgress), | |
| /// Decoding succeeded. | |
| Complete(usize), | |
| /// Decode failed for any reason. | |
| Failed, | |
| } | |
| #[derive(Serialize, Deserialize, Clone, Debug)] | |
| pub struct ProgressResponse { | |
| pub stream_name: String, | |
| pub state: DecodeState, | |
| } | |
| #[derive(Serialize, Deserialize, Clone, Debug)] | |
| pub struct StartDecodeResponse { | |
| pub stream_info: AvmStreamInfo, | |
| } | |
| pub const PROTO_PATH_FRAME_PLACEHOLDER: &str = "{FRAME}"; | |
| pub const DEFAULT_PROTO_PATH_FRAME_SUFFIX_FIRST: &str = "_frame_0000.pb"; | |
| pub const DEFAULT_PROTO_PATH_FRAME_SUFFIX_TEMPLATE: &str = "_frame_{FRAME}.pb"; | |
| #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] | |
| pub struct AvmStreamInfo { | |
| pub stream_name: String, | |
| pub proto_path_template: String, | |
| pub num_frames: usize, | |
| pub thumbnail_png: Option<Vec<u8>>, | |
| } | |
| impl AvmStreamInfo { | |
| pub fn get_proto_path(&self, index: usize) -> String { | |
| self.proto_path_template | |
| .replace(PROTO_PATH_FRAME_PLACEHOLDER, &format!("{index:04}")) | |
| } | |
| } | |
| #[derive(Serialize, Deserialize, Clone, Debug)] | |
| pub struct AvmStreamList { | |
| pub streams: Vec<AvmStreamInfo>, | |
| } |