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 rapzzard | 2007/07/19 22:53 | 개발 :: 회사 | 트랙백 | 덧글(0)

트랙백 주소 : http://rapzzard.egloos.com/tb/1605146
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶