use crate::playback::Playback;
use crate::record::RecordVideoSettings;
use crate::utility::*;
use crate::*;
use azure_kinect_sys::k4arecord::k4a_record_video_settings_t;
pub struct PlaybackTrack<'a> {
pub(crate) playback: &'a Playback<'a>,
name: std::ffi::CString,
}
impl<'a> PlaybackTrack<'a> {
pub(crate) fn new(playback: &'a Playback, name: std::ffi::CString) -> PlaybackTrack<'a> {
PlaybackTrack { playback, name }
}
pub fn get_name(&self) -> &str {
self.name.to_str().unwrap_or_default()
}
pub fn check_exists(&self) -> bool {
unsafe {
(self
.playback
.factory
.api_record
.funcs
.k4a_playback_check_track_exists)(
self.playback.handle, self.name.as_ptr()
)
}
}
pub fn is_builtin(&self) -> bool {
unsafe {
(self
.playback
.factory
.api_record
.funcs
.k4a_playback_track_is_builtin)(self.playback.handle, self.name.as_ptr())
}
}
pub fn get_video_settings(&self) -> Result<RecordVideoSettings, Error> {
let mut settings = k4a_record_video_settings_t::default();
Error::from_k4a_result_t(unsafe {
(self
.playback
.factory
.api_record
.funcs
.k4a_playback_track_get_video_settings)(
self.playback.handle,
self.name.as_ptr(),
&mut settings,
)
})
.to_result(RecordVideoSettings { value: settings })
}
pub fn get_codec_id(&self) -> Result<String, Error> {
get_k4a_string(&|codec_id, codec_id_size| unsafe {
(self
.playback
.factory
.api_record
.funcs
.k4a_playback_track_get_codec_id)(
self.playback.handle,
self.name.as_ptr(),
codec_id,
codec_id_size,
)
})
}
pub fn get_codec_context(&self) -> Result<Vec<u8>, Error> {
get_k4a_binary_data(&|codec_context, codec_context_size| unsafe {
(self
.playback
.factory
.api_record
.funcs
.k4a_playback_track_get_codec_context)(
self.playback.handle,
self.name.as_ptr(),
codec_context,
codec_context_size,
)
})
}
}