use std::sync::Arc;
use cxx::SharedPtr;
use parking_lot::Mutex;
use sys_vt::ffi::video_to_media;
use webrtc_sys::video_track as sys_vt;
use super::media_stream_track::impl_media_stream_track;
use super::packet_trailer::PacketTrailerHandler;
use crate::media_stream_track::RtcTrackState;
#[derive(Clone)]
pub struct RtcVideoTrack {
pub(crate) sys_handle: SharedPtr<sys_vt::ffi::VideoTrack>,
packet_trailer_handler: Arc<Mutex<Option<PacketTrailerHandler>>>,
}
impl RtcVideoTrack {
impl_media_stream_track!(video_to_media);
pub(crate) fn new(sys_handle: SharedPtr<sys_vt::ffi::VideoTrack>) -> Self {
Self { sys_handle, packet_trailer_handler: Arc::new(Mutex::new(None)) }
}
pub fn sys_handle(&self) -> SharedPtr<sys_vt::ffi::MediaStreamTrack> {
video_to_media(self.sys_handle.clone())
}
pub fn set_packet_trailer_handler(&self, handler: PacketTrailerHandler) {
self.packet_trailer_handler.lock().replace(handler);
}
pub fn packet_trailer_handler(&self) -> Option<PacketTrailerHandler> {
self.packet_trailer_handler.lock().clone()
}
}