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

📄 armipcs_computecolourcomponents.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/** * *  * File Name:  armIPCS_ComputeColourComponents.c * OpenMAX DL: v1.0.2 * Revision:   10586 * Date:       Wednesday, March 5, 2008 *  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. *  *  * * Description  : Contains functions that compute individual components of YUV/RGB. */#include "omxtypes.h"#include "armIP.h"/** * Functions:  * armIPCS_ComputeYUVFromRGB_JPEG * armIPCS_ComputeYFromRGB_JPEG * * Description: * With input data (R,G,B) belonging to [0, 255] and output data (Y,U,V)  * expected in [-128, 127] * The pixels are converted from float to S16, taking care of rounding errors * and also clipped to the range [-128, 127]. * * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_ComputeYUVFromRGB_JPEG_F32_S16(    OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata,     OMX_S16 *pYdata, OMX_S16 *pUdata, OMX_S16 *pVdata){    OMX_S16 tempPix;        armRetArgErrIf(!pYdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pUdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pVdata, OMX_Sts_BadArgErr);        tempPix = armRoundFloatToS16(0.29900*Rdata + 0.58700*Gdata + 0.11400*Bdata - 128);    *pYdata = (OMX_S16)armClip(OMX_MIN_S8, OMX_MAX_S8, tempPix);    tempPix = armRoundFloatToS16(-0.16874*Rdata - 0.33126*Gdata + 0.50000*Bdata);    *pUdata = (OMX_S16)armClip(OMX_MIN_S8, OMX_MAX_S8, tempPix);    tempPix = armRoundFloatToS16(0.50000*Rdata - 0.41869*Gdata - 0.08131*Bdata);    *pVdata = (OMX_S16)armClip(OMX_MIN_S8, OMX_MAX_S8, tempPix);        return OMX_Sts_NoErr;}OMXResult armIPCS_ComputeYFromRGB_JPEG_F32_S16(    OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata, OMX_S16 *pYdata){    OMX_S16 tempPix;    armRetArgErrIf(!pYdata, OMX_Sts_BadArgErr);        tempPix = armRoundFloatToS16(0.29900*Rdata + 0.58700*Gdata + 0.11400*Bdata - 128);    *pYdata = (OMX_S16)armClip(OMX_MIN_S8, OMX_MAX_S8, tempPix);        return OMX_Sts_NoErr;}OMXResult armIPCS_ComputeUFromRGB_JPEG_F32_S16(    OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata, OMX_S16 *pUdata){    OMX_S16 tempPix;    armRetArgErrIf(!pUdata, OMX_Sts_BadArgErr);        tempPix = armRoundFloatToS16(-0.16874*Rdata - 0.33126*Gdata + 0.50000*Bdata);    *pUdata = (OMX_S16)armClip(OMX_MIN_S8, OMX_MAX_S8, tempPix);        return OMX_Sts_NoErr;}OMXResult armIPCS_ComputeVFromRGB_JPEG_F32_S16(    OMX_F32 Rdata, OMX_F32 Gdata, OMX_F32 Bdata, OMX_S16 *pVdata){    OMX_S16 tempPix;    armRetArgErrIf(!pVdata, OMX_Sts_BadArgErr);        tempPix = armRoundFloatToS16(0.50000*Rdata - 0.41869*Gdata - 0.08131*Bdata);    *pVdata = (OMX_S16)armClip(OMX_MIN_S8, OMX_MAX_S8, tempPix);        return OMX_Sts_NoErr;}/** * Functions: armIPCS_ComputeRGBFromYUV_JPEG_F32 * * Description: * Computes RGB values from YUV for JPEG and then clips it between [0, 255] *  * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_ComputeRGBFromYUV_JPEG_F32(    OMX_F32 Ydata, OMX_F32 Udata, OMX_F32 Vdata,     OMX_F32 *pRdata, OMX_F32 *pGdata, OMX_F32 *pBdata){    OMX_F32 Rdata, Gdata, Bdata;        armRetArgErrIf(!pRdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pGdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pBdata, OMX_Sts_BadArgErr);        Rdata = (OMX_F32)(Ydata + 128 + 1.40200 * Vdata + 0 * Udata);    Gdata = (OMX_F32)(Ydata + 128 - 0.34414 * Udata - 0.71414 * Vdata);    Bdata = (OMX_F32)(Ydata + 128 + 1.77200 * Udata + 0 * Vdata);        *pRdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Rdata);    *pGdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Gdata);    *pBdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Bdata);        return OMX_Sts_NoErr;}/** * Functions: armIPCS_ComputeRGBFromYUV_JPEG_F32_U8 * * Description: * Computes RGB values from YUV for JPEG and then clips it between [0, 255],  * converts to U8 taking care of rounding errors *  * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_ComputeRGBFromYUV_JPEG_F32_U8(    OMX_F32 Ydata, OMX_F32 Udata, OMX_F32 Vdata,     OMX_U8 *pRdata, OMX_U8 *pGdata, OMX_U8 *pBdata){    OMX_F32 Rdata, Gdata, Bdata;        armRetArgErrIf(!pRdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pGdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pBdata, OMX_Sts_BadArgErr);        Rdata = (OMX_F32)(Ydata + 128 + 1.40200 * Vdata + 0 * Udata);    Gdata = (OMX_F32)(Ydata + 128 - 0.34414 * Udata - 0.71414 * Vdata);    Bdata = (OMX_F32)(Ydata + 128 + 1.77200 * Udata + 0 * Vdata);        Rdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Rdata);    Gdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Gdata);    Bdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Bdata);        *pRdata = (OMX_U8)(Rdata + 0.5);    *pGdata = (OMX_U8)(Gdata + 0.5);    *pBdata = (OMX_U8)(Bdata + 0.5);    return OMX_Sts_NoErr;}/** * Functions: armIPCS_ComputeRGBFromYUV_F32 * * Description: * Computes RGB values from YUV and then clips it between [0, 255] *  * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_ComputeRGBFromYUV_F32(    OMX_F32 Ydata, OMX_F32 Udata, OMX_F32 Vdata,     OMX_F32 *pRdata, OMX_F32 *pGdata, OMX_F32 *pBdata){    OMX_F32 Rdata, Gdata, Bdata;        armRetArgErrIf(!pRdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pGdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pBdata, OMX_Sts_BadArgErr);        Rdata = (OMX_F32)(1.164*(Ydata-16) + 1.596*(Vdata-128));    Gdata = (OMX_F32)(1.164*(Ydata-16) - 0.813*(Vdata-128) - 0.392*(Udata-128));    Bdata = (OMX_F32)(1.164*(Ydata-16) + 2.017*(Udata-128));        *pRdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Rdata);    *pGdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Gdata);    *pBdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Bdata);        return OMX_Sts_NoErr;}/** * Functions: armIPCS_ComputeRGBFromYUV_F32_U8 * * Description: * Computes RGB values from YUV and then clips it between [0, 255],  * converts to U8 taking care of rounding errors *  * Return Value: * OMXResult -- Error status from the function */ OMXResult armIPCS_ComputeRGBFromYUV_F32_U8(    OMX_F32 Ydata, OMX_F32 Udata, OMX_F32 Vdata,     OMX_U8 *pRdata, OMX_U8 *pGdata, OMX_U8 *pBdata){    OMX_F32 Rdata, Gdata, Bdata;        armRetArgErrIf(!pRdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pGdata, OMX_Sts_BadArgErr);    armRetArgErrIf(!pBdata, OMX_Sts_BadArgErr);        Rdata = (OMX_F32)(1.164*(Ydata-16) + 1.596*(Vdata-128));    Gdata = (OMX_F32)(1.164*(Ydata-16) - 0.813*(Vdata-128) - 0.392*(Udata-128));    Bdata = (OMX_F32)(1.164*(Ydata-16) + 2.017*(Udata-128));        Rdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Rdata);    Gdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Gdata);    Bdata = armClip_F32(OMX_MIN_U8, OMX_MAX_U8, Bdata);        *pRdata = (OMX_U8)(Rdata + 0.5);    *pGdata = (OMX_U8)(Gdata + 0.5);    *pBdata = (OMX_U8)(Bdata + 0.5);        return OMX_Sts_NoErr;}/* End of file */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -