Re: [GD-DEVEL] Problems converting AVFrame to gdImagePtr
[email protected] (Pierre Joye) Sun, 31 May 2009 13:31:36 +0200
| Newsgroups | php.gd.devel |
|---|---|
| Message-ID | <[email protected]> |
hi, It is only an example, it is not complete. mpeg can have many internal format, are you sure you use the right conversion? Patches welcome to fix the examples :) Cheers, On Sun, May 31, 2009 at 12:32 PM, Udo Pokojski <[email protected]> wrote: > Hi, > > Yes, I am using ffmpeg and I started with the example from cvs. > Meanwhile I have written a function whichs saves the Image as a PPM-File > without using libgd-Functions. This function looks like this: > > --------------------------------------------------------------------- > void SaveFrame_ppm(AVFrame *pFrame, int width, int height, int iFrame) { > FILE *pFile; > char szFilename[32]; > int y; > > // Open file > sprintf(szFilename, "frame%d.ppm", iFrame); > pFile=fopen(szFilename, "wb"); > if(pFile==NULL) > return; > > // Write header > fprintf(pFile, "P6\n%d %d\n255\n", width, height); > > // Write pixel data > for(y=0; y<height; y++) > fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile); > > // Close file > fclose(pFile); > } > > ---------------------------------------------------------------------- > > Since the pictures are corrupted when I use libgd-Functions, there must > be an error in the example code. > > > > Am Samstag, den 30.05.2009, 19:39 +0200 schrieb Pierre Joye: >> Hi, >> >> Do you use ffmpeg? There is an example in cvs: >> >> http://cvs.php.net/viewvc.cgi/gd/playground/ffmpeg/ >> >> Cheers, >> >> On Sat, May 30, 2009 at 4:44 PM, Udo Pokojski <[email protected]> wrote: >> > Hi, >> > >> > I am trying to extract single frame from a MP2-File. The frames are >> > extracted and saved as AVFrame. For further processing I want to convert >> > the AVFrame to an gdImagePtr. The conversion should be done by this >> > code: >> > ------------------------------------------------------------------------- >> > void SaveFrame_png(AVFrame *pFrame, int width, int height, int iFrame) { >> > FILE *pFile; >> > char szFilename[32]; >> > int x,y; >> > gdImagePtr im; >> > int *src; >> > >> > im=gdImageCreateTrueColor(width, height); >> > //gdImageInterlace(im, 1); >> > src = (int *) pFrame->data[0]; >> > for(y=0; y < height; y++) { >> > for (x=0; x < width; x++) { >> > gdImageSetPixel(im, x, y, src[x] & 0x00FFFFFF); >> > // im->tpixels[y][x] = src[x] & 0x00FFFFFF; >> > } >> > src += width; >> > } >> > >> > sprintf(szFilename, "frame%d.png", iFrame); >> > pFile=fopen(szFilename, "wb"); >> > if(pFile==NULL) >> > return; >> > gdImageInterlace(im,1); >> > gdImagePng(im,pFile); >> > >> > fclose(pFile); >> > >> > } >> > >> > ------------------------------------------------------------------------------ >> > >> > For a quick test, I save the gdImagePtr as a PNG-File. >> > The resulting file shows a kind of interlace and a multiple horizontal >> > shift. I have uploaded an example to >> > http://www.freeimagehosting.net/uploads/081ff0fcb2.png >> > >> > Write a JPG-File gives the same result. >> > Where is the error in this code? >> > >> > Thx, >> > Udo >> > >> > >> > >> > >> > -- >> > GD Devel Mailing List (http://www.php.net/) >> > To unsubscribe, visit: http://www.php.net/unsub.php >> > >> > >> >> >> >> -- >> Pierre >> >> http://blog.thepimp.net | http://www.libgd.org >> > > -- Pierre http://blog.thepimp.net | http://www.libgd.org