You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

133 lines
9.7 KiB

/* ======================================================================== */
/* TEXAS INSTRUMENTS, INC. */
/* */
/* IMGLIB DSP Image/Video Processing Library */
/* */
/* Release: Revision 1.04b */
/* CVS Revision: 1.6 Sun Sep 29 03:32:31 2002 (UTC) */
/* Snapshot date: 23-Oct-2003 */
/* */
/* 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) 2003 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_yc_demux_be16 -- De-interleave a 4:2:2 BIG ENDIAN video stream */
/* into three separate LITTLE ENDIAN 16-bit planes */
/* */
/* REVISION DATE */
/* 09-Oct-2001 */
/* */
/* USAGE */
/* This function is C callable, and is called as follows: */
/* */
/* void IMG_yc_demux_be16 */
/* ( */
/* int n, // Number of luma pixels // */
/* const unsigned char * yc, // Interleaved luma/chroma // */
/* short *restrict y, // Luma plane (16-bit) // */
/* short *restrict cr, // Cr chroma plane (16-bit) // */
/* short *restrict cb // Cb chroma plane (16-bit) // */
/* ); */
/* */
/* The input array 'yc' is expected to be an interleaved 4:2:2 */
/* video stream. The input is expected in BIG ENDIAN byte order */
/* within each 4-byte word. This is consistent with reading the */
/* video stream from a word-oriented BIG ENDIAN device while the */
/* C6000 device is in a LITTLE ENDIAN configuration. */
/* */
/* In other words, the expected pixel order is: */
/* */
/* Word 0 Word 1 Word 2 */
/* +---------------+---------------+---------------+-- */
/* Byte# | 0 1 2 3 | 4 5 6 7 | 8 9 10 11 |... */
/* |cb0 y1 cr0 y0 |cb2 y3 cr2 y2 |cb4 y5 cr4 y4 |... */
/* +---------------+---------------+---------------+-- */
/* */
/* The output arrays 'y', 'cr', and 'cb' are expected to not */
/* overlap. The de-interleaved pixels are written as half-words */
/* in LITTLE ENDIAN order. */
/* */
/* DESCRIPTION */
/* This function reads the byte-oriented pixel data, zero-extends */
/* it, and then writes it to the appropriate result array. Both */
/* the luma and chroma values are expected to be unsigned. */
/* */
/* The data is expected to be in an order consistent with reading */
/* byte oriented data from a word-oriented peripheral that is */
/* operating in BIG ENDIAN mode, while the CPU is in LITTLE ENDIAN */
/* mode. This results in a pixel ordering which is not */
/* immediately obvious. This function correctly reorders the */
/* pixel values so that further processing may proceed in LITTLE */
/* ENDIAN mode. */
/* */
/* ASSUMPTIONS */
/* Input and output arrays are double-word aligned. */
/* The input must be a multiple of 16 luma pixels long. */
/* */
/* TECHNIQUES */
/* The loop has been unrolled a total of 16 times to allow for */
/* processing 8 pixels in each datapath. */
/* */
/* Double-word loads and stores maximize memory bandwidth */
/* utilization. */
/* */
/* This code uses _gmpy4() to ease the L/S/D unit bottleneck on */
/* ANDs. The _gmpy4(value, 0x00010001) is equivalent to */
/* value & 0x00FF00FF, as long as the size field of GFPGFR is */
/* equal to 7. (The polynomial does not matter.) */
/* */
/* NOTES */
/* This kernel is fully interruptible. */
/* */
/* CYCLES */
/* cycles = 3 * (num_luma / 8) + 18. */
/* For num_luma = 1024, cycles = 402. */
/* */
/* This number includes 6 cycles of function call overhead. The */
/* exact overhead will vary depending on compiler options used. */
/* */
/* CODESIZE */
/* 316 bytes */
/* ------------------------------------------------------------------------ */
/* Copyright (c) 2003 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ======================================================================== */
#ifndef IMG_YC_DEMUX_BE16_H_
#define IMG_YC_DEMUX_BE16_H_ 1
void IMG_yc_demux_be16
(
int n, // Number of luma pixels //
const unsigned char * yc, // Interleaved luma/chroma //
short *restrict y, // Luma plane (16-bit) //
short *restrict cr, // Cr chroma plane (16-bit) //
short *restrict cb // Cb chroma plane (16-bit) //
);
#endif
/* ======================================================================== */
/* End of file: img_yc_demux_be16.h */
/* ------------------------------------------------------------------------ */
/* Copyright (c) 2003 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ======================================================================== */