diff options
author | Sanchayan Maity <sanchayan@asymptotic.io> | 2023-05-12 12:47:28 +0300 |
---|---|---|
committer | Sanchayan Maity <sanchayan@asymptotic.io> | 2023-05-15 09:49:09 +0300 |
commit | 067d47f0ec6ede734363ff6f724b7acb5e11fed5 (patch) | |
tree | 2f2a9db06fc35282ba7c4d71e186e58f3961752c /video | |
parent | 7ba0073052c81c8f2f1ebe500048ed6d974e81d8 (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.rs | 8 |
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); } |