diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2020-11-14 20:09:42 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2020-11-15 19:25:42 +0300 |
commit | af0337c26c25cc782142f914dfa19383e51e1743 (patch) | |
tree | 60263c9ee978753df8cc5be55ed04ce3c9c65488 /generic/sodium/src | |
parent | f54f9f977ec2143028c6068ac43bff5da4bea2ee (diff) |
generic: Update for subclassing API changes
Diffstat (limited to 'generic/sodium/src')
-rw-r--r-- | generic/sodium/src/decrypter/imp.rs (renamed from generic/sodium/src/decrypter.rs) | 50 | ||||
-rw-r--r-- | generic/sodium/src/decrypter/mod.rs | 43 | ||||
-rw-r--r-- | generic/sodium/src/encrypter/imp.rs (renamed from generic/sodium/src/encrypter.rs) | 44 | ||||
-rw-r--r-- | generic/sodium/src/encrypter/mod.rs | 43 |
4 files changed, 129 insertions, 51 deletions
diff --git a/generic/sodium/src/decrypter.rs b/generic/sodium/src/decrypter/imp.rs index 2de508b50..f82b874f2 100644 --- a/generic/sodium/src/decrypter.rs +++ b/generic/sodium/src/decrypter/imp.rs @@ -123,7 +123,7 @@ impl State { // retrieval fn decrypt_into_adapter( &mut self, - element: &gst::Element, + element: &super::Decrypter, pad: &gst::Pad, buffer: &gst::Buffer, chunk_index: u64, @@ -261,7 +261,7 @@ fn add_nonce(initial_nonce: box_::Nonce, chunk_index: u64) -> box_::Nonce { box_::Nonce::from_slice(&nonce).expect("Failed to convert slice back to Nonce") } -struct Decrypter { +pub struct Decrypter { srcpad: gst::Pad, sinkpad: gst::Pad, props: Mutex<Props>, @@ -272,7 +272,7 @@ impl Decrypter { fn src_activatemode_function( &self, _pad: &gst::Pad, - element: &gst::Element, + element: &super::Decrypter, mode: gst::PadMode, active: bool, ) -> Result<(), gst::LoggableError> { @@ -295,7 +295,12 @@ impl Decrypter { } } - fn src_query(&self, pad: &gst::Pad, element: &gst::Element, query: &mut gst::QueryRef) -> bool { + fn src_query( + &self, + pad: &gst::Pad, + element: &super::Decrypter, + query: &mut gst::QueryRef, + ) -> bool { use gst::QueryView; gst_log!(CAT, obj: pad, "Handling query {:?}", query); @@ -349,7 +354,7 @@ impl Decrypter { }; // subtract static offsets - let size = size - super::HEADERS_SIZE as u64; + let size = size - crate::HEADERS_SIZE as u64; // calculate the number of chunks that exist in the stream let total_chunks = @@ -366,7 +371,7 @@ impl Decrypter { } } - fn check_headers(&self, element: &gst::Element) -> Result<(), gst::LoggableError> { + fn check_headers(&self, element: &super::Decrypter) -> Result<(), gst::LoggableError> { let is_none = { let mutex_state = self.state.lock().unwrap(); let state = mutex_state.as_ref().unwrap(); @@ -440,12 +445,12 @@ impl Decrypter { fn pull_requested_buffer( &self, pad: &gst::Pad, - element: &gst::Element, + element: &super::Decrypter, requested_size: u32, block_size: u32, chunk_index: u64, ) -> Result<gst::Buffer, gst::FlowError> { - let pull_offset = super::HEADERS_SIZE as u64 + let pull_offset = crate::HEADERS_SIZE as u64 + (chunk_index * block_size as u64) + (chunk_index * box_::MACBYTES as u64); @@ -508,7 +513,7 @@ impl Decrypter { fn get_range( &self, pad: &gst::Pad, - element: &gst::Element, + element: &super::Decrypter, offset: u64, buffer: Option<&mut gst::BufferRef>, requested_size: u32, @@ -555,13 +560,14 @@ impl Decrypter { impl ObjectSubclass for Decrypter { const NAME: &'static str = "RsSodiumDecryptor"; + type Type = super::Decrypter; type ParentType = gst::Element; type Instance = gst::subclass::ElementInstanceStruct<Self>; type Class = subclass::simple::ClassStruct<Self>; glib_object_subclass!(); - fn with_class(klass: &subclass::simple::ClassStruct<Self>) -> Self { + fn with_class(klass: &Self::Class) -> Self { let templ = klass.get_pad_template("sink").unwrap(); let sinkpad = gst::Pad::from_template(&templ, Some("sink")); @@ -608,7 +614,7 @@ impl ObjectSubclass for Decrypter { } } - fn class_init(klass: &mut subclass::simple::ClassStruct<Self>) { + fn class_init(klass: &mut Self::Class) { klass.set_metadata( "Decrypter", "Generic", @@ -639,15 +645,14 @@ impl ObjectSubclass for Decrypter { } impl ObjectImpl for Decrypter { - fn constructed(&self, obj: &glib::Object) { + fn constructed(&self, obj: &Self::Type) { self.parent_constructed(obj); - let element = obj.downcast_ref::<gst::Element>().unwrap(); - element.add_pad(&self.sinkpad).unwrap(); - element.add_pad(&self.srcpad).unwrap(); + obj.add_pad(&self.sinkpad).unwrap(); + obj.add_pad(&self.srcpad).unwrap(); } - fn set_property(&self, _obj: &glib::Object, id: usize, value: &glib::Value) { + fn set_property(&self, _obj: &Self::Type, id: usize, value: &glib::Value) { let prop = &PROPERTIES[id]; match *prop { @@ -665,7 +670,7 @@ impl ObjectImpl for Decrypter { } } - fn get_property(&self, _obj: &glib::Object, id: usize) -> Result<glib::Value, ()> { + fn get_property(&self, _obj: &Self::Type, id: usize) -> Result<glib::Value, ()> { let prop = &PROPERTIES[id]; match *prop { @@ -682,7 +687,7 @@ impl ObjectImpl for Decrypter { impl ElementImpl for Decrypter { fn change_state( &self, - element: &gst::Element, + element: &Self::Type, transition: gst::StateChange, ) -> Result<gst::StateChangeSuccess, gst::StateChangeError> { gst_debug!(CAT, obj: element, "Changing state {:?}", transition); @@ -716,12 +721,3 @@ impl ElementImpl for Decrypter { Ok(success) } } - -pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { - gst::Element::register( - Some(plugin), - "sodiumdecrypter", - gst::Rank::None, - Decrypter::get_type(), - ) -} diff --git a/generic/sodium/src/decrypter/mod.rs b/generic/sodium/src/decrypter/mod.rs new file mode 100644 index 000000000..4bee6635c --- /dev/null +++ b/generic/sodium/src/decrypter/mod.rs @@ -0,0 +1,43 @@ +// decrypter.rs +// +// Copyright 2019 Jordan Petridis <jordan@centricular.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// SPDX-License-Identifier: MIT + +use glib::prelude::*; + +mod imp; + +glib_wrapper! { + pub struct Decrypter(ObjectSubclass<imp::Decrypter>) @extends gst::Element, gst::Object; +} + +unsafe impl Send for Decrypter {} +unsafe impl Sync for Decrypter {} + +pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { + gst::Element::register( + Some(plugin), + "sodiumdecrypter", + gst::Rank::None, + Decrypter::static_type(), + ) +} diff --git a/generic/sodium/src/encrypter.rs b/generic/sodium/src/encrypter/imp.rs index 0ba9b0e98..e17868ec7 100644 --- a/generic/sodium/src/encrypter.rs +++ b/generic/sodium/src/encrypter/imp.rs @@ -190,7 +190,7 @@ impl State { } } -struct Encrypter { +pub struct Encrypter { srcpad: gst::Pad, sinkpad: gst::Pad, props: Mutex<Props>, @@ -201,7 +201,7 @@ impl Encrypter { fn sink_chain( &self, pad: &gst::Pad, - element: &gst::Element, + element: &super::Encrypter, buffer: gst::Buffer, ) -> Result<gst::FlowSuccess, gst::FlowError> { gst_log!(CAT, obj: pad, "Handling buffer {:?}", buffer); @@ -251,7 +251,7 @@ impl Encrypter { Ok(gst::FlowSuccess::Ok) } - fn sink_event(&self, pad: &gst::Pad, element: &gst::Element, event: gst::Event) -> bool { + fn sink_event(&self, pad: &gst::Pad, element: &super::Encrypter, event: gst::Event) -> bool { use gst::EventView; gst_log!(CAT, obj: pad, "Handling event {:?}", event); @@ -306,7 +306,7 @@ impl Encrypter { } } - fn src_event(&self, pad: &gst::Pad, element: &gst::Element, event: gst::Event) -> bool { + fn src_event(&self, pad: &gst::Pad, element: &super::Encrypter, event: gst::Event) -> bool { use gst::EventView; gst_log!(CAT, obj: pad, "Handling event {:?}", event); @@ -317,7 +317,12 @@ impl Encrypter { } } - fn src_query(&self, pad: &gst::Pad, element: &gst::Element, query: &mut gst::QueryRef) -> bool { + fn src_query( + &self, + pad: &gst::Pad, + element: &super::Encrypter, + query: &mut gst::QueryRef, + ) -> bool { use gst::QueryView; gst_log!(CAT, obj: pad, "Handling query {:?}", query); @@ -371,7 +376,7 @@ impl Encrypter { let size = size + total_chunks * box_::MACBYTES as u64; // add static offsets - let size = size + super::HEADERS_SIZE as u64; + let size = size + crate::HEADERS_SIZE as u64; gst_debug!(CAT, obj: pad, "Setting duration bytes: {}", size); q.set(gst::format::Bytes::from(size)); @@ -385,13 +390,14 @@ impl Encrypter { impl ObjectSubclass for Encrypter { const NAME: &'static str = "RsSodiumEncrypter"; + type Type = super::Encrypter; type ParentType = gst::Element; type Instance = gst::subclass::ElementInstanceStruct<Self>; type Class = subclass::simple::ClassStruct<Self>; glib_object_subclass!(); - fn with_class(klass: &subclass::simple::ClassStruct<Self>) -> Self { + fn with_class(klass: &Self::Class) -> Self { let templ = klass.get_pad_template("sink").unwrap(); let sinkpad = gst::Pad::builder_with_template(&templ, Some("sink")) .chain_function(|pad, parent, buffer| { @@ -439,7 +445,7 @@ impl ObjectSubclass for Encrypter { } } - fn class_init(klass: &mut subclass::simple::ClassStruct<Self>) { + fn class_init(klass: &mut Self::Class) { klass.set_metadata( "Encrypter", "Generic", @@ -470,15 +476,14 @@ impl ObjectSubclass for Encrypter { } impl ObjectImpl for Encrypter { - fn constructed(&self, obj: &glib::Object) { + fn constructed(&self, obj: &Self::Type) { self.parent_constructed(obj); - let element = obj.downcast_ref::<gst::Element>().unwrap(); - element.add_pad(&self.sinkpad).unwrap(); - element.add_pad(&self.srcpad).unwrap(); + obj.add_pad(&self.sinkpad).unwrap(); + obj.add_pad(&self.srcpad).unwrap(); } - fn set_property(&self, _obj: &glib::Object, id: usize, value: &glib::Value) { + fn set_property(&self, _obj: &Self::Type, id: usize, value: &glib::Value) { let prop = &PROPERTIES[id]; match *prop { @@ -501,7 +506,7 @@ impl ObjectImpl for Encrypter { } } - fn get_property(&self, _obj: &glib::Object, id: usize) -> Result<glib::Value, ()> { + fn get_property(&self, _obj: &Self::Type, id: usize) -> Result<glib::Value, ()> { let prop = &PROPERTIES[id]; match *prop { @@ -523,7 +528,7 @@ impl ObjectImpl for Encrypter { impl ElementImpl for Encrypter { fn change_state( &self, - element: &gst::Element, + element: &Self::Type, transition: gst::StateChange, ) -> Result<gst::StateChangeSuccess, gst::StateChangeError> { gst_debug!(CAT, obj: element, "Changing state {:?}", transition); @@ -557,12 +562,3 @@ impl ElementImpl for Encrypter { Ok(success) } } - -pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { - gst::Element::register( - Some(plugin), - "sodiumencrypter", - gst::Rank::None, - Encrypter::get_type(), - ) -} diff --git a/generic/sodium/src/encrypter/mod.rs b/generic/sodium/src/encrypter/mod.rs new file mode 100644 index 000000000..b71dd3f91 --- /dev/null +++ b/generic/sodium/src/encrypter/mod.rs @@ -0,0 +1,43 @@ +// encrypter.rs +// +// Copyright 2019 Jordan Petridis <jordan@centricular.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// SPDX-License-Identifier: MIT + +use glib::prelude::*; + +mod imp; + +glib_wrapper! { + pub struct Encrypter(ObjectSubclass<imp::Encrypter>) @extends gst::Element, gst::Object; +} + +unsafe impl Send for Encrypter {} +unsafe impl Sync for Encrypter {} + +pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { + gst::Element::register( + Some(plugin), + "sodiumencrypter", + gst::Rank::None, + Encrypter::static_type(), + ) +} |