On date Wednesday 2012-11-21 17:12:31 +0530, Navin wrote: > I was trying out the updated tutorial01 code of > ffmpeg:https://github.com/mpenkov/ffmpeg-tutorial > since the program crashed unexpectedly at sws_scale with an "Access > violation writing location" error, I was trying to figure out what > went wrong. > Two questions:
> 1. I looked into the source for avpicture_get_size and saw a lot of > code that I couldn't understand. Why are such complex operations > performed in the function with data and linesize, when the width, > height and pixel format value multiplication should've easily given > you the number of bytes? Because that function is generic, and must work with all the supported pixel formats. > 2. In avpicture_fill, what exactly are we filling a pFrameRGB with? > The video isn't yet decoded, so what is getting filled there? > Looking through the source just left me confused. That function is used to fill an AVPicture if you have an already allocated buffer. Alternatively you can use avpicture_alloc() or av_image_alloc() to allocate *and* fill the data/linesize arrays. > I'm suspecting that the memory allocation is being done incorrectly, > which is why sws_scale is crashing. I've written about this in > another mailing list thread too, titled "get RGB values from ffmpeg > frame". But this question is specific to understanding the > allocation and filling. > > The code I'm talking about from tutorial01: > pFrameRGB = avcodec_alloc_frame(); > if (pFrameRGB==NULL) return -1; > > // Determine required buffer size and allocate buffer > numBytes = avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width, > pCodecCtx->height); > buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t)); > > sws_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, > pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height, > PIX_FMT_RGB24, SWS_BILINEAR, NULL, NULL, NULL ); > > // Assign appropriate parts of buffer to image planes in > pFrameRGB. Note that pFrameRGB is an AVFrame, but AVFrame is a > superset of AVPicture > avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24, > pCodecCtx->width, pCodecCtx->height); You're not showing the crashing code. -- FFmpeg = Freak and Friendly Mean Perfectionist Elastic Governor _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
