use mediadecode::{
PixelFormat,
adapter::{AudioAdapter, SubtitleAdapter, VideoAdapter},
demuxer::DemuxAdapter,
};
use mediaframe::audio::ChannelLayoutDescription;
use smol_str::SmolStr;
use crate::{
codec_id::CodecId,
extras::{
AttachmentPacketExtra, AudioFrameExtra, AudioPacketExtra, DataPacketExtra, SubtitleFrameExtra,
SubtitlePacketExtra, TrackExtra, VideoFrameExtra, VideoPacketExtra,
},
sample_format::SampleFormat,
};
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Hash)]
pub struct Ffmpeg;
impl VideoAdapter for Ffmpeg {
type CodecId = CodecId;
type PixelFormat = PixelFormat;
type PacketExtra = VideoPacketExtra;
type FrameExtra = VideoFrameExtra;
}
impl AudioAdapter for Ffmpeg {
type CodecId = CodecId;
type SampleFormat = SampleFormat;
type ChannelLayout = ChannelLayoutDescription;
type PacketExtra = AudioPacketExtra;
type FrameExtra = AudioFrameExtra;
}
impl SubtitleAdapter for Ffmpeg {
type CodecId = CodecId;
type PacketExtra = SubtitlePacketExtra;
type FrameExtra = SubtitleFrameExtra;
}
impl DemuxAdapter for Ffmpeg {
type CodecId = CodecId;
type Video = Ffmpeg;
type Audio = Ffmpeg;
type Subtitle = Ffmpeg;
type DataExtra = DataPacketExtra;
type AttachmentExtra = AttachmentPacketExtra;
type TrackExtra = TrackExtra;
type Text = SmolStr;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn adapter_parameterizes_mediadecode_types() {
use crate::buffer::FfmpegBuffer;
use mediadecode::{
adapter::{AudioAdapter, SubtitleAdapter, VideoAdapter},
packet::{AudioPacket, SubtitlePacket, VideoPacket},
};
fn _video_packet_resolves(
_: &VideoPacket<Ffmpeg, FfmpegBuffer>,
_: <Ffmpeg as VideoAdapter>::CodecId,
_: <Ffmpeg as VideoAdapter>::PixelFormat,
_: &<Ffmpeg as VideoAdapter>::PacketExtra,
_: &<Ffmpeg as VideoAdapter>::FrameExtra,
) {
}
fn _audio_packet_resolves(
_: &AudioPacket<Ffmpeg, FfmpegBuffer>,
_: <Ffmpeg as AudioAdapter>::CodecId,
_: <Ffmpeg as AudioAdapter>::SampleFormat,
_: &<Ffmpeg as AudioAdapter>::ChannelLayout,
_: &<Ffmpeg as AudioAdapter>::PacketExtra,
_: &<Ffmpeg as AudioAdapter>::FrameExtra,
) {
}
fn _subtitle_packet_resolves(
_: &SubtitlePacket<Ffmpeg, FfmpegBuffer>,
_: <Ffmpeg as SubtitleAdapter>::CodecId,
_: &<Ffmpeg as SubtitleAdapter>::PacketExtra,
_: &<Ffmpeg as SubtitleAdapter>::FrameExtra,
) {
}
}
#[test]
fn ffmpeg_is_zero_sized() {
use core::mem::size_of;
assert_eq!(size_of::<Ffmpeg>(), 0);
}
}