Rotating video when using compositor (and not losing off-edge-pixels)

Sean DuBois sean at siobud.com
Mon Dec 18 19:29:06 UTC 2017


On Mon, Dec 18, 2017 at 01:00:54PM +0100, Antonio Ospite wrote:
> On Sun, 17 Dec 2017 00:48:32 -0600
> Sean DuBois <sean at siobud.com> wrote:
>
> > I am trying to rotate a video by degrees that are not divisible by 90.
> > Like this [0] pipeline . However I am not able to find any solutions
> > that don't involve losing pixels and/or support alpha.
> >
> > So far the best thing I have found is videoflip, and it works well for
> > 90/180/270
> >
> > Does anyone know a solution, and if not would an element be welcome for
> > this? Or maybe I can add a patch to rotate (but for my use case I would
> > want the sink to always have alpha) and the height/width would be
> > re-calculated every time the angle changed.
> >
>
> About the alpha, you have to set caps before the rotation to make sure you
> are using a format which does have an alpha channel, like in:
>
> gst-launch-1.0 videotestsrc ! video/x-raw,format=ARGB ! ... ! videoconvert ! autovideosink
>
> About the off-edge-pixels:
>
> 1. If you do not want to lose pixels, composite to a bigger
>    transparent frame and rotate that:
>
>    gst-launch-1.0 videotestsrc ! video/x-raw,format=ARGB ! compositor background=transparent sink_0::xpos=160 sink_0::ypos=120 ! video/x-raw,width=640,height=480 ! rotate angle=5 ! compositor sink_0::xpos=200 sink_0::ypos=200 ! video/x-raw,width=1280,height=720 ! videoconvert ! autovideosink
>
> 2. If shrinking the image is fine, then use an affine transform to
>    rotate scale and translate at the same time, if you cannot use
>    gltransformation you can try the "perspective" element which does
>    everything on the CPU, you'll have to pass the calculated matrix from
>    code.
>
>    The matrix can be calculated with the formula from here:
>    https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#getrotationmatrix2d
>
>    Adding one last row set to [0,0,1] because "perspective" expects
>    a 3x3 matrix.
>
>    Maybe "perspective" wasn't the best name for the element as it
>    performs a generic matrix transform.
>
>
> Ciao,
>    Antonio
>
> --
> Antonio Ospite
> https://ao2.it
> https://twitter.com/ao2it
>
> A: Because it messes up the order in which people normally read text.
>    See http://en.wikipedia.org/wiki/Posting_style
> Q: Why is top-posting such a bad thing?

That is a really clever hack for off-edge-pixels, thanks Antonio!

That will work perfectly for me short term, but it would be nice to have
a solution out of the box (and will try my best to get it in-tree)


More information about the gstreamer-devel mailing list