Hi,

On Thu, 14 Oct 2010, Varun Dua wrote:

I am decoding a H.264 video using Nvidia's Graphics Card and Vaapi Library on 
Ubuntu 10.04. I am able to decode an entire video
and display it using vaPutSurface, no problems at all. Now I need the data in 
RGBA format so I get the data in BRGA format which
is supported in my implementation (I can convert it into RGBA).

Note that retrieving the decoded pixels can be a slow operation. Also note that only the vdpau-video driver supports BGRA read-back. In particular, only the NVIDIA implementation. i.e. I would not rely on that.

VAImage vaimage;
unsigned char *imagedata = NULL;
FILE *fp1;
char file[100];
printf("%x\n",myimgfmt.fourcc);
vastatus = 
pfn_vaCreateImage(vaapi->display,&myimgfmt,avcc->width,avcc->height,&vaimage);
checkVaStatus();
pfn_vaGetImage 
(vaapi->display,va_surface_ids[current_surface],0,0,avcc->width,avcc->height,vaimage.image_id);
checkVaStatus();
imagedata = (char *)malloc(vaimage.data_size*sizeof(char));
pfn_vaMapBuffer(vaapi->display,vaimage.buf,(void *)&imagedata);

vaMapBuffer() returns the mapped region in imagedata. i.e. you must not allocate, neither free that pointer;

sprintf(file,"brga/frame%d.raw",framenumber++);
fp1 = fopen(file,"wb");
fwrite(imagedata,vaimage.data_size*sizeof(unsigned char),1,fp1);
fclose(fp1);
free(imagedata);
imagedata = NULL;
vastatus = pfn_vaUnmapBuffer(vaapi->display,vaimage.buf);
checkVaStatus();
vastatus = vaDestroyImage(vaapi->display,vaimage.image_id);

Everthing is working fine except that I am getting Segmentaion fault at 
vaDestroyImage. I am unable to correct this error. Can
anybody help me with that ?

Drop the imagedata = ...; and free(imagedata); lines.

Regards,
Gwenole.
_______________________________________________
Libva mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libva

Reply via email to