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

📄 img_ycbcr422p_rgb565.h

📁 编程环境:TI CCS3.0 芯片: DM642 功能: 实现运动物体的检测。
💻 H
📖 第 1 页 / 共 2 页
字号:
/*          the 219-level range of Y'.  Expected ranges are [16..235] for   */
/*          Y' and [16..240] for Cb and Cr.                                 */
/*                                                                          */
/*          coeff[] = { 0x2000, 0x2BDD, -0x0AC5, -0x1658, 0x3770 };         */
/*                                                                          */
/*          [ 1.0000    0.0000    1.3707 ]   [ Y' -  16 ]     [ R']         */
/*          [ 1.0000   -0.3365   -0.6982 ] * [ Cb - 128 ]  =  [ G']         */
/*          [ 1.0000    1.7324    0.0000 ]   [ Cr - 128 ]     [ B']         */
/*                                                                          */
/*      2.  Y'CbCr -> RGB conversion with the 219-level range of Y'         */
/*          expanded to fill the full RGB dynamic range.  (The matrix       */
/*          has been scaled by 255/219.)  Expected ranges are [16..235]     */
/*          for Y' and [16..240] for Cb and Cr.                             */
/*                                                                          */
/*          coeff[] = { 0x2543, 0x3313, -0x0C8A, -0x1A04, 0x408D };         */
/*                                                                          */
/*          [ 1.1644    0.0000    1.5960 ]   [ Y' -  16 ]     [ R']         */
/*          [ 1.1644   -0.3918   -0.8130 ] * [ Cb - 128 ]  =  [ G']         */
/*          [ 1.1644    2.0172    0.0000 ]   [ Cr - 128 ]     [ B']         */
/*                                                                          */
/*      3.  Y'CbCr -> BGR conversion with RGB levels that correspond to     */
/*          the 219-level range of Y'.  This is equivalent to #1 above,     */
/*          except that the R, G, and B output order in the packed          */
/*          pixels is reversed.  Note:  The 'cr_data' and 'cb_data'         */
/*          input arguments must be exchanged for this example as           */
/*          indicated under USAGE above.                                    */
/*                                                                          */
/*          coeff[] = { 0x2000, 0x3770, -0x1658, -0x0AC5, 0x2BDD };         */
/*                                                                          */
/*          [ 1.0000    0.0000    1.7324 ]   [ Y' -  16 ]     [ B']         */
/*          [ 1.0000   -0.6982   -0.3365 ] * [ Cr - 128 ]  =  [ G']         */
/*          [ 1.0000    1.3707    0.0000 ]   [ Cb - 128 ]     [ R']         */
/*                                                                          */
/*      4.  Y'CbCr -> BGR conversion with the 219-level range of Y'         */
/*          expanded to fill the full RGB dynamic range.  This is           */
/*          equivalent to #2 above, except that the R, G, and B output      */
/*          order in the packed pixels is reversed.  Note:  The             */
/*          'cr_data' and 'cb_data' input arguments must be exchanged       */
/*          for this example as indicated under USAGE above.                */
/*                                                                          */
/*          coeff[] = { 0x2000, 0x408D, -0x1A04, -0x0C8A, 0x3313 };         */
/*                                                                          */
/*          [ 1.0000    0.0000    2.0172 ]   [ Y' -  16 ]     [ B']         */
/*          [ 1.0000   -0.8130   -0.3918 ] * [ Cr - 128 ]  =  [ G']         */
/*          [ 1.0000    1.5960    0.0000 ]   [ Cb - 128 ]     [ R']         */
/*                                                                          */
/*      Other scalings of the color differences (B'-Y') and (R'-Y')         */
/*      (sometimes incorrectly referred to as U and V) are supported, as    */
/*      long as the color differences are unsigned values centered around   */
/*      128 rather than signed values centered around 0, as noted above.    */
/*                                                                          */
/*      In addition to performing plain color-space conversion, color       */
/*      saturation can be adjusted by scaling coeff[1] through coeff[4].    */
/*      Similarly, brightness can be adjusted by scaling coeff[0].          */
/*      General hue adjustment can not be performed, however, due to the    */
/*      two zeros hard-coded in the matrix.                                 */
/*                                                                          */
/*  TECHNIQUES                                                              */
/*      Pixel replication is performed implicitly on chroma data to         */
/*      reduce the total number of multiplies required.  The chroma         */
/*      portion of the matrix is calculated once for each Cb, Cr pair,      */
/*      and the result is added to both Y' samples.                         */
/*                                                                          */
/*      Matrix Multiplication is performed as a combination of MPY2s and    */
/*      DOTP2s.  Saturation to 8bit values is performed using SPACKU4       */
/*      which takes in 4 signed 16-bit values and saturates them to         */
/*      unsigned 8-bit values.  The output of Matrix Multiplication would   */
/*      ideally be in a Q13 format.  This however, cannot be fed directly   */
/*      to SPACKU4.                                                         */
/*                                                                          */
/*      This implies a shift left by 3 bits, which could be pretty          */
/*      expensive in terms of the number of shifts to be performed.  Thus,  */
/*      to avoid being bottlenecked by so many shifts, the Y, Cr & Cb data  */
/*      are shifted left by 3 before multiplication.  This is possible      */
/*      because they are 8-bit unsigned data.  Due to this, the output of   */
/*      Matrix Multiplication is in a Q16 format, which can be directly     */
/*      fed to SPACKU4.                                                     */
/*                                                                          */
/*      Because the loop accesses four different arrays at three            */
/*      different strides, no memory accesses are allowed to parallelize    */
/*      in the loop.  No bank conflicts occur, as a result.                 */
/*                                                                          */
/*      The epilog has been completely removed, while the prolog is left    */
/*      as is. However, some cycles of the prolog are performed using the   */
/*      kernel cycles to help reduce code-size. The setup code is merged    */
/*      along with the prolog for speed.                                    */
/*                                                                          */
/*  ASSUMPTIONS                                                             */
/*      The number of luma samples to be processed needs to be a multiple   */
/*      of 8.                                                               */
/*      The input Y array needs to be double-word aligned.                  */
/*      The input Cr and Cb arrays need to be word aligned                  */
/*      The output image must be double-word aligned.                       */
/*                                                                          */
/*  NOTES                                                                   */
/*      No bank conflicts occur.                                            */
/*                                                                          */
/*      Codesize is 952 bytes.                                              */
/*                                                                          */
/*      Memory bank conflicts will not occurs since the 3 loads and two     */
/*      stores happen in different cycles of the loop                       */
/*                                                                          */
/*      The kernel requires 3 words of stack space.                         */
/*                                                                          */
/*  CYCLES                                                                  */
/*      12 * num_pixels/8 + 50                                              */
/*                                                                          */
/*  CODESIZE                                                                */
/*      952 bytes                                                           */
/*                                                                          */
/*  SOURCE                                                                  */
/*      Poynton, Charles et al.  "The Color FAQ,"  1999.                    */
/*          http://home.inforamp.net/~poynton/ColorFAQ.html                 */
/* ------------------------------------------------------------------------ */
/*            Copyright (c) 2002 Texas Instruments, Incorporated.           */
/*                           All Rights Reserved.                           */
/* ======================================================================== */
#ifndef IMG_YCBCR422P_RGB565_H_
#define IMG_YCBCR422P_RGB565_H_ 1

void IMG_ycbcr422p_rgb565
(
  const short         coeff[5],  /* Matrix coefficients.        */
  const unsigned char *y_data,   /* Luminence data  (Y')        */
  const unsigned char *cb_data,  /* Blue color-diff (B'-Y')     */
  const unsigned char *cr_data,  /* Red color-diff  (R'-Y')     */
  unsigned short
             *restrict rgb_data, /* RGB 5:6:5 packed pixel out. */
  unsigned            num_pixels /* # of luma pixels to process */
);

#endif
/* ======================================================================== */
/*  End of file:  img_ycbcr422p_rgb565.h                                    */
/* ------------------------------------------------------------------------ */
/*            Copyright (c) 2002 Texas Instruments, Incorporated.           */
/*                           All Rights Reserved.                           */
/* ======================================================================== */

⌨️ 快捷键说明

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