⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 armipcs_helperrgb.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 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 + -