Hi,
I'd like to convert UIImages (from iPhone OS) to AVPicture. I wrote the
code:
- (AVPicture)pictureFromUIImage:(UIImage *)image
{
CGImageRef imageRef = image.CGImage;
NSData *data = (NSData
*)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
uint8_t *pixels = (uint8_t *)[data bytes];
uint8_t *pixelsR = (uint8_t *)malloc([data length]/4);
uint8_t *pixelsG = (uint8_t *)malloc([data length]/4);
uint8_t *pixelsB = (uint8_t *)malloc([data length]/4);
uint8_t *pixelsA = (uint8_t *)malloc([data length]/4);
int p = 0;
for(int i = 0; i < [data length]; i += 4)
{
int r = i ; int g = i+1; int b = i+2; int a = i+3;
pixelsR[p] = pixels[r];
pixelsG[p] = pixels[g];
pixelsB[p] = pixels[b];
pixelsA[p] = pixels[a];
p++;
}
// Allocate RGB picture
AVPicture pict;
avpicture_alloc(&pict, PIX_FMT_RGB24, outputWidth, outputHeight);
AVFrame *rgbFrame = avcodec_alloc_frame();
rgbFrame->data[0] = pixelsR;
rgbFrame->data[1] = pixelsG;
rgbFrame->data[2] = pixelsB;
rgbFrame->linesize[0] = outputWidth;
//rgbFrame->linesize[1] = outputWidth;
//rgbFrame->linesize[2] = outputWidth;
// Setup scaler
static int sws_flags = SWS_FAST_BILINEAR;
struct SwsContext *pictContext = sws_getContext(pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
outputWidth,
outputHeight,
PIX_FMT_RGB24,
sws_flags, NULL, NULL, NULL);
sws_scale(pictContext, rgbFrame->data, rgbFrame->linesize,
0, pCodecCtx->height, pict.data,
pict.linesize);
return pict;
}
Than i write it on hard disk using:
// Write header
fprintf(pFile, "P6\n%d %d\n255\n", width, height);
// Write pixel data
for(y=0; y<height; y++)
fwrite(pict.data[0]+y*pict.linesize[0], 1, width*3, pFile);
And this code doesn't convert images properly. Can anybody help me ?
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user