📄 armipcs_helperrgb.c
字号:
/** * * * File Name: armIPCS_HelperRGB.c * OpenMAX DL: v1.0.2 * Revision: 10586 * Date: Wednesday, March 5, 2008 * * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. * * * * Description : Contains utility functions surrounding the RGB format. * */#include "omxtypes.h"#include "armIP.h"/** * Functions: armIPCS_UnpackRGB565 * * Description: * This function unpacks an RGB565 compressed image data into separate * R, G and B components, by padding zeros in the lower order bits. * * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_UnpackRGB565(OMX_U16 RGBdata, OMX_U8 *pRdata, OMX_U8 *pGdata, OMX_U8 *pBdata) { armRetArgErrIf(!pRdata || !pGdata || !pBdata, OMX_Sts_BadArgErr); *pRdata = (OMX_U8)(((RGBdata) & 0x001F) << 3); *pGdata = (OMX_U8)(((RGBdata) & 0x07E0) >> 3); *pBdata = (OMX_U8)(((RGBdata) & 0xF800) >> 8); return OMX_Sts_NoErr;}/** * Function: armIPCS_RGBConvertAndPack * * Description: * This is a utility function used by omxIPCS_YCbCr42xRszCscRotRGB_U8_P3C3R(). It converts * a pixel from YCbCr representation to one of the RGB variants - RGB565, RGB555, RGB444, * RGB888 based on the <colorConversion> parameter and stores the result in <pDstRGB>. * * Return Value: * OMXVoid */OMXVoid armIPCS_RGBConvertAndPack(OMX_U8 Ydata, OMX_U8 Udata, OMX_U8 Vdata, OMXIPColorSpace colorConversion, void *pDst){ OMX_F32 Rdata, Gdata, Bdata; OMX_U8 *p8DstRGB = (OMX_U8 *)pDst; OMX_U16 *p16DstRGB = (OMX_U16 *)pDst; armIPCS_ComputeRGBFromYUV_F32(Ydata, Udata, Vdata, &Rdata, &Gdata, &Bdata); switch(colorConversion) { case OMX_IP_BGR565: *p16DstRGB = armIPCS_PackToRGB565_F32(Rdata, Gdata, Bdata); break; case OMX_IP_BGR555: *p16DstRGB = armIPCS_PackToRGB555_F32(Rdata, Gdata, Bdata); break; case OMX_IP_BGR444: *p16DstRGB = armIPCS_PackToRGB444_F32(Rdata, Gdata, Bdata); break; case OMX_IP_BGR888: *p8DstRGB++ = (OMX_U8)(Rdata + 0.5); *p8DstRGB++ = (OMX_U8)(Gdata + 0.5); *p8DstRGB = (OMX_U8)(Bdata + 0.5); break; default: break; }}/** * Functions: * armIPCS_PackToRGB565_F32 * armIPCS_PackToRGB555_F32 * armIPCS_PackToRGB444_F32 * * Description: * This function converts floating point RGB data into packed RGB data. Takes * even negative RGB input and takes care of intermediate rounding. * * Return Value: * Packed RGB data */OMX_U16 armIPCS_PackToRGB565_F32(OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata) { OMX_U32 R5, G6, B5; OMX_U16 retVal; R5 = armShiftSat_F32(Rdata, 3, 5); G6 = armShiftSat_F32(Gdata, 2, 6); B5 = armShiftSat_F32(Bdata, 3, 5); retVal = (R5) + (G6 << 5) + (B5 << 11); return retVal;}OMX_U16 armIPCS_PackToRGB555_F32(OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata) { OMX_U32 R5, G5, B5; OMX_U16 retVal; R5 = armShiftSat_F32(Rdata, 3, 5); G5 = armShiftSat_F32(Gdata, 3, 5); B5 = armShiftSat_F32(Bdata, 3, 5); retVal = (R5) + (G5 << 5) + (B5 << 10); return retVal;}OMX_U16 armIPCS_PackToRGB444_F32(OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata) { OMX_U32 R4, G4, B4; OMX_U16 retVal; R4 = armShiftSat_F32(Rdata, 4, 4); G4 = armShiftSat_F32(Gdata, 4, 4); B4 = armShiftSat_F32(Bdata, 4, 4); retVal = (R4) + (G4 << 4) + (B4 << 8); return retVal;}/** * Functions: armIPCS_UnpackBGR565 * * Description: * This function unpacks an RGB565 compressed image data into separate * R, G and B components, by padding zeros in the lower order bits. * * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_UnpackBGR565(OMX_U16 RGBdata, OMX_U8 *pBdata, OMX_U8 *pGdata, OMX_U8 *pRdata) { armRetArgErrIf(!pRdata || !pGdata || !pBdata, OMX_Sts_BadArgErr); *pBdata = (OMX_U8)(((RGBdata) & 0x001F) << 3); *pGdata = (OMX_U8)(((RGBdata) & 0x07E0) >> 3); *pRdata = (OMX_U8)(((RGBdata) & 0xF800) >> 8); return OMX_Sts_NoErr;}/** * Function: armIPCS_RGBConvertAndPack * * Description: * This is a utility function used by omxIPCS_YCbCr42xRszCscRotRGB_U8_P3C3R(). It converts * a pixel from YCbCr representation to one of the RGB variants - RGB565, RGB555, RGB444, * RGB888 based on the <colorConversion> parameter and stores the result in <pDstRGB>. * * Return Value: * OMXVoid */OMXVoid armIPCS_BGRConvertAndPack(OMX_U8 Ydata, OMX_U8 Udata, OMX_U8 Vdata, OMXIPColorSpace colorConversion, void *pDst){ OMX_F32 Rdata, Gdata, Bdata; OMX_U8 *p8DstBGR = (OMX_U8 *)pDst; OMX_U16 *p16DstBGR = (OMX_U16 *)pDst; armIPCS_ComputeRGBFromYUV_F32(Ydata, Udata, Vdata, &Rdata, &Gdata, &Bdata); switch(colorConversion) { case OMX_IP_BGR565: *p16DstBGR = armIPCS_PackToBGR565_F32(Bdata, Gdata, Rdata); break; case OMX_IP_BGR555: *p16DstBGR = armIPCS_PackToBGR555_F32(Bdata, Gdata, Rdata); break; case OMX_IP_BGR444: *p16DstBGR = armIPCS_PackToBGR444_F32(Bdata, Gdata, Rdata); break; case OMX_IP_BGR888: *p8DstBGR++ = (OMX_U8)(Rdata + 0.5); *p8DstBGR++ = (OMX_U8)(Gdata + 0.5); *p8DstBGR = (OMX_U8)(Bdata + 0.5); break; default: break; }}/** * Functions: * armIPCS_PackToBGR565_F32 * * Description: * This function converts floating point RGB data into packed RGB data. Takes * even negative RGB input and takes care of intermediate rounding. * * Return Value: * Packed RGB data */OMX_U16 armIPCS_PackToBGR565_F32(OMX_F32 Bdata, OMX_F32 Gdata, OMX_F32 Rdata) { OMX_U32 R5, G6, B5; OMX_U16 retVal; R5 = armShiftSat_F32(Rdata, 3, 5); G6 = armShiftSat_F32(Gdata, 2, 6); B5 = armShiftSat_F32(Bdata, 3, 5); retVal = (B5) + (G6 << 5) + (R5 << 11); return retVal;}OMX_U16 armIPCS_PackToBGR555_F32(OMX_F32 Bdata, OMX_F32 Gdata, OMX_F32 Rdata) { OMX_U32 R5, G5, B5; OMX_U16 retVal; R5 = armShiftSat_F32(Rdata, 3, 5); G5 = armShiftSat_F32(Gdata, 3, 5); B5 = armShiftSat_F32(Bdata, 3, 5); retVal = (B5) + (G5 << 5) + (R5 << 10); return retVal;}OMX_U16 armIPCS_PackToBGR444_F32(OMX_F32 Bdata, OMX_F32 Gdata, OMX_F32 Rdata) { OMX_U32 R4, G4, B4; OMX_U16 retVal; R4 = armShiftSat_F32(Rdata, 4, 4); G4 = armShiftSat_F32(Gdata, 4, 4); B4 = armShiftSat_F32(Bdata, 4, 4); retVal = (B4) + (G4 << 4) + (R4 << 8); return retVal;}/* End of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -