Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of gr-peach-opencv-project by
video_decoder.c
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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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 = ¢er_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, ¶m); 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, ¶m); 00985 if (error != VDEC_OK ) { 00986 } 00987 } /* End of function Output() */
Generated on Tue Jul 12 2022 15:17:32 by
1.7.2
