// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 use anyhow::Result; use serde::{Deserialize, Serialize}; use super::common::EncodedMediaData; use super::rdma::DecodedMediaData; pub mod image; pub use image::{ImageDecoder, ImageMetadata}; #[async_trait::async_trait] pub trait Decoder: Clone + Send + 'static { fn decode(&self, data: EncodedMediaData) -> Result; async fn decode_async(&self, data: EncodedMediaData) -> Result { // light clone (only config params) let decoder = self.clone(); // compute heavy -> rayon let result = tokio_rayon::spawn(move || decoder.decode(data)).await?; Ok(result) } } #[derive(Clone, Debug, Default, serde::Serialize, serde::Deserialize)] pub struct MediaDecoder { #[serde(default)] pub image_decoder: ImageDecoder, // TODO: video, audio decoders } #[derive(Serialize, Deserialize, Clone, Copy, Debug)] pub enum DecodedMediaMetadata { Image(ImageMetadata), }