av_picturefill fill a Picture not a Frame. Picture and Frame start with the same informations. If you fill frame you will have missed informations.....
2011/2/16 Lorenzo Mattiussi <[email protected]> > Il 16/02/2011 14:14, Gilles Maire ha scritto: > > Hi Lorenzo >> >> Perhaps you forget to make a >> >> int size = avpicture_get_size(avctx->fmt, avctx->width, avctx->height); >> tempFrame = av_malloc(size*sizeof(uint8_t)); >> >> before your >> avpicture_fill ((AVPicture *)tempFrame,(uint8_t >> *)img.data,PIX_FMT_BGR24,img.width,img.height) >> >> After don't forget to free the tempFrame. >> >> >> Cheers >> >> >> Gilles Maire >> >> 2011/2/16 Lorenzo Mattiussi<[email protected]> >> >> hi all, >>> I've a problem, when the program execute avpicture_fill, I find this >>> message error: >>> Unhandled exception at 0x632415fe in EraEndo.exe:0xC0000005: Access >>> violation writing location 0xcdcdcddd. >>> Someone can help me?!? >>> This is the code: >>> int videoCode::comprimi(const ImageData&img,AVPacket&pack)//PAck deve giĆ >>> essere stato inizializzato >>> { >>> >>> uint8_t *tempFramebuf; >>> int sizebuf; >>> int x; >>> frameMutex->lock(); >>> //riempo un immagine temporanea con i dati provenienti dalla webcam >>> x = avpicture_fill ((AVPicture *)tempFrame,(uint8_t >>> *)img.data,PIX_FMT_BGR24,img.width,img.height) >>> ... >>> >>> where imageData is this structure: >>> >>> struct ImageData >>> { >>> // In DirectShow standard RGB formats >>> // have an inverted memory layout >>> enum Format {BGR24, BGR32}; >>> >>> Format format; >>> unsigned char* data; >>> long dataSize; >>> int width; >>> int height; >>> }; >>> >>> >>> >>> >>> _______________________________________________ >>> libav-user mailing list >>> [email protected] >>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>> >>> _______________________________________________ >> libav-user mailing list >> [email protected] >> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >> > Tnx for your replay > In a early function that initialize all FFmpeg parameter, I initialize > tempFrame with this methods: > > tempFrame = avcodec_alloc_frame(); > > I can't make: > > > int size = avpicture_get_size(avctx->fmt, avctx->width, avctx->height); > tempFrame = av_malloc(size*sizeof(uint8_t)); > > because the compiler say " Impossible conversion from 'void *' to 'AVFrame > *' " at av_malloc function > > > _______________________________________________ > libav-user mailing list > [email protected] > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
