diff options
author | Sanchayan Maity <sanchayan@asymptotic.io> | 2023-05-12 12:47:28 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2023-05-18 17:55:08 +0300 |
commit | 48cc8570e4df6c8353691d7bb3a6e94d8ae8811d (patch) | |
tree | e7c74a084f26c64d0ea275f0d7d8f62e854a3c6f | |
parent | 19ffa05bb448895acb776871fc7bce2db5a8dd5f (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/1215>
-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); } |