2013-07-19 13 views
7

Sto cercando di ottenere un effetto di alpha-blending in QML con un video in RGBA.QML Video alpha-blending/rendering di un video in un Qt Quick Scene Graph

Ora il problema è che l'elemento video fornito da QtMultimedia apre una finestra di sovrapposizione nella scena QtQuick, quindi non penso sia possibile combinare in alfa altri elementi QML con l'elemento Video (spero davvero che io sia) m sbagliato, ma non riesco a trovare una soluzione).

Quindi un altro modo sarebbe il rendering di un video in una classe che eredita da QQuickItem, nel metodo updatePaintNode.

  1. Qualcuno ha mai visto qualcosa di simile? È possibile anche se i ragazzi di QtMultimedia non riuscissero a raggiungerlo?

  2. Posso forse modificare lo sfondo dell'elemento MediaPlayer, forse per essere trasparente o solo un colore in QML?

Finora pensavo QAbstractVideoSurface e QVideoFrame ma non ho idea di come renderla sul QSG, o anche come funziona l'GeometryNode per un video.

La soluzione migliore sarebbe quella di ottenere l'alfa-blending con altri elementi QML per esempio in:

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

    focus: true 

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

    autoPlay: true 
    } 
} 

Grazie in anticipo!

risposta

2

Ho provato alcune cose, ma alla fine ho utilizzato l'esempio Qt chiamato VideoWidget che utilizza QAbstractVideoSurface e QVideoFrame e ho dipinto i frame in un oggetto QQuickPainted, utilizzando MediaPlayer per caricare i dati da QML.

È importante mettere ARGB32 in cima alla QList che descrive i formati di pixel supportati in QAbstractVideoSurface, sfortunatamente la logica Qt è che prendono il primo formato di availibe ed è per questo che l'elemento Video nativo non mostra il canale alfa (riproduce il video in RGB32, o quello o è una cosa con la finestra di sovrapposizione nell'elemento nativo invece di dipingerlo nel grafico QtQuick Scene).

Problemi correlati