mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-25 11:01:10 +00:00
gstreamer: Add API to take an event and buffers in a pad probe
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1537>
This commit is contained in:
parent
4a5d62311e
commit
6321323ca6
1 changed files with 54 additions and 0 deletions
|
@ -113,6 +113,47 @@ impl<'a> PadProbeInfo<'a> {
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rustdoc-stripper-ignore-next
|
||||||
|
/// Takes over the buffer in the probe info. As the data is no longer valid for the caller, the
|
||||||
|
/// probe will be considered dropped after this point.
|
||||||
|
pub fn take_buffer(&mut self) -> Option<Buffer> {
|
||||||
|
if matches!(self.data, Some(PadProbeData::Buffer(..))) {
|
||||||
|
match self.data.take() {
|
||||||
|
Some(PadProbeData::Buffer(b)) => Some(b),
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// rustdoc-stripper-ignore-next
|
||||||
|
/// Takes over the buffer in the probe info. As the data is no longer valid for the caller, the
|
||||||
|
/// probe will be considered dropped after this point.
|
||||||
|
pub fn take_buffer_list(&mut self) -> Option<BufferList> {
|
||||||
|
if matches!(self.data, Some(PadProbeData::BufferList(..))) {
|
||||||
|
match self.data.take() {
|
||||||
|
Some(PadProbeData::BufferList(b)) => Some(b),
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// rustdoc-stripper-ignore-next
|
||||||
|
/// Takes over the event in the probe info. As the data is no longer valid for the caller, the
|
||||||
|
/// probe will be considered dropped after this point.
|
||||||
|
pub fn take_event(&mut self) -> Option<Event> {
|
||||||
|
if matches!(self.data, Some(PadProbeData::Event(..))) {
|
||||||
|
match self.data.take() {
|
||||||
|
Some(PadProbeData::Event(e)) => Some(e),
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -1007,6 +1048,19 @@ unsafe fn update_probe_info(
|
||||||
}
|
}
|
||||||
other => panic!("Bad data for {data_type:?} pad probe returning Handled: {other:?}"),
|
other => panic!("Bad data for {data_type:?} pad probe returning Handled: {other:?}"),
|
||||||
}
|
}
|
||||||
|
} else if ret == PadProbeReturn::Drop {
|
||||||
|
// We may have consumed the object via PadProbeInfo::take_*() functions
|
||||||
|
match probe_info.data {
|
||||||
|
None if data_type == Some(Buffer::static_type())
|
||||||
|
|| data_type == Some(BufferList::static_type())
|
||||||
|
|| data_type == Some(Event::static_type()) =>
|
||||||
|
{
|
||||||
|
(*info).data = ptr::null_mut();
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
// Nothing to do, it's going to be dropped
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
match probe_info.data {
|
match probe_info.data {
|
||||||
Some(PadProbeData::Buffer(buffer)) => {
|
Some(PadProbeData::Buffer(buffer)) => {
|
||||||
|
|
Loading…
Reference in a new issue