[Libva] vaPutSurface blend with UI controls

Gwenole Beauchesne gbeauchesne at splitted-desktop.com
Mon Jan 25 02:52:47 PST 2010


Hi,

On Mon, 25 Jan 2010, Yuan, Shengquan wrote:

> 1) vaPutSurface render to a pixmap, then use GLX_TFP/GL to blend
> pros: no new interface is needed
> cons: not all players support GL. for every frame, need additional
> blit (video->pixmap, pixmap->drawable)

Actually, the GLX/TFP approach is indeed suboptimal. We really need a 
specific VA/GLX API and proper driver support. On the AMD side, we can 
transfer a surface to GL texture quite efficiently.

I think it wouldn't be difficult to implement this hook right into the psb 
driver and thus avoiding the TFP indirection.

> 2) use VA subpicture interface: put UI controls to subpicture, then
> blend with surface
> pros: also no new interface is needed
> cons: it may be a burden for players to load UI controls as VA
> subpicture. I am not sure how player response the event if the control
> is pushed.

I have implemented VA subpicture in MPlayer. I think this is the most 
efficient approach as this handles RGBA surfaces directly. It's not a 
problem for events since this is not a child window. So the application is 
simply receiving the events as usual.

> 3) vaPutSurface with new flag VA_BLEND_DRAWABLE_ALPHA: this flag
> indicates the surface content should blend with drawble content using
> drawable alpha.  Player should clear the alpha to 0 if it wants to get
> a opaque video. vaPutSurface shouldn't alter the drawable alpha value,
> so that the subsequent vaPutSurface still can blend with the UI
> control without any drawable content modification
> pros: it is easy for player?
> cons: new vaPutSurface flag
>
> 4) vaPutSurface with new flag VA_BLEND_SURFACE_GLOBAL_ALAPH: compared
> with 3), the alpha is provide by player/VA. Player should clear the
> drawable color to 0 if it wants to get a opaque video. Before every
> vaPutSurface, the implementation may change drawable content, so
> player need to re-clear the drawable color every time
> pros: no obvious pros compared with 3)
> cons: player needs to clear the drawable every time.

I think we should avoid alpha blending with the underlying drawable as 
some implementations may use a child window for vaPutSurface().

UI controls sound like a non-problem to me. All the necesary functionality 
is already working in place. Even if the use wanted native controls (like 
Gtk or Qt buttons), he would render it as child window already. Otherwise, 
if we wants custom images for the UI, the VA subpicture interface is very 
efficient as you can associate only the needed regions.

i.e. you could create a large VAImage/VASubpicture with all control UIs. 
Then you can vaAssociateSubpicture() the needed bits (e.g. 64x64 regions) 
only quite efficiently.

Regards,
Gwenole.


More information about the Libva mailing list