[FFmpeg-user] Copying a rectangular area of an AVFrame

Marty Sullivan dark3251 at gmail.com
Mon Feb 4 22:38:41 CET 2013


I am trying to pull out a rectangular area of an AVFrame and have started
on a function that will do so. I'm only interested in using AVFrames that
are format PIX_FMT_RGB24. I may be reinventing the wheel a bit here too, so
please jump in if there is already a function to do this. So far my
function looks like this:

AVFrame * getRGBsection(AVFrame *pFrameRGB, const int start_x, const int
start_y, const int w, const int h) {

AVFrame *pFrameSect;
int numBytes;
 pFrameSect = avcodec_alloc_frame();
numBytes = avpicture_get_size(PIX_FMT_RGB24, w, h);
mb_buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));
avpicture_fill((AVPicture *) pFrameSect, mb_buffer, PIX_FMT_RGB24, w, h);
 int curY, curX, i = 0;
for (curY = start_y ; curY < (start_y + h); curY++) {
 for (curX = start_x; curX < (start_x + w); curX++) {
 int curIndex = curX * 3 + curY * pFrameRGB->linesize[0];
 pFrameSect->data[0][i] = pFrameRGB->data[0][curIndex];
pFrameSect->data[0][i + 1] = pFrameRGB->data[0][curIndex + 1];
pFrameSect->data[0][i + 2] = pFrameRGB->data[0][curIndex + 2];
 i += 3;
 }
 }
 return pFrameSect;
}

The function seems to work when I start at (0,0) (I think) but when I move
elsewhere in the image it outputs colors similar to what should be there
but isn't right. I think I am very close here, can anyone offer guidance?


More information about the ffmpeg-user mailing list