2007년 07월 19일
IPP를 이용하여 YUV420이미지를 RGB565로 변경하기
회사에서 필요에 의해 YUV420->RGB565로 변경하는 함수를 작성할 필요가 있었다..
IPP라는 녀석을 이용했기 때문에 아무것도 생각할 필요 없다..
다만 YUV420은 U와 V데이터를 1/2 사이즈만큼 다운 샘플링하기 때문에 주의해야 한다..
- Y'= 0.299*R' + 0.587*G' + 0.114*B'
- U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')
- V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')
- R' = Y' + 1.140*V'
- G' = Y' - 0.394*U' - 0.581*V'
- B' = Y' + 2.032*U'
void YUV420toRGB565(unsigned char *rgb565, unsigned char *y, unsigned char *u, unsigned char *v, size_t width, size_t height)
{
IppStatus ipp_status;
Ipp8u *yuv[3] = { y, u, v };
int steps[3] = { width, width/2, width/2 }; // UV는 1/2로 다운 샘플링 됨
IppiSize size = { x, y };
ipp_status = ippiYUV420ToRGB565_8u16u_P3C3R(srcs, steps, rgb565, 2*x, size);
if ( ipp_status != 0 ) {
fprintf(stderr, "[%s] IPP Error: %d\n", __func__, ipp_status);
}
}IPP에 관한 글을 자세히 쓰고 싶지만 첨비만으로도 엄청나게 공부할 것이 많아서..일단 우선순위를 미루겠다..-ㅅ-)
근데 생각해보면 IPP가 리눅스용 말곤 상용 아니었나?;;
# by | 2007/07/19 22:53 | 개발 :: 회사 | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]