Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Raghavan <arun@asymptotic.io>2022-05-11 16:59:49 +0300
committerArun Raghavan <arun@asymptotic.io>2022-05-11 17:02:27 +0300
commit557917b92a398f07435bedbe0d535c4634f28c4a (patch)
tree88345b4ddc51561ddfcd21a8ffcd4edb597898c4 /video/dav1d
parent2c3514a5a104bf7c7385516afbfe810146db4391 (diff)
dav1ddec: Write src_query() in match syntax for easier extensibility
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/698>
Diffstat (limited to 'video/dav1d')
-rw-r--r--video/dav1d/src/dav1ddec/imp.rs105
1 files changed, 53 insertions, 52 deletions
diff --git a/video/dav1d/src/dav1ddec/imp.rs b/video/dav1d/src/dav1ddec/imp.rs
index 8b792a187..922b09255 100644
--- a/video/dav1d/src/dav1ddec/imp.rs
+++ b/video/dav1d/src/dav1ddec/imp.rs
@@ -615,62 +615,63 @@ impl ElementImpl for Dav1dDec {
impl VideoDecoderImpl for Dav1dDec {
fn src_query(&self, element: &Self::Type, query: &mut gst::QueryRef) -> bool {
- if let gst::QueryViewMut::Latency(q) = query.view_mut() {
- let state_guard = self.state.lock().unwrap();
- let max_frame_delay = {
- let settings = self.settings.lock().unwrap();
- settings.max_frame_delay
- };
-
- match *state_guard {
- Some(ref state) => match state.output_info {
- Some(ref info) => {
- let mut upstream_latency = gst::query::Latency::new();
- let sinkpad = element.sink_pad();
-
- if sinkpad.peer_query(&mut upstream_latency) {
- let (live, mut min, mut max) = upstream_latency.result();
- // For autodetection: 1 if live, else whatever dav1d gives us
- let frame_latency: u64 = if max_frame_delay < 0 && live {
- 1
+ match query.view_mut() {
+ gst::QueryViewMut::Latency(q) => {
+ let state_guard = self.state.lock().unwrap();
+ let max_frame_delay = {
+ let settings = self.settings.lock().unwrap();
+ settings.max_frame_delay
+ };
+
+ match *state_guard {
+ Some(ref state) => match state.output_info {
+ Some(ref info) => {
+ let mut upstream_latency = gst::query::Latency::new();
+ let sinkpad = element.sink_pad();
+
+ if sinkpad.peer_query(&mut upstream_latency) {
+ let (live, mut min, mut max) = upstream_latency.result();
+ // For autodetection: 1 if live, else whatever dav1d gives us
+ let frame_latency: u64 = if max_frame_delay < 0 && live {
+ 1
+ } else {
+ self.estimate_frame_delay(
+ max_frame_delay as u32,
+ state.n_cpus as u32,
+ )
+ .into()
+ };
+
+ let fps_n = match info.fps().numer() {
+ 0 => 30, // Pretend we're at 30fps if we don't know latency,
+ n => n,
+ };
+
+ let latency = frame_latency
+ * (info.fps().denom() as u64)
+ * gst::ClockTime::SECOND
+ / (fps_n as u64);
+
+ gst::debug!(CAT, obj: element, "Reporting latency of {}", latency);
+
+ min += latency;
+ max = max.opt_add(latency);
+ q.set(live, min, max);
+
+ true
} else {
- self.estimate_frame_delay(
- max_frame_delay as u32,
- state.n_cpus as u32,
- )
- .into()
- };
-
- let fps_n = match info.fps().numer() {
- 0 => 30, // Pretend we're at 30fps if we don't know latency,
- n => n,
- };
-
- let latency = frame_latency
- * (info.fps().denom() as u64)
- * gst::ClockTime::SECOND
- / (fps_n as u64);
-
- gst::debug!(CAT, obj: element, "Reporting latency of {}", latency);
-
- min += latency;
- max = max.opt_add(latency);
- q.set(live, min, max);
-
- true
- } else {
- // peer latency query failed
- false
+ // peer latency query failed
+ false
+ }
}
- }
- // output info not available => fps unknown
+ // output info not available => fps unknown
+ None => false,
+ },
+ // no state yet
None => false,
- },
- // no state yet
- None => false,
+ }
}
- } else {
- VideoDecoderImplExt::parent_src_query(self, element, query)
+ _ => VideoDecoderImplExt::parent_src_query(self, element, query),
}
}