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