📄 img_ycbcr422p_rgb565.h
字号:
/* ======================================================================== */
/* TEXAS INSTRUMENTS, INC. */
/* */
/* IMGLIB DSP Image/Video Processing Library */
/* */
/* Release: Version 1.03 */
/* CVS Revision: 1.12 Fri Oct 25 00:19:49 2002 (UTC) */
/* Snapshot date: 28-Oct-2002 */
/* */
/* This library contains proprietary intellectual property of Texas */
/* Instruments, Inc. The library and its source code are protected by */
/* various copyrights, and portions may also be protected by patents or */
/* other legal protections. */
/* */
/* This software is licensed for use with Texas Instruments TMS320 */
/* family DSPs. This license was provided to you prior to installing */
/* the software. You may review this license by consulting the file */
/* TI_license.PDF which accompanies the files in this library. */
/* ------------------------------------------------------------------------ */
/* Copyright (C) 2002 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ======================================================================== */
/* ======================================================================== */
/* Assembler compatibility shim for assembling 4.30 and later code on */
/* tools prior to 4.30. */
/* ======================================================================== */
/* ======================================================================== */
/* End of assembler compatibility shim. */
/* ======================================================================== */
/* ======================================================================== */
/* TEXAS INSTRUMENTS, INC. */
/* */
/* NAME */
/* IMG_ycbcr422p_rgb565 -- Planarized YCbCr 4:2:2/4:2:0 to 16-bit */
/* RGB 5:6:5 color space conversion. */
/* */
/* REVISION DATE */
/* 21-Oct-2002 */
/* */
/* USAGE */
/* This function is C callable, and is called according to this */
/* C prototype: */
/* */
/* 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 // */
/* ); */
/* */
/* The 'coeff[]' array contains the color-space-conversion matrix */
/* coefficients. The 'y_data', 'cb_data' and 'cr_data' pointers */
/* point to the separate input image planes. The 'rgb_data' pointer */
/* */
/* The kernel is designed to process arbitrary amounts of 4:2:2 */
/* image data, although 4:2:0 image data may be processed as well. */
/* For 4:2:2 input data, the 'y_data', 'cb_data' and 'cr_data' */
/* arrays may hold an arbitrary amount of image data, including */
/* multiple scan lines of image data. */
/* */
/* For 4:2:0 input data, only a single scan-line (or portion */
/* thereof) may be processed at a time. This is achieved by */
/* calling the function twice using the same row data for */
/* 'cr_data' and 'cb_data', and providing new row data for */
/* 'y_data'. This is numerically equivalent to replicating the Cr */
/* and Cb pixels vertically. */
/* */
/* The coefficients in the coeff array must be in signed Q13 form. */
/* These coefficients correspond to the following matrix equation: */
/* */
/* [ coeff[0] 0.0000 coeff[1] ] [ Y' - 16 ] [ R'] */
/* [ coeff[0] coeff[2] coeff[3] ] * [ Cb - 128 ] = [ G'] */
/* [ coeff[0] coeff[4] 0.0000 ] [ Cr - 128 ] [ B'] */
/* */
/* The output from this kernel is 16-bit RGB in 5:6:5 format. */
/* The RGB components are packed into halfwords as shown below. */
/* */
/* 15 11 10 5 4 0 */
/* +----------+----------+----------+ */
/* | Red | Green | Blue | */
/* +----------+----------+----------+ */
/* */
/* This kernel can also return the red, green, and blue values in */
/* the opposite order if a particular application requires it. */
/* This is achieved by exchanging the 'cb_data' and 'cr_data' */
/* arguments when calling the function, and by reversing the order */
/* of coefficients in coeff[1] through coeff[4]. This essentially */
/* implements the following matrix multiply: */
/* */
/* [ coeff[0] 0.0000 coeff[4] ] [ Y' - 16 ] [ B'] */
/* [ coeff[0] coeff[3] coeff[2] ] * [ Cr - 128 ] = [ G'] */
/* [ coeff[0] coeff[1] 0.0000 ] [ Cb - 128 ] [ R'] */
/* */
/* The reversed RGB ordering output by this mode is as follows: */
/* */
/* 15 11 10 5 4 0 */
/* +----------+----------+----------+ */
/* | Blue | Green | Red | */
/* +----------+----------+----------+ */
/* */
/* DESCRIPTION */
/* This kernel performs Y'CbCr to RGB conversion. From the Color */
/* FAQ, http://home.inforamp.net/~poynton/ColorFAQ.html : */
/* */
/* Various scale factors are applied to (B'-Y') and (R'-Y') */
/* for different applications. The Y'PbPr scale factors are */
/* optimized for component analog video. The Y'CbCr scaling */
/* is appropriate for component digital video, JPEG and MPEG. */
/* Kodak's PhotoYCC(tm) uses scale factors optimized for the */
/* gamut of film colors. Y'UV scaling is appropriate as an */
/* intermediate step in the formation of composite NTSC or PAL */
/* video signals, but is not appropriate when the components */
/* are keps separate. Y'UV nomenclature is now used rather */
/* loosely, and it sometimes denotes any scaling of (B'-Y') */
/* and (R'-Y'). Y'IQ coding is obsolete. */
/* */
/* This code can perform various flavors of Y'CbCr to RGB */
/* conversion as long as the offsets on Y, Cb, and Cr are -16, */
/* -128, and -128, respectively, and the coefficients match the */
/* pattern shown. */
/* */
/* The kernel implements the following matrix form, which involves 5 */
/* unique coefficients: */
/* */
/* [ coeff[0] 0.0000 coeff[1] ] [ Y' - 16 ] [ R'] */
/* [ coeff[0] coeff[2] coeff[3] ] * [ Cb - 128 ] = [ G'] */
/* [ coeff[0] coeff[4] 0.0000 ] [ Cr - 128 ] [ B'] */
/* */
/* */
/* Below are some common coefficient sets, along with the matrix */
/* equation that they correspond to. Coefficients are in signed */
/* Q13 notation, which gives a suitable balance between precision */
/* and range. */
/* */
/* 1. Y'CbCr -> RGB conversion with RGB levels that correspond to */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -