mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-29 04:51:09 +00:00
meta: Add support for ReferenceTimestampMeta
This commit is contained in:
parent
68e1f31fd2
commit
4cf3166317
2 changed files with 71 additions and 0 deletions
|
@ -116,6 +116,8 @@ pub use tags::{
|
|||
mod tags_serde;
|
||||
|
||||
pub mod meta;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
pub use meta::ReferenceTimestampMeta;
|
||||
pub use meta::{Meta, MetaAPI, MetaRef, MetaRefMut, ParentBufferMeta};
|
||||
pub mod buffer;
|
||||
pub use buffer::{
|
||||
|
|
|
@ -13,8 +13,16 @@ use std::ops;
|
|||
use miniobject::MiniObject;
|
||||
use Buffer;
|
||||
use BufferRef;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
use Caps;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
use CapsRef;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
use ClockTime;
|
||||
|
||||
use glib;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
use glib::translate::ToGlib;
|
||||
use glib::translate::{from_glib, from_glib_none, FromGlib, ToGlibPtr};
|
||||
use glib_sys;
|
||||
use gst_sys;
|
||||
|
@ -264,6 +272,67 @@ impl fmt::Debug for ParentBufferMeta {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[repr(C)]
|
||||
pub struct ReferenceTimestampMeta(gst_sys::GstReferenceTimestampMeta);
|
||||
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
impl ReferenceTimestampMeta {
|
||||
pub fn add<'a>(
|
||||
buffer: &'a mut BufferRef,
|
||||
reference: &Caps,
|
||||
timestamp: ClockTime,
|
||||
duration: ClockTime,
|
||||
) -> MetaRefMut<'a, Self, Standalone> {
|
||||
unsafe {
|
||||
let meta = gst_sys::gst_buffer_add_reference_timestamp_meta(
|
||||
buffer.as_mut_ptr(),
|
||||
reference.to_glib_none().0,
|
||||
timestamp.to_glib(),
|
||||
duration.to_glib(),
|
||||
);
|
||||
|
||||
Self::from_mut_ptr(buffer, meta)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_reference(&self) -> &CapsRef {
|
||||
unsafe { CapsRef::from_ptr(self.0.reference) }
|
||||
}
|
||||
|
||||
pub fn get_parent_owned(&self) -> Caps {
|
||||
unsafe { from_glib_none(self.0.reference) }
|
||||
}
|
||||
|
||||
pub fn get_timestamp(&self) -> ClockTime {
|
||||
from_glib(self.0.timestamp)
|
||||
}
|
||||
|
||||
pub fn get_duration(&self) -> ClockTime {
|
||||
from_glib(self.0.duration)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
unsafe impl MetaAPI for ReferenceTimestampMeta {
|
||||
type GstType = gst_sys::GstReferenceTimestampMeta;
|
||||
|
||||
fn get_meta_api() -> glib::Type {
|
||||
unsafe { from_glib(gst_sys::gst_reference_timestamp_meta_api_get_type()) }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
impl fmt::Debug for ReferenceTimestampMeta {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.debug_struct("ReferenceTimestampMeta")
|
||||
.field("reference", &self.get_reference())
|
||||
.field("timestamp", &self.get_timestamp())
|
||||
.field("duration", &self.get_duration())
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
|
Loading…
Reference in a new issue