Xserver doesn't support XvPutImage to Pixmap?

Maarten Maathuis madman2003 at gmail.com
Fri Apr 10 10:05:41 PDT 2009


I think Xv is meant to also work for overlays, which obviously won't
work on a pixmap. Maybe it's a safety so application developers don't
do anything stupid.

Maarten.

On Fri, Apr 10, 2009 at 11:30 AM, Yuan Austin <shengquan.yuan at gmail.com> wrote:
> On Thu, Apr 2, 2009 at 3:59 PM, Shengquan Yuan <shengquan.yuan at gmail.com> wrote:
>> Hi,
>>
>> I tried to use XvPutImage to draw into a pixmap, but it always returns
>> error. After tracing into Xserver, I found function
>> hw/xfree86/common/xf86xv.c:xf86XVPutImage checks whether the drawable
>> is WINDOW, if not, it returns BadAlloc directly, see bellow code:
>>
>>> static int
>>> xf86XVPutImage(
>>>   ClientPtr client,
>>>   DrawablePtr pDraw,
>>>   XvPortPtr pPort,
>>>   GCPtr pGC,
>>>   INT16 src_x, INT16 src_y,
>>>   CARD16 src_w, CARD16 src_h,
>>>   INT16 drw_x, INT16 drw_y,
>>>   CARD16 drw_w, CARD16 drw_h,
>>>   XvImagePtr format,
>>>   unsigned char* data,
>>>   Bool sync,
>>>   CARD16 width, CARD16 height
>>> ){
>>>  XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr)(pPort->devPriv.ptr);
>>>  ScreenPtr pScreen;
>>>  RegionRec WinRegion;
>>>  RegionRec ClipRegion;
>>>  BoxRec WinBox;
>>>  int ret = Success;
>>>  Bool clippedAway = FALSE;
>>>
>>>  if (pDraw->type != DRAWABLE_WINDOW)
>>> =>    return BadAlloc;
>
> I tried to comment above two lines, then XvPutImage can draw into a
> pixmap. I am not sure if it has side effect.
>
> I also tried intel driver on a 945G platform, since intel driver is
> using UXA architecture, and bellow  "exaMoveInPixmap" won't be called,
> this hacking doesn't work.
>
>>
>> I also looked at Xvideo implementation in Xserver video driver, and it
>> looks like texture video supports rendering into a pixmap:
>>
>>>    if (pDraw->type == DRAWABLE_WINDOW)
>>>        pPriv->pPixmap = (*pScreen->GetWindowPixmap)((WindowPtr)pDraw);
>>>    else
>>>        pPriv->pPixmap = (PixmapPtr)pDraw;
>>>
>>> #ifdef USE_EXA
>>>    if (info->useEXA) {
>>>        /* Force the pixmap into framebuffer so we can draw to it. */
>>>        exaMoveInPixmap(pPriv->pPixmap);
>>>    }
>>> #endif
>>>
>>
>> I am wondering what's the reason that Xserver returns failure directly
>> when XvPutImage drawing into a pixmap?
>>
>> Thanks
>> Austin
>>
> _______________________________________________
> xorg mailing list
> xorg at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xorg
>


More information about the xorg-devel mailing list