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

📄 omxipcs_bgr565toycbcr422ls_mcu_u16_s16_c3p3.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/**** * File Name:  omxIPCS_BGR565ToYCbCr422LS_MCU_U16_S16_C3P3.c* OpenMAX DL: v1.0.2* Revision:   10586* Date:       Wednesday, March 5, 2008* * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.* * ** Description  : Colour Conversion Routine - Converts BGR565 to YUV422 in floating point.*                Source is in three channel, pixel domain and the destination would be in *                three-channel planar format. Output is a JPEG MCU.**/#include "omxtypes.h"#include "armCOMM.h"#include "armOMX.h"#include "omxIP.h"#include "armIP.h"/*** Function:  omxIPCS_BGR565ToYCbCr422LS_MCU_U16_S16_C3P3   (4.4.3.7.6)** Description:* This function converts packed BGR565 image data to the following * sub-sampled color spaces:  YCbCr4:4:4, YCbCr4:2:2, and YCbCr4:2:0.  The * parameter pDstMCU[0] must point to the start of a buffer with sufficient * free space to contain the particular number of contiguously stored 8x8 Y * blocks that constitute a complete MCU given the output chroma sub-sampling * scheme, i.e., 1, 2, or 4 of 8x8 Y blocks for YCbCr 4:4:4, 4:2:2, or 4:2:0 * output, respectively. ** Input Arguments:*   *   pSrc - references the source image data buffer.  Pixel intensities are *            interleaved as shown in Table 4 1, and G, B, and R are *            represented using, respectively, 6, 5, and 5 bits.  The image *            data buffer pSrcsupports bottom-up storage format, for which *            srcStep can be less than 0. *   srcStep - distance in bytes between the starts of consecutive lines in *            the source image; can be less than 0 to support bottom-up *            storage format. ** Output Arguments:*   *   pDstMCU[3] - output MCU pointers.  The parameter pDstMCU[0] must point *            to the start of a buffer with sufficient free space to contain *            the particular number of contiguously stored 8x8 Y blocks that *            constitute a complete MCU given the output chroma sub-sampling *            scheme, i.e., 1, 2, or 4 of 8x8 Y blocks for YCbCr 4:4:4, 4:2:2, *            or 4:2:0 output, respectively. The parameter pDstMCU[1] points to *            the Cb block, and the parameter pDstMCU[2] points to the Cr *            block.  Output components are expressed using a Q8 *            representation and are bounded on the interval [-128, 127].  The *            buffers referenced by pDstMCU[] support top-down storage format *            only, and all pointers pDstMCU[0..2] must be 8-byte aligned. ** Return Value:*    *    OMX_Sts_NoErr - no error *    OMX_Sts_BadArgErr - bad arguments. Returned for any of the following *              conditions: *    -   a pointer was NULL *    -   srcStep was an odd number or its absolute value was less *        than 16 for YCbCr444 or 32 for YCbCr422/YCbCr420. *    -   a pointer in pDstMCU[] was not 8-byte aligned **/OMXResult omxIPCS_BGR565ToYCbCr422LS_MCU_U16_S16_C3P3(    const OMX_U16 *pSrc,    OMX_INT srcStep,    OMX_S16 * pDstMCU[3]    )    {        OMX_S16 *pDstY, *pDstCb, *pDstCr;        OMX_U8  Rdata, Gdata, Bdata, Rdata2, Gdata2, Bdata2;        OMX_INT i, j, blk;        ARM_BLOCK8x8 *y8x8;        OMX_INT blkOffset[2] = {0, 8};        OMX_INT blkOffset_UV[2] = {0, 4};        const OMX_U16 *pRGB;        armRetArgErrIf(!pSrc, OMX_Sts_BadArgErr);        armRetArgErrIf(!pDstMCU, OMX_Sts_BadArgErr);        armRetArgErrIf(!pDstMCU[0], OMX_Sts_BadArgErr);        armRetArgErrIf(!pDstMCU[1], OMX_Sts_BadArgErr);        armRetArgErrIf(!pDstMCU[2], OMX_Sts_BadArgErr);        armRetArgErrIf(!armIs8ByteAligned(pDstMCU[0]), OMX_Sts_BadArgErr);        armRetArgErrIf(!armIs8ByteAligned(pDstMCU[1]), OMX_Sts_BadArgErr);        armRetArgErrIf(!armIs8ByteAligned(pDstMCU[2]), OMX_Sts_BadArgErr);        armRetArgErrIf(((srcStep > (-2 * JPEG_MCU_PIX_WIDTH_422)) && (srcStep < (2 * JPEG_MCU_PIX_WIDTH_422))), OMX_Sts_BadArgErr);        armRetArgErrIf((srcStep % 2), OMX_Sts_BadArgErr);        /*        --------------------------------------------------------------------------        With input data (R, G, B) belonging to [0, 255] and output data (Y,Cb,Cr)         expected in [-128, 127], CC equations in JPEG domain would be -         Y  =  0.29900*R  + 0.58700*G  + 0.11400*B - 128        Cb = -0.16874*R  - 0.33126*G  + 0.50000*B        Cr =  0.50000*R  - 0.41869*G  - 0.08131*B        The armComputeXFromRGB_JPEG() functions apart from doing the colour conversion,         takes care of type-conversion from intermediate float values and clipping to         S16, taking care of rounding errors.        The cases of Nearest Neighbour interpolation and Bilinear interpolation         are separately handled.        --------------------------------------------------------------------------        */        y8x8 = (ARM_BLOCK8x8 *)pDstMCU[0];        pDstY   = (OMX_S16 *)y8x8++;        for(blk = 0; blk < 2; blk++)        {            pDstCb  = pDstMCU[1] + blkOffset_UV[blk];            pDstCr  = pDstMCU[2] + blkOffset_UV[blk];            pRGB    = pSrc + blkOffset[blk];            for(i = 0; i < 8; i++)            {                for(j = 0; j < 4*2; j+=2)                {                    armIPCS_UnpackBGR565(pSrc[j],   &Bdata,  &Gdata,  &Rdata);                    armIPCS_UnpackBGR565(pSrc[j+1], &Bdata2, &Gdata2, &Rdata2);                    armIPCS_ComputeYFromRGB_JPEG_F32_S16(Rdata,  Gdata,  Bdata,  pDstY++);                    armIPCS_ComputeYFromRGB_JPEG_F32_S16(Rdata2, Gdata2, Bdata2, pDstY++);                                {                        OMX_F32 interpPixR = (Rdata + Rdata2) / (OMX_F32)2;                        OMX_F32 interpPixG = (Gdata + Gdata2) / (OMX_F32)2;                        OMX_F32 interpPixB = (Bdata + Bdata2) / (OMX_F32)2;                        armIPCS_ComputeUFromRGB_JPEG_F32_S16(interpPixR, interpPixG, interpPixB, pDstCb++);                        armIPCS_ComputeVFromRGB_JPEG_F32_S16(interpPixR, interpPixG, interpPixB, pDstCr++);                    }                }                 pDstCb  += 4;                pDstCr  += 4;                pRGB    += srcStep>>1;            }        }        return OMX_Sts_NoErr;    }    /* End of file */

⌨️ 快捷键说明

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