mediadecode_ffmpeg/
adapter.rs1use mediadecode::{
16 PixelFormat,
17 adapter::{AudioAdapter, SubtitleAdapter, VideoAdapter},
18 demuxer::DemuxAdapter,
19};
20use mediaframe::audio::ChannelLayoutDescription;
21use smol_str::SmolStr;
22
23use crate::{
24 codec_id::CodecId,
25 extras::{
26 AttachmentPacketExtra, AudioFrameExtra, AudioPacketExtra, DataPacketExtra, SubtitleFrameExtra,
27 SubtitlePacketExtra, TrackExtra, VideoFrameExtra, VideoPacketExtra,
28 },
29 sample_format::SampleFormat,
30};
31
32#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Hash)]
39pub struct Ffmpeg;
40
41impl VideoAdapter for Ffmpeg {
42 type CodecId = CodecId;
43 type PixelFormat = PixelFormat;
44 type PacketExtra = VideoPacketExtra;
45 type FrameExtra = VideoFrameExtra;
46}
47
48impl AudioAdapter for Ffmpeg {
49 type CodecId = CodecId;
50 type SampleFormat = SampleFormat;
51 type ChannelLayout = ChannelLayoutDescription;
52 type PacketExtra = AudioPacketExtra;
53 type FrameExtra = AudioFrameExtra;
54}
55
56impl SubtitleAdapter for Ffmpeg {
57 type CodecId = CodecId;
58 type PacketExtra = SubtitlePacketExtra;
59 type FrameExtra = SubtitleFrameExtra;
60}
61
62impl DemuxAdapter for Ffmpeg {
63 type CodecId = CodecId;
64 type Video = Ffmpeg;
65 type Audio = Ffmpeg;
66 type Subtitle = Ffmpeg;
67 type DataExtra = DataPacketExtra;
68 type AttachmentExtra = AttachmentPacketExtra;
69 type TrackExtra = TrackExtra;
70 type Text = SmolStr;
76}
77
78#[cfg(test)]
79mod tests {
80 use super::*;
81
82 #[test]
86 fn adapter_parameterizes_mediadecode_types() {
87 use crate::buffer::FfmpegBuffer;
88 use mediadecode::{
89 adapter::{AudioAdapter, SubtitleAdapter, VideoAdapter},
90 packet::{AudioPacket, SubtitlePacket, VideoPacket},
91 };
92
93 fn _video_packet_resolves(
94 _: &VideoPacket<Ffmpeg, FfmpegBuffer>,
95 _: <Ffmpeg as VideoAdapter>::CodecId,
96 _: <Ffmpeg as VideoAdapter>::PixelFormat,
97 _: &<Ffmpeg as VideoAdapter>::PacketExtra,
98 _: &<Ffmpeg as VideoAdapter>::FrameExtra,
99 ) {
100 }
101
102 fn _audio_packet_resolves(
103 _: &AudioPacket<Ffmpeg, FfmpegBuffer>,
104 _: <Ffmpeg as AudioAdapter>::CodecId,
105 _: <Ffmpeg as AudioAdapter>::SampleFormat,
106 _: &<Ffmpeg as AudioAdapter>::ChannelLayout,
107 _: &<Ffmpeg as AudioAdapter>::PacketExtra,
108 _: &<Ffmpeg as AudioAdapter>::FrameExtra,
109 ) {
110 }
111
112 fn _subtitle_packet_resolves(
113 _: &SubtitlePacket<Ffmpeg, FfmpegBuffer>,
114 _: <Ffmpeg as SubtitleAdapter>::CodecId,
115 _: &<Ffmpeg as SubtitleAdapter>::PacketExtra,
116 _: &<Ffmpeg as SubtitleAdapter>::FrameExtra,
117 ) {
118 }
119 }
120
121 #[test]
122 fn ffmpeg_is_zero_sized() {
123 use core::mem::size_of;
124 assert_eq!(size_of::<Ffmpeg>(), 0);
125 }
126}