int imgWidth = 320, imgHeight = 240;
AVPicture rgbPic, yuvPic;
int dataSize = imgWidth * imgHeight;
avpicture_fill(&rgbPic, NULL, PIX_FMT_RGB24, imgWidth, imgHeight);
rgbPic.data[0] = (uint8_t *) malloc(dataSize * 3);
avpicture_fill(&yuvPic, NULL, PIX_FMT_YUV420P, imgWidth, imgHeight);
yuvPic.data[0] = (uint8_t *) malloc(dataSize * 3 / 2);
yuvPic.data[1] = yuvPic.data[0] + dataSize;
yuvPic.data[2] = yuvPic.data[1] + dataSize / 4;
// RGB888 to YUV420
{
SwsContext *rgb_to_yuv_ctx = sws_getContext(
imgWidth, imgHeight, PIX_FMT_RGB24
, imgWidth, imgHeight, PIX_FMT_YUV420P
, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(rgb_to_yuv_ctx
, rgbPic.data, rgbPic.linesize, 0, imgHeight
, yuvPic.data, yuvPic.linesize);
sws_freeContext(rgb_to_yuv_ctx);
}
// YUV420 to RGB888
{
SwsContext *yuv_to_rgb_ctx = sws_getContext(
imgWidth, imgHeight, PIX_FMT_YUV420P
, imgWidth, imgHeight, PIX_FMT_RGB24
, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(yuv_to_rgb_ctx
, yuvPic.data, yuvPic.linesize, 0, imgHeight
, rgbPic.data, rgbPic.linesize);
sws_freeContext(yuv_to_rgb_ctx);
}
2015년 9월 8일 화요일
[FFMPEG] RGB <-> YUV
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기