1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use crate::{avcodec::{self, CodecParameters}, avformat::FormatContext};
use libav_sys_ng::AVCodec;

pub struct Stream {
    _stream: *mut libav_sys_ng::AVStream,
}

impl Stream {
    pub fn new(format_ctx: &mut FormatContext, codec: Option<&AVCodec>) -> Option<Stream> {
        unsafe {
            let raw_fc = format_ctx.raw();

            let raw_codec = match codec {
                Some(c) => c as *const AVCodec,
                None => core::ptr::null::<AVCodec>(),
            };

            let stream = libav_sys_ng::avformat_new_stream(raw_fc, raw_codec);

            if stream.is_null() {
                return None;
            }

            Some(Stream { _stream: stream })
        }
    }

    pub(crate) unsafe fn raw(&mut self) -> *mut libav_sys_ng::AVStream {
        self._stream
    }
}