From d3577ab2ae0148ee8f700e73216acf5898a34a45 Mon Sep 17 00:00:00 2001 From: Hans Ole Hatzel Date: Fri, 13 Dec 2019 14:09:30 +0100 Subject: [PATCH] gstreamer-audio: Add bindings for AudioRingBufferSpec Includes auto generated AudioRingBufferFormatType --- Gir_GstAudio.toml | 1 + gstreamer-audio/src/audio_ring_buffer_spec.rs | 67 ++++++++++ gstreamer-audio/src/auto/enums.rs | 118 ++++++++++++++++++ gstreamer-audio/src/auto/mod.rs | 1 + gstreamer-audio/src/lib.rs | 2 + 5 files changed, 189 insertions(+) create mode 100644 gstreamer-audio/src/audio_ring_buffer_spec.rs diff --git a/Gir_GstAudio.toml b/Gir_GstAudio.toml index 0a15b6367..5efca0ca2 100644 --- a/Gir_GstAudio.toml +++ b/Gir_GstAudio.toml @@ -27,6 +27,7 @@ generate = [ "GstAudio.StreamVolumeFormat", "GstAudio.AudioSink", "GstAudio.AudioBaseSink", + "GstAudio.AudioRingBufferFormatType", ] manual = [ diff --git a/gstreamer-audio/src/audio_ring_buffer_spec.rs b/gstreamer-audio/src/audio_ring_buffer_spec.rs new file mode 100644 index 000000000..26e5523b7 --- /dev/null +++ b/gstreamer-audio/src/audio_ring_buffer_spec.rs @@ -0,0 +1,67 @@ +use glib::translate::*; +use gst::Caps; +use gst_audio_sys::GstAudioRingBufferSpec; + +use AudioInfo; +use AudioRingBufferFormatType; + +#[repr(C)] +pub struct AudioRingBufferSpec(pub(crate) GstAudioRingBufferSpec); + +impl AudioRingBufferSpec { + pub fn get_type(&self) -> AudioRingBufferFormatType { + AudioRingBufferFormatType::from_glib(self.0.type_) + } + + pub fn set_type(&mut self, value: AudioRingBufferFormatType) { + self.0.type_ = value.to_glib(); + } + + pub fn get_caps(&mut self) -> Caps { + unsafe { Caps::from_glib_none(self.0.caps) } + } + + pub fn get_audio_info(&mut self) -> AudioInfo { + unsafe { AudioInfo::from_glib_none(&mut self.0.info) } + } + + pub fn get_latency_time(&self) -> u64 { + self.0.latency_time + } + + pub fn set_latency_time(&mut self, value: u64) { + self.0.latency_time = value; + } + + pub fn get_buffer_time(&self) -> u64 { + self.0.buffer_time + } + + pub fn set_buffer_time(&mut self, value: u64) { + self.0.buffer_time = value; + } + + pub fn get_segsize(&self) -> i32 { + self.0.segsize + } + + pub fn set_segsize(&mut self, value: i32) { + self.0.segsize = value; + } + + pub fn get_segtotal(&self) -> i32 { + self.0.segtotal + } + + pub fn set_segtotal(&mut self, value: i32) { + self.0.segtotal = value; + } + + pub fn get_seglatency(&self) -> i32 { + self.0.seglatency + } + + pub fn set_seglatency(&mut self, value: i32) { + self.0.seglatency = value; + } +} diff --git a/gstreamer-audio/src/auto/enums.rs b/gstreamer-audio/src/auto/enums.rs index 6030ec6ae..fd2370c64 100644 --- a/gstreamer-audio/src/auto/enums.rs +++ b/gstreamer-audio/src/auto/enums.rs @@ -396,6 +396,124 @@ impl SetValue for AudioLayout { } } +#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)] +pub enum AudioRingBufferFormatType { + Raw, + MuLaw, + ALaw, + ImaAdpcm, + Mpeg, + Gsm, + Iec958, + Ac3, + Eac3, + Dts, + Mpeg2Aac, + Mpeg4Aac, + Mpeg2AacRaw, + Mpeg4AacRaw, + Flac, + #[doc(hidden)] + __Unknown(i32), +} + +#[doc(hidden)] +impl ToGlib for AudioRingBufferFormatType { + type GlibType = gst_audio_sys::GstAudioRingBufferFormatType; + + fn to_glib(&self) -> gst_audio_sys::GstAudioRingBufferFormatType { + match *self { + AudioRingBufferFormatType::Raw => gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW, + AudioRingBufferFormatType::MuLaw => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW + } + AudioRingBufferFormatType::ALaw => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW + } + AudioRingBufferFormatType::ImaAdpcm => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IMA_ADPCM + } + AudioRingBufferFormatType::Mpeg => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG + } + AudioRingBufferFormatType::Gsm => gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_GSM, + AudioRingBufferFormatType::Iec958 => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958 + } + AudioRingBufferFormatType::Ac3 => gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3, + AudioRingBufferFormatType::Eac3 => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3 + } + AudioRingBufferFormatType::Dts => gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS, + AudioRingBufferFormatType::Mpeg2Aac => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC + } + AudioRingBufferFormatType::Mpeg4Aac => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC + } + AudioRingBufferFormatType::Mpeg2AacRaw => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC_RAW + } + AudioRingBufferFormatType::Mpeg4AacRaw => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC_RAW + } + AudioRingBufferFormatType::Flac => { + gst_audio_sys::GST_AUDIO_RING_BUFFER_FORMAT_TYPE_FLAC + } + AudioRingBufferFormatType::__Unknown(value) => value, + } + } +} + +#[doc(hidden)] +impl FromGlib for AudioRingBufferFormatType { + fn from_glib(value: gst_audio_sys::GstAudioRingBufferFormatType) -> Self { + skip_assert_initialized!(); + match value { + 0 => AudioRingBufferFormatType::Raw, + 1 => AudioRingBufferFormatType::MuLaw, + 2 => AudioRingBufferFormatType::ALaw, + 3 => AudioRingBufferFormatType::ImaAdpcm, + 4 => AudioRingBufferFormatType::Mpeg, + 5 => AudioRingBufferFormatType::Gsm, + 6 => AudioRingBufferFormatType::Iec958, + 7 => AudioRingBufferFormatType::Ac3, + 8 => AudioRingBufferFormatType::Eac3, + 9 => AudioRingBufferFormatType::Dts, + 10 => AudioRingBufferFormatType::Mpeg2Aac, + 11 => AudioRingBufferFormatType::Mpeg4Aac, + 12 => AudioRingBufferFormatType::Mpeg2AacRaw, + 13 => AudioRingBufferFormatType::Mpeg4AacRaw, + 14 => AudioRingBufferFormatType::Flac, + value => AudioRingBufferFormatType::__Unknown(value), + } + } +} + +impl StaticType for AudioRingBufferFormatType { + fn static_type() -> Type { + unsafe { from_glib(gst_audio_sys::gst_audio_ring_buffer_format_type_get_type()) } + } +} + +impl<'a> FromValueOptional<'a> for AudioRingBufferFormatType { + unsafe fn from_value_optional(value: &Value) -> Option { + Some(FromValue::from_value(value)) + } +} + +impl<'a> FromValue<'a> for AudioRingBufferFormatType { + unsafe fn from_value(value: &Value) -> Self { + from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0)) + } +} + +impl SetValue for AudioRingBufferFormatType { + unsafe fn set_value(value: &mut Value, this: &Self) { + gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib()) + } +} + #[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)] pub enum StreamVolumeFormat { Linear, diff --git a/gstreamer-audio/src/auto/mod.rs b/gstreamer-audio/src/auto/mod.rs index 3c7f2802f..63cebc538 100644 --- a/gstreamer-audio/src/auto/mod.rs +++ b/gstreamer-audio/src/auto/mod.rs @@ -30,6 +30,7 @@ mod enums; pub use self::enums::AudioChannelPosition; pub use self::enums::AudioFormat; pub use self::enums::AudioLayout; +pub use self::enums::AudioRingBufferFormatType; pub use self::enums::StreamVolumeFormat; mod flags; diff --git a/gstreamer-audio/src/lib.rs b/gstreamer-audio/src/lib.rs index eacc0ea47..8fd581192 100644 --- a/gstreamer-audio/src/lib.rs +++ b/gstreamer-audio/src/lib.rs @@ -43,6 +43,8 @@ mod audio_format; pub use audio_format::*; mod audio_format_info; pub use audio_format_info::*; +mod audio_ring_buffer_spec; +pub use audio_ring_buffer_spec::*; mod audio_info; pub use audio_info::*; mod audio_channel_position;