/****************************************************************************** * * Copyright (C)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 cresample_conversion_example.c * * This file contains an example how CRESAMPLE type conversions will be done * on the device. * * @note * * None * * MODIFICATION HISTORY: *
* Ver   Who    Date     Changes
* ----- ------ -------- -----------------------------------------------
* 4.0   adk    03/12/14 First release.
*
* 
******************************************************************************/ /***************************** Include Files *********************************/ #include "xcresample.h" #include "xparameters.h" #include "xil_printf.h" #include "stdio.h" /************************** Constant Definitions *****************************/ /* * The following constants map to the XPAR parameters created in the * xparameters.h file. They are defined here such that a user can easily * change all the needed parameters in one place. */ #define CRESAMPLE_DEVICE_ID XPAR_CRESAMPLE_0_DEVICE_ID /**< CRESAMPLE Device ID */ /**************************** Type Definitions *******************************/ /***************** Macros (Inline Functions) Definitions *********************/ /************************** Function Prototypes ******************************/ int CresampleTypeConversion(u16 DeviceId); /************************** Variable Definitions *****************************/ XCresample Cresample; /**BaseAddress); /* Checking status */ if (Status != (XST_SUCCESS)) { return (XST_FAILURE); } /* For 4:4:4 to 4:2:2 conversion */ /* * Horizontal filter phase 0 coefficients needs to be set. * NumHTaps should be configured to odd numbers * (3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23). * API used is XCresample_SetHCoefs. */ if ((Cresample.Config.NumHTaps % 2) != 0) { HPhases = 0; /* Clear all Horizontal and Vertical coefficients before setting */ XCresample_Clear_VCoef_Values(&Cresample); XCresample_SetHCoefs(&Cresample, &CoefH, HPhases); } /* For 4:2:2 to 4:4:4 conversion */ /* * Horizontal filter phase 1 coefficients needs to be set. * NumHTaps should be configured to even numbers * (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24). * API used is XCresample_SetHCoefs. */ if ((Cresample.Config.NumHTaps % 2) == 0) { HPhases = 1; /* Clear all Horizontal and Vertical coefficients before setting */ XCresample_Clear_VCoef_Values(&Cresample); XCresample_SetHCoefs(&Cresample, &CoefH, HPhases); } /* For 4:2:2 to 4:2:0 conversion */ /* * Vertical filter phase 0 coefficients needs to be set. * NumVTaps should be configured to even numbers(2, 4, 6, 8). * API used is XCresample_SetVCoefs. */ if ((Cresample.Config.NumVTaps % 2) == 0) { VPhases = 0; /* Clear all Horizontal and Vertical coefficients before setting */ XCresample_Clear_HCoef_Values(&Cresample); XCresample_SetVCoefs(&Cresample, &CoefV, VPhases); } /* For 4:2:0 to 4:2:2 conversion */ /* * Vertical filter phase 1 coefficients needs to be set. * NumVTaps should be configured to even numbers(2, 4, 6, 8). * API used is XCresample_SetVCoefs. */ if ((Cresample.Config.NumVTaps % 2) == 0) { VPhases = 0; /* Clear all Horizontal and Vertical coefficients before setting */ XCresample_Clear_HCoef_Values(&Cresample); XCresample_SetVCoefs(&Cresample, &CoefV, VPhases); } /* For 4:4:4 to 4:2:0 conversion */ /* * Vertical filter phase 0 and Horizontal filter phase 0 * coefficients needs to be set. * NumVTaps should be configured to even numbers(2, 4, 6, 8). * NumHTaps should be configured to odd numbers * (3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23). * APIs used are XCresample_SetHCoefs and XCresample_SetVCoefs. */ if (((Cresample.Config.NumVTaps % 2) == 0) && ((Cresample.Config.NumHTaps % 2) != 0)) { VPhases = 0; HPhases = 0; XCresample_SetHCoefs(&Cresample, &CoefH, HPhases); XCresample_SetVCoefs(&Cresample, &CoefV, VPhases); } /* For 4:2:0 to 4:4:4 conversion */ /* * Vertical filter phase 0 and 1 and Horizontal filter phase 1 * coefficients needs to be set. * NumVTaps should be configured to even numbers(2, 4, 6, 8). * NumHTaps should be configured to even numbers * (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24). * APIs used are XCresample_SetHCoefs and XCresample_SetVCoefs. */ if (((Cresample.Config.NumVTaps % 2) == 0) && ((Cresample.Config.NumHTaps % 2) == 0)) { VPhases = 2; HPhases = 1; XCresample_SetHCoefs(&Cresample, &CoefH, HPhases); XCresample_SetVCoefs(&Cresample, &CoefV, VPhases); } return (XST_SUCCESS); }