Hi Tu,
                It’s ok that just creating one surface NV12 surface, then 
always decoding H.264 frame
to this surface.
                I’m not sure why your problem happened. Is it possible to send 
your code to us and
tell us the steps to reproduce your issue. Then I can dig into it.
                Also cc Yakui.

Thanks,
Chuanbo Weng

From: Tu Muramastu [mailto:[email protected]]
Sent: Thursday, August 21, 2014 18:00
To: Weng, Chuanbo
Subject: Re: About "beignet-openCL and libva/VAAPI"

Hi~ Chuanbo Wen,

    I've tried to fill the attribute as your example and the vaSurface can be 
created successfully. (format is NV12)

    I use ffmpeg with libva to decode H.264 frames on the vaSurface and call 
vaPutSurface() to show the surface on UI (refer to the sample in: 
https://gitorious.org/hwdecode-demos/). The frames look incorrectly at the 
first 20 frames and the 21th and following frames become correct, so I do a 
small test:  fill the cl_mem as "000...000" (make the surface look green) 
before calling PutSuface().  Then, the first 20 frame indeed looks green as my 
expectation and the following frames become normal video content again. It 
looks like that they doesn't share memory anymore.
    Do I need to create the new surface whenever before decoding a frame? (I 
though just one surface created at the beginning and the frames decoded on the 
same surface.)
    Thanks for your time!

BR,
Tu
On Mon, Aug 18, 2014 at 4:43 PM, Tu Muramastu 
<[email protected]<mailto:[email protected]>> wrote:
Hi Chuanbo Weng,

   Got it!   Thanks for your helpful replying!
   I will try it. Thanks again!

BR,
Tu


On Fri, Aug 15, 2014 at 6:34 PM, Weng, Chuanbo 
<[email protected]<mailto:[email protected]>> wrote:
Hi Tu,
                If you are using the #1 way, using generic libva (master branch 
or release version) is
enough, no need to switch to a staging branch. (But there is a bug of libva 
when using the
#1 way if libva is not new enough. So please check your libva revision, if it 
is older than Feb
2014, you should update your libva.)
                The reason you received VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 
is that
you hadn’t filled the attribute structure correctly. Here are what I fill to 
it, you can take it as
a reference:

    VASurfaceID bgra_surface_id;
    int bgra_fd;
    status = clGetMemObjectFd(context, (cl_mem)new_om.data, &bgra_fd);
    CHECK_CLSTATUS(status, "clGetMemObjectFdIntel");

    VASurfaceAttrib sa[2];
    sa[0].type = VASurfaceAttribMemoryType;
    sa[0].flags = VA_SURFACE_ATTRIB_SETTABLE;
    sa[0].value.type = VAGenericValueTypeInteger;
    sa[0].value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME;
    sa[1].type = VASurfaceAttribExternalBufferDescriptor;
    sa[1].flags = VA_SURFACE_ATTRIB_SETTABLE;
    sa[1].value.type = VAGenericValueTypePointer;
    VASurfaceAttribExternalBuffers sa_eb;
    sa_eb.pixel_format = VA_FOURCC_BGRA;
    sa_eb.width = new_om.cols;
    sa_eb.height = new_om.rows;
    sa_eb.data_size = new_om.step * new_om.rows;
    sa_eb.num_planes = 1;
    sa_eb.pitches[0] = new_om.step;
    sa_eb.offsets[0] = 0;
    sa_eb.num_buffers = 1;
    sa_eb.buffers = (unsigned long *)malloc(sizeof(unsigned 
long)*sa_eb.num_buffers);
    sa_eb.buffers[0] = bgra_fd;
    sa_eb.flags = 0;
    sa[1].value.value.p = &sa_eb;
    va_status = vaCreateSurfaces(va_dpy, surface_type,
                     new_om.cols, new_om.rows,
                    &bgra_surface_id, 1, sa, 2);

Thanks,
Chuanbo Weng

From: Tu Muramastu [mailto:[email protected]<mailto:[email protected]>]
Sent: Friday, August 15, 2014 15:54
To: Weng, Chuanbo
Subject: About "beignet-openCL and libva/VAAPI"

Hi!  Chuanbo Weng,

  I'm find a way to share memory between libva and opencl without memory copy 
and just read the post you wrote 
"https://www.mail-archive.com/[email protected]/msg02099.html"; and 
thanks for your sharing.

  Several things I want to make sure.Could you help me to figure them out?

    1. For #1 way (using "clGetMemObjectFdIntel"), using generic libva is 
enough (no need to use the branch), right?
    2. I filled the attribute structure as the following,
        VASurfaceAttrib surfaceAttrib;
        surfaceAttrib.type = VASurfaceAttribExternalBufferDescriptor;   // ?? 
(not very sure)
        surfaceAttrib.flags = VA_SURFACE_ATTRIB_SETTABLE;
        surfaceAttrib.value.type = VASurfaceAttribUsageHint;
        surfaceAttrib.value.value.p = vaapi->cl_fd;

        Then, vaCreateSurfaces() returns 
"VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT". Do you know what mistake I did?

        Thanks a lot !!

BR,
Tu


_______________________________________________
Beignet mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to