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
path: root/video
diff options
context:
space:
mode:
authorSanchayan Maity <sanchayan@asymptotic.io>2023-05-12 12:47:28 +0300
committerSanchayan Maity <sanchayan@asymptotic.io>2023-05-15 09:49:09 +0300
commit067d47f0ec6ede734363ff6f724b7acb5e11fed5 (patch)
tree2f2a9db06fc35282ba7c4d71e186e58f3961752c /video
parent7ba0073052c81c8f2f1ebe500048ed6d974e81d8 (diff)
videofx: border: Do not advertise I420 for non-zero border radius
In certain cases, roundedcorners would negotiate to I420 even when user supplied a non-zero border radius. For example, the below pipeline leads to I420 being negotiated even though a non-zero border radius was given. Ideally, this pipeline should have failed at the negotiation stage. ```bash gst-launch-1.0 -v \ videotestsrc num-buffers=1000 pattern=white ! \ video/x-raw,width=320,height=180 ! \ roundedcorners border-radius-px=10 ! videobox border-alpha=0 top=-10 left=-10 right=-10 bottom=-10 fill=yellow ! \ compositor name=comp sink_0::xpos=960 sink_0::ypos=0 sink_0::width=320 sink_0::height=180 sink_0::alpha=1.0 sink_1::xpos=960 sink_1::ypos=180 sink_1::width=320 sink_1::height=180 sink_1::alpha=1.0 \ sink_2::xpos=960 sink_2::ypos=360 sink_2::width=320 sink_2::height=180 sink_2::alpha=1.0 sink_3::xpos=0 sink_3::ypos=0 sink_3::width=960 sink_3::height=720 sink_3::alpha=1.0 ! \ video/x-raw,width=1280,height=720! x264enc ! mp4mux ! filesink location=test.mp4 \ videotestsrc num-buffers=1000 pattern=red ! \ video/x-raw,width=320,height=180 ! roundedcorners border-radius-px=10 ! comp. \ videotestsrc num-buffers=1000 pattern=blue ! \ video/x-raw,width=320,height=180 ! roundedcorners border-radius-px=10 ! comp. \ videotestsrc num-buffers=1000 pattern=green ! \ video/x-raw,width=960,height=720 ! roundedcorners border-radius-px=10 ! comp. ``` If border radius is non-zero, we should not really allow negotiation to select I420. Fix this by returning only A420 for border-radius > 0 in `transform_caps` instead of returning both like earlier. Another example of a simpler pipeline like below which would earlier work ```bash gst-launch-1.0 videotestsrc pattern=red ! videoconvert ! video/x-raw,width=1923,height=1087,format=I420 ! roundedcorners border-radius-px=40 ! video/x-raw,format=I420 ! videoconvert ! gtksink ``` now fails with ```bash WARNING: erroneous pipeline: could not link roundedcorners0 to videoconvert1, roundedcorners0 can't handle caps video/x-raw, format=(string)I420 ``` Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1211>
Diffstat (limited to 'video')
-rw-r--r--video/videofx/src/border/imp.rs8
1 files changed, 1 insertions, 7 deletions
diff --git a/video/videofx/src/border/imp.rs b/video/videofx/src/border/imp.rs
index 9d2b8365b..654c6e4e6 100644
--- a/video/videofx/src/border/imp.rs
+++ b/video/videofx/src/border/imp.rs
@@ -414,13 +414,7 @@ impl BaseTransformImpl for RoundedCorners {
]),
);
} else {
- s_output.set(
- "format",
- gst::List::new([
- VideoFormat::A420.to_str(),
- VideoFormat::I420.to_str(),
- ]),
- );
+ s_output.set("format", VideoFormat::A420.to_str());
}
output_caps.append_structure(s_output);
}