Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

QML Video alpha-blending/rendering a video into a Qt Quick Scene Graph

I'm trying to get an alpha-blending effect in QML with a video in RGBA.

Now the problem is that the Video Item supplied by QtMultimedia actualy opens an overlaying window in the QtQuick scene, so I don't think it's possible to alpha-blend other QML elements with the Video element (I sure hope I'm wrong, but I can't find a solution).

So another way would be rendering a video myself in a class that inherits from QQuickItem, in the updatePaintNode method.

  1. Has anyone seen anything like this before? Is it even possible if the guys behind QtMultimedia couldn't achieve it?

  2. Can I maybe change the background of the MediaPlayer element, maybe to be transparent or just a color in QML?

So far I was thinking about QAbstractVideoSurface and QVideoFrame but I have no idea how to render it onto the QSG, or even how should the GeometryNode look for a video.

The best solution would be to get the alpha-blending with other QML Elements for example in:

Rectangle {
  width: 1024
  height: 768
  color: "yellow"

  focus: true

  Video {
    id: video
    anchors.fill: parent
    source: "alpha-video.mov"

    autoPlay: true
  }
}

Thanks in advance!

like image 689
Mac Avatar asked Jul 19 '13 09:07

Mac


1 Answers

I tried a few things, but in the end I used the Qt example called VideoWidget that uses QAbstractVideoSurface and QVideoFrame, and painted the frames in a QQuickPaintedItem, using MediaPlayer to load the data from QML.

It's important to put ARGB32 on top of the QList that describes the supported pixel formats in the QAbstractVideoSurface, unfortunately the Qt logic is that they take the first availibe format and that's why the native Video element doesn't show the alpha channel (it plays the video in RGB32, either that or it's a thing with the overlaying window in the native element instead of painting it in the QtQuick Scene Graph).

like image 58
Mac Avatar answered Sep 18 '22 19:09

Mac