/****************************************************************************** * * Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * Use of the Software is limited solely to applications: * (a) running on a Xilinx device, or * (b) that interact with a Xilinx device through a bus or interconnect. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * XILINX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * Except as contained in this notice, the name of the Xilinx shall not be used * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * ******************************************************************************/ /** * * @file xscaler_coefs.c * * This file contains Lanczos coefficient generation for use in the Xilinx Video Scaler. * * * *
* MODIFICATION HISTORY: * * Ver Who Date Changes * ----- ---- -------- ------------------------------------------------------- * 1.00a xd 06/15/09 First release. Coefficients are auto-generated in * Matlab using * /Video_Scaler/reference_model/src/CreateCoefficients.m * 2.00a xd 12/14/09 Updated doxygen document tags * 5.00a mpv 12/13/13 Updated to dynamic coeff generation to reduce driver size ** ******************************************************************************/ #include "xscaler.h" /************************** Constant Definitions *****************************/ /***************** Macros (Inline Functions) Definitions *********************/ /************************* Data Structure Definitions ************************/ /** * XScaler_CoefficientsBinScalingFactors contains scaling factors calculated * using (Output_Size * 10000 / Input_Size). This table could help find * the index of coefficient Bin given an input size and a output size. */ u16 XScaler_CoefficientBinScalingFactors[XSCL_NUM_COEF_BINS] = { 20000, 625, 1250, 1875, 2500, 3125, 3750, 4375, 5000, 5625, 6250, 6875, 7500, 8125, 8750, 9375, 10000, 10000, 6666 }; /** * XScaler_GenCoefTable generates a table that contains the coefficient values * for scaling operations * @param Tap is the number of taps configured * @param Phase is the number of phase configured * the Scaler device. * @return XScaler_coef_table * ************ new coef generation************ */ #define PI 3.14159265358979 typedef unsigned short uint16; struct coefs_struct{ short int** coefficients; }SingleFrameCoefs; /*memory allocation*/ int XScaler_AllocCoefsBuff(struct coefs_struct* coefs, int max_taps, int max_phases) { int phase, tap; if ((coefs->coefficients = (short int **) ((uint16**)calloc(max_phases, sizeof(uint16*)))) == 0) return(1); for (phase = 0; phase