Video library for GR-PEACH
Dependents: Trace_Program2 GR-PEACH_Camera_in_barcode GR-PEACH_LCD_sample GR-PEACH_LCD_4_3inch_sample ... more
r_vdc5.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 r_vdc5.c 00025 * @version 1.00 00026 * $Rev: 199 $ 00027 * $Date:: 2014-05-23 16:33:52 +0900#$ 00028 * @brief VDC5 driver API function 00029 ******************************************************************************/ 00030 00031 /****************************************************************************** 00032 Includes <System Includes> , "Project Includes" 00033 ******************************************************************************/ 00034 #include "r_vdc5.h" 00035 #include "r_vdc5_user.h" 00036 #include "r_vdc5_register.h" 00037 #include "r_vdc5_shared_param.h" 00038 #include "r_vdc5_check_parameter.h" 00039 00040 00041 /****************************************************************************** 00042 Macro definitions 00043 ******************************************************************************/ 00044 00045 /****************************************************************************** 00046 Typedef definitions 00047 ******************************************************************************/ 00048 00049 /****************************************************************************** 00050 Private global variables and functions 00051 ******************************************************************************/ 00052 static vdc5_scaling_type_t ConvertRwProcId2SclId(const vdc5_layer_id_t layer_id); 00053 static vdc5_graphics_type_t ConvertRwProcId2GrId(const vdc5_layer_id_t layer_id); 00054 00055 00056 /**************************************************************************//** 00057 * @brief VDC5 driver initialization 00058 * 00059 * Description:<br> 00060 * This function performs the following processing: 00061 * - Initializes the VDC5 driver's internal variables. 00062 * - Calls the user-defined function specified in init_func. 00063 * - Sets up and enables the VDC5's panel clock. 00064 * - Sets up and enables the LVDS only if LVDS is used. 00065 * - Disables all the VDC5 interrupts. 00066 * @param[in] ch : Channel 00067 * @param[in] param : Initialization parameter 00068 * @param[in] init_func : Pointer to a user-defined function 00069 * @param[in] user_num : User defined number 00070 * @retval Error code 00071 *****************************************************************************/ 00072 vdc5_error_t R_VDC5_Initialize ( 00073 const vdc5_channel_t ch, 00074 const vdc5_init_t * const param, 00075 void (* const init_func)(uint32_t), 00076 const uint32_t user_num) 00077 { 00078 vdc5_error_t ret; 00079 vdc5_resource_state_t rsrc_state; 00080 00081 ret = VDC5_OK ; 00082 #ifdef R_VDC5_CHECK_PARAMETERS 00083 ret = VDC5_InitializeCheckPrm(ch, param); 00084 #endif /* R_VDC5_CHECK_PARAMETERS */ 00085 if (ret == VDC5_OK ) { 00086 VDC5_ShrdPrmInit(ch); 00087 /* Resource checks */ 00088 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LVDS_CLK ); 00089 if (rsrc_state != VDC5_RESOURCE_ST_INVALID ) { 00090 /* The LVDS PLL clock has been already set. */ 00091 if (param->lvds != NULL) { 00092 ret = VDC5_ERR_RESOURCE_LVDS_CLK ; 00093 } 00094 } 00095 } 00096 if (ret == VDC5_OK ) { 00097 VDC5_ShrdPrmSetInitParam(ch, param); 00098 00099 /* Callback function */ 00100 if (init_func != 0) { 00101 init_func(user_num); 00102 } 00103 00104 VDC5_Initialize(ch, param); 00105 00106 /* Disable all VDC5 interrupts */ 00107 VDC5_Int_Disable(ch); 00108 00109 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_PANEL_CLK , VDC5_RESOURCE_ST_VALID ); 00110 if (param->lvds != NULL) { 00111 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_LVDS_CLK , VDC5_RESOURCE_ST_VALID ); 00112 } 00113 } 00114 return ret; 00115 } /* End of function R_VDC5_Initialize() */ 00116 00117 /**************************************************************************//** 00118 * @brief VDC5 driver termination 00119 * 00120 * Description:<br> 00121 * This function performs the following processing: 00122 * - Disables all the VDC5 interrupts. 00123 * - Disables the VDC5 panel clock. 00124 * - Disables the LVDS if one is used and becomes unnecessary as the result of calling this function. 00125 * - Calls the user-defined function specified in quit_func. 00126 * @param[in] ch : Channel 00127 * @param[in] quit_func : Pointer to a user-defined function 00128 * @param[in] user_num : User defined number 00129 * @retval Error code 00130 *****************************************************************************/ 00131 vdc5_error_t R_VDC5_Terminate (const vdc5_channel_t ch, void (* const quit_func)(uint32_t), const uint32_t user_num) 00132 { 00133 vdc5_error_t ret; 00134 vdc5_onoff_t lvds_ref; 00135 00136 ret = VDC5_OK ; 00137 #ifdef R_VDC5_CHECK_PARAMETERS 00138 ret = VDC5_TerminateCheckPrm(ch); 00139 #endif /* R_VDC5_CHECK_PARAMETERS */ 00140 if (ret == VDC5_OK ) { 00141 VDC5_ShrdPrmSetTerminate(ch); 00142 00143 /* Disable all VDC5 interrupts */ 00144 VDC5_Int_Disable(ch); 00145 00146 VDC5_Terminate(ch); 00147 00148 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_PANEL_CLK , VDC5_RESOURCE_ST_INVALID ); 00149 00150 lvds_ref = VDC5_ShrdPrmGetLvdsClkRef(); 00151 if (lvds_ref == VDC5_OFF ) { /* LVDS PLL clock is not referred. */ 00152 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_LVDS_CLK , VDC5_RESOURCE_ST_INVALID ); 00153 } 00154 00155 /* Callback function */ 00156 if (quit_func != 0) { 00157 quit_func(user_num); 00158 } 00159 } 00160 return ret; 00161 } /* End of function R_VDC5_Terminate() */ 00162 00163 /**************************************************************************//** 00164 * @brief Video input setup 00165 * 00166 * Description:<br> 00167 * This function performs the following processing: 00168 * - Selects the video input. 00169 * - Sets up the phase timing of the input signals. 00170 * - Performs delay control on the sync signal for the video inputs. 00171 * - Sets up the parameters for the external input video signals only when they are used. 00172 * @param[in] ch : Channel 00173 * @param[in] param : Video input setup parameter 00174 * @retval Error code 00175 *****************************************************************************/ 00176 vdc5_error_t R_VDC5_VideoInput (const vdc5_channel_t ch, const vdc5_input_t * const param) 00177 { 00178 vdc5_error_t ret; 00179 00180 ret = VDC5_OK ; 00181 #ifdef R_VDC5_CHECK_PARAMETERS 00182 ret = VDC5_VideoInputCheckPrm(ch, param); 00183 #endif /* R_VDC5_CHECK_PARAMETERS */ 00184 if (ret == VDC5_OK ) { 00185 VDC5_ShrdPrmSetInputParam(ch, param); 00186 00187 /* Setting VDC5 registers */ 00188 VDC5_VideoInput(ch, param); 00189 00190 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_VIDEO_IN , VDC5_RESOURCE_ST_VALID ); 00191 } 00192 return ret; 00193 } /* End of function R_VDC5_VideoInput() */ 00194 00195 /**************************************************************************//** 00196 * @brief Sync control setup 00197 * 00198 * Description:<br> 00199 * This function performs the following processing: 00200 * - Selects the vertical sync signal. 00201 * - Sets up the period of the sync signal. 00202 * - Sets up the delay of the vertical sync signal. 00203 * - Sets up the full-screen enable signal. 00204 * - Sets up the compensation for the vertical sync signal. 00205 * @param[in] ch : Channel 00206 * @param[in] param : Sync control parameter 00207 * @retval Error code 00208 *****************************************************************************/ 00209 vdc5_error_t R_VDC5_SyncControl (const vdc5_channel_t ch, const vdc5_sync_ctrl_t * const param) 00210 { 00211 vdc5_error_t ret; 00212 vdc5_resource_state_t rsrc_state; 00213 00214 ret = VDC5_OK ; 00215 #ifdef R_VDC5_CHECK_PARAMETERS 00216 ret = VDC5_SyncControlCheckPrm(ch, param); 00217 #endif /* R_VDC5_CHECK_PARAMETERS */ 00218 if (ret == VDC5_OK ) { 00219 /* Resource checks */ 00220 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_PANEL_CLK ); 00221 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00222 ret = VDC5_ERR_RESOURCE_CLK ; 00223 } 00224 } 00225 if (ret == VDC5_OK ) { 00226 if (param->res_vs_sel == VDC5_OFF ) { 00227 /* External input Vsync signal is selected. */ 00228 if (param->res_vs_in_sel == VDC5_RES_VS_IN_SEL_SC0 ) { 00229 /* Scaler 0 */ 00230 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VIDEO_IN ); 00231 } else { 00232 /* Scaler 1 */ 00233 rsrc_state = VDC5_ShrdPrmGetResource( 00234 ((ch == VDC5_CHANNEL_0 ) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0 ), 00235 VDC5_RESOURCE_VIDEO_IN ); 00236 } 00237 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00238 ret = VDC5_ERR_RESOURCE_INPUT ; 00239 } 00240 } 00241 } 00242 if (ret == VDC5_OK ) { 00243 VDC5_ShrdPrmSetSyncParam(ch, param); 00244 00245 /* Setting VDC5 registers */ 00246 VDC5_SyncControl(ch, param); 00247 00248 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_VSYNC , VDC5_RESOURCE_ST_VALID ); 00249 } 00250 return ret; 00251 } /* End of function R_VDC5_SyncControl() */ 00252 00253 /**************************************************************************//** 00254 * @brief Display output setup 00255 * 00256 * Description:<br> 00257 * This function performs the following processing: 00258 * - Sets up the timing signals for driving the LCD panel. 00259 * - Sets up the phase, data sequence, and format of the LCD panel output data. 00260 * - Sets up the background color. 00261 * @param[in] ch : Channel 00262 * @param[in] param : Display output configuration parameter 00263 * @retval Error code 00264 *****************************************************************************/ 00265 vdc5_error_t R_VDC5_DisplayOutput (const vdc5_channel_t ch, const vdc5_output_t * const param) 00266 { 00267 vdc5_error_t ret; 00268 vdc5_resource_state_t rsrc_state; 00269 00270 ret = VDC5_OK ; 00271 #ifdef R_VDC5_CHECK_PARAMETERS 00272 ret = VDC5_DisplayOutputCheckPrm(ch, param); 00273 #endif /* R_VDC5_CHECK_PARAMETERS */ 00274 if (ret == VDC5_OK ) { 00275 /* Resource checks */ 00276 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_PANEL_CLK ); 00277 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00278 ret = VDC5_ERR_RESOURCE_CLK ; 00279 } else { 00280 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VSYNC ); 00281 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00282 ret = VDC5_ERR_RESOURCE_VSYNC ; 00283 } 00284 } 00285 } 00286 if (ret == VDC5_OK ) { 00287 VDC5_ShrdPrmSetOutputParam(ch, param); 00288 00289 /* Setting VDC5 registers */ 00290 VDC5_DisplayOutput(ch, param); 00291 00292 VDC5_ShrdPrmSetResource(ch, VDC5_RESOURCE_LCD_PANEL , VDC5_RESOURCE_ST_VALID ); 00293 } 00294 return ret; 00295 } /* End of function R_VDC5_DisplayOutput() */ 00296 00297 /**************************************************************************//** 00298 * @brief Interrupt callback setup 00299 * 00300 * Description:<br> 00301 * This function performs the following processing: 00302 * - Enables the interrupt when the pointer to the corresponding interrupt callback function is specified. 00303 * - Registers the specified interrupt callback function. 00304 * - Disables the interrupt when the pointer to the corresponding interrupt callback function is not 00305 * specified. 00306 * @param[in] ch : Channel 00307 * @param[in] param : Interrupt callback setup parameter 00308 * @retval Error code 00309 *****************************************************************************/ 00310 vdc5_error_t R_VDC5_CallbackISR (const vdc5_channel_t ch, const vdc5_int_t * const param) 00311 { 00312 vdc5_error_t ret; 00313 vdc5_resource_state_t rsrc_state; 00314 00315 ret = VDC5_OK ; 00316 #ifdef R_VDC5_CHECK_PARAMETERS 00317 ret = VDC5_CallbackISRCheckPrm(ch, param); 00318 #endif /* R_VDC5_CHECK_PARAMETERS */ 00319 if (ret == VDC5_OK ) { 00320 /* Resource checks */ 00321 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_PANEL_CLK ); 00322 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00323 ret = VDC5_ERR_RESOURCE_CLK ; 00324 } else { 00325 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VSYNC ); 00326 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00327 ret = VDC5_ERR_RESOURCE_VSYNC ; 00328 } 00329 } 00330 } 00331 if (ret == VDC5_OK ) { 00332 /* Setting VDC5 registers */ 00333 VDC5_Int_SetInterrupt(ch, param); 00334 } 00335 return ret; 00336 } /* End of function R_VDC5_CallbackISR() */ 00337 00338 /**************************************************************************//** 00339 * @brief Data write control processing 00340 * 00341 * Description:<br> 00342 * This function performs the following processing: 00343 * - Sets up the input image area to be captured. 00344 * - Makes input image scale-down/rotation control settings (layers 0 and 1 only). 00345 * - Makes frame buffer write control settings. 00346 * @param[in] ch : Channel 00347 * @param[in] layer_id : Layer ID 00348 * - VDC5_LAYER_ID_0_WR 00349 * - VDC5_LAYER_ID_1_WR 00350 * - VDC5_LAYER_ID_OIR_WR 00351 * @param[in] param : Data write control parameter 00352 * @retval Error code 00353 *****************************************************************************/ 00354 vdc5_error_t R_VDC5_WriteDataControl ( 00355 const vdc5_channel_t ch, 00356 const vdc5_layer_id_t layer_id, 00357 const vdc5_write_t * const param) 00358 { 00359 vdc5_error_t ret; 00360 vdc5_scaling_type_t scaling_id; 00361 vdc5_resource_state_t rsrc_state; 00362 00363 scaling_id = ConvertRwProcId2SclId(layer_id); 00364 00365 ret = VDC5_OK ; 00366 #ifdef R_VDC5_CHECK_PARAMETERS 00367 ret = VDC5_WriteDataControlCheckPrm(ch, layer_id, param); 00368 #endif /* R_VDC5_CHECK_PARAMETERS */ 00369 if (ret == VDC5_OK ) { 00370 /* Resource checks */ 00371 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id); 00372 if (rsrc_state != VDC5_RESOURCE_ST_INVALID ) { 00373 /* The specified layer is already used. */ 00374 ret = VDC5_ERR_RESOURCE_LAYER ; 00375 } else { 00376 if (layer_id == VDC5_LAYER_ID_0_WR ) { 00377 /* Layer 0 */ 00378 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VIDEO_IN ); 00379 } else if (layer_id == VDC5_LAYER_ID_1_WR ) { 00380 /* Layer 1 */ 00381 rsrc_state = VDC5_ShrdPrmGetResource( 00382 ((ch == VDC5_CHANNEL_0 ) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0 ), 00383 VDC5_RESOURCE_VIDEO_IN ); 00384 } else { 00385 /* Layer OIR */ 00386 rsrc_state = VDC5_RESOURCE_ST_VALID ; 00387 } 00388 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00389 ret = VDC5_ERR_RESOURCE_INPUT ; 00390 } 00391 } 00392 } 00393 if (ret == VDC5_OK ) { 00394 VDC5_ShrdPrmSetWriteParam(ch, scaling_id, param); 00395 00396 /* Setting VDC5 registers */ 00397 VDC5_WriteDataControl(ch, scaling_id, param); 00398 00399 VDC5_ShrdPrmSetLayerResource(ch, layer_id, VDC5_RESOURCE_ST_VALID ); 00400 } 00401 return ret; 00402 } /* End of function R_VDC5_WriteDataControl() */ 00403 00404 /**************************************************************************//** 00405 * @brief Data write change processing 00406 * 00407 * Description:<br> 00408 * This function performs the following processing: 00409 * - Changes the input image area to be captured. 00410 * - Makes changes with respect to scaling-down/rotation control of the input image (layers 0 and 1 only). 00411 * @param[in] ch : Channel 00412 * @param[in] layer_id : Layer ID 00413 * - VDC5_LAYER_ID_0_WR 00414 * - VDC5_LAYER_ID_1_WR 00415 * - VDC5_LAYER_ID_OIR_WR 00416 * @param[in] param : Data write change parameter 00417 * @retval Error code 00418 *****************************************************************************/ 00419 vdc5_error_t R_VDC5_ChangeWriteProcess ( 00420 const vdc5_channel_t ch, 00421 const vdc5_layer_id_t layer_id, 00422 const vdc5_write_chg_t * const param) 00423 { 00424 vdc5_error_t ret; 00425 vdc5_scaling_type_t scaling_id; 00426 vdc5_resource_state_t rsrc_state; 00427 00428 scaling_id = ConvertRwProcId2SclId(layer_id); 00429 00430 ret = VDC5_OK ; 00431 #ifdef R_VDC5_CHECK_PARAMETERS 00432 ret = VDC5_ChangeWriteProcessCheckPrm(ch, layer_id, param); 00433 #endif /* R_VDC5_CHECK_PARAMETERS */ 00434 if (ret == VDC5_OK ) { 00435 /* Resource checks */ 00436 rsrc_state = VDC5_ShrdPrmGetRwProcEnabled(ch, layer_id); 00437 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00438 /* The specified layer is invalid. */ 00439 ret = VDC5_ERR_RESOURCE_LAYER ; 00440 } 00441 } 00442 if (ret == VDC5_OK ) { 00443 VDC5_ShrdPrmSetChgWriteParam(ch, scaling_id, param); 00444 00445 /* Setting VDC5 registers */ 00446 VDC5_ChangeWriteProcess(ch, scaling_id, param); 00447 } 00448 return ret; 00449 } /* End of function R_VDC5_ChangeWriteProcess() */ 00450 00451 /**************************************************************************//** 00452 * @brief Data read control processing 00453 * 00454 * Description:<br> 00455 * This function performs the following processing: 00456 * - Sets up the display area for graphics images. 00457 * - Makes image scale-up control settings (layers 0 and 1 only). 00458 * - Makes frame buffer read control settings. 00459 * @param[in] ch : Channel 00460 * @param[in] layer_id : Layer ID 00461 * - VDC5_LAYER_ID_0_RD 00462 * - VDC5_LAYER_ID_1_RD 00463 * - VDC5_LAYER_ID_2_RD 00464 * - VDC5_LAYER_ID_3_RD 00465 * - VDC5_LAYER_ID_OIR_RD 00466 * @param[in] param : Data read control parameter 00467 * @retval Error code 00468 *****************************************************************************/ 00469 vdc5_error_t R_VDC5_ReadDataControl ( 00470 const vdc5_channel_t ch, 00471 const vdc5_layer_id_t layer_id, 00472 const vdc5_read_t * const param) 00473 { 00474 vdc5_error_t ret; 00475 vdc5_graphics_type_t graphics_id; 00476 vdc5_resource_state_t rsrc_state; 00477 00478 graphics_id = ConvertRwProcId2GrId(layer_id); 00479 00480 ret = VDC5_OK ; 00481 #ifdef R_VDC5_CHECK_PARAMETERS 00482 ret = VDC5_ReadDataControlCheckPrm(ch, layer_id, graphics_id, param); 00483 #endif /* R_VDC5_CHECK_PARAMETERS */ 00484 if (ret == VDC5_OK ) { 00485 /* Resource checks */ 00486 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id); 00487 if (rsrc_state != VDC5_RESOURCE_ST_INVALID ) { 00488 /* The specified layer is already used. */ 00489 ret = VDC5_ERR_RESOURCE_LAYER ; 00490 } 00491 } 00492 if (ret == VDC5_OK ) { 00493 VDC5_ShrdPrmSetReadParam(ch, graphics_id, param); 00494 00495 /* Setting VDC5 registers */ 00496 VDC5_ReadDataControl(ch, graphics_id, param); 00497 00498 VDC5_ShrdPrmSetLayerResource(ch, layer_id, VDC5_RESOURCE_ST_VALID ); 00499 } 00500 return ret; 00501 } /* End of function R_VDC5_ReadDataControl() */ 00502 00503 /**************************************************************************//** 00504 * @brief Data read change processing 00505 * 00506 * Description:<br> 00507 * This function performs the following processing: 00508 * - Changes the frame buffer base address. 00509 * - Changes the frame buffer read size (image scale-up control) (layers 0 and 1 only). 00510 * - Changes the display area for graphics images. 00511 * - Changes the graphics display mode. 00512 * @param[in] ch : Channel 00513 * @param[in] layer_id : Layer ID 00514 * - VDC5_LAYER_ID_0_RD 00515 * - VDC5_LAYER_ID_1_RD 00516 * - VDC5_LAYER_ID_2_RD 00517 * - VDC5_LAYER_ID_3_RD 00518 * - VDC5_LAYER_ID_OIR_RD 00519 * @param[in] param : Data read change parameter 00520 * @retval Error code 00521 *****************************************************************************/ 00522 vdc5_error_t R_VDC5_ChangeReadProcess ( 00523 const vdc5_channel_t ch, 00524 const vdc5_layer_id_t layer_id, 00525 const vdc5_read_chg_t * const param) 00526 { 00527 vdc5_error_t ret; 00528 vdc5_graphics_type_t graphics_id; 00529 vdc5_resource_state_t rsrc_state; 00530 00531 graphics_id = ConvertRwProcId2GrId(layer_id); 00532 00533 ret = VDC5_OK ; 00534 #ifdef R_VDC5_CHECK_PARAMETERS 00535 ret = VDC5_ChangeReadProcessCheckPrm(ch, layer_id, param); 00536 #endif /* R_VDC5_CHECK_PARAMETERS */ 00537 if (ret == VDC5_OK ) { 00538 /* Resource checks */ 00539 rsrc_state = VDC5_ShrdPrmGetRwProcEnabled(ch, layer_id); 00540 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00541 /* The specified layer is invalid. */ 00542 ret = VDC5_ERR_RESOURCE_LAYER ; 00543 } 00544 } 00545 if (ret == VDC5_OK ) { 00546 VDC5_ShrdPrmSetChgReadParam(ch, graphics_id, param); 00547 00548 /* Setting VDC5 registers */ 00549 VDC5_ChangeReadProcess(ch, graphics_id, param); 00550 } 00551 return ret; 00552 } /* End of function R_VDC5_ChangeReadProcess() */ 00553 00554 /**************************************************************************//** 00555 * @brief Data write/read start processing 00556 * 00557 * Description:<br> 00558 * This function performs layer start processing. If the layer ID specified in layer_id 00559 * is VDC5_LAYER_ID_ALL, the function starts all the layers that are in the stopped state 00560 * and also enabled. If the layer ID is not VDC5_LAYER_ID_ALL, the function starts only 00561 * the specified layer.<br> 00562 * When performing start processing for write, the function starts a write to the frame buffer. 00563 * When performing start processing for read, the function starts a read from the frame buffer 00564 * and sets the graphics display mode to the specified values for each layer. 00565 * @param[in] ch : Channel 00566 * @param[in] layer_id : Layer ID 00567 * @param[in] param : Data write/read start parameter 00568 * @retval Error code 00569 *****************************************************************************/ 00570 vdc5_error_t R_VDC5_StartProcess ( 00571 const vdc5_channel_t ch, 00572 const vdc5_layer_id_t layer_id, 00573 const vdc5_start_t * const param) 00574 { 00575 vdc5_error_t ret; 00576 vdc5_resource_state_t rsrc_state; 00577 00578 ret = VDC5_OK ; 00579 #ifdef R_VDC5_CHECK_PARAMETERS 00580 ret = VDC5_StartProcessCheckPrm(ch, layer_id, param); 00581 #endif /* R_VDC5_CHECK_PARAMETERS */ 00582 if (ret == VDC5_OK ) { 00583 /* Resource checks */ 00584 if (layer_id != VDC5_LAYER_ID_ALL ) { 00585 rsrc_state = VDC5_ShrdPrmGetRwProcReady(ch, layer_id); 00586 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00587 /* The specified layer is invalid. */ 00588 ret = VDC5_ERR_RESOURCE_LAYER ; 00589 } 00590 } 00591 } 00592 if (ret == VDC5_OK ) { 00593 /* Setting VDC5 registers */ 00594 VDC5_StartProcess(ch, layer_id, param); 00595 } 00596 return ret; 00597 } /* End of function R_VDC5_StartProcess() */ 00598 00599 /**************************************************************************//** 00600 * @brief Data write/read stop processing 00601 * 00602 * Description:<br> 00603 * This function performs layer stop processing. If the layer ID specified in layer_id is 00604 * VDC5_LAYER_ID_ALL, the function stops all the layers that are enabled and running. 00605 * If the layer ID is not VDC5_LAYER_ID_ALL, the function stops only the specified layer.<br> 00606 * When performing stop processing for write, the function stops the write to the frame buffer. 00607 * When performing stop processing for read, the function stops the read from the frame buffer 00608 * and resets the graphics display mode to the initial values for each of the layers. 00609 * @param[in] ch : Channel 00610 * @param[in] layer_id : Layer ID 00611 * @retval Error code 00612 *****************************************************************************/ 00613 vdc5_error_t R_VDC5_StopProcess (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id) 00614 { 00615 vdc5_error_t ret; 00616 vdc5_resource_state_t rsrc_state; 00617 00618 ret = VDC5_OK ; 00619 #ifdef R_VDC5_CHECK_PARAMETERS 00620 ret = VDC5_StopProcessCheckPrm(ch, layer_id); 00621 #endif /* R_VDC5_CHECK_PARAMETERS */ 00622 if (ret == VDC5_OK ) { 00623 /* Resource checks */ 00624 if (layer_id != VDC5_LAYER_ID_ALL ) { 00625 rsrc_state = VDC5_ShrdPrmGetRwProcEnabled(ch, layer_id); 00626 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00627 /* The specified layer is invalid. */ 00628 ret = VDC5_ERR_RESOURCE_LAYER ; 00629 } 00630 } 00631 } 00632 if (ret == VDC5_OK ) { 00633 /* Setting VDC5 registers */ 00634 VDC5_StopProcess(ch, layer_id); 00635 } 00636 return ret; 00637 } /* End of function R_VDC5_StopSurface() */ 00638 00639 /**************************************************************************//** 00640 * @brief Data write/read control release processing 00641 * 00642 * Description:<br> 00643 * This function performs the following processing: 00644 * - Disables the specified layer. 00645 * - Initializes the cascaded connection settings (layer 1 read processing only). 00646 * - Initializes the VIN synthesizer settings (layer 0 and 1 read processing only). 00647 * @param[in] ch : Channel 00648 * @param[in] layer_id : Layer ID 00649 * @retval Error code 00650 *****************************************************************************/ 00651 vdc5_error_t R_VDC5_ReleaseDataControl (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id) 00652 { 00653 vdc5_error_t ret; 00654 vdc5_resource_state_t rsrc_state; 00655 00656 ret = VDC5_OK ; 00657 #ifdef R_VDC5_CHECK_PARAMETERS 00658 ret = VDC5_ReleaseDataControlCheckPrm(ch, layer_id); 00659 #endif /* R_VDC5_CHECK_PARAMETERS */ 00660 if (ret == VDC5_OK ) { 00661 /* Resource checks */ 00662 if (layer_id != VDC5_LAYER_ID_ALL ) { 00663 rsrc_state = VDC5_ShrdPrmGetRwProcReady(ch, layer_id); 00664 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00665 /* The specified layer is invalid. */ 00666 ret = VDC5_ERR_RESOURCE_LAYER ; 00667 } 00668 } 00669 } 00670 if (ret == VDC5_OK ) { 00671 /* Setting VDC5 registers */ 00672 VDC5_ReleaseDataControl(ch, layer_id); 00673 00674 VDC5_ShrdPrmSetLayerResource(ch, layer_id, VDC5_RESOURCE_ST_INVALID ); 00675 } 00676 return ret; 00677 } /* End of function R_VDC5_ReleaseDataControl() */ 00678 00679 /**************************************************************************//** 00680 * @brief Noise reduction setup 00681 * 00682 * Description:<br> 00683 * This function performs the following processing: 00684 * - Turns on and off noise reduction processing. 00685 * - Sets up the noise reduction parameters for the Y/G, Cb/B, and Cr/R signals. 00686 * @param[in] ch : Channel 00687 * @param[in] nr1d_on : Noise reduction ON/OFF setting 00688 * @param[in] param : Noise reduction setup parameter 00689 * @retval Error code 00690 *****************************************************************************/ 00691 vdc5_error_t R_VDC5_VideoNoiseReduction ( 00692 const vdc5_channel_t ch, 00693 const vdc5_onoff_t nr1d_on, 00694 const vdc5_noise_reduction_t * const param) 00695 { 00696 vdc5_error_t ret; 00697 vdc5_resource_state_t rsrc_state; 00698 00699 ret = VDC5_OK ; 00700 #ifdef R_VDC5_CHECK_PARAMETERS 00701 ret = VDC5_VideoNoiseReductCheckPrm(ch, param); 00702 #endif /* R_VDC5_CHECK_PARAMETERS */ 00703 if (ret == VDC5_OK ) { 00704 /* Resource checks */ 00705 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_VIDEO_IN ); 00706 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 00707 ret = VDC5_ERR_RESOURCE_INPUT ; 00708 } 00709 } 00710 if (ret == VDC5_OK ) { 00711 /* Setting VDC5 registers */ 00712 VDC5_VideoNoiseReduction(ch, nr1d_on, param); 00713 } 00714 return ret; 00715 } /* End of function R_VDC5_VideoNoiseReduction() */ 00716 00717 /**************************************************************************//** 00718 * @brief Color matrix setup 00719 * 00720 * Description:<br> 00721 * This function sets up the specified color matrix. 00722 * @param[in] ch : Channel 00723 * @param[in] param : Color matrix setup parameter 00724 * @retval Error code 00725 *****************************************************************************/ 00726 vdc5_error_t R_VDC5_ImageColorMatrix (const vdc5_channel_t ch, const vdc5_color_matrix_t * const param) 00727 { 00728 vdc5_error_t ret; 00729 vdc5_resource_state_t rsrc_state; 00730 00731 ret = VDC5_OK ; 00732 #ifdef R_VDC5_CHECK_PARAMETERS 00733 ret = VDC5_ImageColorMatrixCheckPrm(ch, param); 00734 #endif /* R_VDC5_CHECK_PARAMETERS */ 00735 if (ret == VDC5_OK ) { 00736 /* Resource checks */ 00737 if (param->module == VDC5_COLORMTX_IMGCNT ) { 00738 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_WR ); 00739 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00740 rsrc_state = VDC5_ShrdPrmGetLayerResource( 00741 ((ch == VDC5_CHANNEL_0 ) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0 ), 00742 VDC5_LAYER_ID_1_WR ); 00743 } 00744 } else if (param->module == VDC5_COLORMTX_ADJ_0 ) { 00745 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_RD ); 00746 } else { 00747 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_1_RD ); 00748 } 00749 00750 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00751 ret = VDC5_ERR_RESOURCE_LAYER ; 00752 } 00753 } 00754 if (ret == VDC5_OK ) { 00755 /* Setting VDC5 registers */ 00756 VDC5_ImageColorMatrix(ch, param); 00757 } 00758 return ret; 00759 } /* End of function R_VDC5_ImageColorMatrix() */ 00760 00761 /**************************************************************************//** 00762 * @brief Image enhancement processing 00763 * 00764 * Description:<br> 00765 * This function performs the following processing: 00766 * - Turns on and off sharpness processing. 00767 * - Sets up the sharpness parameter. 00768 * - Turns on and off LTI processing. 00769 * - Sets up the LTI parameter. 00770 * - Sets up the enhancer-enabled area to be subjected to sharpness and LTI processing. 00771 * @param[in] ch : Channel 00772 * @param[in] imgimprv_id : Image quality improver ID 00773 * @param[in] shp_h_on : Sharpness ON/OFF setting 00774 * @param[in] sharp_param : Sharpness setup parameter 00775 * @param[in] lti_h_on : LTI ON/OFF setting 00776 * @param[in] lti_param : LTI setup parameter 00777 * @param[in] enh_area : Enhancer-enabled area setup parameter 00778 * @retval Error code 00779 *****************************************************************************/ 00780 vdc5_error_t R_VDC5_ImageEnhancement ( 00781 const vdc5_channel_t ch, 00782 const vdc5_imgimprv_id_t imgimprv_id, 00783 const vdc5_onoff_t shp_h_on, 00784 const vdc5_enhance_sharp_t * const sharp_param, 00785 const vdc5_onoff_t lti_h_on, 00786 const vdc5_enhance_lti_t * const lti_param, 00787 const vdc5_period_rect_t * const enh_area) 00788 { 00789 vdc5_error_t ret; 00790 vdc5_resource_state_t rsrc_state; 00791 vdc5_color_space_t color_space; 00792 00793 ret = VDC5_OK ; 00794 #ifdef R_VDC5_CHECK_PARAMETERS 00795 ret = VDC5_ImageEnhancementCheckPrm(ch, imgimprv_id, sharp_param, enh_area); 00796 #endif /* R_VDC5_CHECK_PARAMETERS */ 00797 if (ret == VDC5_OK ) { 00798 /* Resource checks */ 00799 rsrc_state = VDC5_ShrdPrmGetLayerResource( 00800 ch, 00801 ((imgimprv_id == VDC5_IMG_IMPRV_0 ) ? VDC5_LAYER_ID_0_RD : VDC5_LAYER_ID_1_RD )); 00802 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00803 /* The layer is invalid. */ 00804 ret = VDC5_ERR_RESOURCE_LAYER ; 00805 } else { 00806 /* Condition checks */ 00807 color_space = VDC5_ShrdPrmGetColorSpaceFbRd( 00808 ch, 00809 ((imgimprv_id == VDC5_IMG_IMPRV_0 ) ? VDC5_GR_TYPE_GR0 : VDC5_GR_TYPE_GR1 )); 00810 if (color_space == VDC5_COLOR_SPACE_GBR ) { 00811 /* The image quality improver does not act on RGB signals. */ 00812 ret = VDC5_ERR_IF_CONDITION ; 00813 } 00814 } 00815 } 00816 if (ret == VDC5_OK ) { 00817 /* Setting VDC5 registers */ 00818 VDC5_ImageEnhancement(ch, imgimprv_id, shp_h_on, sharp_param, lti_h_on, lti_param, enh_area); 00819 } 00820 return ret; 00821 } /* End of function R_VDC5_ImageEnhancement() */ 00822 00823 /**************************************************************************//** 00824 * @brief Black stretch setup 00825 * 00826 * Description:<br> 00827 * This function performs the following processing: 00828 * - Turns on and off black stretch processing. 00829 * - Sets up the black stretch parameters. 00830 * @param[in] ch : Channel 00831 * @param[in] imgimprv_id : Image quality improver ID 00832 * @param[in] bkstr_on : Black stretch ON/OFF setting 00833 * @param[in] param : Black stretch setup parameter 00834 * @retval Error code 00835 *****************************************************************************/ 00836 vdc5_error_t R_VDC5_ImageBlackStretch ( 00837 const vdc5_channel_t ch, 00838 const vdc5_imgimprv_id_t imgimprv_id, 00839 const vdc5_onoff_t bkstr_on, 00840 const vdc5_black_t * const param) 00841 { 00842 vdc5_error_t ret; 00843 vdc5_resource_state_t rsrc_state; 00844 vdc5_color_space_t color_space; 00845 00846 ret = VDC5_OK ; 00847 #ifdef R_VDC5_CHECK_PARAMETERS 00848 ret = VDC5_ImageBlackStretchCheckPrm(ch, imgimprv_id, param); 00849 #endif /* R_VDC5_CHECK_PARAMETERS */ 00850 if (ret == VDC5_OK ) { 00851 /* Resource checks */ 00852 rsrc_state = VDC5_ShrdPrmGetLayerResource( 00853 ch, 00854 ((imgimprv_id == VDC5_IMG_IMPRV_0 ) ? VDC5_LAYER_ID_0_RD : VDC5_LAYER_ID_1_RD )); 00855 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00856 /* The layer is invalid. */ 00857 ret = VDC5_ERR_RESOURCE_LAYER ; 00858 } else { 00859 /* Condition checks */ 00860 color_space = VDC5_ShrdPrmGetColorSpaceFbRd( 00861 ch, 00862 ((imgimprv_id == VDC5_IMG_IMPRV_0 ) ? VDC5_GR_TYPE_GR0 : VDC5_GR_TYPE_GR1 )); 00863 if (color_space == VDC5_COLOR_SPACE_GBR ) { 00864 /* The image quality improver does not act on RGB signals. */ 00865 ret = VDC5_ERR_IF_CONDITION ; 00866 } 00867 } 00868 } 00869 if (ret == VDC5_OK ) { 00870 /* Setting VDC5 registers */ 00871 VDC5_ImageBlackStretch(ch, imgimprv_id, bkstr_on, param); 00872 } 00873 return ret; 00874 } /* End of function R_VDC5_ImageBlackStretch() */ 00875 00876 /**************************************************************************//** 00877 * @brief Alpha blending setup 00878 * 00879 * Description:<br> 00880 * This function performs the following processing: 00881 * - Sets up the alpha value of the ARGB1555/RGBA5551 formats. 00882 * - Make settings for premultiplication processing at alpha blending in one-pixel. 00883 * @param[in] ch : Channel 00884 * @param[in] layer_id : Layer ID 00885 * - VDC5_LAYER_ID_1_RD 00886 * - VDC5_LAYER_ID_2_RD 00887 * - VDC5_LAYER_ID_3_RD 00888 * @param[in] param : Alpha blending setup parameter 00889 * @retval Error code 00890 *****************************************************************************/ 00891 vdc5_error_t R_VDC5_AlphaBlending ( 00892 const vdc5_channel_t ch, 00893 const vdc5_layer_id_t layer_id, 00894 const vdc5_alpha_blending_t * const param) 00895 { 00896 vdc5_error_t ret; 00897 vdc5_graphics_type_t graphics_id; 00898 vdc5_resource_state_t rsrc_state; 00899 00900 graphics_id = ConvertRwProcId2GrId(layer_id); 00901 00902 ret = VDC5_OK ; 00903 #ifdef R_VDC5_CHECK_PARAMETERS 00904 ret = VDC5_AlphaBlendingCheckPrm(ch, layer_id, param); 00905 #endif /* R_VDC5_CHECK_PARAMETERS */ 00906 if (ret == VDC5_OK ) { 00907 /* Resource checks */ 00908 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id); 00909 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00910 /* The specified layer is invalid. */ 00911 ret = VDC5_ERR_RESOURCE_LAYER ; 00912 } 00913 } 00914 if (ret == VDC5_OK ) { 00915 /* Setting VDC5 registers */ 00916 VDC5_AlphaBlending(ch, graphics_id, param); 00917 } 00918 return ret; 00919 } /* End of function R_VDC5_AlphaBlending() */ 00920 00921 /**************************************************************************//** 00922 * @brief Rectangle alpha blending setup 00923 * 00924 * Description:<br> 00925 * This function performs the following processing: 00926 * - Turns on and off alpha blending in a rectangular area. 00927 * - Sets up the rectangular area subjected to alpha blending. 00928 * - Sets up the alpha value for alpha blending in a rectangular area. 00929 * - Makes fade-in/-out settings to be applied to rectangle alpha blending. 00930 * - Allocates graphics 0 and 1 to the lower-layer/current graphics in the VIN synthesizer. 00931 * @param[in] ch : Channel 00932 * @param[in] layer_id : Layer ID 00933 * - VDC5_LAYER_ID_1_RD 00934 * - VDC5_LAYER_ID_2_RD 00935 * - VDC5_LAYER_ID_3_RD 00936 * - VDC5_LAYER_ID_VIN_RD 00937 * @param[in] gr_arc_on : ON/OFF setting for alpha blending in a rectangular area 00938 * @param[in] param : Setup parameter for alpha blending in a rectangular area 00939 * @retval Error code 00940 *****************************************************************************/ 00941 vdc5_error_t R_VDC5_AlphaBlendingRect ( 00942 const vdc5_channel_t ch, 00943 const vdc5_layer_id_t layer_id, 00944 const vdc5_onoff_t gr_arc_on, 00945 const vdc5_alpha_blending_rect_t * const param) 00946 { 00947 vdc5_error_t ret; 00948 vdc5_graphics_type_t graphics_id; 00949 vdc5_color_space_t color_space; 00950 vdc5_resource_state_t rsrc_state; 00951 00952 graphics_id = ConvertRwProcId2GrId(layer_id); 00953 00954 ret = VDC5_OK ; 00955 #ifdef R_VDC5_CHECK_PARAMETERS 00956 ret = VDC5_AlphaBlendingRectCheckPrm(ch, layer_id, param); 00957 #endif /* R_VDC5_CHECK_PARAMETERS */ 00958 if (ret == VDC5_OK ) { 00959 if (layer_id != VDC5_LAYER_ID_VIN_RD ) { 00960 /* Resource checks */ 00961 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id); 00962 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 00963 /* The specified layer is invalid. */ 00964 ret = VDC5_ERR_RESOURCE_LAYER ; 00965 } else { 00966 /* Condition checks */ 00967 color_space = VDC5_ShrdPrmGetColorSpaceFbRd(ch, graphics_id); 00968 if (color_space == VDC5_COLOR_SPACE_YCBCR ) { 00969 /* Alpha blending cannot be used 00970 when the format of the signal read from the frame buffer is YCbCr422 or YCbCr444. */ 00971 ret = VDC5_ERR_IF_CONDITION ; 00972 } 00973 } 00974 } 00975 } 00976 if (ret == VDC5_OK ) { 00977 /* Setting VDC5 registers */ 00978 VDC5_AlphaBlendingRect(ch, graphics_id, gr_arc_on, param); 00979 } 00980 return ret; 00981 } /* End of function R_VDC5_AlphaBlendingRect() */ 00982 00983 /**************************************************************************//** 00984 * @brief Chroma-key setup 00985 * 00986 * Description:<br> 00987 * This function performs the following processing: 00988 * - Turns on and off the chroma-key processing. 00989 * - Sets up the color signals to be subject to chroma-key processing and 00990 * the color signals after replacement. 00991 * @param[in] ch : Channel 00992 * @param[in] layer_id : Layer ID 00993 * - VDC5_LAYER_ID_0_RD 00994 * - VDC5_LAYER_ID_1_RD 00995 * - VDC5_LAYER_ID_2_RD 00996 * - VDC5_LAYER_ID_3_RD 00997 * - VDC5_LAYER_ID_OIR_RD 00998 * @param[in] gr_ck_on : Chroma-key ON/OFF setting 00999 * @param[in] param : Chroma-key setup parameter 01000 * @retval Error code 01001 *****************************************************************************/ 01002 vdc5_error_t R_VDC5_Chromakey ( 01003 const vdc5_channel_t ch, 01004 const vdc5_layer_id_t layer_id, 01005 const vdc5_onoff_t gr_ck_on, 01006 const vdc5_chromakey_t * const param) 01007 { 01008 vdc5_error_t ret; 01009 vdc5_graphics_type_t graphics_id; 01010 vdc5_color_space_t color_space; 01011 vdc5_resource_state_t rsrc_state; 01012 01013 graphics_id = ConvertRwProcId2GrId(layer_id); 01014 01015 ret = VDC5_OK ; 01016 #ifdef R_VDC5_CHECK_PARAMETERS 01017 ret = VDC5_ChromakeyCheckPrm(ch, layer_id, graphics_id, param); 01018 #endif /* R_VDC5_CHECK_PARAMETERS */ 01019 if (ret == VDC5_OK ) { 01020 /* Resource checks */ 01021 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id); 01022 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 01023 /* The specified layer is invalid. */ 01024 ret = VDC5_ERR_RESOURCE_LAYER ; 01025 } else { 01026 /* Condition checks */ 01027 color_space = VDC5_ShrdPrmGetColorSpaceFbRd(ch, graphics_id); 01028 if (color_space == VDC5_COLOR_SPACE_YCBCR ) { 01029 /* Chroma-key processing cannot be used 01030 when the format of the signal read from the frame buffer is YCbCr422 or YCbCr444. */ 01031 ret = VDC5_ERR_IF_CONDITION ; 01032 } 01033 } 01034 } 01035 if (ret == VDC5_OK ) { 01036 /* Setting VDC5 registers */ 01037 VDC5_Chromakey(ch, graphics_id, gr_ck_on, param); 01038 } 01039 return ret; 01040 } /* End of function R_VDC5_Chromakey() */ 01041 01042 /**************************************************************************//** 01043 * @brief CLUT setup 01044 * 01045 * Description:<br> 01046 * This function sets up CLUT for the specified layer. 01047 * @param[in] ch : Channel 01048 * @param[in] layer_id : Layer ID 01049 * - VDC5_LAYER_ID_0_RD 01050 * - VDC5_LAYER_ID_1_RD 01051 * - VDC5_LAYER_ID_2_RD 01052 * - VDC5_LAYER_ID_3_RD 01053 * - VDC5_LAYER_ID_OIR_RD 01054 * @param[in] param : CLUT setup parameter 01055 * @retval Error code 01056 *****************************************************************************/ 01057 vdc5_error_t R_VDC5_CLUT (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id, const vdc5_clut_t * const param) 01058 { 01059 vdc5_error_t ret; 01060 vdc5_graphics_type_t graphics_id; 01061 vdc5_resource_state_t rsrc_state; 01062 01063 graphics_id = ConvertRwProcId2GrId(layer_id); 01064 01065 ret = VDC5_OK ; 01066 #ifdef R_VDC5_CHECK_PARAMETERS 01067 ret = VDC5_CLUTCheckPrm(ch, layer_id, graphics_id, param); 01068 #endif /* R_VDC5_CHECK_PARAMETERS */ 01069 if (ret == VDC5_OK ) { 01070 /* Resource checks */ 01071 rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, layer_id); 01072 if (rsrc_state == VDC5_RESOURCE_ST_INVALID ) { 01073 /* The specified layer is invalid. */ 01074 ret = VDC5_ERR_RESOURCE_LAYER ; 01075 } 01076 } 01077 if (ret == VDC5_OK ) { 01078 /* Setting VDC5 registers */ 01079 VDC5_CLUT(ch, graphics_id, param); 01080 } 01081 return ret; 01082 } /* End of function R_VDC5_SetCLUT() */ 01083 01084 /**************************************************************************//** 01085 * @brief Display calibration processing 01086 * 01087 * Description:<br> 01088 * This function performs the following processing: 01089 * - Sets up panel brightness adjustment. 01090 * - Sets up contrast adjustment. 01091 * - Sets up panel dithering. 01092 * - Makes control settings for the correction circuit sequence. 01093 * @param[in] ch : Channel 01094 * @param[in] param : Display calibration parameter 01095 * @retval Error code 01096 *****************************************************************************/ 01097 vdc5_error_t R_VDC5_DisplayCalibration (const vdc5_channel_t ch, const vdc5_disp_calibration_t * const param) 01098 { 01099 vdc5_error_t ret; 01100 vdc5_resource_state_t rsrc_state; 01101 01102 ret = VDC5_OK ; 01103 #ifdef R_VDC5_CHECK_PARAMETERS 01104 ret = VDC5_DisplayCalibrationCheckPrm(ch, param); 01105 #endif /* R_VDC5_CHECK_PARAMETERS */ 01106 if (ret == VDC5_OK ) { 01107 /* Resource checks */ 01108 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LCD_PANEL ); 01109 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 01110 ret = VDC5_ERR_RESOURCE_OUTPUT ; 01111 } 01112 } 01113 if (ret == VDC5_OK ) { 01114 /* Setting VDC5 registers */ 01115 VDC5_DisplayCalibration(ch, param); 01116 } 01117 return ret; 01118 } /* End of function R_VDC5_DisplayCalibration() */ 01119 01120 /**************************************************************************//** 01121 * @brief Gamma correction setup 01122 * 01123 * Description:<br> 01124 * This function performs the following processing: 01125 * - Turns on and off gamma correction processing. 01126 * - Sets up the gamma correction gain adjustment values for the G/B/R signals. 01127 * - Sets up the gamma correction start threshold values for the G/B/R signals. 01128 * @param[in] ch : Channel 01129 * @param[in] gam_on : Gamma correction ON/OFF setting 01130 * @param[in] param : Gamma correction setup parameter 01131 * @retval Error code 01132 *****************************************************************************/ 01133 vdc5_error_t R_VDC5_GammaCorrection ( 01134 const vdc5_channel_t ch, 01135 const vdc5_onoff_t gam_on, 01136 const vdc5_gamma_correction_t * const param) 01137 { 01138 vdc5_error_t ret; 01139 vdc5_resource_state_t rsrc_state; 01140 01141 ret = VDC5_OK ; 01142 #ifdef R_VDC5_CHECK_PARAMETERS 01143 ret = VDC5_GammaCorrectionCheckPrm(ch, param); 01144 #endif /* R_VDC5_CHECK_PARAMETERS */ 01145 if (ret == VDC5_OK ) { 01146 /* Resource checks */ 01147 rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LCD_PANEL ); 01148 if (rsrc_state != VDC5_RESOURCE_ST_VALID ) { 01149 ret = VDC5_ERR_RESOURCE_OUTPUT ; 01150 } 01151 } 01152 if (ret == VDC5_OK ) { 01153 /* Setting VDC5 registers */ 01154 VDC5_GammaCorrection(ch, gam_on, param); 01155 } 01156 return ret; 01157 } /* End of function R_VDC5_GammaCorrection() */ 01158 01159 /****************************************************************************** 01160 Local Functions 01161 ******************************************************************************/ 01162 /**************************************************************************//** 01163 * @brief Convert read/write process ID into scaling type ID 01164 * 01165 * @param[in] layer_id : Layer ID 01166 * @retval Scaling type ID 01167 *****************************************************************************/ 01168 static vdc5_scaling_type_t ConvertRwProcId2SclId (const vdc5_layer_id_t layer_id) 01169 { 01170 vdc5_scaling_type_t scaling_id; 01171 01172 switch (layer_id) { 01173 case VDC5_LAYER_ID_0_WR : /* Layer 0, write process */ 01174 scaling_id = VDC5_SC_TYPE_SC0 ; /* Scaler 0 */ 01175 break; 01176 case VDC5_LAYER_ID_1_WR : /* Layer 1, write process */ 01177 scaling_id = VDC5_SC_TYPE_SC1 ; /* Scaler 1 */ 01178 break; 01179 case VDC5_LAYER_ID_OIR_WR : /* Layer OIR, write process */ 01180 scaling_id = VDC5_SC_TYPE_OIR ; /* OIR */ 01181 break; 01182 default: /* Error */ 01183 scaling_id = VDC5_SC_TYPE_NUM ; 01184 break; 01185 } 01186 return scaling_id; 01187 } /* End of function ConvertRwProcId2SclId() */ 01188 01189 /**************************************************************************//** 01190 * @brief Convert read/write process ID into graphics type ID 01191 * 01192 * @param[in] layer_id : Layer ID 01193 * @retval Graphics type ID 01194 *****************************************************************************/ 01195 static vdc5_graphics_type_t ConvertRwProcId2GrId (const vdc5_layer_id_t layer_id) 01196 { 01197 vdc5_graphics_type_t graphics_id; 01198 01199 switch (layer_id) { 01200 case VDC5_LAYER_ID_0_RD : /* Layer 0, read process */ 01201 graphics_id = VDC5_GR_TYPE_GR0 ; /* Graphics 0 */ 01202 break; 01203 case VDC5_LAYER_ID_1_RD : /* Layer 1, read process */ 01204 graphics_id = VDC5_GR_TYPE_GR1 ; /* Graphics 1 */ 01205 break; 01206 case VDC5_LAYER_ID_2_RD : /* Layer 2, read process */ 01207 graphics_id = VDC5_GR_TYPE_GR2 ; /* Graphics 2 */ 01208 break; 01209 case VDC5_LAYER_ID_3_RD : /* Layer 3, read process */ 01210 graphics_id = VDC5_GR_TYPE_GR3 ; /* Graphics 3 */ 01211 break; 01212 case VDC5_LAYER_ID_VIN_RD : /* Layer VIN, read process */ 01213 graphics_id = VDC5_GR_TYPE_VIN ; /* VIN */ 01214 break; 01215 case VDC5_LAYER_ID_OIR_RD : /* Layer OIR, read process */ 01216 graphics_id = VDC5_GR_TYPE_OIR ; /* OIR */ 01217 break; 01218 default: /* Error */ 01219 graphics_id = VDC5_GR_TYPE_NUM ; 01220 break; 01221 } 01222 return graphics_id; 01223 } /* End of function ConvertRwProcId2GrId() */ 01224
Generated on Tue Jul 12 2022 15:08:46 by 1.7.2