Remove Rs prefix from everything

We have proper namespaces in Rust
This commit is contained in:
Sebastian Dröge 2017-11-20 13:22:26 +02:00
parent 656dc990f8
commit 22ab56895d
14 changed files with 273 additions and 267 deletions

View file

@ -98,7 +98,7 @@ static PROPERTIES: [Property; 4] = [
]; ];
impl AudioEcho { impl AudioEcho {
fn new(_transform: &RsBaseTransform) -> Self { fn new(_transform: &BaseTransform) -> Self {
Self { Self {
cat: gst::DebugCategory::new( cat: gst::DebugCategory::new(
"rsaudiofx", "rsaudiofx",
@ -110,7 +110,7 @@ impl AudioEcho {
} }
} }
fn class_init(klass: &mut RsBaseTransformClass) { fn class_init(klass: &mut BaseTransformClass) {
klass.set_metadata( klass.set_metadata(
"Audio echo", "Audio echo",
"Filter/Effect/Audio", "Filter/Effect/Audio",
@ -154,7 +154,7 @@ impl AudioEcho {
klass.configure(BaseTransformMode::AlwaysInPlace, false, false); klass.configure(BaseTransformMode::AlwaysInPlace, false, false);
} }
fn init(element: &RsBaseTransform) -> Box<BaseTransformImpl<RsBaseTransform>> { fn init(element: &BaseTransform) -> Box<BaseTransformImpl<BaseTransform>> {
let imp = Self::new(element); let imp = Self::new(element);
Box::new(imp) Box::new(imp)
} }
@ -176,7 +176,7 @@ impl AudioEcho {
} }
} }
impl ObjectImpl<RsBaseTransform> for AudioEcho { impl ObjectImpl<BaseTransform> for AudioEcho {
fn set_property(&self, _obj: &glib::Object, id: u32, value: &glib::Value) { fn set_property(&self, _obj: &glib::Object, id: u32, value: &glib::Value) {
let prop = &PROPERTIES[id as usize]; let prop = &PROPERTIES[id as usize];
@ -230,14 +230,10 @@ impl ObjectImpl<RsBaseTransform> for AudioEcho {
} }
} }
impl ElementImpl<RsBaseTransform> for AudioEcho {} impl ElementImpl<BaseTransform> for AudioEcho {}
impl BaseTransformImpl<RsBaseTransform> for AudioEcho { impl BaseTransformImpl<BaseTransform> for AudioEcho {
fn transform_ip( fn transform_ip(&self, _element: &BaseTransform, buf: &mut gst::BufferRef) -> gst::FlowReturn {
&self,
_element: &RsBaseTransform,
buf: &mut gst::BufferRef,
) -> gst::FlowReturn {
let mut settings = *self.settings.lock().unwrap(); let mut settings = *self.settings.lock().unwrap();
settings.delay = cmp::min(settings.max_delay, settings.delay); settings.delay = cmp::min(settings.max_delay, settings.delay);
@ -267,12 +263,7 @@ impl BaseTransformImpl<RsBaseTransform> for AudioEcho {
gst::FlowReturn::Ok gst::FlowReturn::Ok
} }
fn set_caps( fn set_caps(&self, _element: &BaseTransform, incaps: &gst::Caps, outcaps: &gst::Caps) -> bool {
&self,
_element: &RsBaseTransform,
incaps: &gst::Caps,
outcaps: &gst::Caps,
) -> bool {
if incaps != outcaps { if incaps != outcaps {
return false; return false;
} }
@ -294,7 +285,7 @@ impl BaseTransformImpl<RsBaseTransform> for AudioEcho {
true true
} }
fn stop(&self, _element: &RsBaseTransform) -> bool { fn stop(&self, _element: &BaseTransform) -> bool {
// Drop state // Drop state
let _ = self.state.lock().unwrap().take(); let _ = self.state.lock().unwrap().take();
@ -304,16 +295,16 @@ impl BaseTransformImpl<RsBaseTransform> for AudioEcho {
struct AudioEchoStatic; struct AudioEchoStatic;
impl ImplTypeStatic<RsBaseTransform> for AudioEchoStatic { impl ImplTypeStatic<BaseTransform> for AudioEchoStatic {
fn get_name(&self) -> &str { fn get_name(&self) -> &str {
"AudioEcho" "AudioEcho"
} }
fn new(&self, element: &RsBaseTransform) -> Box<BaseTransformImpl<RsBaseTransform>> { fn new(&self, element: &BaseTransform) -> Box<BaseTransformImpl<BaseTransform>> {
AudioEcho::init(element) AudioEcho::init(element)
} }
fn class_init(&self, klass: &mut RsBaseTransformClass) { fn class_init(&self, klass: &mut BaseTransformClass) {
AudioEcho::class_init(klass); AudioEcho::class_init(klass);
} }
} }

View file

@ -33,7 +33,7 @@ pub struct FileSink {
} }
impl FileSink { impl FileSink {
pub fn new(_sink: &RsBaseSink) -> FileSink { pub fn new(_sink: &BaseSink) -> FileSink {
FileSink { FileSink {
streaming_state: StreamingState::Stopped, streaming_state: StreamingState::Stopped,
cat: gst::DebugCategory::new( cat: gst::DebugCategory::new(
@ -44,7 +44,7 @@ impl FileSink {
} }
} }
pub fn new_boxed(sink: &RsBaseSink) -> Box<SinkImpl> { pub fn new_boxed(sink: &BaseSink) -> Box<SinkImpl> {
Box::new(FileSink::new(sink)) Box::new(FileSink::new(sink))
} }
} }
@ -64,7 +64,7 @@ impl SinkImpl for FileSink {
Box::new(validate_uri) Box::new(validate_uri)
} }
fn start(&mut self, sink: &RsBaseSink, uri: Url) -> Result<(), ErrorMessage> { fn start(&mut self, sink: &BaseSink, uri: Url) -> Result<(), ErrorMessage> {
if let StreamingState::Started { .. } = self.streaming_state { if let StreamingState::Started { .. } = self.streaming_state {
return Err(error_msg!( return Err(error_msg!(
gst::LibraryError::Failed, gst::LibraryError::Failed,
@ -113,13 +113,13 @@ impl SinkImpl for FileSink {
Ok(()) Ok(())
} }
fn stop(&mut self, _sink: &RsBaseSink) -> Result<(), ErrorMessage> { fn stop(&mut self, _sink: &BaseSink) -> Result<(), ErrorMessage> {
self.streaming_state = StreamingState::Stopped; self.streaming_state = StreamingState::Stopped;
Ok(()) Ok(())
} }
fn render(&mut self, sink: &RsBaseSink, buffer: &gst::BufferRef) -> Result<(), FlowError> { fn render(&mut self, sink: &BaseSink, buffer: &gst::BufferRef) -> Result<(), FlowError> {
let cat = self.cat; let cat = self.cat;
let streaming_state = &mut self.streaming_state; let streaming_state = &mut self.streaming_state;

View file

@ -31,7 +31,7 @@ pub struct FileSrc {
} }
impl FileSrc { impl FileSrc {
pub fn new(_src: &RsBaseSrc) -> FileSrc { pub fn new(_src: &BaseSrc) -> FileSrc {
FileSrc { FileSrc {
streaming_state: StreamingState::Stopped, streaming_state: StreamingState::Stopped,
cat: gst::DebugCategory::new( cat: gst::DebugCategory::new(
@ -42,7 +42,7 @@ impl FileSrc {
} }
} }
pub fn new_boxed(src: &RsBaseSrc) -> Box<SourceImpl> { pub fn new_boxed(src: &BaseSrc) -> Box<SourceImpl> {
Box::new(FileSrc::new(src)) Box::new(FileSrc::new(src))
} }
} }
@ -62,11 +62,11 @@ impl SourceImpl for FileSrc {
Box::new(validate_uri) Box::new(validate_uri)
} }
fn is_seekable(&self, _src: &RsBaseSrc) -> bool { fn is_seekable(&self, _src: &BaseSrc) -> bool {
true true
} }
fn get_size(&self, _src: &RsBaseSrc) -> Option<u64> { fn get_size(&self, _src: &BaseSrc) -> Option<u64> {
if let StreamingState::Started { ref file, .. } = self.streaming_state { if let StreamingState::Started { ref file, .. } = self.streaming_state {
file.metadata().ok().map(|m| m.len()) file.metadata().ok().map(|m| m.len())
} else { } else {
@ -74,7 +74,7 @@ impl SourceImpl for FileSrc {
} }
} }
fn start(&mut self, src: &RsBaseSrc, uri: Url) -> Result<(), ErrorMessage> { fn start(&mut self, src: &BaseSrc, uri: Url) -> Result<(), ErrorMessage> {
if let StreamingState::Started { .. } = self.streaming_state { if let StreamingState::Started { .. } = self.streaming_state {
return Err(error_msg!( return Err(error_msg!(
gst::LibraryError::Failed, gst::LibraryError::Failed,
@ -122,7 +122,7 @@ impl SourceImpl for FileSrc {
Ok(()) Ok(())
} }
fn stop(&mut self, _src: &RsBaseSrc) -> Result<(), ErrorMessage> { fn stop(&mut self, _src: &BaseSrc) -> Result<(), ErrorMessage> {
self.streaming_state = StreamingState::Stopped; self.streaming_state = StreamingState::Stopped;
Ok(()) Ok(())
@ -130,7 +130,7 @@ impl SourceImpl for FileSrc {
fn fill( fn fill(
&mut self, &mut self,
src: &RsBaseSrc, src: &BaseSrc,
offset: u64, offset: u64,
_: u32, _: u32,
buffer: &mut gst::BufferRef, buffer: &mut gst::BufferRef,
@ -190,7 +190,7 @@ impl SourceImpl for FileSrc {
Ok(()) Ok(())
} }
fn seek(&mut self, _src: &RsBaseSrc, _: u64, _: Option<u64>) -> Result<(), ErrorMessage> { fn seek(&mut self, _src: &BaseSrc, _: u64, _: Option<u64>) -> Result<(), ErrorMessage> {
Ok(()) Ok(())
} }
} }

View file

@ -17,6 +17,7 @@ use flavors::parser as flavors;
use gst_plugin::error::*; use gst_plugin::error::*;
use gst_plugin::adapter::*; use gst_plugin::adapter::*;
use gst_plugin::bytes::*; use gst_plugin::bytes::*;
use gst_plugin::element::*;
use gst_plugin_simple::demuxer::*; use gst_plugin_simple::demuxer::*;
use gst; use gst;
@ -488,7 +489,7 @@ pub struct FlvDemux {
} }
impl FlvDemux { impl FlvDemux {
pub fn new(_demuxer: &RsDemuxer) -> FlvDemux { pub fn new(_demuxer: &Element) -> FlvDemux {
FlvDemux { FlvDemux {
cat: gst::DebugCategory::new( cat: gst::DebugCategory::new(
"rsflvdemux", "rsflvdemux",
@ -501,13 +502,13 @@ impl FlvDemux {
} }
} }
pub fn new_boxed(demuxer: &RsDemuxer) -> Box<DemuxerImpl> { pub fn new_boxed(demuxer: &Element) -> Box<DemuxerImpl> {
Box::new(Self::new(demuxer)) Box::new(Self::new(demuxer))
} }
fn handle_script_tag( fn handle_script_tag(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
tag_header: &flavors::TagHeader, tag_header: &flavors::TagHeader,
) -> Result<HandleBufferResult, FlowError> { ) -> Result<HandleBufferResult, FlowError> {
if self.adapter.get_available() < (15 + tag_header.data_size) as usize { if self.adapter.get_available() < (15 + tag_header.data_size) as usize {
@ -575,7 +576,7 @@ impl FlvDemux {
fn update_audio_stream( fn update_audio_stream(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
data_header: &flavors::AudioDataHeader, data_header: &flavors::AudioDataHeader,
) -> Result<HandleBufferResult, FlowError> { ) -> Result<HandleBufferResult, FlowError> {
gst_trace!( gst_trace!(
@ -629,7 +630,7 @@ impl FlvDemux {
fn handle_audio_tag( fn handle_audio_tag(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
tag_header: &flavors::TagHeader, tag_header: &flavors::TagHeader,
data_header: &flavors::AudioDataHeader, data_header: &flavors::AudioDataHeader,
) -> Result<HandleBufferResult, FlowError> { ) -> Result<HandleBufferResult, FlowError> {
@ -748,7 +749,7 @@ impl FlvDemux {
fn update_video_stream( fn update_video_stream(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
data_header: &flavors::VideoDataHeader, data_header: &flavors::VideoDataHeader,
) -> Result<HandleBufferResult, FlowError> { ) -> Result<HandleBufferResult, FlowError> {
gst_trace!( gst_trace!(
@ -803,7 +804,7 @@ impl FlvDemux {
fn handle_video_tag( fn handle_video_tag(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
tag_header: &flavors::TagHeader, tag_header: &flavors::TagHeader,
data_header: &flavors::VideoDataHeader, data_header: &flavors::VideoDataHeader,
) -> Result<HandleBufferResult, FlowError> { ) -> Result<HandleBufferResult, FlowError> {
@ -944,7 +945,7 @@ impl FlvDemux {
Ok(HandleBufferResult::BufferForStream(VIDEO_STREAM_ID, buffer)) Ok(HandleBufferResult::BufferForStream(VIDEO_STREAM_ID, buffer))
} }
fn update_state(&mut self, demuxer: &RsDemuxer) -> Result<HandleBufferResult, FlowError> { fn update_state(&mut self, demuxer: &Element) -> Result<HandleBufferResult, FlowError> {
match self.state { match self.state {
State::Stopped => unreachable!(), State::Stopped => unreachable!(),
State::NeedHeader => { State::NeedHeader => {
@ -1090,7 +1091,7 @@ impl FlvDemux {
impl DemuxerImpl for FlvDemux { impl DemuxerImpl for FlvDemux {
fn start( fn start(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
_upstream_size: Option<u64>, _upstream_size: Option<u64>,
_random_access: bool, _random_access: bool,
) -> Result<(), ErrorMessage> { ) -> Result<(), ErrorMessage> {
@ -1099,7 +1100,7 @@ impl DemuxerImpl for FlvDemux {
Ok(()) Ok(())
} }
fn stop(&mut self, demuxer: &RsDemuxer) -> Result<(), ErrorMessage> { fn stop(&mut self, demuxer: &Element) -> Result<(), ErrorMessage> {
self.state = State::Stopped; self.state = State::Stopped;
self.adapter.clear(); self.adapter.clear();
self.streaming_state = None; self.streaming_state = None;
@ -1109,7 +1110,7 @@ impl DemuxerImpl for FlvDemux {
fn seek( fn seek(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
start: gst::ClockTime, start: gst::ClockTime,
stop: gst::ClockTime, stop: gst::ClockTime,
) -> Result<SeekResult, ErrorMessage> { ) -> Result<SeekResult, ErrorMessage> {
@ -1118,7 +1119,7 @@ impl DemuxerImpl for FlvDemux {
fn handle_buffer( fn handle_buffer(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
buffer: Option<gst::Buffer>, buffer: Option<gst::Buffer>,
) -> Result<HandleBufferResult, FlowError> { ) -> Result<HandleBufferResult, FlowError> {
if let Some(buffer) = buffer { if let Some(buffer) = buffer {
@ -1128,16 +1129,16 @@ impl DemuxerImpl for FlvDemux {
self.update_state(demuxer) self.update_state(demuxer)
} }
fn end_of_stream(&mut self, demuxer: &RsDemuxer) -> Result<(), ErrorMessage> { fn end_of_stream(&mut self, demuxer: &Element) -> Result<(), ErrorMessage> {
// nothing to do here, all data we have left is incomplete // nothing to do here, all data we have left is incomplete
Ok(()) Ok(())
} }
fn is_seekable(&self, demuxer: &RsDemuxer) -> bool { fn is_seekable(&self, demuxer: &Element) -> bool {
false false
} }
fn get_position(&self, demuxer: &RsDemuxer) -> gst::ClockTime { fn get_position(&self, demuxer: &Element) -> gst::ClockTime {
if let Some(StreamingState { last_position, .. }) = self.streaming_state { if let Some(StreamingState { last_position, .. }) = self.streaming_state {
return last_position; return last_position;
} }
@ -1145,7 +1146,7 @@ impl DemuxerImpl for FlvDemux {
gst::CLOCK_TIME_NONE gst::CLOCK_TIME_NONE
} }
fn get_duration(&self, demuxer: &RsDemuxer) -> gst::ClockTime { fn get_duration(&self, demuxer: &Element) -> gst::ClockTime {
if let Some(StreamingState { if let Some(StreamingState {
metadata: Some(Metadata { duration, .. }), metadata: Some(Metadata { duration, .. }),
.. ..

View file

@ -42,7 +42,7 @@ pub struct HttpSrc {
} }
impl HttpSrc { impl HttpSrc {
pub fn new(_src: &RsBaseSrc) -> HttpSrc { pub fn new(_src: &BaseSrc) -> HttpSrc {
HttpSrc { HttpSrc {
streaming_state: StreamingState::Stopped, streaming_state: StreamingState::Stopped,
cat: gst::DebugCategory::new( cat: gst::DebugCategory::new(
@ -54,13 +54,13 @@ impl HttpSrc {
} }
} }
pub fn new_boxed(src: &RsBaseSrc) -> Box<SourceImpl> { pub fn new_boxed(src: &BaseSrc) -> Box<SourceImpl> {
Box::new(HttpSrc::new(src)) Box::new(HttpSrc::new(src))
} }
fn do_request( fn do_request(
&self, &self,
src: &RsBaseSrc, src: &BaseSrc,
uri: Url, uri: Url,
start: u64, start: u64,
stop: Option<u64>, stop: Option<u64>,
@ -109,12 +109,10 @@ impl HttpSrc {
let seekable = size.is_some() && accept_byte_ranges; let seekable = size.is_some() && accept_byte_ranges;
let position = if let Some( let position = if let Some(&ContentRange(ContentRangeSpec::Bytes {
&ContentRange(ContentRangeSpec::Bytes { range: Some((range_start, _)),
range: Some((range_start, _)), ..
.. })) = response.headers().get()
}),
) = response.headers().get()
{ {
range_start range_start
} else { } else {
@ -158,34 +156,34 @@ impl SourceImpl for HttpSrc {
Box::new(validate_uri) Box::new(validate_uri)
} }
fn is_seekable(&self, _src: &RsBaseSrc) -> bool { fn is_seekable(&self, _src: &BaseSrc) -> bool {
match self.streaming_state { match self.streaming_state {
StreamingState::Started { seekable, .. } => seekable, StreamingState::Started { seekable, .. } => seekable,
_ => false, _ => false,
} }
} }
fn get_size(&self, _src: &RsBaseSrc) -> Option<u64> { fn get_size(&self, _src: &BaseSrc) -> Option<u64> {
match self.streaming_state { match self.streaming_state {
StreamingState::Started { size, .. } => size, StreamingState::Started { size, .. } => size,
_ => None, _ => None,
} }
} }
fn start(&mut self, src: &RsBaseSrc, uri: Url) -> Result<(), ErrorMessage> { fn start(&mut self, src: &BaseSrc, uri: Url) -> Result<(), ErrorMessage> {
self.streaming_state = StreamingState::Stopped; self.streaming_state = StreamingState::Stopped;
self.streaming_state = try!(self.do_request(src, uri, 0, None)); self.streaming_state = try!(self.do_request(src, uri, 0, None));
Ok(()) Ok(())
} }
fn stop(&mut self, _src: &RsBaseSrc) -> Result<(), ErrorMessage> { fn stop(&mut self, _src: &BaseSrc) -> Result<(), ErrorMessage> {
self.streaming_state = StreamingState::Stopped; self.streaming_state = StreamingState::Stopped;
Ok(()) Ok(())
} }
fn seek(&mut self, src: &RsBaseSrc, start: u64, stop: Option<u64>) -> Result<(), ErrorMessage> { fn seek(&mut self, src: &BaseSrc, start: u64, stop: Option<u64>) -> Result<(), ErrorMessage> {
let (position, old_stop, uri) = match self.streaming_state { let (position, old_stop, uri) = match self.streaming_state {
StreamingState::Started { StreamingState::Started {
position, position,
@ -210,7 +208,7 @@ impl SourceImpl for HttpSrc {
fn fill( fn fill(
&mut self, &mut self,
src: &RsBaseSrc, src: &BaseSrc,
offset: u64, offset: u64,
_: u32, _: u32,
buffer: &mut gst::BufferRef, buffer: &mut gst::BufferRef,

View file

@ -46,33 +46,31 @@ pub enum HandleBufferResult {
Eos(Option<StreamIndex>), Eos(Option<StreamIndex>),
} }
pub type RsDemuxer = RsElement;
pub trait DemuxerImpl: Send + 'static { pub trait DemuxerImpl: Send + 'static {
fn start( fn start(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
upstream_size: Option<u64>, upstream_size: Option<u64>,
random_access: bool, random_access: bool,
) -> Result<(), ErrorMessage>; ) -> Result<(), ErrorMessage>;
fn stop(&mut self, demuxer: &RsDemuxer) -> Result<(), ErrorMessage>; fn stop(&mut self, demuxer: &Element) -> Result<(), ErrorMessage>;
fn seek( fn seek(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
start: gst::ClockTime, start: gst::ClockTime,
stop: gst::ClockTime, stop: gst::ClockTime,
) -> Result<SeekResult, ErrorMessage>; ) -> Result<SeekResult, ErrorMessage>;
fn handle_buffer( fn handle_buffer(
&mut self, &mut self,
demuxer: &RsDemuxer, demuxer: &Element,
buffer: Option<gst::Buffer>, buffer: Option<gst::Buffer>,
) -> Result<HandleBufferResult, FlowError>; ) -> Result<HandleBufferResult, FlowError>;
fn end_of_stream(&mut self, demuxer: &RsDemuxer) -> Result<(), ErrorMessage>; fn end_of_stream(&mut self, demuxer: &Element) -> Result<(), ErrorMessage>;
fn is_seekable(&self, demuxer: &RsDemuxer) -> bool; fn is_seekable(&self, demuxer: &Element) -> bool;
fn get_position(&self, demuxer: &RsDemuxer) -> gst::ClockTime; fn get_position(&self, demuxer: &Element) -> gst::ClockTime;
fn get_duration(&self, demuxer: &RsDemuxer) -> gst::ClockTime; fn get_duration(&self, demuxer: &Element) -> gst::ClockTime;
} }
#[derive(Debug)] #[derive(Debug)]
@ -99,7 +97,7 @@ pub struct DemuxerInfo {
pub classification: String, pub classification: String,
pub author: String, pub author: String,
pub rank: u32, pub rank: u32,
pub create_instance: fn(&RsDemuxer) -> Box<DemuxerImpl>, pub create_instance: fn(&Element) -> Box<DemuxerImpl>,
pub input_caps: gst::Caps, pub input_caps: gst::Caps,
pub output_caps: gst::Caps, pub output_caps: gst::Caps,
} }
@ -134,7 +132,7 @@ unsafe impl Send for UniqueFlowCombiner {}
unsafe impl Sync for UniqueFlowCombiner {} unsafe impl Sync for UniqueFlowCombiner {}
impl Demuxer { impl Demuxer {
fn new(demuxer: &RsDemuxer, sinkpad: gst::Pad, demuxer_info: &DemuxerInfo) -> Self { fn new(element: &Element, sinkpad: gst::Pad, demuxer_info: &DemuxerInfo) -> Self {
Self { Self {
cat: gst::DebugCategory::new( cat: gst::DebugCategory::new(
"rsdemux", "rsdemux",
@ -145,11 +143,11 @@ impl Demuxer {
flow_combiner: Mutex::new(Default::default()), flow_combiner: Mutex::new(Default::default()),
group_id: Mutex::new(gst::util_group_id_next()), group_id: Mutex::new(gst::util_group_id_next()),
srcpads: Mutex::new(BTreeMap::new()), srcpads: Mutex::new(BTreeMap::new()),
imp: Mutex::new((demuxer_info.create_instance)(demuxer)), imp: Mutex::new((demuxer_info.create_instance)(element)),
} }
} }
fn class_init(klass: &mut RsElementClass, demuxer_info: &DemuxerInfo) { fn class_init(klass: &mut ElementClass, demuxer_info: &DemuxerInfo) {
klass.set_metadata( klass.set_metadata(
&demuxer_info.long_name, &demuxer_info.long_name,
&demuxer_info.classification, &demuxer_info.classification,
@ -174,7 +172,7 @@ impl Demuxer {
klass.add_pad_template(pad_template); klass.add_pad_template(pad_template);
} }
fn init(element: &RsElement, demuxer_info: &DemuxerInfo) -> Box<ElementImpl<RsElement>> { fn init(element: &Element, demuxer_info: &DemuxerInfo) -> Box<ElementImpl<Element>> {
let templ = element.get_pad_template("sink").unwrap(); let templ = element.get_pad_template("sink").unwrap();
let sinkpad = gst::Pad::new_from_template(&templ, "sink"); let sinkpad = gst::Pad::new_from_template(&templ, "sink");
sinkpad.set_activate_function(Demuxer::sink_activate); sinkpad.set_activate_function(Demuxer::sink_activate);
@ -187,7 +185,7 @@ impl Demuxer {
Box::new(imp) Box::new(imp)
} }
fn add_stream(&self, element: &RsElement, index: u32, caps: gst::Caps, stream_id: &str) { fn add_stream(&self, element: &Element, index: u32, caps: gst::Caps, stream_id: &str) {
let mut srcpads = self.srcpads.lock().unwrap(); let mut srcpads = self.srcpads.lock().unwrap();
assert!(!srcpads.contains_key(&index)); assert!(!srcpads.contains_key(&index));
@ -217,12 +215,12 @@ impl Demuxer {
srcpads.insert(index, pad); srcpads.insert(index, pad);
} }
fn added_all_streams(&self, element: &RsElement) { fn added_all_streams(&self, element: &Element) {
element.no_more_pads(); element.no_more_pads();
*self.group_id.lock().unwrap() = gst::util_group_id_next(); *self.group_id.lock().unwrap() = gst::util_group_id_next();
} }
fn stream_format_changed(&self, _element: &RsElement, index: u32, caps: gst::Caps) { fn stream_format_changed(&self, _element: &Element, index: u32, caps: gst::Caps) {
let srcpads = self.srcpads.lock().unwrap(); let srcpads = self.srcpads.lock().unwrap();
if let Some(pad) = srcpads.get(&index) { if let Some(pad) = srcpads.get(&index) {
@ -230,7 +228,7 @@ impl Demuxer {
} }
} }
fn stream_eos(&self, _element: &RsElement, index: Option<u32>) { fn stream_eos(&self, _element: &Element, index: Option<u32>) {
let srcpads = self.srcpads.lock().unwrap(); let srcpads = self.srcpads.lock().unwrap();
let event = gst::Event::new_eos().build(); let event = gst::Event::new_eos().build();
@ -246,7 +244,7 @@ impl Demuxer {
fn stream_push_buffer( fn stream_push_buffer(
&self, &self,
_element: &RsElement, _element: &Element,
index: u32, index: u32,
buffer: gst::Buffer, buffer: gst::Buffer,
) -> gst::FlowReturn { ) -> gst::FlowReturn {
@ -262,7 +260,7 @@ impl Demuxer {
} }
} }
fn remove_all_streams(&self, element: &RsElement) { fn remove_all_streams(&self, element: &Element) {
self.flow_combiner.lock().unwrap().clear(); self.flow_combiner.lock().unwrap().clear();
let mut srcpads = self.srcpads.lock().unwrap(); let mut srcpads = self.srcpads.lock().unwrap();
for (_, pad) in srcpads.iter().by_ref() { for (_, pad) in srcpads.iter().by_ref() {
@ -294,7 +292,7 @@ impl Demuxer {
} }
} }
fn start(&self, element: &RsDemuxer, upstream_size: Option<u64>, random_access: bool) -> bool { fn start(&self, element: &Element, upstream_size: Option<u64>, random_access: bool) -> bool {
let demuxer_impl = &mut self.imp.lock().unwrap(); let demuxer_impl = &mut self.imp.lock().unwrap();
gst_debug!( gst_debug!(
@ -318,7 +316,7 @@ impl Demuxer {
} }
} }
fn stop(&self, element: &RsDemuxer) -> bool { fn stop(&self, element: &Element) -> bool {
let demuxer_impl = &mut self.imp.lock().unwrap(); let demuxer_impl = &mut self.imp.lock().unwrap();
gst_debug!(self.cat, obj: element, "Stopping"); gst_debug!(self.cat, obj: element, "Stopping");
@ -346,7 +344,7 @@ impl Demuxer {
.as_ref() .as_ref()
.cloned() .cloned()
.unwrap() .unwrap()
.downcast::<RsElement>() .downcast::<Element>()
.unwrap(); .unwrap();
let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap(); let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap();
@ -385,7 +383,7 @@ impl Demuxer {
.as_ref() .as_ref()
.cloned() .cloned()
.unwrap() .unwrap()
.downcast::<RsElement>() .downcast::<Element>()
.unwrap(); .unwrap();
let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap(); let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap();
@ -483,7 +481,7 @@ impl Demuxer {
.as_ref() .as_ref()
.cloned() .cloned()
.unwrap() .unwrap()
.downcast::<RsElement>() .downcast::<Element>()
.unwrap(); .unwrap();
let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap(); let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap();
@ -518,7 +516,7 @@ impl Demuxer {
.as_ref() .as_ref()
.cloned() .cloned()
.unwrap() .unwrap()
.downcast::<RsElement>() .downcast::<Element>()
.unwrap(); .unwrap();
let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap(); let demuxer = element.get_impl().downcast_ref::<Demuxer>().unwrap();
@ -593,7 +591,7 @@ impl Demuxer {
fn seek( fn seek(
&self, &self,
element: &RsDemuxer, element: &Element,
start: gst::ClockTime, start: gst::ClockTime,
stop: gst::ClockTime, stop: gst::ClockTime,
offset: &mut u64, offset: &mut u64,
@ -635,12 +633,12 @@ impl Demuxer {
} }
} }
impl ObjectImpl<RsElement> for Demuxer {} impl ObjectImpl<Element> for Demuxer {}
impl ElementImpl<RsElement> for Demuxer { impl ElementImpl<Element> for Demuxer {
fn change_state( fn change_state(
&self, &self,
element: &RsElement, element: &Element,
transition: gst::StateChange, transition: gst::StateChange,
) -> gst::StateChangeReturn { ) -> gst::StateChangeReturn {
let mut ret = gst::StateChangeReturn::Success; let mut ret = gst::StateChangeReturn::Success;
@ -681,16 +679,16 @@ struct DemuxerStatic {
demuxer_info: DemuxerInfo, demuxer_info: DemuxerInfo,
} }
impl ImplTypeStatic<RsElement> for DemuxerStatic { impl ImplTypeStatic<Element> for DemuxerStatic {
fn get_name(&self) -> &str { fn get_name(&self) -> &str {
self.name.as_str() self.name.as_str()
} }
fn new(&self, element: &RsElement) -> Box<ElementImpl<RsElement>> { fn new(&self, element: &Element) -> Box<ElementImpl<Element>> {
Demuxer::init(element, &self.demuxer_info) Demuxer::init(element, &self.demuxer_info)
} }
fn class_init(&self, klass: &mut RsElementClass) { fn class_init(&self, klass: &mut ElementClass) {
Demuxer::class_init(klass, &self.demuxer_info); Demuxer::class_init(klass, &self.demuxer_info);
} }
} }

View file

@ -23,16 +23,16 @@ use gst_plugin::base_sink::*;
use gst_plugin::uri_handler::*; use gst_plugin::uri_handler::*;
use gst_plugin::error::*; use gst_plugin::error::*;
pub use gst_plugin::base_sink::RsBaseSink; pub use gst_plugin::base_sink::BaseSink;
use UriValidator; use UriValidator;
pub trait SinkImpl: Send + 'static { pub trait SinkImpl: Send + 'static {
fn uri_validator(&self) -> Box<UriValidator>; fn uri_validator(&self) -> Box<UriValidator>;
fn start(&mut self, sink: &RsBaseSink, uri: Url) -> Result<(), ErrorMessage>; fn start(&mut self, sink: &BaseSink, uri: Url) -> Result<(), ErrorMessage>;
fn stop(&mut self, sink: &RsBaseSink) -> Result<(), ErrorMessage>; fn stop(&mut self, sink: &BaseSink) -> Result<(), ErrorMessage>;
fn render(&mut self, sink: &RsBaseSink, buffer: &gst::BufferRef) -> Result<(), FlowError>; fn render(&mut self, sink: &BaseSink, buffer: &gst::BufferRef) -> Result<(), FlowError>;
} }
struct Sink { struct Sink {
@ -53,7 +53,7 @@ static PROPERTIES: [Property; 1] = [
]; ];
impl Sink { impl Sink {
fn new(sink: &RsBaseSink, sink_info: &SinkInfo) -> Self { fn new(sink: &BaseSink, sink_info: &SinkInfo) -> Self {
let sink_impl = (sink_info.create_instance)(sink); let sink_impl = (sink_info.create_instance)(sink);
Self { Self {
@ -68,7 +68,7 @@ impl Sink {
} }
} }
fn class_init(klass: &mut RsBaseSinkClass, sink_info: &SinkInfo) { fn class_init(klass: &mut BaseSinkClass, sink_info: &SinkInfo) {
klass.set_metadata( klass.set_metadata(
&sink_info.long_name, &sink_info.long_name,
&sink_info.classification, &sink_info.classification,
@ -88,7 +88,7 @@ impl Sink {
klass.install_properties(&PROPERTIES); klass.install_properties(&PROPERTIES);
} }
fn init(element: &RsBaseSink, sink_info: &SinkInfo) -> Box<BaseSinkImpl<RsBaseSink>> { fn init(element: &BaseSink, sink_info: &SinkInfo) -> Box<BaseSinkImpl<BaseSink>> {
element.set_blocksize(4096); element.set_blocksize(4096);
let imp = Self::new(element, sink_info); let imp = Self::new(element, sink_info);
@ -101,7 +101,7 @@ impl Sink {
} }
fn set_uri(&self, element: &glib::Object, uri_str: Option<String>) -> Result<(), glib::Error> { fn set_uri(&self, element: &glib::Object, uri_str: Option<String>) -> Result<(), glib::Error> {
let sink = element.clone().dynamic_cast::<RsBaseSink>().unwrap(); let sink = element.clone().dynamic_cast::<BaseSink>().unwrap();
let uri_storage = &mut self.uri.lock().unwrap(); let uri_storage = &mut self.uri.lock().unwrap();
@ -135,7 +135,7 @@ impl Sink {
} }
} }
impl ObjectImpl<RsBaseSink> for Sink { impl ObjectImpl<BaseSink> for Sink {
fn set_property(&self, obj: &glib::Object, id: u32, value: &glib::Value) { fn set_property(&self, obj: &glib::Object, id: u32, value: &glib::Value) {
let prop = &PROPERTIES[id as usize]; let prop = &PROPERTIES[id as usize];
@ -157,10 +157,10 @@ impl ObjectImpl<RsBaseSink> for Sink {
} }
} }
impl ElementImpl<RsBaseSink> for Sink {} impl ElementImpl<BaseSink> for Sink {}
impl BaseSinkImpl<RsBaseSink> for Sink { impl BaseSinkImpl<BaseSink> for Sink {
fn start(&self, sink: &RsBaseSink) -> bool { fn start(&self, sink: &BaseSink) -> bool {
gst_debug!(self.cat, obj: sink, "Starting"); gst_debug!(self.cat, obj: sink, "Starting");
// Don't keep the URI locked while we call start later // Don't keep the URI locked while we call start later
@ -192,7 +192,7 @@ impl BaseSinkImpl<RsBaseSink> for Sink {
} }
} }
fn stop(&self, sink: &RsBaseSink) -> bool { fn stop(&self, sink: &BaseSink) -> bool {
let sink_impl = &mut self.imp.lock().unwrap(); let sink_impl = &mut self.imp.lock().unwrap();
gst_debug!(self.cat, obj: sink, "Stopping"); gst_debug!(self.cat, obj: sink, "Stopping");
@ -212,7 +212,7 @@ impl BaseSinkImpl<RsBaseSink> for Sink {
} }
} }
fn render(&self, sink: &RsBaseSink, buffer: &gst::BufferRef) -> gst::FlowReturn { fn render(&self, sink: &BaseSink, buffer: &gst::BufferRef) -> gst::FlowReturn {
let sink_impl = &mut self.imp.lock().unwrap(); let sink_impl = &mut self.imp.lock().unwrap();
gst_trace!(self.cat, obj: sink, "Rendering buffer {:?}", buffer,); gst_trace!(self.cat, obj: sink, "Rendering buffer {:?}", buffer,);
@ -250,7 +250,7 @@ pub struct SinkInfo {
pub classification: String, pub classification: String,
pub author: String, pub author: String,
pub rank: u32, pub rank: u32,
pub create_instance: fn(&RsBaseSink) -> Box<SinkImpl>, pub create_instance: fn(&BaseSink) -> Box<SinkImpl>,
pub protocols: Vec<String>, pub protocols: Vec<String>,
} }
@ -259,16 +259,16 @@ struct SinkStatic {
sink_info: SinkInfo, sink_info: SinkInfo,
} }
impl ImplTypeStatic<RsBaseSink> for SinkStatic { impl ImplTypeStatic<BaseSink> for SinkStatic {
fn get_name(&self) -> &str { fn get_name(&self) -> &str {
self.name.as_str() self.name.as_str()
} }
fn new(&self, element: &RsBaseSink) -> Box<BaseSinkImpl<RsBaseSink>> { fn new(&self, element: &BaseSink) -> Box<BaseSinkImpl<BaseSink>> {
Sink::init(element, &self.sink_info) Sink::init(element, &self.sink_info)
} }
fn class_init(&self, klass: &mut RsBaseSinkClass) { fn class_init(&self, klass: &mut BaseSinkClass) {
Sink::class_init(klass, &self.sink_info); Sink::class_init(klass, &self.sink_info);
} }
@ -277,8 +277,8 @@ impl ImplTypeStatic<RsBaseSink> for SinkStatic {
} }
} }
impl URIHandlerImplStatic<RsBaseSink> for SinkStatic { impl URIHandlerImplStatic<BaseSink> for SinkStatic {
fn get_impl<'a>(&self, imp: &'a Box<BaseSinkImpl<RsBaseSink>>) -> &'a URIHandlerImpl { fn get_impl<'a>(&self, imp: &'a Box<BaseSinkImpl<BaseSink>>) -> &'a URIHandlerImpl {
imp.downcast_ref::<Sink>().unwrap() imp.downcast_ref::<Sink>().unwrap()
} }

View file

@ -25,26 +25,26 @@ use gst_plugin::base_src::*;
use gst_plugin::uri_handler::*; use gst_plugin::uri_handler::*;
use gst_plugin::error::*; use gst_plugin::error::*;
pub use gst_plugin::base_src::RsBaseSrc; pub use gst_plugin::base_src::BaseSrc;
use UriValidator; use UriValidator;
pub trait SourceImpl: Send + 'static { pub trait SourceImpl: Send + 'static {
fn uri_validator(&self) -> Box<UriValidator>; fn uri_validator(&self) -> Box<UriValidator>;
fn is_seekable(&self, src: &RsBaseSrc) -> bool; fn is_seekable(&self, src: &BaseSrc) -> bool;
fn get_size(&self, src: &RsBaseSrc) -> Option<u64>; fn get_size(&self, src: &BaseSrc) -> Option<u64>;
fn start(&mut self, src: &RsBaseSrc, uri: Url) -> Result<(), ErrorMessage>; fn start(&mut self, src: &BaseSrc, uri: Url) -> Result<(), ErrorMessage>;
fn stop(&mut self, src: &RsBaseSrc) -> Result<(), ErrorMessage>; fn stop(&mut self, src: &BaseSrc) -> Result<(), ErrorMessage>;
fn fill( fn fill(
&mut self, &mut self,
src: &RsBaseSrc, src: &BaseSrc,
offset: u64, offset: u64,
length: u32, length: u32,
buffer: &mut gst::BufferRef, buffer: &mut gst::BufferRef,
) -> Result<(), FlowError>; ) -> Result<(), FlowError>;
fn seek(&mut self, src: &RsBaseSrc, start: u64, stop: Option<u64>) -> Result<(), ErrorMessage>; fn seek(&mut self, src: &BaseSrc, start: u64, stop: Option<u64>) -> Result<(), ErrorMessage>;
} }
struct Source { struct Source {
@ -66,7 +66,7 @@ static PROPERTIES: [Property; 1] = [
]; ];
impl Source { impl Source {
fn new(source: &RsBaseSrc, source_info: &SourceInfo) -> Self { fn new(source: &BaseSrc, source_info: &SourceInfo) -> Self {
let source_impl = (source_info.create_instance)(source); let source_impl = (source_info.create_instance)(source);
Self { Self {
@ -82,7 +82,7 @@ impl Source {
} }
} }
fn class_init(klass: &mut RsBaseSrcClass, source_info: &SourceInfo) { fn class_init(klass: &mut BaseSrcClass, source_info: &SourceInfo) {
klass.set_metadata( klass.set_metadata(
&source_info.long_name, &source_info.long_name,
&source_info.classification, &source_info.classification,
@ -102,7 +102,7 @@ impl Source {
klass.install_properties(&PROPERTIES); klass.install_properties(&PROPERTIES);
} }
fn init(element: &RsBaseSrc, source_info: &SourceInfo) -> Box<BaseSrcImpl<RsBaseSrc>> { fn init(element: &BaseSrc, source_info: &SourceInfo) -> Box<BaseSrcImpl<BaseSrc>> {
element.set_blocksize(4096); element.set_blocksize(4096);
let imp = Self::new(element, source_info); let imp = Self::new(element, source_info);
@ -115,7 +115,7 @@ impl Source {
} }
fn set_uri(&self, element: &glib::Object, uri_str: Option<String>) -> Result<(), glib::Error> { fn set_uri(&self, element: &glib::Object, uri_str: Option<String>) -> Result<(), glib::Error> {
let src = element.clone().dynamic_cast::<RsBaseSrc>().unwrap(); let src = element.clone().dynamic_cast::<BaseSrc>().unwrap();
let uri_storage = &mut self.uri.lock().unwrap(); let uri_storage = &mut self.uri.lock().unwrap();
@ -149,7 +149,7 @@ impl Source {
} }
} }
impl ObjectImpl<RsBaseSrc> for Source { impl ObjectImpl<BaseSrc> for Source {
fn set_property(&self, obj: &glib::Object, id: u32, value: &glib::Value) { fn set_property(&self, obj: &glib::Object, id: u32, value: &glib::Value) {
let prop = &PROPERTIES[id as usize]; let prop = &PROPERTIES[id as usize];
@ -171,10 +171,10 @@ impl ObjectImpl<RsBaseSrc> for Source {
} }
} }
impl ElementImpl<RsBaseSrc> for Source {} impl ElementImpl<BaseSrc> for Source {}
impl BaseSrcImpl<RsBaseSrc> for Source { impl BaseSrcImpl<BaseSrc> for Source {
fn start(&self, src: &RsBaseSrc) -> bool { fn start(&self, src: &BaseSrc) -> bool {
gst_debug!(self.cat, obj: src, "Starting"); gst_debug!(self.cat, obj: src, "Starting");
// Don't keep the URI locked while we call start later // Don't keep the URI locked while we call start later
@ -206,7 +206,7 @@ impl BaseSrcImpl<RsBaseSrc> for Source {
} }
} }
fn stop(&self, src: &RsBaseSrc) -> bool { fn stop(&self, src: &BaseSrc) -> bool {
let source_impl = &mut self.imp.lock().unwrap(); let source_impl = &mut self.imp.lock().unwrap();
gst_debug!(self.cat, obj: src, "Stopping"); gst_debug!(self.cat, obj: src, "Stopping");
@ -226,7 +226,7 @@ impl BaseSrcImpl<RsBaseSrc> for Source {
} }
} }
fn query(&self, src: &RsBaseSrc, query: &mut gst::QueryRef) -> bool { fn query(&self, src: &BaseSrc, query: &mut gst::QueryRef) -> bool {
use gst::QueryView; use gst::QueryView;
match query.view_mut() { match query.view_mut() {
@ -238,12 +238,12 @@ impl BaseSrcImpl<RsBaseSrc> for Source {
_ => (), _ => (),
} }
BaseSrc::parent_query(src, query) BaseSrcBase::parent_query(src, query)
} }
fn fill( fn fill(
&self, &self,
src: &RsBaseSrc, src: &BaseSrc,
offset: u64, offset: u64,
length: u32, length: u32,
buffer: &mut gst::BufferRef, buffer: &mut gst::BufferRef,
@ -274,7 +274,7 @@ impl BaseSrcImpl<RsBaseSrc> for Source {
} }
} }
fn do_seek(&self, src: &RsBaseSrc, segment: &mut gst::Segment) -> bool { fn do_seek(&self, src: &BaseSrc, segment: &mut gst::Segment) -> bool {
let source_impl = &mut self.imp.lock().unwrap(); let source_impl = &mut self.imp.lock().unwrap();
let start = segment.get_start(); let start = segment.get_start();
@ -295,12 +295,12 @@ impl BaseSrcImpl<RsBaseSrc> for Source {
} }
} }
fn is_seekable(&self, src: &RsBaseSrc) -> bool { fn is_seekable(&self, src: &BaseSrc) -> bool {
let source_impl = &self.imp.lock().unwrap(); let source_impl = &self.imp.lock().unwrap();
source_impl.is_seekable(src) source_impl.is_seekable(src)
} }
fn get_size(&self, src: &RsBaseSrc) -> Option<u64> { fn get_size(&self, src: &BaseSrc) -> Option<u64> {
let source_impl = &self.imp.lock().unwrap(); let source_impl = &self.imp.lock().unwrap();
source_impl.get_size(src) source_impl.get_size(src)
} }
@ -323,7 +323,7 @@ pub struct SourceInfo {
pub classification: String, pub classification: String,
pub author: String, pub author: String,
pub rank: u32, pub rank: u32,
pub create_instance: fn(&RsBaseSrc) -> Box<SourceImpl>, pub create_instance: fn(&BaseSrc) -> Box<SourceImpl>,
pub protocols: Vec<String>, pub protocols: Vec<String>,
pub push_only: bool, pub push_only: bool,
} }
@ -333,16 +333,16 @@ struct SourceStatic {
source_info: SourceInfo, source_info: SourceInfo,
} }
impl ImplTypeStatic<RsBaseSrc> for SourceStatic { impl ImplTypeStatic<BaseSrc> for SourceStatic {
fn get_name(&self) -> &str { fn get_name(&self) -> &str {
self.name.as_str() self.name.as_str()
} }
fn new(&self, element: &RsBaseSrc) -> Box<BaseSrcImpl<RsBaseSrc>> { fn new(&self, element: &BaseSrc) -> Box<BaseSrcImpl<BaseSrc>> {
Source::init(element, &self.source_info) Source::init(element, &self.source_info)
} }
fn class_init(&self, klass: &mut RsBaseSrcClass) { fn class_init(&self, klass: &mut BaseSrcClass) {
Source::class_init(klass, &self.source_info); Source::class_init(klass, &self.source_info);
} }
@ -351,8 +351,8 @@ impl ImplTypeStatic<RsBaseSrc> for SourceStatic {
} }
} }
impl URIHandlerImplStatic<RsBaseSrc> for SourceStatic { impl URIHandlerImplStatic<BaseSrc> for SourceStatic {
fn get_impl<'a>(&self, imp: &'a Box<BaseSrcImpl<RsBaseSrc>>) -> &'a URIHandlerImpl { fn get_impl<'a>(&self, imp: &'a Box<BaseSrcImpl<BaseSrc>>) -> &'a URIHandlerImpl {
imp.downcast_ref::<Source>().unwrap() imp.downcast_ref::<Source>().unwrap()
} }

View file

@ -178,9 +178,8 @@ impl Adapter {
return Ok(gst::Buffer::new()); return Ok(gst::Buffer::new());
} }
let sub = self.deque let sub = self.deque.front().and_then(|front| {
.front() if front.get_size() - self.skip >= size {
.and_then(|front| if front.get_size() - self.skip >= size {
gst_trace!(CAT, "Get buffer of {} bytes, subbuffer of first", size); gst_trace!(CAT, "Get buffer of {} bytes, subbuffer of first", size);
let new = front let new = front
.get_buffer() .get_buffer()
@ -189,7 +188,8 @@ impl Adapter {
Some(new) Some(new)
} else { } else {
None None
}); }
});
if let Some(s) = sub { if let Some(s) = sub {
self.flush(size).unwrap(); self.flush(size).unwrap();
@ -262,9 +262,13 @@ impl io::Read for Adapter {
if len == 0 { if len == 0 {
return Err(io::Error::new( return Err(io::Error::new(
io::ErrorKind::WouldBlock, io::ErrorKind::WouldBlock,
format!("Missing data: requesting {} but only got {}.", format!(
buf.len(), len))); "Missing data: requesting {} but only got {}.",
buf.len(),
len
),
));
} }
if buf.len() < len { if buf.len() < len {

View file

@ -25,7 +25,7 @@ use object::*;
use element::*; use element::*;
use anyimpl::*; use anyimpl::*;
pub trait BaseSinkImpl<T: BaseSink> pub trait BaseSinkImpl<T: BaseSinkBase>
: AnyImpl + ObjectImpl<T> + ElementImpl<T> + Send + Sync + 'static { : AnyImpl + ObjectImpl<T> + ElementImpl<T> + Send + Sync + 'static {
fn start(&self, _element: &T) -> bool { fn start(&self, _element: &T) -> bool {
true true
@ -92,9 +92,9 @@ pub trait BaseSinkImpl<T: BaseSink>
} }
} }
any_impl!(BaseSink, BaseSinkImpl); any_impl!(BaseSinkBase, BaseSinkImpl);
pub unsafe trait BaseSink pub unsafe trait BaseSinkBase
: IsA<gst::Element> + IsA<gst_base::BaseSink> + ObjectType { : IsA<gst::Element> + IsA<gst_base::BaseSink> + ObjectType {
fn parent_query(&self, query: &mut gst::QueryRef) -> bool { fn parent_query(&self, query: &mut gst::QueryRef) -> bool {
unsafe { unsafe {
@ -159,7 +159,7 @@ pub unsafe trait BaseSink
} }
} }
pub unsafe trait BaseSinkClass<T: BaseSink> pub unsafe trait BaseSinkClassExt<T: BaseSinkBase>
where where
T::ImplType: BaseSinkImpl<T>, T::ImplType: BaseSinkImpl<T>,
{ {
@ -184,28 +184,28 @@ where
} }
glib_wrapper! { glib_wrapper! {
pub struct RsBaseSink(Object<InstanceStruct<RsBaseSink>>): [gst_base::BaseSink => gst_base_ffi::GstBaseSink, pub struct BaseSink(Object<InstanceStruct<BaseSink>>): [gst_base::BaseSink => gst_base_ffi::GstBaseSink,
gst::Element => gst_ffi::GstElement, gst::Element => gst_ffi::GstElement,
gst::Object => gst_ffi::GstObject]; gst::Object => gst_ffi::GstObject];
match fn { match fn {
get_type => || get_type::<RsBaseSink>(), get_type => || get_type::<BaseSink>(),
} }
} }
unsafe impl<T: IsA<gst::Element> + IsA<gst_base::BaseSink> + ObjectType> BaseSink for T {} unsafe impl<T: IsA<gst::Element> + IsA<gst_base::BaseSink> + ObjectType> BaseSinkBase for T {}
pub type RsBaseSinkClass = ClassStruct<RsBaseSink>; pub type BaseSinkClass = ClassStruct<BaseSink>;
// FIXME: Boilerplate // FIXME: Boilerplate
unsafe impl BaseSinkClass<RsBaseSink> for RsBaseSinkClass {} unsafe impl BaseSinkClassExt<BaseSink> for BaseSinkClass {}
unsafe impl ElementClass<RsBaseSink> for RsBaseSinkClass {} unsafe impl ElementClassExt<BaseSink> for BaseSinkClass {}
#[macro_export] #[macro_export]
macro_rules! box_base_sink_impl( macro_rules! box_base_sink_impl(
($name:ident) => { ($name:ident) => {
box_element_impl!($name); box_element_impl!($name);
impl<T: BaseSink> BaseSinkImpl<T> for Box<$name<T>> { impl<T: BaseSinkBase> BaseSinkImpl<T> for Box<$name<T>> {
fn start(&self, element: &T) -> bool { fn start(&self, element: &T) -> bool {
let imp: &$name<T> = self.as_ref(); let imp: &$name<T> = self.as_ref();
imp.start(element) imp.start(element)
@ -276,7 +276,7 @@ macro_rules! box_base_sink_impl(
box_base_sink_impl!(BaseSinkImpl); box_base_sink_impl!(BaseSinkImpl);
impl ObjectType for RsBaseSink { impl ObjectType for BaseSink {
const NAME: &'static str = "RsBaseSink"; const NAME: &'static str = "RsBaseSink";
type GlibType = gst_base_ffi::GstBaseSink; type GlibType = gst_base_ffi::GstBaseSink;
type GlibClassType = gst_base_ffi::GstBaseSinkClass; type GlibClassType = gst_base_ffi::GstBaseSinkClass;
@ -286,15 +286,15 @@ impl ObjectType for RsBaseSink {
unsafe { from_glib(gst_base_ffi::gst_base_sink_get_type()) } unsafe { from_glib(gst_base_ffi::gst_base_sink_get_type()) }
} }
fn class_init(token: &ClassInitToken, klass: &mut RsBaseSinkClass) { fn class_init(token: &ClassInitToken, klass: &mut BaseSinkClass) {
ElementClass::override_vfuncs(klass, token); ElementClassExt::override_vfuncs(klass, token);
BaseSinkClass::override_vfuncs(klass, token); BaseSinkClassExt::override_vfuncs(klass, token);
} }
object_type_fns!(); object_type_fns!();
} }
unsafe extern "C" fn base_sink_start<T: BaseSink>( unsafe extern "C" fn base_sink_start<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -309,7 +309,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.start(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.start(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_sink_stop<T: BaseSink>( unsafe extern "C" fn base_sink_stop<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -324,7 +324,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.stop(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.stop(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_sink_render<T: BaseSink>( unsafe extern "C" fn base_sink_render<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
buffer: *mut gst_ffi::GstBuffer, buffer: *mut gst_ffi::GstBuffer,
) -> gst_ffi::GstFlowReturn ) -> gst_ffi::GstFlowReturn
@ -343,7 +343,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_sink_prepare<T: BaseSink>( unsafe extern "C" fn base_sink_prepare<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
buffer: *mut gst_ffi::GstBuffer, buffer: *mut gst_ffi::GstBuffer,
) -> gst_ffi::GstFlowReturn ) -> gst_ffi::GstFlowReturn
@ -362,7 +362,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_sink_render_list<T: BaseSink>( unsafe extern "C" fn base_sink_render_list<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
list: *mut gst_ffi::GstBufferList, list: *mut gst_ffi::GstBufferList,
) -> gst_ffi::GstFlowReturn ) -> gst_ffi::GstFlowReturn
@ -381,7 +381,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_sink_prepare_list<T: BaseSink>( unsafe extern "C" fn base_sink_prepare_list<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
list: *mut gst_ffi::GstBufferList, list: *mut gst_ffi::GstBufferList,
) -> gst_ffi::GstFlowReturn ) -> gst_ffi::GstFlowReturn
@ -400,7 +400,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_sink_query<T: BaseSink>( unsafe extern "C" fn base_sink_query<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
query_ptr: *mut gst_ffi::GstQuery, query_ptr: *mut gst_ffi::GstQuery,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -419,7 +419,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_sink_event<T: BaseSink>( unsafe extern "C" fn base_sink_event<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
event_ptr: *mut gst_ffi::GstEvent, event_ptr: *mut gst_ffi::GstEvent,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -437,7 +437,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_sink_get_caps<T: BaseSink>( unsafe extern "C" fn base_sink_get_caps<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
filter: *mut gst_ffi::GstCaps, filter: *mut gst_ffi::GstCaps,
) -> *mut gst_ffi::GstCaps ) -> *mut gst_ffi::GstCaps
@ -464,7 +464,7 @@ where
.unwrap_or(ptr::null_mut()) .unwrap_or(ptr::null_mut())
} }
unsafe extern "C" fn base_sink_set_caps<T: BaseSink>( unsafe extern "C" fn base_sink_set_caps<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -486,7 +486,7 @@ where
).to_glib() ).to_glib()
} }
unsafe extern "C" fn base_sink_fixate<T: BaseSink>( unsafe extern "C" fn base_sink_fixate<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
) -> *mut gst_ffi::GstCaps ) -> *mut gst_ffi::GstCaps
@ -505,7 +505,7 @@ where
}).into_ptr() }).into_ptr()
} }
unsafe extern "C" fn base_sink_unlock<T: BaseSink>( unsafe extern "C" fn base_sink_unlock<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -520,7 +520,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.unlock(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.unlock(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_sink_unlock_stop<T: BaseSink>( unsafe extern "C" fn base_sink_unlock_stop<T: BaseSinkBase>(
ptr: *mut gst_base_ffi::GstBaseSink, ptr: *mut gst_base_ffi::GstBaseSink,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where

View file

@ -25,7 +25,7 @@ use object::*;
use element::*; use element::*;
use anyimpl::*; use anyimpl::*;
pub trait BaseSrcImpl<T: BaseSrc> pub trait BaseSrcImpl<T: BaseSrcBase>
: AnyImpl + ObjectImpl<T> + ElementImpl<T> + Send + Sync + 'static { : AnyImpl + ObjectImpl<T> + ElementImpl<T> + Send + Sync + 'static {
fn start(&self, _element: &T) -> bool { fn start(&self, _element: &T) -> bool {
true true
@ -99,9 +99,9 @@ pub trait BaseSrcImpl<T: BaseSrc>
} }
} }
any_impl!(BaseSrc, BaseSrcImpl); any_impl!(BaseSrcBase, BaseSrcImpl);
pub unsafe trait BaseSrc pub unsafe trait BaseSrcBase
: IsA<gst::Element> + IsA<gst_base::BaseSrc> + ObjectType { : IsA<gst::Element> + IsA<gst_base::BaseSrc> + ObjectType {
fn parent_create(&self, offset: u64, length: u32) -> Result<gst::Buffer, gst::FlowReturn> { fn parent_create(&self, offset: u64, length: u32) -> Result<gst::Buffer, gst::FlowReturn> {
unsafe { unsafe {
@ -212,7 +212,7 @@ pub unsafe trait BaseSrc
} }
} }
pub unsafe trait BaseSrcClass<T: BaseSrc> pub unsafe trait BaseSrcClassExt<T: BaseSrcBase>
where where
T::ImplType: BaseSrcImpl<T>, T::ImplType: BaseSrcImpl<T>,
{ {
@ -239,28 +239,28 @@ where
} }
glib_wrapper! { glib_wrapper! {
pub struct RsBaseSrc(Object<InstanceStruct<RsBaseSrc>>): [gst_base::BaseSrc => gst_base_ffi::GstBaseSrc, pub struct BaseSrc(Object<InstanceStruct<BaseSrc>>): [gst_base::BaseSrc => gst_base_ffi::GstBaseSrc,
gst::Element => gst_ffi::GstElement, gst::Element => gst_ffi::GstElement,
gst::Object => gst_ffi::GstObject]; gst::Object => gst_ffi::GstObject];
match fn { match fn {
get_type => || get_type::<RsBaseSrc>(), get_type => || get_type::<BaseSrc>(),
} }
} }
unsafe impl<T: IsA<gst::Element> + IsA<gst_base::BaseSrc> + ObjectType> BaseSrc for T {} unsafe impl<T: IsA<gst::Element> + IsA<gst_base::BaseSrc> + ObjectType> BaseSrcBase for T {}
pub type RsBaseSrcClass = ClassStruct<RsBaseSrc>; pub type BaseSrcClass = ClassStruct<BaseSrc>;
// FIXME: Boilerplate // FIXME: Boilerplate
unsafe impl BaseSrcClass<RsBaseSrc> for RsBaseSrcClass {} unsafe impl BaseSrcClassExt<BaseSrc> for BaseSrcClass {}
unsafe impl ElementClass<RsBaseSrc> for RsBaseSrcClass {} unsafe impl ElementClassExt<BaseSrc> for BaseSrcClass {}
#[macro_export] #[macro_export]
macro_rules! box_base_src_impl( macro_rules! box_base_src_impl(
($name:ident) => { ($name:ident) => {
box_element_impl!($name); box_element_impl!($name);
impl<T: BaseSrc> BaseSrcImpl<T> for Box<$name<T>> { impl<T: BaseSrcBase> BaseSrcImpl<T> for Box<$name<T>> {
fn start(&self, element: &T) -> bool { fn start(&self, element: &T) -> bool {
let imp: &$name<T> = self.as_ref(); let imp: &$name<T> = self.as_ref();
imp.start(element) imp.start(element)
@ -351,7 +351,7 @@ macro_rules! box_base_src_impl(
); );
box_base_src_impl!(BaseSrcImpl); box_base_src_impl!(BaseSrcImpl);
impl ObjectType for RsBaseSrc { impl ObjectType for BaseSrc {
const NAME: &'static str = "RsBaseSrc"; const NAME: &'static str = "RsBaseSrc";
type GlibType = gst_base_ffi::GstBaseSrc; type GlibType = gst_base_ffi::GstBaseSrc;
type GlibClassType = gst_base_ffi::GstBaseSrcClass; type GlibClassType = gst_base_ffi::GstBaseSrcClass;
@ -361,15 +361,15 @@ impl ObjectType for RsBaseSrc {
unsafe { from_glib(gst_base_ffi::gst_base_src_get_type()) } unsafe { from_glib(gst_base_ffi::gst_base_src_get_type()) }
} }
fn class_init(token: &ClassInitToken, klass: &mut RsBaseSrcClass) { fn class_init(token: &ClassInitToken, klass: &mut BaseSrcClass) {
ElementClass::override_vfuncs(klass, token); ElementClassExt::override_vfuncs(klass, token);
BaseSrcClass::override_vfuncs(klass, token); BaseSrcClassExt::override_vfuncs(klass, token);
} }
object_type_fns!(); object_type_fns!();
} }
unsafe extern "C" fn base_src_start<T: BaseSrc>( unsafe extern "C" fn base_src_start<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -384,7 +384,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.start(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.start(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_src_stop<T: BaseSrc>( unsafe extern "C" fn base_src_stop<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -399,7 +399,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.stop(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.stop(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_src_is_seekable<T: BaseSrc>( unsafe extern "C" fn base_src_is_seekable<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -414,7 +414,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.is_seekable(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.is_seekable(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_src_get_size<T: BaseSrc>( unsafe extern "C" fn base_src_get_size<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
size: *mut u64, size: *mut u64,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -438,7 +438,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_src_fill<T: BaseSrc>( unsafe extern "C" fn base_src_fill<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
offset: u64, offset: u64,
length: u32, length: u32,
@ -459,7 +459,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_src_create<T: BaseSrc>( unsafe extern "C" fn base_src_create<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
offset: u64, offset: u64,
length: u32, length: u32,
@ -488,7 +488,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_src_do_seek<T: BaseSrc>( unsafe extern "C" fn base_src_do_seek<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
segment: *mut gst_ffi::GstSegment, segment: *mut gst_ffi::GstSegment,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -506,7 +506,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_src_query<T: BaseSrc>( unsafe extern "C" fn base_src_query<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
query_ptr: *mut gst_ffi::GstQuery, query_ptr: *mut gst_ffi::GstQuery,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -525,7 +525,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_src_event<T: BaseSrc>( unsafe extern "C" fn base_src_event<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
event_ptr: *mut gst_ffi::GstEvent, event_ptr: *mut gst_ffi::GstEvent,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -543,7 +543,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_src_get_caps<T: BaseSrc>( unsafe extern "C" fn base_src_get_caps<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
filter: *mut gst_ffi::GstCaps, filter: *mut gst_ffi::GstCaps,
) -> *mut gst_ffi::GstCaps ) -> *mut gst_ffi::GstCaps
@ -570,7 +570,7 @@ where
.unwrap_or(ptr::null_mut()) .unwrap_or(ptr::null_mut())
} }
unsafe extern "C" fn base_src_negotiate<T: BaseSrc>( unsafe extern "C" fn base_src_negotiate<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -585,7 +585,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.negotiate(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.negotiate(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_src_set_caps<T: BaseSrc>( unsafe extern "C" fn base_src_set_caps<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -607,7 +607,7 @@ where
).to_glib() ).to_glib()
} }
unsafe extern "C" fn base_src_fixate<T: BaseSrc>( unsafe extern "C" fn base_src_fixate<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
) -> *mut gst_ffi::GstCaps ) -> *mut gst_ffi::GstCaps
@ -626,7 +626,7 @@ where
}).into_ptr() }).into_ptr()
} }
unsafe extern "C" fn base_src_unlock<T: BaseSrc>( unsafe extern "C" fn base_src_unlock<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -641,7 +641,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.unlock(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.unlock(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_src_unlock_stop<T: BaseSrc>( unsafe extern "C" fn base_src_unlock_stop<T: BaseSrcBase>(
ptr: *mut gst_base_ffi::GstBaseSrc, ptr: *mut gst_base_ffi::GstBaseSrc,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where

View file

@ -25,7 +25,7 @@ use object::*;
use element::*; use element::*;
use anyimpl::*; use anyimpl::*;
pub trait BaseTransformImpl<T: BaseTransform> pub trait BaseTransformImpl<T: BaseTransformBase>
: AnyImpl + ObjectImpl<T> + ElementImpl<T> + Send + Sync + 'static { : AnyImpl + ObjectImpl<T> + ElementImpl<T> + Send + Sync + 'static {
fn start(&self, _element: &T) -> bool { fn start(&self, _element: &T) -> bool {
true true
@ -104,9 +104,9 @@ pub trait BaseTransformImpl<T: BaseTransform>
} }
} }
any_impl!(BaseTransform, BaseTransformImpl); any_impl!(BaseTransformBase, BaseTransformImpl);
pub unsafe trait BaseTransform pub unsafe trait BaseTransformBase
: IsA<gst::Element> + IsA<gst_base::BaseTransform> + ObjectType { : IsA<gst::Element> + IsA<gst_base::BaseTransform> + ObjectType {
fn parent_transform_caps( fn parent_transform_caps(
&self, &self,
@ -252,7 +252,7 @@ pub enum BaseTransformMode {
Both, Both,
} }
pub unsafe trait BaseTransformClass<T: BaseTransform> pub unsafe trait BaseTransformClassExt<T: BaseTransformBase>
where where
T::ImplType: BaseTransformImpl<T>, T::ImplType: BaseTransformImpl<T>,
{ {
@ -302,28 +302,30 @@ where
} }
glib_wrapper! { glib_wrapper! {
pub struct RsBaseTransform(Object<InstanceStruct<RsBaseTransform>>): [gst_base::BaseTransform => gst_base_ffi::GstBaseTransform, pub struct BaseTransform(Object<InstanceStruct<BaseTransform>>): [gst_base::BaseTransform => gst_base_ffi::GstBaseTransform,
gst::Element => gst_ffi::GstElement, gst::Element => gst_ffi::GstElement,
gst::Object => gst_ffi::GstObject]; gst::Object => gst_ffi::GstObject];
match fn { match fn {
get_type => || get_type::<RsBaseTransform>(), get_type => || get_type::<BaseTransform>(),
} }
} }
unsafe impl<T: IsA<gst::Element> + IsA<gst_base::BaseTransform> + ObjectType> BaseTransform for T {} unsafe impl<T: IsA<gst::Element> + IsA<gst_base::BaseTransform> + ObjectType> BaseTransformBase
pub type RsBaseTransformClass = ClassStruct<RsBaseTransform>; for T {
}
pub type BaseTransformClass = ClassStruct<BaseTransform>;
// FIXME: Boilerplate // FIXME: Boilerplate
unsafe impl BaseTransformClass<RsBaseTransform> for RsBaseTransformClass {} unsafe impl BaseTransformClassExt<BaseTransform> for BaseTransformClass {}
unsafe impl ElementClass<RsBaseTransform> for RsBaseTransformClass {} unsafe impl ElementClassExt<BaseTransform> for BaseTransformClass {}
#[macro_export] #[macro_export]
macro_rules! box_base_transform_impl( macro_rules! box_base_transform_impl(
($name:ident) => { ($name:ident) => {
box_element_impl!($name); box_element_impl!($name);
impl<T: BaseTransform> BaseTransformImpl<T> for Box<$name<T>> { impl<T: BaseTransformBase> BaseTransformImpl<T> for Box<$name<T>> {
fn start(&self, element: &T) -> bool { fn start(&self, element: &T) -> bool {
let imp: &$name<T> = self.as_ref(); let imp: &$name<T> = self.as_ref();
imp.start(element) imp.start(element)
@ -393,7 +395,7 @@ macro_rules! box_base_transform_impl(
); );
box_base_transform_impl!(BaseTransformImpl); box_base_transform_impl!(BaseTransformImpl);
impl ObjectType for RsBaseTransform { impl ObjectType for BaseTransform {
const NAME: &'static str = "RsBaseTransform"; const NAME: &'static str = "RsBaseTransform";
type GlibType = gst_base_ffi::GstBaseTransform; type GlibType = gst_base_ffi::GstBaseTransform;
type GlibClassType = gst_base_ffi::GstBaseTransformClass; type GlibClassType = gst_base_ffi::GstBaseTransformClass;
@ -403,15 +405,15 @@ impl ObjectType for RsBaseTransform {
unsafe { from_glib(gst_base_ffi::gst_base_transform_get_type()) } unsafe { from_glib(gst_base_ffi::gst_base_transform_get_type()) }
} }
fn class_init(token: &ClassInitToken, klass: &mut RsBaseTransformClass) { fn class_init(token: &ClassInitToken, klass: &mut BaseTransformClass) {
ElementClass::override_vfuncs(klass, token); ElementClassExt::override_vfuncs(klass, token);
BaseTransformClass::override_vfuncs(klass, token); BaseTransformClassExt::override_vfuncs(klass, token);
} }
object_type_fns!(); object_type_fns!();
} }
unsafe extern "C" fn base_transform_start<T: BaseTransform>( unsafe extern "C" fn base_transform_start<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -426,7 +428,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.start(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.start(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_transform_stop<T: BaseTransform>( unsafe extern "C" fn base_transform_stop<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
where where
@ -441,7 +443,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.stop(&wrap) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.stop(&wrap) }).to_glib()
} }
unsafe extern "C" fn base_transform_transform_caps<T: BaseTransform>( unsafe extern "C" fn base_transform_transform_caps<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
direction: gst_ffi::GstPadDirection, direction: gst_ffi::GstPadDirection,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
@ -473,7 +475,7 @@ where
}).into_ptr() }).into_ptr()
} }
unsafe extern "C" fn base_transform_fixate_caps<T: BaseTransform>( unsafe extern "C" fn base_transform_fixate_caps<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
direction: gst_ffi::GstPadDirection, direction: gst_ffi::GstPadDirection,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
@ -498,7 +500,7 @@ where
}).into_ptr() }).into_ptr()
} }
unsafe extern "C" fn base_transform_set_caps<T: BaseTransform>( unsafe extern "C" fn base_transform_set_caps<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
incaps: *mut gst_ffi::GstCaps, incaps: *mut gst_ffi::GstCaps,
outcaps: *mut gst_ffi::GstCaps, outcaps: *mut gst_ffi::GstCaps,
@ -517,7 +519,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_accept_caps<T: BaseTransform>( unsafe extern "C" fn base_transform_accept_caps<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
direction: gst_ffi::GstPadDirection, direction: gst_ffi::GstPadDirection,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
@ -536,7 +538,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_query<T: BaseTransform>( unsafe extern "C" fn base_transform_query<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
direction: gst_ffi::GstPadDirection, direction: gst_ffi::GstPadDirection,
query: *mut gst_ffi::GstQuery, query: *mut gst_ffi::GstQuery,
@ -560,7 +562,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_transform_size<T: BaseTransform>( unsafe extern "C" fn base_transform_transform_size<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
direction: gst_ffi::GstPadDirection, direction: gst_ffi::GstPadDirection,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
@ -594,7 +596,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_get_unit_size<T: BaseTransform>( unsafe extern "C" fn base_transform_get_unit_size<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
caps: *mut gst_ffi::GstCaps, caps: *mut gst_ffi::GstCaps,
size: *mut usize, size: *mut usize,
@ -619,7 +621,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_sink_event<T: BaseTransform>( unsafe extern "C" fn base_transform_sink_event<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
event: *mut gst_ffi::GstEvent, event: *mut gst_ffi::GstEvent,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -637,7 +639,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_src_event<T: BaseTransform>( unsafe extern "C" fn base_transform_src_event<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
event: *mut gst_ffi::GstEvent, event: *mut gst_ffi::GstEvent,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -655,7 +657,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_transform<T: BaseTransform>( unsafe extern "C" fn base_transform_transform<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
inbuf: *mut gst_ffi::GstBuffer, inbuf: *mut gst_ffi::GstBuffer,
outbuf: *mut gst_ffi::GstBuffer, outbuf: *mut gst_ffi::GstBuffer,
@ -678,7 +680,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn base_transform_transform_ip<T: BaseTransform>( unsafe extern "C" fn base_transform_transform_ip<T: BaseTransformBase>(
ptr: *mut gst_base_ffi::GstBaseTransform, ptr: *mut gst_base_ffi::GstBaseTransform,
buf: *mut *mut gst_ffi::GstBuffer, buf: *mut *mut gst_ffi::GstBuffer,
) -> gst_ffi::GstFlowReturn ) -> gst_ffi::GstFlowReturn

View file

@ -23,7 +23,7 @@ use gst::prelude::*;
use object::*; use object::*;
use anyimpl::*; use anyimpl::*;
pub trait ElementImpl<T: Element> pub trait ElementImpl<T: ElementBase>
: ObjectImpl<T> + AnyImpl + Send + Sync + 'static { : ObjectImpl<T> + AnyImpl + Send + Sync + 'static {
fn change_state(&self, element: &T, transition: gst::StateChange) -> gst::StateChangeReturn { fn change_state(&self, element: &T, transition: gst::StateChange) -> gst::StateChangeReturn {
element.parent_change_state(transition) element.parent_change_state(transition)
@ -54,9 +54,9 @@ pub trait ElementImpl<T: Element>
} }
} }
any_impl!(Element, ElementImpl); any_impl!(ElementBase, ElementImpl);
pub unsafe trait Element: IsA<gst::Element> + ObjectType { pub unsafe trait ElementBase: IsA<gst::Element> + ObjectType {
fn parent_change_state(&self, transition: gst::StateChange) -> gst::StateChangeReturn { fn parent_change_state(&self, transition: gst::StateChange) -> gst::StateChangeReturn {
unsafe { unsafe {
let klass = self.get_class(); let klass = self.get_class();
@ -104,7 +104,7 @@ pub unsafe trait Element: IsA<gst::Element> + ObjectType {
} }
} }
pub unsafe trait ElementClass<T: Element> pub unsafe trait ElementClassExt<T: ElementBase>
where where
T::ImplType: ElementImpl<T>, T::ImplType: ElementImpl<T>,
{ {
@ -149,26 +149,26 @@ where
} }
glib_wrapper! { glib_wrapper! {
pub struct RsElement(Object<InstanceStruct<RsElement>>): [gst::Element => gst_ffi::GstElement, pub struct Element(Object<InstanceStruct<Element>>): [gst::Element => gst_ffi::GstElement,
gst::Object => gst_ffi::GstObject]; gst::Object => gst_ffi::GstObject];
match fn { match fn {
get_type => || get_type::<RsElement>(), get_type => || get_type::<Element>(),
} }
} }
unsafe impl<T: IsA<gst::Element> + ObjectType> Element for T {} unsafe impl<T: IsA<gst::Element> + ObjectType> ElementBase for T {}
pub type RsElementClass = ClassStruct<RsElement>; pub type ElementClass = ClassStruct<Element>;
// FIXME: Boilerplate // FIXME: Boilerplate
unsafe impl ElementClass<RsElement> for RsElementClass {} unsafe impl ElementClassExt<Element> for ElementClass {}
#[macro_export] #[macro_export]
macro_rules! box_element_impl( macro_rules! box_element_impl(
($name:ident) => { ($name:ident) => {
box_object_impl!($name); box_object_impl!($name);
impl<T: Element> ElementImpl<T> for Box<$name<T>> { impl<T: ElementBase> ElementImpl<T> for Box<$name<T>> {
fn change_state( fn change_state(
&self, &self,
element: &T, element: &T,
@ -208,7 +208,7 @@ macro_rules! box_element_impl(
box_element_impl!(ElementImpl); box_element_impl!(ElementImpl);
impl ObjectType for RsElement { impl ObjectType for Element {
const NAME: &'static str = "RsElement"; const NAME: &'static str = "RsElement";
type GlibType = gst_ffi::GstElement; type GlibType = gst_ffi::GstElement;
type GlibClassType = gst_ffi::GstElementClass; type GlibClassType = gst_ffi::GstElementClass;
@ -218,14 +218,14 @@ impl ObjectType for RsElement {
unsafe { from_glib(gst_ffi::gst_element_get_type()) } unsafe { from_glib(gst_ffi::gst_element_get_type()) }
} }
fn class_init(token: &ClassInitToken, klass: &mut RsElementClass) { fn class_init(token: &ClassInitToken, klass: &mut ElementClass) {
klass.override_vfuncs(token); klass.override_vfuncs(token);
} }
object_type_fns!(); object_type_fns!();
} }
unsafe extern "C" fn element_change_state<T: Element>( unsafe extern "C" fn element_change_state<T: ElementBase>(
ptr: *mut gst_ffi::GstElement, ptr: *mut gst_ffi::GstElement,
transition: gst_ffi::GstStateChange, transition: gst_ffi::GstStateChange,
) -> gst_ffi::GstStateChangeReturn ) -> gst_ffi::GstStateChangeReturn
@ -243,7 +243,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn element_request_new_pad<T: Element>( unsafe extern "C" fn element_request_new_pad<T: ElementBase>(
ptr: *mut gst_ffi::GstElement, ptr: *mut gst_ffi::GstElement,
templ: *mut gst_ffi::GstPadTemplate, templ: *mut gst_ffi::GstPadTemplate,
name: *const libc::c_char, name: *const libc::c_char,
@ -268,7 +268,7 @@ where
}).to_glib_full() }).to_glib_full()
} }
unsafe extern "C" fn element_release_pad<T: Element>( unsafe extern "C" fn element_release_pad<T: ElementBase>(
ptr: *mut gst_ffi::GstElement, ptr: *mut gst_ffi::GstElement,
pad: *mut gst_ffi::GstPad, pad: *mut gst_ffi::GstPad,
) where ) where
@ -285,7 +285,7 @@ unsafe extern "C" fn element_release_pad<T: Element>(
}) })
} }
unsafe extern "C" fn element_send_event<T: Element>( unsafe extern "C" fn element_send_event<T: ElementBase>(
ptr: *mut gst_ffi::GstElement, ptr: *mut gst_ffi::GstElement,
event: *mut gst_ffi::GstEvent, event: *mut gst_ffi::GstEvent,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -303,7 +303,7 @@ where
}).to_glib() }).to_glib()
} }
unsafe extern "C" fn element_query<T: Element>( unsafe extern "C" fn element_query<T: ElementBase>(
ptr: *mut gst_ffi::GstElement, ptr: *mut gst_ffi::GstElement,
query: *mut gst_ffi::GstQuery, query: *mut gst_ffi::GstQuery,
) -> glib_ffi::gboolean ) -> glib_ffi::gboolean
@ -320,7 +320,7 @@ where
panic_to_error!(&wrap, &element.panicked, false, { imp.query(&wrap, query) }).to_glib() panic_to_error!(&wrap, &element.panicked, false, { imp.query(&wrap, query) }).to_glib()
} }
unsafe extern "C" fn element_set_context<T: Element>( unsafe extern "C" fn element_set_context<T: ElementBase>(
ptr: *mut gst_ffi::GstElement, ptr: *mut gst_ffi::GstElement,
context: *mut gst_ffi::GstContext, context: *mut gst_ffi::GstContext,
) where ) where

View file

@ -88,8 +88,20 @@ pub enum Property<'a> {
Option<&'a str>, Option<&'a str>,
PropertyMutability, PropertyMutability,
), ),
Boxed(&'a str, &'a str, &'a str, fn() -> glib::Type, PropertyMutability), Boxed(
Object(&'a str, &'a str, &'a str, fn() -> glib::Type, PropertyMutability), &'a str,
&'a str,
&'a str,
fn() -> glib::Type,
PropertyMutability,
),
Object(
&'a str,
&'a str,
&'a str,
fn() -> glib::Type,
PropertyMutability,
),
} }
impl<'a> Into<*mut gobject_ffi::GParamSpec> for &'a Property<'a> { impl<'a> Into<*mut gobject_ffi::GParamSpec> for &'a Property<'a> {