Video library for GR-PEACH

Dependents:   Trace_Program2 GR-PEACH_Camera_in_barcode GR-PEACH_LCD_sample GR-PEACH_LCD_4_3inch_sample ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers video_decoder.c Source File

video_decoder.c

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * DISCLAIMER
00003 * This software is supplied by Renesas Electronics Corporation and is only
00004 * intended for use with Renesas products. No other uses are authorized. This
00005 * software is owned by Renesas Electronics Corporation and is protected under
00006 * all applicable laws, including copyright laws.
00007 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
00008 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
00009 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
00010 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
00011 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
00012 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
00013 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
00014 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
00015 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
00016 * Renesas reserves the right, without notice, to make changes to this software
00017 * and to discontinue the availability of this software. By using this software,
00018 * you agree to the additional terms and conditions found by accessing the
00019 * following link:
00020 * http://www.renesas.com/disclaimer
00021 * Copyright (C) 2012 - 2015 Renesas Electronics Corporation. All rights reserved.
00022 *******************************************************************************/
00023 /**************************************************************************//**
00024 * @file         video_decoder.c
00025 * @version      1.00
00026 * $Rev: 199 $
00027 * $Date:: 2014-05-23 16:33:52 +0900#$
00028 * @brief        Video decoder function
00029 ******************************************************************************/
00030 
00031 /******************************************************************************
00032 Includes   <System Includes> , "Project Includes"
00033 ******************************************************************************/
00034 #include    <stdlib.h>
00035 #include    <string.h>
00036 
00037 #include    "r_typedefs.h"
00038 #include    "iodefine.h"
00039 
00040 #include    "r_vdec.h"
00041 #include    "r_vdec_user.h"
00042 
00043 #include    "video_decoder.h"
00044 
00045 
00046 /******************************************************************************
00047 Macro definitions
00048 ******************************************************************************/
00049 #define     STBCR7_BIT7                 (0x80u)
00050 #define     STBCR7_BIT6                 (0x40u)
00051 
00052 /*! Video decoder recommended value */
00053 #define SRCLEFT_NTSC_3_58       ((uint16_t)256u)
00054 #define SRCLEFT_NTSC_4_43       ((uint16_t)256u)
00055 #define SRCLEFT_PAL_4_43        ((uint16_t)256u)
00056 #define SRCLEFT_PAL_M           ((uint16_t)256u)
00057 #define SRCLEFT_PAL_N           ((uint16_t)256u)
00058 #define SRCLEFT_SECAM           ((uint16_t)256u)
00059 #define SRCLEFT_NTSC_443_60     ((uint16_t)256u)
00060 #define SRCLEFT_PAL_60          ((uint16_t)256u)
00061 
00062 #define SRCTOP_NTSC_3_58        ((uint16_t)16u)
00063 #define SRCTOP_NTSC_4_43        ((uint16_t)19u)
00064 #define SRCTOP_PAL_4_43         ((uint16_t)19u)
00065 #define SRCTOP_PAL_M            ((uint16_t)16u)
00066 #define SRCTOP_PAL_N            ((uint16_t)19u)
00067 #define SRCTOP_SECAM            ((uint16_t)19u)
00068 #define SRCTOP_NTSC_443_60      ((uint16_t)16u)
00069 #define SRCTOP_PAL_60           ((uint16_t)16u)
00070 
00071 #define SRCHEIGHT_NTSC_3_58     ((uint16_t)241u)
00072 #define SRCHEIGHT_NTSC_4_43     ((uint16_t)288u)
00073 #define SRCHEIGHT_PAL_4_43      ((uint16_t)288u)
00074 #define SRCHEIGHT_PAL_M         ((uint16_t)241u)
00075 #define SRCHEIGHT_PAL_N         ((uint16_t)288u)
00076 #define SRCHEIGHT_SECAM         ((uint16_t)288u)
00077 #define SRCHEIGHT_NTSC_443_60   ((uint16_t)241u)
00078 #define SRCHEIGHT_PAL_60        ((uint16_t)241u)
00079 
00080 #define SRCWIDTH_NTSC_3_58      ((uint16_t)1428u)
00081 #define SRCWIDTH_NTSC_4_43      ((uint16_t)1412u)
00082 #define SRCWIDTH_PAL_4_43       ((uint16_t)1412u)
00083 #define SRCWIDTH_PAL_M          ((uint16_t)1428u)
00084 #define SRCWIDTH_PAL_N          ((uint16_t)1412u)
00085 #define SRCWIDTH_SECAM          ((uint16_t)1412u)
00086 #define SRCWIDTH_NTSC_443_60    ((uint16_t)1428u)
00087 #define SRCWIDTH_PAL_60         ((uint16_t)1428u)
00088 
00089 #define HAFCTYP_NTSC_3_58       ((uint16_t)692u)
00090 #define HAFCTYP_NTSC_4_43       ((uint16_t)704u)
00091 #define HAFCTYP_PAL_4_43        ((uint16_t)704u)
00092 #define HAFCTYP_PAL_M           ((uint16_t)692u)
00093 #define HAFCTYP_PAL_N           ((uint16_t)704u)
00094 #define HAFCTYP_SECAM           ((uint16_t)704u)
00095 #define HAFCTYP_NTSC_443_60     ((uint16_t)692u)
00096 #define HAFCTYP_PAL_60          ((uint16_t)692u)
00097 
00098 #define HAFCMAX_NTSC_3_58       ((uint16_t)792u)
00099 #define HAFCMAX_NTSC_4_43       ((uint16_t)785u)
00100 #define HAFCMAX_PAL_4_43        ((uint16_t)785u)
00101 #define HAFCMAX_PAL_M           ((uint16_t)792u)
00102 #define HAFCMAX_PAL_N           ((uint16_t)785u)
00103 #define HAFCMAX_SECAM           ((uint16_t)785u)
00104 #define HAFCMAX_NTSC_443_60     ((uint16_t)792u)
00105 #define HAFCMAX_PAL_60          ((uint16_t)792u)
00106 
00107 #define HAFCMIN_NTSC_3_58       ((uint16_t)592u)
00108 #define HAFCMIN_NTSC_4_43       ((uint16_t)630u)
00109 #define HAFCMIN_PAL_4_43        ((uint16_t)630u)
00110 #define HAFCMIN_PAL_M           ((uint16_t)592u)
00111 #define HAFCMIN_PAL_N           ((uint16_t)630u)
00112 #define HAFCMIN_SECAM           ((uint16_t)630u)
00113 #define HAFCMIN_NTSC_443_60     ((uint16_t)592u)
00114 #define HAFCMIN_PAL_60          ((uint16_t)592u)
00115 
00116 #define VCDWINDOW_NTSC_3_58     ((uint16_t)30u)
00117 #define VCDWINDOW_NTSC_4_43     ((uint16_t)30u)
00118 #define VCDWINDOW_PAL_4_43      ((uint16_t)30u)
00119 #define VCDWINDOW_PAL_M         ((uint16_t)30u)
00120 #define VCDWINDOW_PAL_N         ((uint16_t)30u)
00121 #define VCDWINDOW_SECAM         ((uint16_t)30u)
00122 #define VCDWINDOW_NTSC_443_60   ((uint16_t)30u)
00123 #define VCDWINDOW_PAL_60        ((uint16_t)30u)
00124 
00125 #define VCDOFFSET_NTSC_3_58     ((uint16_t)15u)
00126 #define VCDOFFSET_NTSC_4_43     ((uint16_t)15u)
00127 #define VCDOFFSET_PAL_4_43      ((uint16_t)15u)
00128 #define VCDOFFSET_PAL_M         ((uint16_t)15u)
00129 #define VCDOFFSET_PAL_N         ((uint16_t)15u)
00130 #define VCDOFFSET_SECAM         ((uint16_t)15u)
00131 #define VCDOFFSET_NTSC_443_60   ((uint16_t)15u)
00132 #define VCDOFFSET_PAL_60        ((uint16_t)15u)
00133 
00134 #define ACCLEVEL_NTSC_3_58      ((uint16_t)220u)
00135 #define ACCLEVEL_NTSC_4_43      ((uint16_t)220u)
00136 #define ACCLEVEL_PAL_4_43       ((uint16_t)220u)
00137 #define ACCLEVEL_PAL_M          ((uint16_t)230u)
00138 #define ACCLEVEL_PAL_N          ((uint16_t)230u)
00139 #define ACCLEVEL_SECAM          ((uint16_t)220u)
00140 #define ACCLEVEL_NTSC_443_60    ((uint16_t)220u)
00141 #define ACCLEVEL_PAL_60         ((uint16_t)230u)
00142 
00143 #define AGCLEVEL_NTSC_3_58      ((uint16_t)230u)
00144 #define AGCLEVEL_NTSC_4_43      ((uint16_t)230u)
00145 #define AGCLEVEL_PAL_4_43       ((uint16_t)242u)
00146 #define AGCLEVEL_PAL_M          ((uint16_t)242u)
00147 #define AGCLEVEL_PAL_N          ((uint16_t)242u)
00148 #define AGCLEVEL_SECAM          ((uint16_t)242u)
00149 #define AGCLEVEL_NTSC_443_60    ((uint16_t)230u)
00150 #define AGCLEVEL_PAL_60         ((uint16_t)242u)
00151 
00152 #define K15_NTSC_3_58           ((uint16_t)2u)
00153 #define K15_NTSC_4_43           ((uint16_t)2u)
00154 #define K15_PAL_4_43            ((uint16_t)2u)
00155 #define K15_PAL_M               ((uint16_t)2u)
00156 #define K15_PAL_N               ((uint16_t)2u)
00157 #define K15_SECAM               ((uint16_t)2u)
00158 #define K15_NTSC_443_60         ((uint16_t)2u)
00159 #define K15_PAL_60              ((uint16_t)2u)
00160 
00161 #define K13_NTSC_3_58           ((uint16_t)8u)
00162 #define K13_NTSC_4_43           ((uint16_t)8u)
00163 #define K13_PAL_4_43            ((uint16_t)8u)
00164 #define K13_PAL_M               ((uint16_t)8u)
00165 #define K13_PAL_N               ((uint16_t)8u)
00166 #define K13_SECAM               ((uint16_t)8u)
00167 #define K13_NTSC_443_60         ((uint16_t)8u)
00168 #define K13_PAL_60              ((uint16_t)8u)
00169 
00170 #define K11_NTSC_3_58           ((uint16_t)4u)
00171 #define K11_NTSC_4_43           ((uint16_t)4u)
00172 #define K11_PAL_4_43            ((uint16_t)3u)
00173 #define K11_PAL_M               ((uint16_t)3u)
00174 #define K11_PAL_N               ((uint16_t)3u)
00175 #define K11_SECAM               ((uint16_t)4u)
00176 #define K11_NTSC_443_60         ((uint16_t)4u)
00177 #define K11_PAL_60              ((uint16_t)3u)
00178 
00179 #define K16_NTSC_3_58           ((uint16_t)3u)
00180 #define K16_NTSC_4_43           ((uint16_t)3u)
00181 #define K16_PAL_4_43            ((uint16_t)4u)
00182 #define K16_PAL_M               ((uint16_t)4u)
00183 #define K16_PAL_N               ((uint16_t)4u)
00184 #define K16_SECAM               ((uint16_t)3u)
00185 #define K16_NTSC_443_60         ((uint16_t)3u)
00186 #define K16_PAL_60              ((uint16_t)4u)
00187 
00188 #define K14_NTSC_3_58           ((uint16_t)16u)
00189 #define K14_NTSC_4_43           ((uint16_t)16u)
00190 #define K14_PAL_4_43            ((uint16_t)63u)
00191 #define K14_PAL_M               ((uint16_t)63u)
00192 #define K14_PAL_N               ((uint16_t)63u)
00193 #define K14_SECAM               ((uint16_t)16u)
00194 #define K14_NTSC_443_60         ((uint16_t)16u)
00195 #define K14_PAL_60              ((uint16_t)63u)
00196 
00197 #define K12_NTSC_3_58           ((uint16_t)8u)
00198 #define K12_NTSC_4_43           ((uint16_t)8u)
00199 #define K12_PAL_4_43            ((uint16_t)2u)
00200 #define K12_PAL_M               ((uint16_t)2u)
00201 #define K12_PAL_N               ((uint16_t)2u)
00202 #define K12_SECAM               ((uint16_t)1u)
00203 #define K12_NTSC_443_60         ((uint16_t)8u)
00204 #define K12_PAL_60              ((uint16_t)2u)
00205 
00206 #define K22A_NTSC_3_58          ((uint16_t)32u)
00207 #define K22A_NTSC_4_43          ((uint16_t)32u)
00208 #define K22A_PAL_4_43           ((uint16_t)32u)
00209 #define K22A_PAL_M              ((uint16_t)32u)
00210 #define K22A_PAL_N              ((uint16_t)32u)
00211 #define K22A_SECAM              ((uint16_t)32u)
00212 #define K22A_NTSC_443_60        ((uint16_t)32u)
00213 #define K22A_PAL_60             ((uint16_t)32u)
00214 
00215 #define K21A_NTSC_3_58          ((uint16_t)6u)
00216 #define K21A_NTSC_4_43          ((uint16_t)6u)
00217 #define K21A_PAL_4_43           ((uint16_t)10u)
00218 #define K21A_PAL_M              ((uint16_t)10u)
00219 #define K21A_PAL_N              ((uint16_t)10u)
00220 #define K21A_SECAM              ((uint16_t)10u)
00221 #define K21A_NTSC_443_60        ((uint16_t)6u)
00222 #define K21A_PAL_60             ((uint16_t)10u)
00223 
00224 #define K22B_NTSC_3_58          ((uint16_t)8u)
00225 #define K22B_NTSC_4_43          ((uint16_t)8u)
00226 #define K22B_PAL_4_43           ((uint16_t)15u)
00227 #define K22B_PAL_M              ((uint16_t)15u)
00228 #define K22B_PAL_N              ((uint16_t)15u)
00229 #define K22B_SECAM              ((uint16_t)15u)
00230 #define K22B_NTSC_443_60        ((uint16_t)8u)
00231 #define K22B_PAL_60             ((uint16_t)15u)
00232 
00233 #define K21B_NTSC_3_58          ((uint16_t)6u)
00234 #define K21B_NTSC_4_43          ((uint16_t)6u)
00235 #define K21B_PAL_4_43           ((uint16_t)10u)
00236 #define K21B_PAL_M              ((uint16_t)10u)
00237 #define K21B_PAL_N              ((uint16_t)10u)
00238 #define K21B_SECAM              ((uint16_t)6u)
00239 #define K21B_NTSC_443_60        ((uint16_t)6u)
00240 #define K21B_PAL_60             ((uint16_t)10u)
00241 
00242 #define K23B_NTSC_3_58          ((uint16_t)6u)
00243 #define K23B_NTSC_4_43          ((uint16_t)6u)
00244 #define K23B_PAL_4_43           ((uint16_t)3u)
00245 #define K23B_PAL_M              ((uint16_t)3u)
00246 #define K23B_PAL_N              ((uint16_t)3u)
00247 #define K23B_SECAM              ((uint16_t)3u)
00248 #define K23B_NTSC_443_60        ((uint16_t)6u)
00249 #define K23B_PAL_60             ((uint16_t)3u)
00250 
00251 #define K23A_NTSC_3_58          ((uint16_t)3u)
00252 #define K23A_NTSC_4_43          ((uint16_t)3u)
00253 #define K23A_PAL_4_43           ((uint16_t)3u)
00254 #define K23A_PAL_M              ((uint16_t)3u)
00255 #define K23A_PAL_N              ((uint16_t)3u)
00256 #define K23A_SECAM              ((uint16_t)3u)
00257 #define K23A_NTSC_443_60        ((uint16_t)3u)
00258 #define K23A_PAL_60             ((uint16_t)3u)
00259 
00260 #define K24_NTSC_3_58           ((uint16_t)5u)
00261 #define K24_NTSC_4_43           ((uint16_t)5u)
00262 #define K24_PAL_4_43            ((uint16_t)8u)
00263 #define K24_PAL_M               ((uint16_t)8u)
00264 #define K24_PAL_N               ((uint16_t)8u)
00265 #define K24_SECAM               ((uint16_t)8u)
00266 #define K24_NTSC_443_60         ((uint16_t)5u)
00267 #define K24_PAL_60              ((uint16_t)8u)
00268 
00269 /* SyncSep */
00270 #define SYNCMAXDUTY_H_VALUE  ((uint16_t)15u)
00271 #define SYNCMINDUTY_H_VALUE  ((uint16_t)10u)
00272 #define CSYNCSLICE_H_VALUE   ((uint16_t)146u)
00273 #define SYNCMAXDUTY_V_VALUE  ((uint16_t)15u)
00274 #define SYNCMINDUTY_V_VALUE  ((uint16_t)9u)
00275 #define VSYNCSLICE_VALUE     ((uint16_t)10u)
00276 #define CSYNCSLICE_V_VALUE   ((uint16_t)146u)
00277 #define HAFCGAIN_VALUE       ((uint16_t)12u)
00278 #define HAFCSTART_VALUE      ((uint16_t)0u)
00279 #define HAFCEND_VALUE        ((uint16_t)8u)
00280 #define AGCRESPONSE_VALUE    ((uint16_t)4u)
00281 #define AGCPRECIS_VALUE      ((uint16_t)10u)
00282 #define PGA_GAIN_VALUE       ((uint16_t)0u)
00283 #define PEAKATTACK_VALUE     ((uint16_t)2u)
00284 #define PEAKRELEASE_VALUE    ((uint16_t)3u)
00285 #define MAXPEAKSAMPLES_VALUE ((uint16_t)20u)
00286 
00287 /* YcSep */
00288 #define RADJ_O_LEVEL0_VALUE  ((uint16_t)928u)
00289 #define RADJ_U_LEVEL0_VALUE  ((uint16_t)32u)
00290 #define RADJ_O_LEVEL1_VALUE  ((uint16_t)960u)
00291 #define RADJ_U_LEVEL1_VALUE  ((uint16_t)48u)
00292 #define RADJ_O_LEVEL2_VALUE  ((uint16_t)992u)
00293 #define RADJ_U_LEVEL2_VALUE  ((uint16_t)64u)
00294 #define V_Y_LEVEL_VALUE      ((uint16_t)0u)
00295 
00296 /* ChromaDec */
00297 #define LUMADELAY_VALUE      ((uint16_t)0u)
00298 #define LOOPGAIN_VALUE       ((uint16_t)3u)
00299 #define LOCKLIMIT_VALUE      ((uint16_t)1u)
00300 #define BGPCHECK_VALUE       ((uint16_t)0u)
00301 #define BGPWIDTH_VALUE       ((uint16_t)54u)
00302 #define BGPSTART_VALUE       ((uint16_t)110u)
00303 #define CHROMAMAINGAIN_VALUE ((uint16_t)210u)
00304 #define ACCRESPONSE_VALUE    ((uint16_t)1u)
00305 #define ACCPRECIS_VALUE      ((uint16_t)8u)
00306 #define KILLERLEVEL_VALUE    ((uint16_t)4u)
00307 #define KILLEROFFSET_VALUE   ((uint16_t)5u)
00308 
00309 /* DigitalClamp */
00310 #define BLANKLEVEL_Y_VALUE   ((uint16_t)984u)
00311 #define DCPPOS_Y_VALUE       ((uint16_t)162u)
00312 #define BLANKLEVEL_CB_VALUE  ((uint16_t)0u)
00313 #define BLANKLEVEL_CR_VALUE  ((uint16_t)0u)
00314 #define DCPPOS_C_VALUE       ((uint16_t)54u)
00315 #define ACFLAGTIME_VALUE     ((uint16_t)0u)
00316 #define ACFFILTER_VALUE      ((uint16_t)3u)
00317 #define DCPRESPONSE_VALUE    ((uint16_t)0u)
00318 #define DCPSTART_VALUE       ((uint16_t)16u)
00319 #define DCPEND_VALUE         ((uint16_t)16u)
00320 #define DCPWIDTH_VALUE       ((uint16_t)27u)
00321 
00322 /* Output */
00323 #define Y_GAIN2_VALUE        ((uint16_t)816u)
00324 #define CB_GAIN2_VALUE       ((uint16_t)663u)
00325 #define CR_GAIN2_VALUE       ((uint16_t)663u)
00326 
00327 
00328 /******************************************************************************
00329 Typedef definitions
00330 ******************************************************************************/
00331 /*! Video decoder recommended value */
00332 typedef struct {
00333     /* Capturing position setting */
00334     uint16_t            srcleft;
00335     uint16_t            srctop;
00336     uint16_t            srcheight;
00337     uint16_t            srcwidth;
00338     /* Horizontal AFC setting */
00339     uint16_t            hafctyp;
00340     uint16_t            hafcmax;
00341     uint16_t            hafcmin;
00342     /* Vertical countdown setting */
00343     vdec_onoff_t         novcd50_;
00344     vdec_onoff_t         novcd60_;
00345     vdec_vcddefault_t    vcddefault;
00346     uint16_t            vcdwindow;
00347     uint16_t            vcdoffset;
00348     /* BCO setting */
00349     vdec_color_sys_t     defaultsys;
00350     vdec_onoff_t         nontsc358_;
00351     vdec_onoff_t         nontsc443_;
00352     vdec_onoff_t         nopalm_;
00353     vdec_onoff_t         nopaln_;
00354     vdec_onoff_t         nopal443_;
00355     vdec_onoff_t         nosecam_;
00356     /* ACC level setting */
00357     uint16_t            acclevel;
00358     /* AGC level setting */
00359     uint16_t            agclevel;
00360     /* Y/C separation setting */
00361     uint16_t            k15;
00362     uint16_t            k13;
00363     uint16_t            k11;
00364     uint16_t            k16;
00365     uint16_t            k14;
00366     uint16_t            k12;
00367     uint16_t            k22A;
00368     uint16_t            k21A;
00369     uint16_t            k22B;
00370     uint16_t            k21B;
00371     uint16_t            k23B;
00372     uint16_t            k23A;
00373     uint16_t            k24;
00374     vdec_onoff_t         det2_on;
00375     vdec_filmix_ratio_t  hsel_mix_y;
00376     vdec_filmix_ratio_t  vsel_mix_y;
00377     vdec_filmix_ratio_t  hvsel_mix_y;
00378     vdec_filmix_ratio_t  det2_mix_c;
00379     vdec_filmix_ratio_t  det2_mix_y;
00380     vdec_2dfil_mdsel_t   fil2_mode_2d;
00381     vdec_2d_fil_sel_t    fil2_narrow_2d;
00382 } video_recmd_val_t;
00383 
00384 
00385 /******************************************************************************
00386 Imported global variables and functions (from other files)
00387 ******************************************************************************/
00388 
00389 /******************************************************************************
00390 Exported global variables and functions (to be accessed by other files)
00391 ******************************************************************************/
00392 
00393 /******************************************************************************
00394 Private global variables and functions
00395 ******************************************************************************/
00396 static void Input(const graphics_col_sys_t  color_system, const vdec_channel_t  channel);
00397 static void SyncSep(const graphics_col_sys_t  color_system, const vdec_channel_t  channel);
00398 static void YcSep(const graphics_col_sys_t  color_system, const vdec_channel_t  channel);
00399 static void ChromaDec(const graphics_col_sys_t  color_system, const vdec_channel_t  channel);
00400 static void DigitalClamp(const vdec_channel_t  channel);
00401 static void Output(const vdec_channel_t  channel);
00402 
00403 static void init_func(const uint32_t user_num);
00404 
00405 static const video_recmd_val_t RecommendedValue[GRPH_COL_SYS_NUM] = {
00406     {   /* NTSC-3.58 */
00407         /* Capturing position setting */
00408         SRCLEFT_NTSC_3_58, SRCTOP_NTSC_3_58, SRCHEIGHT_NTSC_3_58, SRCWIDTH_NTSC_3_58,
00409         /* Horizontal AFC setting */
00410         HAFCTYP_NTSC_3_58, HAFCMAX_NTSC_3_58, HAFCMIN_NTSC_3_58,
00411         /* Vertical countdown setting */
00412         VDEC_OFF , VDEC_ON , VDEC_VCD_FRQ_59_94HZ , VCDWINDOW_NTSC_3_58, VCDOFFSET_NTSC_3_58,
00413         /* BCO setting */
00414         VDEC_COL_SYS_NTSC , VDEC_ON , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF ,
00415         /* ACC level setting */
00416         ACCLEVEL_NTSC_3_58,
00417         /* AGC level setting */
00418         AGCLEVEL_NTSC_3_58,
00419         /* Y/C separation setting */
00420         K15_NTSC_3_58, K13_NTSC_3_58, K11_NTSC_3_58, K16_NTSC_3_58, K14_NTSC_3_58, K12_NTSC_3_58,
00421         K22A_NTSC_3_58, K21A_NTSC_3_58, K22B_NTSC_3_58, K21B_NTSC_3_58, K23B_NTSC_3_58, K23A_NTSC_3_58, K24_NTSC_3_58,
00422         VDEC_ON , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_0 ,
00423         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_25 , VDEC_2DFIL_MDSEL_CASCADE , VDEC_2D_FIL_SEL_17TAP 
00424     },
00425     {   /* NTSC-4.43 */
00426         /* Capturing position setting */
00427         SRCLEFT_NTSC_4_43, SRCTOP_NTSC_4_43, SRCHEIGHT_NTSC_4_43, SRCWIDTH_NTSC_4_43,
00428         /* Horizontal AFC setting */
00429         HAFCTYP_NTSC_4_43, HAFCMAX_NTSC_4_43, HAFCMIN_NTSC_4_43,
00430         /* Vertical countdown setting */
00431         VDEC_ON , VDEC_OFF , VDEC_VCD_FRQ_50HZ , VCDWINDOW_NTSC_4_43, VCDOFFSET_NTSC_4_43,
00432         /* BCO setting */
00433         VDEC_COL_SYS_NTSC , VDEC_OFF , VDEC_ON , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF ,
00434         /* ACC level setting */
00435         ACCLEVEL_NTSC_4_43,
00436         /* AGC level setting */
00437         AGCLEVEL_NTSC_4_43,
00438         /* Y/C separation setting */
00439         K15_NTSC_4_43, K13_NTSC_4_43, K11_NTSC_4_43, K16_NTSC_4_43, K14_NTSC_4_43, K12_NTSC_4_43,
00440         K22A_NTSC_4_43, K21A_NTSC_4_43, K22B_NTSC_4_43, K21B_NTSC_4_43, K23B_NTSC_4_43, K23A_NTSC_4_43, K24_NTSC_4_43,
00441         VDEC_ON , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_0 ,
00442         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_25 , VDEC_2DFIL_MDSEL_CASCADE , VDEC_2D_FIL_SEL_17TAP 
00443     },
00444     {   /* PAL-4.43 */
00445         /* Capturing position setting */
00446         SRCLEFT_PAL_4_43, SRCTOP_PAL_4_43, SRCHEIGHT_PAL_4_43, SRCWIDTH_PAL_4_43,
00447         /* Horizontal AFC setting */
00448         HAFCTYP_PAL_4_43, HAFCMAX_PAL_4_43, HAFCMIN_PAL_4_43,
00449         /* Vertical countdown setting */
00450         VDEC_ON , VDEC_OFF , VDEC_VCD_FRQ_50HZ , VCDWINDOW_PAL_4_43, VCDOFFSET_PAL_4_43,
00451         /* BCO setting */
00452         VDEC_COL_SYS_PAL , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_ON , VDEC_OFF ,
00453         /* ACC level setting */
00454         ACCLEVEL_PAL_4_43,
00455         /* AGC level setting */
00456         AGCLEVEL_PAL_4_43,
00457         /* Y/C separation setting */
00458         K15_PAL_4_43, K13_PAL_4_43, K11_PAL_4_43, K16_PAL_4_43, K14_PAL_4_43, K12_PAL_4_43,
00459         K22A_PAL_4_43, K21A_PAL_4_43, K22B_PAL_4_43, K21B_PAL_4_43, K23B_PAL_4_43, K23A_PAL_4_43, K24_PAL_4_43,
00460         VDEC_OFF , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 ,
00461         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_2DFIL_MDSEL_BYPASS , VDEC_2D_FIL_SEL_17TAP 
00462     },
00463     {   /* PAL-M */
00464         /* Capturing position setting */
00465         SRCLEFT_PAL_M, SRCTOP_PAL_M, SRCHEIGHT_PAL_M, SRCWIDTH_PAL_M,
00466         /* Horizontal AFC setting */
00467         HAFCTYP_PAL_M, HAFCMAX_PAL_M, HAFCMIN_PAL_M,
00468         /* Vertical countdown setting */
00469         VDEC_OFF , VDEC_ON , VDEC_VCD_FRQ_59_94HZ , VCDWINDOW_PAL_M, VCDOFFSET_PAL_M,
00470         /* BCO setting */
00471         VDEC_COL_SYS_PAL , VDEC_OFF , VDEC_OFF , VDEC_ON , VDEC_OFF , VDEC_OFF , VDEC_OFF ,
00472         /* ACC level setting */
00473         ACCLEVEL_PAL_M,
00474         /* AGC level setting */
00475         AGCLEVEL_PAL_M,
00476         /* Y/C separation setting */
00477         K15_PAL_M, K13_PAL_M, K11_PAL_M, K16_PAL_M, K14_PAL_M, K12_PAL_M,
00478         K22A_PAL_M, K21A_PAL_M, K22B_PAL_M, K21B_PAL_M, K23B_PAL_M, K23A_PAL_M, K24_PAL_M,
00479         VDEC_OFF , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 ,
00480         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_2DFIL_MDSEL_BYPASS , VDEC_2D_FIL_SEL_17TAP 
00481     },
00482     {   /* PAL-N */
00483         /* Capturing position setting */
00484         SRCLEFT_PAL_N, SRCTOP_PAL_N, SRCHEIGHT_PAL_N, SRCWIDTH_PAL_N,
00485         /* Horizontal AFC setting */
00486         HAFCTYP_PAL_N, HAFCMAX_PAL_N, HAFCMIN_PAL_N,
00487         /* Vertical countdown setting */
00488         VDEC_ON , VDEC_OFF , VDEC_VCD_FRQ_50HZ , VCDWINDOW_PAL_N, VCDOFFSET_PAL_N,
00489         /* BCO setting */
00490         VDEC_COL_SYS_PAL , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_ON , VDEC_OFF , VDEC_OFF ,
00491         /* ACC level setting */
00492         ACCLEVEL_PAL_N,
00493         /* AGC level setting */
00494         AGCLEVEL_PAL_N,
00495         /* Y/C separation setting */
00496         K15_PAL_N, K13_PAL_N, K11_PAL_N, K16_PAL_N, K14_PAL_N, K12_PAL_N,
00497         K22A_PAL_N, K21A_PAL_N, K22B_PAL_N, K21B_PAL_N, K23B_PAL_N, K23A_PAL_N, K24_PAL_N,
00498         VDEC_OFF , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 ,
00499         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_2DFIL_MDSEL_BYPASS , VDEC_2D_FIL_SEL_17TAP 
00500     },
00501     {   /* SECAM */
00502         /* Capturing position setting */
00503         SRCLEFT_SECAM, SRCTOP_SECAM, SRCHEIGHT_SECAM, SRCWIDTH_SECAM,
00504         /* Horizontal AFC setting */
00505         HAFCTYP_SECAM, HAFCMAX_SECAM, HAFCMIN_SECAM,
00506         /* Vertical countdown setting */
00507         VDEC_ON , VDEC_OFF , VDEC_VCD_FRQ_50HZ , VCDWINDOW_SECAM, VCDOFFSET_SECAM,
00508         /* BCO setting */
00509         VDEC_COL_SYS_SECAM , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_ON ,
00510         /* ACC level setting */
00511         ACCLEVEL_SECAM,
00512         /* AGC level setting */
00513         AGCLEVEL_SECAM,
00514         /* Y/C separation setting */
00515         K15_SECAM, K13_SECAM, K11_SECAM, K16_SECAM, K14_SECAM, K12_SECAM,
00516         K22A_SECAM, K21A_SECAM, K22B_SECAM, K21B_SECAM, K23B_SECAM, K23A_SECAM, K24_SECAM,
00517         VDEC_ON , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_0 ,
00518         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_2DFIL_MDSEL_CASCADE , VDEC_2D_FIL_SEL_17TAP 
00519     },
00520     {   /* NTSC-4.43 (60Hz) */
00521         /* Capturing position setting */
00522         SRCLEFT_NTSC_443_60, SRCTOP_NTSC_443_60, SRCHEIGHT_NTSC_443_60, SRCWIDTH_NTSC_443_60,
00523         /* Horizontal AFC setting */
00524         HAFCTYP_NTSC_443_60, HAFCMAX_NTSC_443_60, HAFCMIN_NTSC_443_60,
00525         /* Vertical countdown setting */
00526         VDEC_OFF , VDEC_ON , VDEC_VCD_FRQ_59_94HZ , VCDWINDOW_NTSC_443_60, VCDOFFSET_NTSC_443_60,
00527         /* BCO setting */
00528         VDEC_COL_SYS_NTSC , VDEC_OFF , VDEC_ON , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF ,
00529         /* ACC level setting */
00530         ACCLEVEL_NTSC_443_60,
00531         /* AGC level setting */
00532         AGCLEVEL_NTSC_443_60,
00533         /* Y/C separation setting */
00534         K15_NTSC_443_60, K13_NTSC_443_60, K11_NTSC_443_60, K16_NTSC_443_60, K14_NTSC_443_60, K12_NTSC_443_60,
00535         K22A_NTSC_443_60, K21A_NTSC_443_60, K22B_NTSC_443_60, K21B_NTSC_443_60, K23B_NTSC_443_60, K23A_NTSC_443_60,
00536         K24_NTSC_443_60,
00537         VDEC_ON , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_75 , VDEC_FILMIX_RATIO_0 ,
00538         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_25 , VDEC_2DFIL_MDSEL_CASCADE , VDEC_2D_FIL_SEL_17TAP 
00539     },
00540     {   /* PAL-60 */
00541         /* Capturing position setting */
00542         SRCLEFT_PAL_60, SRCTOP_PAL_60, SRCHEIGHT_PAL_60, SRCWIDTH_PAL_60,
00543         /* Horizontal AFC setting */
00544         HAFCTYP_PAL_60, HAFCMAX_PAL_60, HAFCMIN_PAL_60,
00545         /* Vertical countdown setting */
00546         VDEC_OFF , VDEC_ON , VDEC_VCD_FRQ_59_94HZ , VCDWINDOW_PAL_60, VCDOFFSET_PAL_60,
00547         /* BCO setting */
00548         VDEC_COL_SYS_PAL , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_OFF , VDEC_ON , VDEC_OFF ,
00549         /* ACC level setting */
00550         ACCLEVEL_PAL_60,
00551         /* AGC level setting */
00552         AGCLEVEL_PAL_60,
00553         /* Y/C separation setting */
00554         K15_PAL_60, K13_PAL_60, K11_PAL_60, K16_PAL_60, K14_PAL_60, K12_PAL_60,
00555         K22A_PAL_60, K21A_PAL_60, K22B_PAL_60, K21B_PAL_60, K23B_PAL_60, K23A_PAL_60, K24_PAL_60,
00556         VDEC_OFF , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 ,
00557         VDEC_FILMIX_RATIO_0 , VDEC_FILMIX_RATIO_0 , VDEC_2DFIL_MDSEL_BYPASS , VDEC_2D_FIL_SEL_17TAP 
00558     }
00559 };
00560 /* Two-Dimensional Cascade Broadband and Narrowband (3.58/4.43) Filter TAP Coefficient */
00561 static const vdec_chrfil_tap_t  wana_ntsc = {
00562     {
00563         (uint16_t)24u, (uint16_t)44u, (uint16_t)20u, (uint16_t)(0x1000u | 52u), (uint16_t)(0x1000u | 128u),
00564         (uint16_t)(0x1000u | 128u), (uint16_t)(0x1000u | 12u), (uint16_t)132u, (uint16_t)200u
00565     }
00566 };
00567 /* Two-Dimensional Cascade Broadband (SECAM-DR) Filter TAP Coefficient */
00568 static const vdec_chrfil_tap_t  wa_secam = {
00569     {
00570         (uint16_t)(0x1000u | 20u), (uint16_t)24u, (uint16_t)64u, (uint16_t)40u, (uint16_t)(0x1000u | 76u),
00571         (uint16_t)(0x1000u | 164u), (uint16_t)(0x1000u | 84u), (uint16_t)108u, (uint16_t)216u
00572     }
00573 };
00574 /* Two-Dimensional Cascade Broadband (SECAM-DB) Filter TAP Coefficient */
00575 static const vdec_chrfil_tap_t  wb_secam = {
00576     {
00577         (uint16_t)(0x1000u | 12u), (uint16_t)40u, (uint16_t)60u, (uint16_t)12u, (uint16_t)(0x1000u | 104u),
00578         (uint16_t)(0x1000u | 156u), (uint16_t)(0x1000u | 64u), (uint16_t)120u, (uint16_t)208u
00579     }
00580 };
00581 /* Two-Dimensional Cascade Narrowband (SECAM-DR) Filter TAP Coefficient */
00582 static const vdec_chrfil_tap_t  na_secam = {
00583     {
00584         (uint16_t)(0x1000u | 1008u), (uint16_t)1976u, (uint16_t)(0x1000u | 2024u), (uint16_t)444u, (uint16_t)1868u,
00585         (uint16_t)(0x1000u | 2864u), (uint16_t)1352u, (uint16_t)1376u, (uint16_t)(0x1000u | 2240u)
00586     }
00587 };
00588 /* Two-Dimensional Cascade Narrowband (SECAM-DB) Filter TAP Coefficient */
00589 static const vdec_chrfil_tap_t  nb_secam = {
00590     {
00591         (uint16_t)(0x1000u | 1080u), (uint16_t)2800u, (uint16_t)(0x1000u | 3308u), (uint16_t)1628u, (uint16_t)1444u,
00592         (uint16_t)(0x1000u | 3308u), (uint16_t)2140u, (uint16_t)376u, (uint16_t)(0x1000u | 1384u)
00593     }
00594 };
00595 
00596 
00597 /**************************************************************************//**
00598  * @brief       Video decoder initialization
00599  * @param       [in]adc_vinsel      : Input pin control
00600  * @param       [in]channel         : Channel
00601  * @retval      Detected color system
00602  *****************************************************************************/
00603 vdec_error_t  GRAPHICS_VideoDecoderInit (const vdec_adc_vinsel_t  adc_vinsel, const vdec_channel_t  channel, graphics_col_sys_t  col_sys)
00604 {
00605     vdec_error_t         error = VDEC_OK ;
00606 
00607     /* Video Decoder Driver Initialization */
00608     error = R_VDEC_Initialize(channel, adc_vinsel, &init_func, (uint32_t)channel);
00609     if (error == VDEC_OK ) {
00610         if (col_sys != GRPH_COL_SYS_UNKNOWN ) {
00611             /* Input */
00612             Input(col_sys, channel);
00613             /* Sync separation */
00614             SyncSep(col_sys, channel);
00615             /* Y/C separation */
00616             YcSep(col_sys, channel);
00617             /* Chroma decoding */
00618             ChromaDec(col_sys, channel);
00619             /* Digital clamp */
00620             DigitalClamp(channel);
00621             /* Output */
00622             Output(channel);
00623         } else {
00624             error = VDEC_ERR_PARAM ;
00625         }
00626     }
00627     return error;
00628 }   /* End of function GRAPHICS_VideoDecoderInit() */
00629 
00630 
00631 /**************************************************************************//**
00632  * @brief       User-defined function
00633  * @param       [in]user_num
00634  * @retval      None
00635  *****************************************************************************/
00636 static void init_func (const uint32_t user_num)
00637 {
00638     uint32_t            reg_data;
00639     volatile uint8_t    dummy_read;
00640 
00641     reg_data = (uint32_t)CPG.STBCR7;
00642     if ((vdec_channel_t )user_num == VDEC_CHANNEL_0 ) {
00643         /* Standby control register 7 (STBCR7)
00644             b7      0-------;  MSTP77 : 0 : Video decoder channel 0 enable */
00645         reg_data &= (uint32_t)~STBCR7_BIT7;
00646     } else {
00647         /* Standby control register 7 (STBCR7)
00648             b6      -0------;  MSTP76 : 0 : Video decoder channel 1 enable */
00649         reg_data &= (uint32_t)~STBCR7_BIT6;
00650     }
00651     CPG.STBCR7 = (uint8_t)reg_data;
00652     /* In order to reflect the change, a dummy read should be done. */
00653     dummy_read = CPG.STBCR7;
00654 }   /* End of function init_func() */
00655 
00656 /**************************************************************************//**
00657  * @brief       Video decoder input setup
00658  * @param       [in]color_system    : Color system
00659  * @param       [in]channel         : Channel
00660  * @retval      None
00661  *****************************************************************************/
00662 static void Input (const graphics_col_sys_t  color_system, const vdec_channel_t  channel)
00663 {
00664     vdec_error_t                 error;
00665     vdec_active_period_t         param;
00666     const video_recmd_val_t   * RecommendValTbl;
00667 
00668     RecommendValTbl = &RecommendedValue[color_system];
00669 
00670     param.srcleft    = RecommendValTbl->srcleft;     /* Left end of input video signal capturing area */
00671     param.srctop     = RecommendValTbl->srctop;      /* Top end of input video signal capturing area */
00672     param.srcheight  = RecommendValTbl->srcheight;   /* Height of input video signal capturing area */
00673     param.srcwidth   = RecommendValTbl->srcwidth;    /* Width of input video signal capturing area */
00674     /* Video decoder driver input */
00675     error = R_VDEC_ActivePeriod(channel, &param);
00676     if (error != VDEC_OK ) {
00677     }
00678 }   /* End of function Input() */
00679 
00680 /**************************************************************************//**
00681  * @brief       Video decoder sync separation setup
00682  * @param       [in]color_system    : Color system
00683  * @param       [in]channel         : Channel
00684  * @retval      None
00685  *****************************************************************************/
00686 static void SyncSep (const graphics_col_sys_t  color_system, const vdec_channel_t  channel)
00687 {
00688     vdec_error_t                 error;
00689     vdec_sync_separation_t       param;
00690     vdec_noise_rd_lpf_t          noise_rd_lpf_tmp;
00691     vdec_sync_slicer_t           sync_slicer_tmp;
00692     vdec_horizontal_afc_t        horizontal_afc_tmp;
00693     vdec_vcount_down_t           vcount_down_tmp;
00694     vdec_agc_t                   agc_tmp;
00695     vdec_peak_limiter_t          peak_limiter_tmp;
00696     const video_recmd_val_t   * RecommendValTbl;
00697 
00698     RecommendValTbl = &RecommendedValue[color_system];
00699 
00700     /* Noise reduction LPF */
00701     noise_rd_lpf_tmp.lpfvsync    = VDEC_LPF_VSYNC_0_54 ;      /* LPF cutoff frequency before vertical sync separation */
00702     noise_rd_lpf_tmp.lpfhsync    = VDEC_LPF_HSYNC_0_94 ;      /* LPF cutoff frequency before horizontal sync separation */
00703     /* Sync slicer */
00704     sync_slicer_tmp.velocityshift_h  = VDEC_VELOCITY_SHIFT_4 ;    /* Reference level operation speed control for
00705                                                                    composite sync separation (for Hsync signal) */
00706     sync_slicer_tmp.slicermode_h     = VDEC_SLICE_MODE_AUTO_50 ;  /* Auto-slice level setting for composite sync
00707                                                                    separator circuit (for Hsync signal) */
00708     sync_slicer_tmp.slicermode_v     = VDEC_SLICE_MODE_AUTO_50 ;  /* Auto-slice level setting for composite sync
00709                                                                    separation circuit (for Vsync signal) */
00710     sync_slicer_tmp.syncmaxduty_h    = SYNCMAXDUTY_H_VALUE;      /* Max ratio of horizontal cycle to horizontal sync
00711                                                                    signal pulse width (for Hsync signal) */
00712     sync_slicer_tmp.syncminduty_h    = SYNCMINDUTY_H_VALUE;      /* Min ratio of horizontal cycle to horizontal sync
00713                                                                    signal pulse width (for Hsync signal) */
00714     sync_slicer_tmp.ssclipsel        = VDEC_CLIP_LV_1023 ;        /* Clipping level */
00715     sync_slicer_tmp.csyncslice_h     = CSYNCSLICE_H_VALUE;       /* Slice level for composite sync
00716                                                                    signal separation (for Hsync signal) */
00717     sync_slicer_tmp.syncmaxduty_v    = SYNCMAXDUTY_V_VALUE;      /* Max ratio of horizontal cycle to horizontal sync
00718                                                                    signal pulse width (for Vsync signal) */
00719     sync_slicer_tmp.syncminduty_v    = SYNCMINDUTY_V_VALUE;      /* Min ratio of horizontal cycle to horizontal sync
00720                                                                    signal pulse width (for Vsync signal) */
00721     sync_slicer_tmp.vsyncdelay       = VDEC_OFF ;                 /* Delays the separated vertical sync signal for
00722                                                                    1/4 horizontal cycle */
00723     sync_slicer_tmp.vsyncslice       = VSYNCSLICE_VALUE;         /* Threshold for vertical sync separation */
00724     sync_slicer_tmp.csyncslice_v     = CSYNCSLICE_V_VALUE;       /* Slice level for composite sync
00725                                                                    signal separation (for Vsync signal) */
00726     /* Horizontal AFC */
00727     horizontal_afc_tmp.hafcgain      = HAFCGAIN_VALUE;           /* Horizontal AFC loop gain */
00728     horizontal_afc_tmp.hafctyp       = RecommendValTbl->hafctyp; /* Horizontal AFC center oscillation frequency */
00729     horizontal_afc_tmp.hafcstart     = HAFCSTART_VALUE;          /* Start line of horizontal AFC normal operation */
00730     horizontal_afc_tmp.nox2hosc      = VDEC_ON ;                  /* Disable of horizontal AFC double speed detection */
00731     horizontal_afc_tmp.hafcmax       = RecommendValTbl->hafcmax; /* Maximum oscillation frequency of horizontal AFC */
00732     horizontal_afc_tmp.hafcend       = HAFCEND_VALUE;            /* End line of horizontal AFC normal operation */
00733     horizontal_afc_tmp.hafcmode      = VDEC_HAFCMD_AUTO_PHST ;    /* Horizontal AFC VBI period operating mode */
00734     horizontal_afc_tmp.hafcmin       = RecommendValTbl->hafcmin; /* Min oscillation frequency of horizontal AFC */
00735     horizontal_afc_tmp.phdet_fix     = VDEC_OFF ;                 /* Forcible or LOWGAIN control */
00736     horizontal_afc_tmp.phdet_div     = VDEC_PHDET_DIV_1_32 ;      /* Phase comparator feedback adjust for
00737                                                                    low sync signal lock stability */
00738     /* Vertical countdown */
00739     vcount_down_tmp.novcd50_     = RecommendValTbl->novcd50_;    /* Vertical countdown 50-Hz oscillation mode */
00740     vcount_down_tmp.novcd60_     = RecommendValTbl->novcd60_;    /* Vertical countdown 60-Hz (59.94-Hz)
00741                                                                    oscillation mode */
00742     vcount_down_tmp.vcddefault   = RecommendValTbl->vcddefault;  /* Vertical countdown center oscillation frequency */
00743     vcount_down_tmp.vcdwindow    = RecommendValTbl->vcdwindow;   /* Vertical countdown sync area */
00744     vcount_down_tmp.vcdoffset    = RecommendValTbl->vcdoffset;   /* Vertical countdown minimum oscillation frequency */
00745     /* AGC / PGA */
00746     agc_tmp.agcmode      = VDEC_ON ;                  /* A/D converter AGC ON/OFF control & PGA gain select */
00747     agc_tmp.doreduce     = VDEC_OFF ;                 /* Manual control of sync signal amplitude detection
00748                                                        during VBI period */
00749     agc_tmp.noreduce_    = VDEC_ON ;                  /* Control of sync signal amplitude detection during VBI period */
00750     agc_tmp.agcresponse  = AGCRESPONSE_VALUE;        /* AGC response speed */
00751     agc_tmp.agclevel     = RecommendValTbl->agclevel;/* Sync signal reference amplitude */
00752     agc_tmp.agcprecis    = AGCPRECIS_VALUE;          /* AGC gain adjustment accuracy */
00753     agc_tmp.pga_gain     = PGA_GAIN_VALUE;           /* PGA gain */
00754     /* Peak limiter control */
00755     peak_limiter_tmp.peaklevel       = VDEC_PEAKLV_992 ;      /* Peak luminance value to operate peak limiter */
00756     peak_limiter_tmp.peakattack      = PEAKATTACK_VALUE;     /* Response speed with peak limiter gain decreased */
00757     peak_limiter_tmp.peakrelease     = PEAKRELEASE_VALUE;    /* Response speed with peak limiter gain increased */
00758     peak_limiter_tmp.peakratio       = VDEC_PEAKRATIO_50 ;    /* Maximum compression rate of peak limiter */
00759     peak_limiter_tmp.maxpeaksamples  = MAXPEAKSAMPLES_VALUE; /* Allowable number of overflowing pixels */
00760 
00761     param.noise_rd_lpf       = &noise_rd_lpf_tmp;    /* Noise reduction LPF */
00762     param.sync_slicer        = &sync_slicer_tmp;     /* Sync slicer */
00763     param.horizontal_afc     = &horizontal_afc_tmp;  /* Horizontal AFC */
00764     param.vcount_down        = &vcount_down_tmp;     /* Vertical countdown */
00765     param.agc                = &agc_tmp;             /* AGC / PGA */
00766     param.peak_limiter       = &peak_limiter_tmp;    /* Peak limiter control */
00767     /* Video decoder driver sync separation */
00768     error = R_VDEC_SyncSeparation(channel, &param);
00769     if (error != VDEC_OK ) {
00770     }
00771 }   /* End of function SyncSep() */
00772 
00773 /**************************************************************************//**
00774  * @brief       Video decoder Y/C separation setup
00775  * @param       [in]color_system    : Color system
00776  * @param       [in]channel         : Channel
00777  * @retval      None
00778  *****************************************************************************/
00779 static void YcSep (const graphics_col_sys_t  color_system, const vdec_channel_t  channel)
00780 {
00781     vdec_error_t                 error;
00782     vdec_yc_separation_t         param;
00783     vdec_over_range_t            over_range_tmp;
00784     vdec_yc_sep_ctrl_t           yc_sep_ctrl_tmp;
00785     const video_recmd_val_t   * RecommendValTbl;
00786 
00787     RecommendValTbl = &RecommendedValue[color_system];
00788 
00789     /* Over-range control */
00790     over_range_tmp.radj_o_level0     = RADJ_O_LEVEL0_VALUE;   /* A/D over-threshold level (between levels 0 and 1) */
00791     over_range_tmp.radj_u_level0     = RADJ_U_LEVEL0_VALUE;   /* A/D under-threshold level (between levels 2 and 3) */
00792     over_range_tmp.radj_o_level1     = RADJ_O_LEVEL1_VALUE;   /* A/D over-threshold level (between levels 1 and 2) */
00793     over_range_tmp.radj_u_level1     = RADJ_U_LEVEL1_VALUE;   /* A/D under-threshold level (between levels 1 and 2) */
00794     over_range_tmp.radj_o_level2     = RADJ_O_LEVEL2_VALUE;   /* A/D over-threshold level (between levels 2 and 3) */
00795     over_range_tmp.radj_u_level2     = RADJ_U_LEVEL2_VALUE;   /* A/D under-threshold level (between levels 0 and 1) */
00796     over_range_tmp.ucmp_sw           = VDEC_ON ;          /* Over-range detection */
00797     over_range_tmp.dcmp_sw           = VDEC_ON ;          /* Under-range detection */
00798     over_range_tmp.hwide_sw          = VDEC_ON ;          /* Horizontal enlargement of over/under-range level */
00799     /* Y/C separation control */
00800     /* Two-dimensional Y/C separation filter select coefficient */
00801     yc_sep_ctrl_tmp.k15              = RecommendValTbl->k15;         /* K15 */
00802     yc_sep_ctrl_tmp.k13              = RecommendValTbl->k13;         /* K13 */
00803     yc_sep_ctrl_tmp.k11              = RecommendValTbl->k11;         /* K11 */
00804     yc_sep_ctrl_tmp.k16              = RecommendValTbl->k16;         /* K16 */
00805     yc_sep_ctrl_tmp.k14              = RecommendValTbl->k14;         /* K14 */
00806     yc_sep_ctrl_tmp.k12              = RecommendValTbl->k12;         /* K12 */
00807     yc_sep_ctrl_tmp.k22a             = RecommendValTbl->k22A;        /* K22A */
00808     yc_sep_ctrl_tmp.k21a             = RecommendValTbl->k21A;        /* K21A */
00809     yc_sep_ctrl_tmp.k22b             = RecommendValTbl->k22B;        /* K22B */
00810     yc_sep_ctrl_tmp.k21b             = RecommendValTbl->k21B;        /* K21B */
00811     yc_sep_ctrl_tmp.k23b             = RecommendValTbl->k23B;        /* K23B */
00812     yc_sep_ctrl_tmp.k23a             = RecommendValTbl->k23A;        /* K23A */
00813     yc_sep_ctrl_tmp.k24              = RecommendValTbl->k24;         /* K24 */
00814     yc_sep_ctrl_tmp.hbpf_narrow      = VDEC_LSTG_BPFSEL_BYPASS ;      /* Latter-stage horizontal BPF select */
00815     yc_sep_ctrl_tmp.hvbpf_narrow     = VDEC_LSTG_BPFSEL_BYPASS ;      /* Latter-stage horizontal/vertical BPF select */
00816     yc_sep_ctrl_tmp.hbpf1_9tap_on    = VDEC_FSTG_BPFSEL_17TAP ;       /* Former-stage horizontal BPF select */
00817     yc_sep_ctrl_tmp.hvbpf1_9tap_on   = VDEC_FSTG_BPFSEL_17TAP ;       /* Former-stage horizontal/vertical BPF select */
00818     yc_sep_ctrl_tmp.hfil_tap_sel     = VDEC_HFIL_TAP_SEL_17TAP ;      /* Horizontal filter and horizontal/vertical filter
00819                                                                        bandwidth switch signal */
00820     yc_sep_ctrl_tmp.det2_on          = RecommendValTbl->det2_on;     /* Two-dimensional filter mixing select */
00821     yc_sep_ctrl_tmp.hsel_mix_y       = RecommendValTbl->hsel_mix_y;  /* Mixing ratio of signal after passing
00822                                                                        horizontal filter to signal after passing
00823                                                                        former-stage horizontal filter */
00824     yc_sep_ctrl_tmp.vsel_mix_y       = RecommendValTbl->vsel_mix_y;  /* Mixing ratio of signal after passing
00825                                                                        vertical filter to signal after passing
00826                                                                        former-stage horizontal/vertical filter */
00827     yc_sep_ctrl_tmp.hvsel_mix_y      = RecommendValTbl->hvsel_mix_y; /* Mixing ratio of signal after passing
00828                                                                        horizontal/vertical filter to signal
00829                                                                        after passing former-stage
00830                                                                        horizontal/vertical filter */
00831     yc_sep_ctrl_tmp.v_y_level        = V_Y_LEVEL_VALUE;              /* Vertical luminance detection level
00832                                                                        for correlation detection filter */
00833     yc_sep_ctrl_tmp.det2_mix_c       = RecommendValTbl->det2_mix_c;  /* Mixing ratio of c signal after passing
00834                                                                        horizontal/vertical adaptive filter
00835                                                                        to signal after passing correlation detection
00836                                                                        filter */
00837     yc_sep_ctrl_tmp.det2_mix_y       = RecommendValTbl->det2_mix_y;  /* Mixing ratio of c signal for y generation after
00838                                                                        passing horizontal/vertical adaptive filter to
00839                                                                        signal after passing correlation */
00840     yc_sep_ctrl_tmp.fil2_mode_2d     = RecommendValTbl->fil2_mode_2d;/* Two-dimensional cascade/TAKE-OFF
00841                                                                        filter mode select */
00842     yc_sep_ctrl_tmp.fil2_narrow_2d   = RecommendValTbl->fil2_narrow_2d;  /* Two-dimensional cascade filter select */
00843 
00844     param.over_range     = &over_range_tmp;  /* Over-range control */
00845     param.yc_sep_ctrl    = &yc_sep_ctrl_tmp; /* Y/C separation control */
00846     param.fil2_2d_wa     = NULL;             /* Two-dimensional cascade broadband
00847                                                (3.58/4.43/SECAM-DR)/TAKE-OFF filter TAP coefficient */
00848     param.fil2_2d_wb     = NULL;             /* Two-dimensional cascade broadband (SECAM-DB) filter TAP coefficient */
00849     param.fil2_2d_na     = NULL;             /* Two-dimensional cascade narrowband
00850                                                (3.58/4.43/SECAM-DR) filter TAP coefficient */
00851     param.fil2_2d_nb     = NULL;             /* Two-dimensional cascade narrowband (SECAMDB) filter TAP coefficient */
00852     if ((color_system == GRPH_COL_SYS_NTSC_358 ) ||
00853             (color_system == GRPH_COL_SYS_NTSC_443 ) ||
00854             (color_system == GRPH_COL_SYS_NTSC_443_60 )) {
00855         param.fil2_2d_wa  = &wana_ntsc;
00856         param.fil2_2d_na  = &wana_ntsc;
00857     } else if (color_system == GRPH_COL_SYS_SECAM ) {
00858         param.fil2_2d_wa  = &wa_secam;
00859         param.fil2_2d_wb  = &wb_secam;
00860         param.fil2_2d_na  = &na_secam;
00861         param.fil2_2d_nb  = &nb_secam;
00862     } else {
00863         /* Do nothing */
00864     }
00865     /* Video decoder driver y/c separation */
00866     error = R_VDEC_YcSeparation(channel, &param);
00867     if (error != VDEC_OK ) {
00868     }
00869 }   /* End of function YcSep() */
00870 
00871 /**************************************************************************//**
00872  * @brief       Video decoder chroma decoding setup
00873  * @param       [in]color_system    : Color system
00874  * @param       [in]channel         : Channel
00875  * @retval      None
00876  *****************************************************************************/
00877 static void ChromaDec (const graphics_col_sys_t  color_system, const vdec_channel_t  channel)
00878 {
00879     vdec_error_t                 error;
00880     vdec_chroma_decoding_t       param;
00881     vdec_chrmdec_ctrl_t          chrmdec_ctrl_tmp;
00882     vdec_burst_lock_t            burst_lock_tmp;
00883     vdec_acc_t                   acc_tmp;
00884     const video_recmd_val_t   * RecommendValTbl;
00885 
00886     RecommendValTbl = &RecommendedValue[color_system];
00887 
00888     /* Chroma decoding control */
00889     chrmdec_ctrl_tmp.defaultsys  = RecommendValTbl->defaultsys;  /* Default color system */
00890     chrmdec_ctrl_tmp.nontsc358_  = RecommendValTbl->nontsc358_;  /* NTSC-M detection control */
00891     chrmdec_ctrl_tmp.nontsc443_  = RecommendValTbl->nontsc443_;  /* NTSC-4.43 detection control */
00892     chrmdec_ctrl_tmp.nopalm_     = RecommendValTbl->nopalm_;     /* PAL-M detection control */
00893     chrmdec_ctrl_tmp.nopaln_     = RecommendValTbl->nopaln_;     /* PAL-N detection control */
00894     chrmdec_ctrl_tmp.nopal443_   = RecommendValTbl->nopal443_;   /* PAL-B, G, H, I, D detection control */
00895     chrmdec_ctrl_tmp.nosecam_    = RecommendValTbl->nosecam_;    /* SECAM detection control */
00896     chrmdec_ctrl_tmp.lumadelay   = LUMADELAY_VALUE;              /* Luminance signal delay adjustment */
00897     chrmdec_ctrl_tmp.chromalpf   = VDEC_OFF ;                     /* LPF for demodulated chroma */
00898     chrmdec_ctrl_tmp.demodmode   = VDEC_DEMOD_MD_PAL ;            /* Averaging processing for pre-demodulated line */
00899     /* Burst lock */
00900     burst_lock_tmp.lockrange     = VDEC_LOCK_RANGE_800HZ ;/* Burst lock PLL lock range */
00901     burst_lock_tmp.loopgain      = LOOPGAIN_VALUE;       /* Burst lock PLL loop gain */
00902     burst_lock_tmp.locklimit     = LOCKLIMIT_VALUE;      /* Level for burst lock PLL to re-search free-run frequency */
00903     burst_lock_tmp.bgpcheck      = BGPCHECK_VALUE;       /* burst gate pulse position check */
00904     burst_lock_tmp.bgpwidth      = BGPWIDTH_VALUE;       /* burst gate pulse width */
00905     burst_lock_tmp.bgpstart      = BGPSTART_VALUE;       /* burst gate pulse start position */
00906     /* ACC / color killer */
00907     acc_tmp.accmode          = VDEC_ACC_MD_AUTO ;         /* ACC operating mode */
00908     acc_tmp.accmaxgain       = VDEC_ACC_MAX_GAIN_6 ;      /* Maximum ACC Gain */
00909     acc_tmp.acclevel         = RecommendValTbl->acclevel;/* ACC reference color burst amplitude */
00910     acc_tmp.chromasubgain    = VDEC_CHRM_SB_GAIN_1 ;      /* Chroma manual gain (sub) */
00911     acc_tmp.chromamaingain   = CHROMAMAINGAIN_VALUE;     /* Chroma manual gain (main) */
00912     acc_tmp.accresponse      = ACCRESPONSE_VALUE;        /* ACC response speed */
00913     acc_tmp.accprecis        = ACCPRECIS_VALUE;          /* ACC gain adjustment accuracy */
00914     acc_tmp.killermode       = VDEC_OFF ;                 /* Forced color killer mode ON/OFF */
00915     acc_tmp.killerlevel      = KILLERLEVEL_VALUE;        /* Color killer operation start point */
00916     acc_tmp.killeroffset     = KILLEROFFSET_VALUE;       /* The offset level to turn off the color killer */
00917 
00918     param.chrmdec_ctrl   = &chrmdec_ctrl_tmp;    /* Chroma decoding control */
00919     param.burst_lock     = &burst_lock_tmp;      /* Burst lock */
00920     param.acc            = &acc_tmp;             /* ACC/color killer */
00921     param.tint_ry        = NULL;                 /* TINT/R-Y axis correction (only valid for NTSC/PAL) */
00922     /* Video decoder driver chroma decoding */
00923     error = R_VDEC_ChromaDecoding(channel, &param);
00924     if (error != VDEC_OK ) {
00925     }
00926 }   /* End of function ChromaDec() */
00927 
00928 /**************************************************************************//**
00929  * @brief       Video decoder digital clamp setup
00930  * @param       [in]channel         : Channel
00931  * @retval      None
00932  *****************************************************************************/
00933 static void DigitalClamp (const vdec_channel_t  channel)
00934 {
00935     vdec_error_t             error;
00936     vdec_degital_clamp_t     param;
00937     vdec_pedestal_clamp_t    pedestal_clamp_tmp;
00938     vdec_center_clamp_t      center_clamp_tmp;
00939     vdec_noise_det_t         noise_det_tmp;
00940 
00941     /* Pedestal clamp */
00942     pedestal_clamp_tmp.dcpmode_y     = VDEC_DCPMODE_AUTO ;    /* Clamp level setting mode */
00943     pedestal_clamp_tmp.blanklevel_y  = BLANKLEVEL_Y_VALUE;   /* Clamp offset level (Y signal) */
00944     pedestal_clamp_tmp.dcppos_y      = DCPPOS_Y_VALUE;   /* Digital clamp pulse horizontal start position (Y signal) */
00945     /* Center clamp */
00946     center_clamp_tmp.dcpmode_c       = VDEC_DCPMODE_MANUAL ;  /* Clamp level setting mode */
00947     center_clamp_tmp.blanklevel_cb   = BLANKLEVEL_CB_VALUE;  /* Clamp offset level (Cb signal) */
00948     center_clamp_tmp.blanklevel_cr   = BLANKLEVEL_CR_VALUE;  /* Clamp offset level (Cr signal) */
00949     center_clamp_tmp.dcppos_c        = DCPPOS_C_VALUE;       /* Digital clamp pulse
00950                                                                horizontal start position (Cb/Cr signal) */
00951     /* Noise detection */
00952     noise_det_tmp.acfinput       = VDEC_ACFINPUT_Y ;  /* Video signal for autocorrelation function */
00953     noise_det_tmp.acflagtime     = ACFLAGTIME_VALUE; /* Delay time for autocorrelation function calculation */
00954     noise_det_tmp.acffilter      = ACFFILTER_VALUE;  /* Smoothing parameter of autocorrelation function data */
00955 
00956     param.dcpcheck           = VDEC_OFF ;             /* Digital clamp pulse position check */
00957     param.dcpresponse        = DCPRESPONSE_VALUE;    /* Digital clamp response speed */
00958     param.dcpstart           = DCPSTART_VALUE;       /* Digital clamp start line (in 1-line units) */
00959     param.dcpend             = DCPEND_VALUE;         /* Digital clamp end line (in 1-line units) */
00960     param.dcpwidth           = DCPWIDTH_VALUE;       /* Digital clamp pulse width */
00961     param.pedestal_clamp     = &pedestal_clamp_tmp;  /* Pedestal clamp */
00962     param.center_clamp       = &center_clamp_tmp;    /* Center clamp */
00963     param.noise_det          = &noise_det_tmp;       /* Noise detection */
00964     /* Video decoder driver digital clamp */
00965     error = R_VDEC_DigitalClamp(channel, &param);
00966     if (error != VDEC_OK ) {
00967     }
00968 }   /* End of function DigitalClamp() */
00969 
00970 /**************************************************************************//**
00971  * @brief       Video decoder output adjustment setup
00972  * @param       [in]channel         : Channel
00973  * @retval      None
00974  *****************************************************************************/
00975 static void Output (const vdec_channel_t  channel)
00976 {
00977     vdec_error_t         error;
00978     vdec_output_t        param;
00979 
00980     param.y_gain2    = Y_GAIN2_VALUE;        /* Y signal gain coefficient */
00981     param.cb_gain2   = CB_GAIN2_VALUE;       /* Cb signal gain coefficient */
00982     param.cr_gain2   = CR_GAIN2_VALUE;       /* Cr signal gain coefficient */
00983     /* Video decoder driver output */
00984     error = R_VDEC_Output(channel, &param);
00985     if (error != VDEC_OK ) {
00986     }
00987 }   /* End of function Output() */