Lcd companion boards support (VKLCD50RTA & VKLCD70RT)

What is this ?

This is a demo program using Renesas RGA library & USB Camera to demonstrate VK-RZ/A1H's companion boards workability.


Supported companion Boards:

VKLCD50RTA

/media/uploads/tvendov/front_view_hmi_50.png /media/uploads/tvendov/side_view_hmi_50.png

VKLCD70RT

/media/uploads/tvendov/front_view_hmi_70.png/media/uploads/tvendov/side_view_hmi_70.png /media/uploads/tvendov/front_view_lvds.png/media/uploads/tvendov/back_view_lvds.png


How to Configure ?

You can choose which display is installed by altering the lcd_panel.h file

Leave the active one & comment out the others:

#define     LCD_VDC5_CH0_PANEL                  LCD_CH0_PANEL_VKLCD50RTA
//#define     LCD_VDC5_CH0_PANEL                  LCD_CH0_PANEL_VKLCD70RT

You can alter the whole demo with your pictures if you like:


How to compile ?

  • The Demo can be compiled in 3 modes:
    • I. Execution from the internal 10-MB on-chip SRAM.
      • After import in the online compiler just leave only the VKRZA1H_RAM.sct & delete all others linker files in the TOOLCHAIN_ARM_STD folder.
      • Save the result binary in the SD Card (<SD>:\vkrza1\lcd_sample ), altering vkrza1h.ini by this way
    • II. Execution from the on-board serial FALSH in dual (32-MB) mode.
      • After import in the online compiler just leave only the VKRZA1H_DOUBLE.sct & delete all others linker files in the TOOLCHAIN_ARM_STD folder.
      • Drag & drop the result binary in MBED disk, (previously inited in double flash mode)
    • III. Execution from the on-board serial FALSH in single (16-MB) mode.
      • After import in the online compiler just leave only the VKRZA1H_SINGLE.sct & delete all others linker files in the TOOLCHAIN_ARM_STD folder.
      • Drag & drop the result binary in MBED disk, (previously inited in single flash mode )

Quick presentation:


Other demos ?

More demos you can find on our FTP

Revision:
0:6435b67ad23c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RGA/video/vdc5.c	Thu Feb 16 10:23:48 2017 +0000
@@ -0,0 +1,1373 @@
+/*******************************************************************************
+ * DISCLAIMER
+ * This software is supplied by Renesas Electronics Corporation and is only
+ * intended for use with Renesas products. No other uses are authorized. This
+ * software is owned by Renesas Electronics Corporation and is protected under
+ * all applicable laws, including copyright laws.
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+ * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+ * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+ * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+ * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+ * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+ * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+ * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ * Renesas reserves the right, without notice, to make changes to this software
+ * and to discontinue the availability of this software. By using this software,
+ * you agree to the additional terms and conditions found by accessing the
+ * following link:
+ * http://www.renesas.com/disclaimer
+ * Copyright (C) 2012 - 2015 Renesas Electronics Corporation. All rights reserved.
+ *******************************************************************************/
+/**************************************************************************//**
+ * @file         vdc5.c
+ * @version
+ * $Rev:
+ * $Date::
+ * @brief        VDC5 driver API wrapper function in C interface
+ ******************************************************************************/
+
+/******************************************************************************
+ Includes   <System Includes> , "Project Includes"
+ ******************************************************************************/
+#include    <stdio.h>
+#include    <string.h>
+
+#include    "r_typedefs.h"
+#include    "r_vdc5.h"
+#include    "video_decoder.h"
+#include    "lvds_pll_calc.h"
+#include    "vdc5.h"
+
+#include    "mbed_assert.h"
+#include    "pinmap.h"
+
+#include 	"lcd_panel.h"
+
+/******************************************************************************
+ Macro definitions
+ ******************************************************************************/
+#define STP91_BIT   (0x02u)
+#define STP90_BIT   (0x01u)
+#define STBRQ25_BIT (0x20u)
+#define STBAK25_BIT (0x20u)
+#define STBRQ24_BIT (0x10u)
+#define STBAK24_BIT (0x10u)
+
+/******************************************************************************
+ Typedef definitions
+ ******************************************************************************/
+typedef enum {
+	VDC5_CH0, VDC5_CH1,
+} VDC5Name;
+
+/******************************************************************************
+ Imported global variables and functions (from other files)
+ ******************************************************************************/
+
+/******************************************************************************
+ Exported global variables (to be accessed by other files)
+ ******************************************************************************/
+static const PinMap PinMap_DV_INPUT_PIN[] = { { P8_11, VDC5_CH0, 8 }, /* DV0_CLK    */
+{ P1_12, VDC5_CH0, 2 }, /* DV0_VSYNC  */
+{ P1_13, VDC5_CH0, 2 }, /* DV0_HSYNC  */
+{ P1_1, VDC5_CH0, 6 }, /* DV0_HSYNC  */
+{ P1_0, VDC5_CH0, 6 }, /* DV0_VSYNC  */
+{ P1_9, VDC5_CH0, 6 }, /* DV0_DATA15 */
+{ P2_15, VDC5_CH0, 3 }, /* DV0_DATA15 */
+{ P4_7, VDC5_CH0, 7 }, /* DV0_DATA15 */
+{ P5_7, VDC5_CH0, 4 }, /* DV0_DATA15 */
+{ P1_8, VDC5_CH0, 6 }, /* DV0_DATA14 */
+{ P2_14, VDC5_CH0, 3 }, /* DV0_DATA14 */
+{ P4_6, VDC5_CH0, 7 }, /* DV0_DATA14 */
+{ P5_6, VDC5_CH0, 4 }, /* DV0_DATA14 */
+{ P1_7, VDC5_CH0, 6 }, /* DV0_DATA13 */
+{ P2_13, VDC5_CH0, 3 }, /* DV0_DATA13 */
+{ P4_5, VDC5_CH0, 7 }, /* DV0_DATA13 */
+{ P5_5, VDC5_CH0, 4 }, /* DV0_DATA13 */
+{ P1_6, VDC5_CH0, 6 }, /* DV0_DATA12 */
+{ P4_4, VDC5_CH0, 7 }, /* DV0_DATA12 */
+{ P5_4, VDC5_CH0, 4 }, /* DV0_DATA12 */
+{ P2_10, VDC5_CH0, 3 }, /* DV0_DATA10 */
+{ P2_9, VDC5_CH0, 3 }, /* DV0_DATA9  */
+{ P2_7, VDC5_CH0, 3 }, /* DV0_DATA7  */
+{ P2_6, VDC5_CH0, 3 }, /* DV0_DATA6  */
+{ P2_5, VDC5_CH0, 3 }, /* DV0_DATA5  */
+{ P2_4, VDC5_CH0, 3 }, /* DV0_DATA4  */
+{ P2_3, VDC5_CH0, 3 }, /* DV0_DATA3  */
+{ P2_2, VDC5_CH0, 3 }, /* DV0_DATA2  */
+{ P2_1, VDC5_CH0, 3 }, /* DV0_DATA1  */
+{ P2_0, VDC5_CH0, 3 }, /* DV0_DATA0  */
+{ NC, NC, 0 } };
+
+#ifdef MAX_PERI
+static const PinMap PinMap_LCD_DISP_PIN[] = {
+	{	P2_7 , VDC5_CH0, 8}, {P4_15 , VDC5_CH0, 1}, {P5_7 , VDC5_CH0, 3}, /* LCD0_DATA23 */
+	{	P2_6 , VDC5_CH0, 8}, {P4_14 , VDC5_CH0, 1}, {P5_6 , VDC5_CH0, 3}, /* LCD0_DATA22 */
+	{	P2_5 , VDC5_CH0, 8}, {P4_13 , VDC5_CH0, 1}, {P5_5 , VDC5_CH0, 3}, /* LCD0_DATA21 */
+	{	P2_4 , VDC5_CH0, 8}, {P4_12 , VDC5_CH0, 1}, {P5_4 , VDC5_CH0, 3}, /* LCD0_DATA20 */
+	{	P2_3 , VDC5_CH0, 8}, {P4_11 , VDC5_CH0, 1}, {P5_3 , VDC5_CH0, 3}, /* LCD0_DATA19 */
+	{	P2_2 , VDC5_CH0, 8}, {P4_10 , VDC5_CH0, 1}, {P5_2 , VDC5_CH0, 3}, /* LCD0_DATA18 */
+	{	P2_1 , VDC5_CH0, 8}, {P4_9 , VDC5_CH0, 1}, {P5_1 , VDC5_CH0, 3}, /* LCD0_DATA17 */
+	{	P2_0 , VDC5_CH0, 8}, {P4_8 , VDC5_CH0, 1}, {P5_0 , VDC5_CH0, 3}, /* LCD0_DATA16 */
+	{	P4_7 , VDC5_CH0, 1}, /* LCD0_DATA15 */
+	{	P4_6 , VDC5_CH0, 1}, /* LCD0_DATA14 */
+	{	P4_5 , VDC5_CH0, 1}, /* LCD0_DATA13 */
+	{	P4_4 , VDC5_CH0, 1}, /* LCD0_DATA12 */
+	{	P4_3 , VDC5_CH0, 1}, /* LCD0_DATA11 */
+	{	P4_2 , VDC5_CH0, 1}, /* LCD0_DATA10 */
+	{	P4_1 , VDC5_CH0, 1}, /* LCD0_DATA9  */
+	{	P4_0 , VDC5_CH0, 1}, /* LCD0_DATA8  */
+	{	P3_15 , VDC5_CH0, 1}, {P6_15 , VDC5_CH0, 6}, /* LCD0_DATA7  */
+	{	P3_14 , VDC5_CH0, 1}, {P6_14 , VDC5_CH0, 6}, /* LCD0_DATA6  */
+	{	P3_13 , VDC5_CH0, 1}, {P6_13 , VDC5_CH0, 6}, /* LCD0_DATA5  */
+	{	P3_12 , VDC5_CH0, 1}, {P6_12 , VDC5_CH0, 6}, /* LCD0_DATA4  */
+	{	P3_11 , VDC5_CH0, 1}, {P6_11 , VDC5_CH0, 6}, /* LCD0_DATA3  */
+	{	P3_10 , VDC5_CH0, 1}, {P6_10 , VDC5_CH0, 6}, /* LCD0_DATA2  */
+	{	P3_9 , VDC5_CH0, 1}, {P6_9 , VDC5_CH0, 6}, /* LCD0_DATA1  */
+	{	P3_8 , VDC5_CH0, 1}, {P6_8 , VDC5_CH0, 6}, /* LCD0_DATA0  */
+	{	P3_7 , VDC5_CH0, 1}, {P6_7 , VDC5_CH0, 4}, {P2_8 , VDC5_CH0, 5}, /* LCD0_TCON6  {P6_11 , VDC5_CH0, 4} */
+	{	P3_6 , VDC5_CH0, 1}, {P6_6 , VDC5_CH0, 4}, /* LCD0_TCON5  {P6_10 , VDC5_CH0, 4} */
+	{	P3_5 , VDC5_CH0, 1}, /* LCD0_TCON4  */
+	{	P3_4 , VDC5_CH0, 1}, /* LCD0_TCON3  */
+	{	P3_3 , VDC5_CH0, 1}, /* LCD0_TCON2  */
+	{	P3_2 , VDC5_CH0, 1}, /* LCD0_TCON1  */
+	{	P3_1 , VDC5_CH0, 1}, /* LCD0_TCON0  */
+	{	P3_0 , VDC5_CH0, 1}, /* LCD0_CLK    */
+	{	P5_8 , VDC5_CH0, 1}, /* LCD0_EXTCLK */
+	{	NC , NC , 0}
+};
+#else
+static const PinMap PinMap_LCD_DISP_PIN[] = {
+//R
+		{ P4_7, VDC5_CH0, 1 }, /* LCD0_DATA15  */
+		{ P4_6, VDC5_CH0, 1 }, /* LCD0_DATA14  */
+		{ P4_5, VDC5_CH0, 1 }, /* LCD0_DATA13  */
+		{ P4_4, VDC5_CH0, 1 }, /* LCD0_DATA12  */
+		{ P4_3, VDC5_CH0, 1 }, /* LCD0_DATA11  */
+		//G
+		{ P4_2, VDC5_CH0, 1 }, /* LCD0_DATA10  */
+		{ P4_1, VDC5_CH0, 1 }, /* LCD0_DATA9   */
+		{ P4_0, VDC5_CH0, 1 }, /* LCD0_DATA8   */
+		{ P3_15, VDC5_CH0, 1 }, /* LCD0_DATA7   */
+		{ P3_14, VDC5_CH0, 1 }, /* LCD0_DATA6   */
+		{ P3_13, VDC5_CH0, 1 }, /* LCD0_DATA5   */
+		//B
+		{ P3_12, VDC5_CH0, 1 }, /* LCD0_DATA4   */
+		{ P3_11, VDC5_CH0, 1 }, /* LCD0_DATA3   */
+		{ P3_10, VDC5_CH0, 1 }, /* LCD0_DATA2   */
+		{ P3_9, VDC5_CH0, 1 }, /* LCD0_DATA1   */
+		{ P3_8, VDC5_CH0, 1 }, /* LCD0_DATA0   */
+		//DE
+		{ P3_1, VDC5_CH0, 1 }, /* LCD0_TCON0   */
+		{ P3_0, VDC5_CH0, 1 }, /* LCD0_CLK     */
+		{ NC, NC, 0 } };
+#endif
+
+#if 0
+static const PinMap PinMap_LCD_DISP_PIN[] = {
+	{	P2_7 , VDC5_CH0, 8}, /* LCD0_DATA23  */
+	{	P5_7 , VDC5_CH0, 3}, /* LCD0_DATA23  */
+	{	P2_6 , VDC5_CH0, 8}, /* LCD0_DATA22  */
+	{	P5_6 , VDC5_CH0, 3}, /* LCD0_DATA22  */
+	{	P2_5 , VDC5_CH0, 8}, /* LCD0_DATA21  */
+	{	P5_5 , VDC5_CH0, 3}, /* LCD0_DATA21  */
+	{	P2_4 , VDC5_CH0, 8}, /* LCD0_DATA20  */
+	{	P5_4 , VDC5_CH0, 3}, /* LCD0_DATA20  */
+	{	P2_3 , VDC5_CH0, 8}, /* LCD0_DATA19  */
+	{	P5_3 , VDC5_CH0, 3}, /* LCD0_DATA19  */
+	{	P2_2 , VDC5_CH0, 8}, /* LCD0_DATA18  */
+	{	P5_2 , VDC5_CH0, 3}, /* LCD0_DATA18  */
+	{	P2_1 , VDC5_CH0, 8}, /* LCD0_DATA17  */
+	{	P5_1 , VDC5_CH0, 3}, /* LCD0_DATA17  */
+	{	P2_0 , VDC5_CH0, 8}, /* LCD0_DATA16  */
+	{	P5_0 , VDC5_CH0, 3}, /* LCD0_DATA16  */
+	{	P4_7 , VDC5_CH0, 1}, /* LCD0_DATA15  */
+	{	P4_6 , VDC5_CH0, 1}, /* LCD0_DATA14  */
+	{	P4_5 , VDC5_CH0, 1}, /* LCD0_DATA13  */
+	{	P4_4 , VDC5_CH0, 1}, /* LCD0_DATA12  */
+	{	P4_0 , VDC5_CH0, 1}, /* LCD0_DATA8   */
+	{	P3_15 , VDC5_CH0, 1}, /* LCD0_DATA7   */
+	{	P3_14 , VDC5_CH0, 1}, /* LCD0_DATA6   */
+	{	P3_13 , VDC5_CH0, 1}, /* LCD0_DATA5   */
+	{	P3_12 , VDC5_CH0, 1}, /* LCD0_DATA4   */
+	{	P3_11 , VDC5_CH0, 1}, /* LCD0_DATA3   */
+	{	P3_10 , VDC5_CH0, 1}, /* LCD0_DATA2   */
+	{	P3_9 , VDC5_CH0, 1}, /* LCD0_DATA1   */
+	{	P3_8 , VDC5_CH0, 1}, /* LCD0_DATA0   */
+	{	P3_2 , VDC5_CH0, 1}, /* LCD0_TCON1   */
+	{	NC , NC , 0}
+};
+#endif
+
+static const PinMap PinMap_LVDS_DISP_PIN[] = { { P5_7, VDC5_CH0, 1 }, /* TXOUT0M   */
+{ P5_6, VDC5_CH0, 1 }, /* TXOUT0P   */
+{ P5_5, VDC5_CH0, 1 }, /* TXOUT1M   */
+{ P5_4, VDC5_CH0, 1 }, /* TXOUT1P   */
+{ P5_3, VDC5_CH0, 1 }, /* TXOUT2M   */
+{ P5_2, VDC5_CH0, 1 }, /* TXOUT2P   */
+{ P5_1, VDC5_CH0, 1 }, /* TXCLKOUTM */
+{ P5_0, VDC5_CH0, 1 }, /* TXCLKOUTP */
+{ NC, NC, 0 } };
+
+static const IRQn_Type vdc5_irq_set_tbl[] = { S0_VI_VSYNC0_IRQn,
+		S0_LO_VSYNC0_IRQn, S0_VSYNCERR0_IRQn, GR3_VLINE0_IRQn, S0_VFIELD0_IRQn,
+		IV1_VBUFERR0_IRQn, IV3_VBUFERR0_IRQn, IV5_VBUFERR0_IRQn,
+		IV6_VBUFERR0_IRQn, S0_WLINE0_IRQn, S1_VI_VSYNC0_IRQn, S1_LO_VSYNC0_IRQn,
+		S1_VSYNCERR0_IRQn, S1_VFIELD0_IRQn, IV2_VBUFERR0_IRQn,
+		IV4_VBUFERR0_IRQn, S1_WLINE0_IRQn, OIR_VI_VSYNC0_IRQn,
+		OIR_LO_VSYNC0_IRQn, OIR_VSYNCERR0_IRQn, OIR_VFIELD0_IRQn,
+		IV7_VBUFERR0_IRQn, IV8_VBUFERR0_IRQn };
+
+/******************************************************************************
+ Private global variables and functions
+ ******************************************************************************/
+static void init_func(const uint32_t user_num);
+static void DRV_Graphics_Irq_Set(vdc5_int_type_t irq, uint32_t enable);
+
+/**************************************************************************//**
+ * @brief       User-defined function within R_VDC5_Initialize
+ * @param[in]   user_num                : VDC5 channel
+ * @retval      None
+ ******************************************************************************/
+static void init_func(const uint32_t user_num) {
+	uint32_t reg_data;
+	volatile uint8_t dummy_read;
+
+	if ((vdc5_channel_t) user_num == VDC5_CHANNEL_0) {
+
+		/* Standby control register 9 (STBCR9)
+		 b1      ------0-;  MSTP91 : 0 : Video display controller channel 0 & LVDS enable */
+		reg_data = (uint32_t) CPG.STBCR9 & (uint32_t) ~STP91_BIT;
+		CPG.STBCR9 = (uint8_t) reg_data;
+		/* In order to reflect the change, a dummy read should be done. */
+		dummy_read = CPG.STBCR9;
+
+		/* Standby Request Register 2 (STBREQ2)
+		 b5      --0-----;  STBRQ25 : The standby request to VDC5 channel 0 is invalid. */
+		reg_data = (uint32_t) CPG.STBREQ2 & (uint32_t) ~STBRQ25_BIT;
+		CPG.STBREQ2 = (uint8_t) reg_data;
+		/* Standby Acknowledge Register 2 (STBACK2)
+		 b5      --*-----;  STBAK25 : Standby acknowledgement from VDC5 channel 0. */
+		while (((uint32_t) CPG.STBACK2 & (uint32_t) STBAK25_BIT) != 0u) {
+			/* Wait for the STBAK25 to be cleared to 0. */
+		}
+
+		/* Standby control register 9 (STBCR9)
+		 b0      -------0;  MSTP90 : 0 : Video display controller channel 1 enable */
+		reg_data = (uint32_t) CPG.STBCR9 & (uint32_t) ~(STP91_BIT | STP90_BIT);
+		CPG.STBCR9 = (uint8_t) reg_data;
+		/* In order to reflect the change, a dummy read should be done. */
+		dummy_read = CPG.STBCR9;
+
+		/* Standby Request Register 2 (STBREQ2)
+		 b4      ---0----;  STBRQ24 : The standby request to VDC5 channel 1 is invalid. */
+		reg_data = (uint32_t) CPG.STBREQ2 & (uint32_t) ~STBRQ24_BIT;
+		CPG.STBREQ2 = (uint8_t) reg_data;
+		/* Standby Acknowledge Register 2 (STBACK2)
+		 b4      ---*----;  STBAK24 : Standby acknowledgement from VDC5 channel 1. */
+		while (((uint32_t) CPG.STBACK2 & (uint32_t) STBAK24_BIT) != 0u) {
+			/* Wait for the STBAK24 to be cleared to 0. */
+		}
+	}
+} /* End of function init_func() */
+
+/**************************************************************************//**
+ * @brief       Interrupt service routine acquisition processing
+ *
+ *              Description:<br>
+ *              This function returns the function pointer to the specified interrupt service routine.
+ * @param[in]   irq                     : VDC5 interrupt type
+ * @param[in]   enable                  : VDC5 interrupt enable
+ * @retval      None
+ ******************************************************************************/
+static void DRV_Graphics_Irq_Set(vdc5_int_type_t irq, uint32_t enable) {
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	IRQn_Type IRQn;
+	IRQHandler handler;
+
+	IRQn = vdc5_irq_set_tbl[irq];
+	handler = R_VDC5_GetISR(ch, irq);
+
+	if (enable) {
+		InterruptHandlerRegister(IRQn, (void (*)(uint32_t)) handler);
+		GIC_SetPriority(IRQn, 5);
+		GIC_EnableIRQ(IRQn);
+	} else {
+		GIC_DisableIRQ(IRQn);
+	}
+} /* End of function DRV_Graphics_Irq_Set() */
+
+/**************************************************************************//**
+ * @brief       Interrupt callback setup
+ *              This function performs the following processing:
+ *              - Enables the interrupt when the pointer to the corresponding interrupt callback function is specified.
+ *              - Registers the specified interrupt callback function.
+ *              - Disables the interrupt when the pointer to the corresponding interrupt callback function is not
+ *                specified.
+ * @param[in]   irq                     : VDC5 interrupt type
+ * @param[in]   num                     : Interrupt line number
+ * @param[in]   * callback              : Interrupt callback function pointer
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Irq_Handler_Set(vdc5_int_type_t irq,
+		uint16_t num, void (*callback)(vdc5_int_type_t)) {
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_error_t error;
+	vdc5_int_t interrupt;
+
+	if (callback == NULL) {
+		DRV_Graphics_Irq_Set(irq, 0);
+	} else {
+		DRV_Graphics_Irq_Set(irq, 1);
+	}
+
+	/* Interrupt parameter */
+	interrupt.type = irq; /* Interrupt type */
+	interrupt.line_num = num; /* Line number */
+
+	/* Interrupt parameter */
+	interrupt.callback = callback; /* Callback function pointer */
+	/* Set interrupt service routine */
+	error = R_VDC5_CallbackISR(ch, &interrupt);
+	if (error != VDC5_OK) {
+		drv_error = DRV_GRAPHICS_VDC5_ERR;
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Irq_Handler_Set() */
+
+/**************************************************************************//**
+ * @brief       LCD output port initialization processing
+ * @param[in]   pin                     : Pin assign for LCD output
+ * @param[in]   pin_count               : Total number of pin assign
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Lcd_Port_Init(PinName *pin,
+		uint32_t pin_count) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	uint32_t count;
+
+	for (count = 0; count < pin_count; count++) {
+		pinmap_peripheral(pin[count], PinMap_LCD_DISP_PIN);
+		pinmap_pinout(pin[count], PinMap_LCD_DISP_PIN);
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Lcd_Port_Init() */
+
+/**************************************************************************//**
+ * @brief       LVDS output port initialization processing
+ * @param[in]   pin                     : Pin assign for LVDS output
+ * @param[in]   pin_count               : Total number of pin assign
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Lvds_Port_Init(PinName *pin,
+		uint32_t pin_count) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	uint32_t count;
+
+	for (count = 0; count < pin_count; count++) {
+		pinmap_peripheral(pin[count], PinMap_LVDS_DISP_PIN);
+		pinmap_pinout(pin[count], PinMap_LVDS_DISP_PIN);
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Lvds_Port_Init() */
+
+/**************************************************************************//**
+ * @brief       Digital video inpout port initialization processing
+ * @param[in]   pin                     : Pin assign for digital video input port
+ * @param[in]   pin_count               : Total number of pin assign
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Dvinput_Port_Init(PinName *pin,
+		uint32_t pin_count) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	uint32_t count;
+
+	for (count = 0; count < pin_count; count++) {
+		pinmap_peripheral(pin[count], PinMap_DV_INPUT_PIN);
+		pinmap_pinout(pin[count], PinMap_DV_INPUT_PIN);
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Dvinput_Port_Init() */
+
+/**************************************************************************//**
+ * @brief       Graphics initialization processing
+ * @param[in]   drv_lcd_config          : LCD configuration
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Init(drv_lcd_config_t * drv_lcd_config) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_init_t init;
+	vdc5_lvds_t vdc5_lvds;
+	pll_parameter_t pll_parameter;
+	double InputClock = DEFAULT_INPUT_CLOCK;
+	double OutputClock = DEFAULT_OUTPUT_CLOCK;
+	uint32_t LvdsUsed = LVDS_IF_USE;
+
+	if (drv_lcd_config != NULL) {
+		InputClock = drv_lcd_config->intputClock;
+		OutputClock = drv_lcd_config->outputClock;
+		LvdsUsed =
+				(drv_lcd_config->lcd_type == DRV_LCD_TYPE_LVDS) ?
+						LVDS_IF_USE : LVDS_IF_NOT_USE;
+	}
+
+	/* Initialization parameter */
+	if (LvdsUsed) {
+		/* LVDS PLL Setting Calculation */
+		init.panel_icksel = VDC5_PANEL_ICKSEL_LVDS_DIV7; /* Panel clock select */
+		init.panel_dcdr = VDC5_PANEL_CLKDIV_1_2; /* Panel clock frequency division ratio */
+		lvds_pll_calc(InputClock, OutputClock, LvdsUsed, &pll_parameter);
+
+		vdc5_lvds.lvds_in_clk_sel = VDC5_LVDS_INCLK_SEL_PERI; /* P1 */
+		vdc5_lvds.lvds_idiv_set = (vdc5_lvds_ndiv_t) pll_parameter.nidiv;
+		vdc5_lvds.lvdspll_tst = 16u;
+		vdc5_lvds.lvds_odiv_set = (vdc5_lvds_ndiv_t) pll_parameter.nodiv;
+		vdc5_lvds.lvdspll_tst = 16u;
+		vdc5_lvds.lvds_vdc_sel = ch;
+		vdc5_lvds.lvdspll_fd = pll_parameter.nfd;
+		vdc5_lvds.lvdspll_rd = pll_parameter.nrd;
+		vdc5_lvds.lvdspll_od = (vdc5_lvds_pll_nod_t) pll_parameter.nod;
+		init.lvds = &vdc5_lvds; /* LVDS parameter */
+	} else {
+		init.panel_icksel = VDC5_PANEL_ICKSEL_PERI; /* Panel clock select */
+		init.panel_dcdr = VDC5_PANEL_CLKDIV_1_7; /* Panel clock frequency division ratio */
+		init.lvds = NULL;
+	}
+
+	/* Initialize (Set module clock to VDC5) */
+	error = R_VDC5_Initialize(ch, &init, &init_func, (uint32_t) ch);
+	if (error != VDC5_OK) {
+		drv_error = DRV_GRAPHICS_VDC5_ERR;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		vdc5_sync_ctrl_t sync_ctrl;
+
+		/* Sync signal control */
+		sync_ctrl.res_vs_sel = VDC5_ON; /* Vsync signal output select (free-running Vsync on/off control) */
+		/* Sync signal output and full-screen enable signal select */
+		sync_ctrl.res_vs_in_sel = VDC5_RES_VS_IN_SEL_SC0;
+		sync_ctrl.res_fv = drv_lcd_config->v_toatal_period - 1; /* Free-running Vsync period setting */
+		sync_ctrl.res_fh = drv_lcd_config->h_toatal_period - 1; /* Hsync period setting */
+		sync_ctrl.res_vsdly = (uint16_t) 0u; /* Vsync signal delay control */
+		/* Full-screen enable control */
+		sync_ctrl.res_f.vs = (drv_lcd_config->v_back_porch);
+		sync_ctrl.res_f.vw = (drv_lcd_config->v_disp_widht);
+		sync_ctrl.res_f.hs = (drv_lcd_config->h_back_porch);
+		sync_ctrl.res_f.hw = (drv_lcd_config->h_disp_widht);
+		sync_ctrl.vsync_cpmpe = NULL; /* Vsync signal compensation */
+		/* Sync control */
+		error = R_VDC5_SyncControl(ch, &sync_ctrl);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		vdc5_output_t output;
+		vdc5_lcd_tcon_timing_t lcd_tcon_timing_VS;
+		vdc5_lcd_tcon_timing_t lcd_tcon_timing_VE;
+		vdc5_lcd_tcon_timing_t lcd_tcon_timing_HS;
+		vdc5_lcd_tcon_timing_t lcd_tcon_timing_HE;
+		vdc5_lcd_tcon_timing_t lcd_tcon_timing_DE;
+
+		/* Output parameter */
+		output.tcon_half = (drv_lcd_config->h_toatal_period - 1) / 2; /* TCON reference timing, 1/2fH timing */
+		output.tcon_offset = 0; /* TCON reference timing, offset Hsync signal timing */
+
+		/* LCD TCON timing setting */
+		if (drv_lcd_config->v_sync_port != DRV_LCD_TCON_PIN_NON) {
+			lcd_tcon_timing_VS.tcon_hsvs = 0u;
+			lcd_tcon_timing_VS.tcon_hwvw = (drv_lcd_config->v_sync_width * 2u);
+			lcd_tcon_timing_VS.tcon_md = VDC5_LCD_TCON_POLMD_NORMAL;
+			lcd_tcon_timing_VS.tcon_hs_sel = VDC5_LCD_TCON_REFSEL_HSYNC;
+			lcd_tcon_timing_VS.tcon_inv =
+					(vdc5_sig_pol_t) drv_lcd_config->v_sync_port_polarity;
+			lcd_tcon_timing_VS.tcon_pin =
+					(vdc5_lcd_tcon_pin_t) drv_lcd_config->v_sync_port;
+			lcd_tcon_timing_VS.outcnt_edge = VDC5_EDGE_FALLING;
+			output.outctrl[VDC5_LCD_TCONSIG_STVA_VS] = &lcd_tcon_timing_VS; /* STVA/VS: Vsync      */
+		} else {
+			output.outctrl[VDC5_LCD_TCONSIG_STVA_VS] = NULL; /* STVA/VS: Vsync      */
+		}
+
+		if (drv_lcd_config->h_sync_port != DRV_LCD_TCON_PIN_NON) {
+			lcd_tcon_timing_HS.tcon_hsvs = 0u;
+			lcd_tcon_timing_HS.tcon_hwvw = drv_lcd_config->h_sync_width;
+			lcd_tcon_timing_HS.tcon_md = VDC5_LCD_TCON_POLMD_NORMAL;
+			lcd_tcon_timing_HS.tcon_hs_sel = VDC5_LCD_TCON_REFSEL_HSYNC;
+			lcd_tcon_timing_HS.tcon_inv =
+					(vdc5_sig_pol_t) drv_lcd_config->h_sync_port_polarity;
+			lcd_tcon_timing_HS.tcon_pin =
+					(vdc5_lcd_tcon_pin_t) drv_lcd_config->h_sync_port;
+			lcd_tcon_timing_HS.outcnt_edge = VDC5_EDGE_FALLING;
+			output.outctrl[VDC5_LCD_TCONSIG_STH_SP_HS] = &lcd_tcon_timing_HS; /* STH/SP/HS: Hsync       */
+		} else {
+			output.outctrl[VDC5_LCD_TCONSIG_STH_SP_HS] = NULL; /* STH/SP/HS: Hsync       */
+		}
+
+		if (drv_lcd_config->de_port != DRV_LCD_TCON_PIN_NON) {
+			lcd_tcon_timing_VE.tcon_hsvs = (drv_lcd_config->v_back_porch * 2u);
+			lcd_tcon_timing_VE.tcon_hwvw = (drv_lcd_config->v_disp_widht * 2u);
+			lcd_tcon_timing_VE.tcon_md = VDC5_LCD_TCON_POLMD_NORMAL;
+			lcd_tcon_timing_VE.tcon_hs_sel = VDC5_LCD_TCON_REFSEL_HSYNC;
+			lcd_tcon_timing_VE.tcon_inv =
+					(vdc5_sig_pol_t) drv_lcd_config->de_port_polarity;
+			lcd_tcon_timing_VE.tcon_pin = VDC5_LCD_TCON_PIN_NON;
+			lcd_tcon_timing_VE.outcnt_edge = VDC5_EDGE_FALLING;
+			output.outctrl[VDC5_LCD_TCONSIG_STVB_VE] = &lcd_tcon_timing_VE; /* STVB/VE: Not used   */
+
+			lcd_tcon_timing_HE.tcon_hsvs = drv_lcd_config->h_back_porch;
+			lcd_tcon_timing_HE.tcon_hwvw = drv_lcd_config->h_disp_widht;
+			lcd_tcon_timing_HE.tcon_md = VDC5_LCD_TCON_POLMD_NORMAL;
+			lcd_tcon_timing_HE.tcon_hs_sel = VDC5_LCD_TCON_REFSEL_HSYNC;
+			lcd_tcon_timing_HE.tcon_inv =
+					(vdc5_sig_pol_t) drv_lcd_config->de_port_polarity;
+			lcd_tcon_timing_HE.tcon_pin = VDC5_LCD_TCON_PIN_NON;
+			lcd_tcon_timing_HE.outcnt_edge = VDC5_EDGE_FALLING;
+			output.outctrl[VDC5_LCD_TCONSIG_STB_LP_HE] = &lcd_tcon_timing_HE; /* STB/LP/HE: Not used */
+
+			lcd_tcon_timing_DE.tcon_hsvs = 0u;
+			lcd_tcon_timing_DE.tcon_hwvw = 0u;
+			lcd_tcon_timing_DE.tcon_md = VDC5_LCD_TCON_POLMD_NORMAL;
+			lcd_tcon_timing_DE.tcon_hs_sel = VDC5_LCD_TCON_REFSEL_HSYNC;
+			lcd_tcon_timing_DE.tcon_inv =
+					(vdc5_sig_pol_t) drv_lcd_config->de_port_polarity;
+			lcd_tcon_timing_DE.tcon_pin =
+					(vdc5_lcd_tcon_pin_t) drv_lcd_config->de_port;
+			lcd_tcon_timing_DE.outcnt_edge = VDC5_EDGE_FALLING;
+			output.outctrl[VDC5_LCD_TCONSIG_DE] = &lcd_tcon_timing_DE; /* DE      */
+		} else {
+			output.outctrl[VDC5_LCD_TCONSIG_STVB_VE] = NULL; /* STVB/VE: Not used   */
+			output.outctrl[VDC5_LCD_TCONSIG_STB_LP_HE] = NULL; /* STB/LP/HE: Not used */
+			output.outctrl[VDC5_LCD_TCONSIG_DE] = NULL; /* DE                  */
+		}
+
+		output.outctrl[VDC5_LCD_TCONSIG_CPV_GCK] = NULL;
+		output.outctrl[VDC5_LCD_TCONSIG_POLA] = NULL;
+		output.outctrl[VDC5_LCD_TCONSIG_POLB] = NULL;
+
+		output.outcnt_lcd_edge = (vdc5_edge_t) drv_lcd_config->lcd_edge; /* Output phase control of LCD_DATA23 to LCD_DATA0 pin */
+		output.out_endian_on = VDC5_OFF; /* Bit endian change on/off control */
+		output.out_swap_on = VDC5_OFF; /* B/R signal swap on/off control */
+		output.out_format =
+				(vdc5_lcd_outformat_t) drv_lcd_config->lcd_outformat; /* Output format select */
+		output.out_frq_sel = VDC5_LCD_PARALLEL_CLKFRQ_1; /* Clock frequency control */
+		output.out_dir_sel = VDC5_LCD_SERIAL_SCAN_FORWARD; /* Scan direction select */
+		output.out_phase = VDC5_LCD_SERIAL_CLKPHASE_0; /* Clock phase adjustment */
+		output.bg_color = (uint32_t) 0x00000000u; /* Background color in 24-bit RGB color format */
+		/* Display output */
+		error = R_VDC5_DisplayOutput(ch, &output);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Init() */
+
+/**************************************************************************//**
+ * @brief       Video initialization processing
+ * @param[in]   drv_video_ext_in_config   : Video configuration
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Video_init(
+		drv_video_input_sel_t drv_video_input_sel,
+		drv_video_ext_in_config_t * drv_video_ext_in_config) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_error_t error;
+	vdc5_input_t input;
+	vdc5_ext_in_sig_t ext_in_sig;
+	vdc5_sync_delay_t sync_delay;
+
+	input.inp_sel = (vdc5_input_sel_t) drv_video_input_sel; /* Input select */
+	input.inp_fh50 = (uint16_t) VSYNC_1_2_FH_TIMING; /* Vsync signal 1/2fH phase timing */
+	input.inp_fh25 = (uint16_t) VSYNC_1_4_FH_TIMING; /* Vsync signal 1/4fH phase timing */
+
+	if (drv_video_input_sel == DRV_INPUT_SEL_VDEC) {
+		input.dly = NULL; /* Sync signal delay adjustment */
+		input.ext_sig = NULL; /* External input signal        */
+	} else {
+		ext_in_sig.inp_format =
+				(vdc5_extin_format_t) drv_video_ext_in_config->inp_format;
+		ext_in_sig.inp_pxd_edge =
+				(vdc5_edge_t) drv_video_ext_in_config->inp_pxd_edge;
+		ext_in_sig.inp_vs_edge =
+				(vdc5_edge_t) drv_video_ext_in_config->inp_vs_edge;
+		ext_in_sig.inp_hs_edge =
+				(vdc5_edge_t) drv_video_ext_in_config->inp_hs_edge;
+		ext_in_sig.inp_endian_on =
+				(vdc5_onoff_t) drv_video_ext_in_config->inp_endian_on;
+		ext_in_sig.inp_swap_on =
+				(vdc5_onoff_t) drv_video_ext_in_config->inp_swap_on;
+		ext_in_sig.inp_vs_inv =
+				(vdc5_sig_pol_t) drv_video_ext_in_config->inp_vs_inv;
+		ext_in_sig.inp_hs_inv =
+				(vdc5_sig_pol_t) drv_video_ext_in_config->inp_hs_inv;
+		ext_in_sig.inp_h_edge_sel =
+				(vdc5_extin_ref_hsync_t) drv_video_ext_in_config->inp_hs_edge;
+		ext_in_sig.inp_f525_625 =
+				(vdc5_extin_input_line_t) drv_video_ext_in_config->inp_f525_625;
+		ext_in_sig.inp_h_pos =
+				(vdc5_extin_h_pos_t) drv_video_ext_in_config->inp_h_pos;
+
+		sync_delay.inp_vs_dly_l = 0u;
+		sync_delay.inp_vs_dly = 16u;
+		sync_delay.inp_hs_dly = 16u;
+		sync_delay.inp_fld_dly = 16u;
+
+		input.dly = &sync_delay; /* Sync signal delay adjustment */
+		input.ext_sig = &ext_in_sig; /* External input signal        */
+	}
+	/* Video input 0ch */
+	error = R_VDC5_VideoInput(VDC5_CHANNEL_0, &input);
+	if (error != VDC5_OK) {
+		drv_error = DRV_GRAPHICS_VDC5_ERR;
+	}
+
+	if (drv_video_input_sel == DRV_INPUT_SEL_VDEC) {
+		if (drv_error == DRV_GRAPHICS_OK) {
+			/* Video input 1ch */
+			error = R_VDC5_VideoInput(VDC5_CHANNEL_1, &input);
+			if (error != VDC5_OK) {
+				drv_error = DRV_GRAPHICS_VDC5_ERR;
+			}
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Video_Init() */
+
+/**************************************************************************//**
+ * @brief       Start the graphics surface read process
+ * @param[in]   layer_id                : Graphics layer ID
+ * @retval      drv_graphics_error_t
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Start(drv_graphics_layer_t layer_id) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_start_t start;
+	vdc5_gr_disp_sel_t gr_disp_sel;
+	vdc5_layer_id_t vdc5_layer_id;
+
+	switch (layer_id) {
+	case DRV_GRAPHICS_LAYER_0:
+		vdc5_layer_id = VDC5_LAYER_ID_0_RD;
+		gr_disp_sel = VDC5_DISPSEL_CURRENT;
+		break;
+	case DRV_GRAPHICS_LAYER_1:
+		vdc5_layer_id = VDC5_LAYER_ID_1_RD;
+		gr_disp_sel = VDC5_DISPSEL_BLEND;
+		break;
+	case DRV_GRAPHICS_LAYER_2:
+		vdc5_layer_id = VDC5_LAYER_ID_2_RD;
+		gr_disp_sel = VDC5_DISPSEL_BLEND;
+		break;
+	case DRV_GRAPHICS_LAYER_3:
+		vdc5_layer_id = VDC5_LAYER_ID_3_RD;
+		gr_disp_sel = VDC5_DISPSEL_BLEND;
+		break;
+	default:
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+		break;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Start process */
+		start.gr_disp_sel = &gr_disp_sel;
+		error = R_VDC5_StartProcess(ch, vdc5_layer_id, &start);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Start() */
+
+/**************************************************************************//**
+ * @brief       Stop the graphics surface read process
+ * @param[in]   layer_id                : Graphics layer ID
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Stop(drv_graphics_layer_t layer_id) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+
+	switch (layer_id) {
+	case DRV_GRAPHICS_LAYER_0:
+		vdc5_layer_id = VDC5_LAYER_ID_0_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_1:
+		vdc5_layer_id = VDC5_LAYER_ID_1_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_2:
+		vdc5_layer_id = VDC5_LAYER_ID_2_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_3:
+		vdc5_layer_id = VDC5_LAYER_ID_3_RD;
+		break;
+	default:
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+		break;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Stop process */
+		error = R_VDC5_StopProcess(ch, vdc5_layer_id);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Stop() */
+
+/**************************************************************************//**
+ * @brief      Start the video surface write process
+ * @param[in]   video_input_ch          : Video input channel
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Video_Start(drv_video_input_channel_t video_input_ch) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_start_t start;
+	vdc5_gr_disp_sel_t gr_disp_sel;
+	vdc5_layer_id_t vdc5_layer_id;
+
+	if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_0) {
+		vdc5_layer_id = VDC5_LAYER_ID_0_WR;
+	} else if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_1) {
+		vdc5_layer_id = VDC5_LAYER_ID_1_WR;
+	} else {
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Start process */
+		gr_disp_sel = VDC5_DISPSEL_CURRENT; /* CURRENT fixed for weave input mode */
+		start.gr_disp_sel = &gr_disp_sel;
+		error = R_VDC5_StartProcess(ch, vdc5_layer_id, &start);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Video_Start() */
+
+/**************************************************************************//**
+ * @brief       Stop the video surface write process
+ * @param[in]   video_input_ch          : Video input channel
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Video_Stop(drv_video_input_channel_t video_input_ch) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+
+	switch (video_input_ch) {
+	case DRV_VIDEO_INPUT_CHANNEL_0:
+		vdc5_layer_id = VDC5_LAYER_ID_0_WR;
+		break;
+	case DRV_VIDEO_INPUT_CHANNEL_1:
+		vdc5_layer_id = VDC5_LAYER_ID_1_WR;
+		break;
+	default:
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+		break;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Stop process */
+		error = R_VDC5_StopProcess(ch, vdc5_layer_id);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Video_Stop() */
+
+/**************************************************************************//**
+ * @brief       Graphics surface read process setting
+ *
+ *              Description:<br>
+ *              This function supports the following 4 image format.
+ *                  YCbCr422, RGB565, RGB888, ARGB8888
+ * @param[in]   layer_id                : Graphics layer ID
+ * @param[in]   framebuff               : Base address of the frame buffer
+ * @param[in]   fb_stride               : Line offset address of the frame buffer
+ * @param[in]   gr_format               : Format of the frame buffer read signal
+ * @param[in]   gr_rect                 : Graphics display area
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Read_Setting(drv_graphics_layer_t layer_id,
+		void * framebuff, uint32_t fb_stride, drv_graphics_format_t gr_format,
+		drv_wr_rd_swa_t wr_rd_swa, drv_rect_t * gr_rect) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+	vdc5_gr_format_t vdc5_gr_format;
+	vdc5_read_t read;
+
+	switch (layer_id) {
+	case DRV_GRAPHICS_LAYER_0:
+		vdc5_layer_id = VDC5_LAYER_ID_0_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_1:
+		vdc5_layer_id = VDC5_LAYER_ID_1_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_2:
+		vdc5_layer_id = VDC5_LAYER_ID_2_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_3:
+		vdc5_layer_id = VDC5_LAYER_ID_3_RD;
+		break;
+	default:
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+		break;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		switch (gr_format) {
+		case DRV_GRAPHICS_FORMAT_YCBCR422:
+			vdc5_gr_format = VDC5_GR_FORMAT_YCBCR422;
+			break;
+		case DRV_GRAPHICS_FORMAT_RGB565:
+			vdc5_gr_format = VDC5_GR_FORMAT_RGB565;
+			break;
+		case DRV_GRAPHICS_FORMAT_RGB888:
+			vdc5_gr_format = VDC5_GR_FORMAT_RGB888;
+			break;
+		case DRV_GRAPHICS_FORMAT_ARGB8888:
+			vdc5_gr_format = VDC5_GR_FORMAT_ARGB8888;
+			break;
+		case DRV_GRAPHICS_FORMAT_ARGB4444:
+			vdc5_gr_format = VDC5_GR_FORMAT_ARGB4444;
+			break;
+		default:
+			drv_error = DRV_GRAPHICS_FORMAT_ERR;
+			break;
+		}
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Read data parameter */
+		read.gr_ln_off_dir = VDC5_GR_LN_OFF_DIR_INC; /* Line offset address direction of the frame buffer */
+		read.gr_flm_sel = VDC5_GR_FLM_SEL_FLM_NUM; /* Selects a frame buffer address setting signal */
+		read.gr_imr_flm_inv = VDC5_OFF; /* Frame buffer number for distortion correction */
+		read.gr_bst_md = VDC5_BST_MD_32BYTE; /* Frame buffer burst transfer mode */
+		read.gr_base = framebuff; /* Frame buffer base address */
+		read.gr_ln_off = fb_stride; /* Frame buffer line offset address */
+
+		read.width_read_fb = NULL; /* Width of the image read from frame buffer */
+
+		read.adj_sel = VDC5_OFF; /* Measures to decrease the influence
+		 by folding pixels/lines (on/off) */
+		read.gr_format = vdc5_gr_format; /* Format of the frame buffer read signal */
+		read.gr_ycc_swap = VDC5_GR_YCCSWAP_CBY0CRY1; /* Controls swapping of data read from buffer
+		 in the YCbCr422 format */
+		read.gr_rdswa = (vdc5_wr_rd_swa_t) wr_rd_swa; /* Frame buffer swap setting */
+		/* Display area */
+		read.gr_grc.vs = gr_rect->vs;
+		read.gr_grc.vw = gr_rect->vw;
+		read.gr_grc.hs = gr_rect->hs;
+		read.gr_grc.hw = gr_rect->hw;
+
+		/* Read data control */
+		error = R_VDC5_ReadDataControl(ch, vdc5_layer_id, &read);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Read_Setting() */
+
+/**************************************************************************//**
+ * @brief       Graphics surface read buffer change process
+ * @param[in]   layer_id                : Graphics layer ID
+ * @param[in]   framebuff               : Base address of the frame buffer
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Read_Change(drv_graphics_layer_t layer_id,
+		void * framebuff) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+	vdc5_read_chg_t read_chg;
+
+	switch (layer_id) {
+	case DRV_GRAPHICS_LAYER_0:
+		vdc5_layer_id = VDC5_LAYER_ID_0_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_1:
+		vdc5_layer_id = VDC5_LAYER_ID_1_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_2:
+		vdc5_layer_id = VDC5_LAYER_ID_2_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_3:
+		vdc5_layer_id = VDC5_LAYER_ID_3_RD;
+		break;
+	default:
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+		break;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Read data parameter */
+		read_chg.width_read_fb = NULL; /* Width of the image read from frame buffer */
+		read_chg.gr_grc = NULL; /* Display area */
+		read_chg.gr_disp_sel = NULL; /* Graphics display mode */
+		read_chg.gr_base = framebuff; /* Frame buffer base address */
+
+		/* Change read process */
+		error = R_VDC5_ChangeReadProcess(ch, vdc5_layer_id, &read_chg);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Read_Change() */
+
+//touch_pos_t dot_border
+void Slide(uint32_t fb_stride, vdc5_chg_read_chg_t * param, slide_dir_t* slide_dir) {
+
+#define SLIDE_STEP                   12
+
+	static int32_t v_line = 0; /* Vertical direction offset variable */
+	static int32_t h_pixel = 0; /* Horizontal direction offset variable */
+	int32_t stride_pix = fb_stride / LCD_CH0_DISP_HW; /* Size(px) of image buffer stride */
+	uint16_t *pos_buff = (uint16_t *) param->gr_base; /* Image buffer position */
+
+	/* Wait Vsync */
+
+	switch (*slide_dir) {
+	case SLIDE_OUT_RIGHT:
+		h_pixel += SLIDE_STEP; /* Increment offset value : 0u -> 800u by 16u step */
+		if (h_pixel >= LCD_CH0_DISP_HW) /* 800u */
+		{
+			h_pixel = LCD_CH0_DISP_HW;
+			*slide_dir = SLIDE_NONE;
+		}
+		param->gr_grc->hs = (uint16_t) ((int32_t) LCD_CH0_DISP_HS + h_pixel);
+		param->gr_grc->hw = (uint16_t) ((int32_t) LCD_CH0_DISP_HW - h_pixel);
+		break;
+	case SLIDE_IN_RIGHT:
+		h_pixel -= SLIDE_STEP; /* Decrement offset value : 800u -> 0u by 16u step */
+		if (h_pixel <= 0) /* 0u */
+		{
+			h_pixel = 0;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_grc->hs = (uint16_t) ((int32_t) LCD_CH0_DISP_HS + h_pixel);
+		param->gr_grc->hw = (uint16_t) ((int32_t) LCD_CH0_DISP_HW - h_pixel);
+		break;
+
+	case SLIDE_OUT_BOTTOM:
+		v_line += SLIDE_STEP; /* Increment offset value : 0u -> 600u by 16u step */
+		if (v_line >= LCD_CH0_DISP_VW) /* 600u */
+		{
+			v_line = LCD_CH0_DISP_VW;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_grc->vs = (uint16_t) ((int32_t) LCD_CH0_DISP_VS + v_line);
+		param->gr_grc->vw = (uint16_t) ((int32_t) LCD_CH0_DISP_VW - v_line);
+		break;
+	case SLIDE_IN_BOTTOM:
+		v_line -= SLIDE_STEP; /* Decrement offset value : 600u -> 0u by 16u step */
+		if (v_line <= 0) /* 0u */
+		{
+			v_line = 0;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_grc->vs = (uint16_t) ((int32_t) LCD_CH0_DISP_VS + v_line);
+		param->gr_grc->vw = (uint16_t) ((int32_t) LCD_CH0_DISP_VW - v_line);
+		break;
+
+	case SLIDE_OUT_LEFT:
+		h_pixel += SLIDE_STEP; /* Increment offset value : 0u -> 800u by 16u step */
+		if (h_pixel >= LCD_CH0_DISP_HW) /* 800u */
+		{
+			h_pixel = LCD_CH0_DISP_HW;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_base = &pos_buff[h_pixel];
+		param->gr_grc->hw = (uint16_t) ((int32_t) LCD_CH0_DISP_HW - h_pixel);
+		break;
+	case SLIDE_IN_LEFT:
+		h_pixel -= SLIDE_STEP; /* Decrement offset value : 800u -> 0u by 16u step */
+		if (h_pixel <= 0) /* 0u */
+		{
+			h_pixel = 0;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_base = &pos_buff[h_pixel];
+		param->gr_grc->hw = (uint16_t) ((int32_t) LCD_CH0_DISP_HW - h_pixel);
+		break;
+
+	case SLIDE_OUT_TOP:
+		v_line += SLIDE_STEP; /* Increment offset value : 0u -> 800u by 16u step */
+		if (v_line >= LCD_CH0_DISP_VW) /* 600u */
+		{
+			v_line = LCD_CH0_DISP_VW;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_base = &pos_buff[v_line * stride_pix];
+		param->gr_grc->vw = (uint16_t) ((int32_t) LCD_CH0_DISP_VW - v_line);
+		break;
+	case SLIDE_IN_TOP:
+		v_line -= SLIDE_STEP; /* Decrement offset value : 800u -> 0u by 16u step */
+		if (v_line <= 0) /* 0u */
+		{
+			v_line = 0;
+			*slide_dir = SLIDE_NONE;;
+		}
+		param->gr_base = &pos_buff[v_line * stride_pix];
+		param->gr_grc->vw = (uint16_t) ((int32_t) LCD_CH0_DISP_VW - v_line);
+		break;
+
+	default:
+		*slide_dir = SLIDE_NONE;
+		h_pixel = 0;
+		v_line = 0;
+		break;
+	}
+}
+
+/**************************************************************************//**
+ * @brief       Graphics surface read buffer change process
+ * @param[in]   layer_id                : Graphics layer ID
+ * @param[in]   framebuff               : Base address of the frame buffer
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Graphics_Read_Change_More(
+		drv_graphics_layer_t layer_id, void * framebuff, uint32_t fb_stride, void * slide_dir) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+	vdc5_chg_read_chg_t read_chg;
+
+	vdc5_period_rect_t grN_grc = { LCD_CH0_DISP_VS, LCD_CH0_DISP_VW,
+			LCD_CH0_DISP_HS, LCD_CH0_DISP_HW };
+
+	switch (layer_id) {
+	case DRV_GRAPHICS_LAYER_0:
+		vdc5_layer_id = VDC5_LAYER_ID_0_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_1:
+		vdc5_layer_id = VDC5_LAYER_ID_1_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_2:
+		vdc5_layer_id = VDC5_LAYER_ID_2_RD;
+		break;
+	case DRV_GRAPHICS_LAYER_3:
+		vdc5_layer_id = VDC5_LAYER_ID_3_RD;
+		break;
+	default:
+		drv_error = DRV_GRAPHICS_LAYER_ERR;
+		break;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Read data parameter */
+
+		read_chg.width_read_fb = NULL; /* Width of the image read from frame buffer */
+		read_chg.gr_grc = &grN_grc; /* Display area */
+		read_chg.gr_disp_sel = NULL; /* Graphics display mode */
+		read_chg.gr_base = framebuff;
+
+		Slide( fb_stride, &read_chg, (slide_dir_t*)slide_dir);
+
+		//read_chg.gr_base        = framebuff;     /* Frame buffer base address */
+
+		/* Change read process */
+		error = R_VDC5_ChangeReadProcess(ch, vdc5_layer_id,
+				(vdc5_read_chg_t*) &read_chg);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Graphics_Read_Change_More() */
+
+/**************************************************************************//**
+ * @brief       Video surface write process setting
+ *
+ *              Description:<br>
+ *              This function set the video write process. Input form is weave
+ *              (progressive) mode fixed.
+ *              This function supports the following 3 image format.
+ *                  YCbCr422, RGB565, RGB888
+ * @param[in]   video_input_ch          : Video input channel
+ * @param[in]   col_sys                 : Analog video signal color system
+ * @param[in]   adc_vinsel              : Video input pin
+ * @param[in]   framebuff               : Base address of the frame buffer
+ * @param[in]   fb_stride [byte]        : Line offset address of the frame buffer
+ * @param[in]   video_format            : Frame buffer video-signal writing format
+ * @param[in]   wr_rd_swa               : Frame buffer swap setting
+ * @param[in]   video_write_size_vw [px]: output height
+ * @param[in]   video_write_size_hw [px]: output width
+ * @param[in]   video_adc_vinsel        : Input pin control
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Video_Write_Setting(
+		drv_video_input_channel_t video_input_ch,
+		drv_graphics_video_col_sys_t col_sys, void * framebuff,
+		uint32_t fb_stride, drv_video_format_t video_format,
+		drv_wr_rd_swa_t wr_rd_swa, uint16_t video_write_buff_vw,
+		uint16_t video_write_buff_hw, drv_video_adc_vinsel_t video_adc_vinsel) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+	vdc5_write_t write;
+	vdc5_scalingdown_rot_t * scldw_rot;
+	vdc5_res_md_t res_md;
+	drv_rect_t video_in_rect;
+	uint8_t * framebuffer_t;
+	uint8_t * framebuffer_b;
+
+	if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_0) {
+		GRAPHICS_VideoDecoderInit((vdec_adc_vinsel_t) video_adc_vinsel,
+				VDEC_CHANNEL_0, (graphics_col_sys_t) col_sys);
+	} else if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_1) {
+		GRAPHICS_VideoDecoderInit((vdec_adc_vinsel_t) video_adc_vinsel,
+				VDEC_CHANNEL_1, (graphics_col_sys_t) col_sys);
+	} else {
+		drv_error = DRV_GRAPHICS_CHANNEL_ERR;
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_0) {
+			vdc5_layer_id = VDC5_LAYER_ID_0_WR;
+		} else if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_1) {
+			vdc5_layer_id = VDC5_LAYER_ID_1_WR;
+		} else {
+			drv_error = DRV_GRAPHICS_CHANNEL_ERR;
+		}
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		if (video_format == DRV_VIDEO_FORMAT_YCBCR422) {
+			res_md = VDC5_RES_MD_YCBCR422;
+		} else if (video_format == DRV_VIDEO_FORMAT_RGB888) {
+			res_md = VDC5_RES_MD_RGB888;
+		} else if (video_format == DRV_VIDEO_FORMAT_RGB565) {
+			res_md = VDC5_RES_MD_RGB565;
+		} else {
+			drv_error = DRV_GRAPHICS_FORMAT_ERR;
+		}
+	}
+
+	if (col_sys == DRV_COL_SYS_NTSC_358 || col_sys == DVV_COL_SYS_NTSC_443
+			|| col_sys == DRV_COL_SYS_NTSC_443_60) {
+		video_in_rect.hs = IMGCAP_SIZE_NTSC_HS * 2;
+		video_in_rect.hw = IMGCAP_SIZE_NTSC_HW * 2;
+		video_in_rect.vs = IMGCAP_SIZE_NTSC_VS;
+		video_in_rect.vw = IMGCAP_SIZE_NTSC_VW;
+	} else {
+		video_in_rect.hs = IMGCAP_SIZE_PAL_HS * 2;
+		video_in_rect.hw = IMGCAP_SIZE_PAL_HW * 2;
+		video_in_rect.vs = IMGCAP_SIZE_PAL_VS;
+		video_in_rect.vw = IMGCAP_SIZE_PAL_VW;
+	}
+
+#ifdef NO_SCALE_UP
+	if( drv_error == DRV_GRAPHICS_OK ) {
+		if( col_sys == DRV_COL_SYS_NTSC_358 || col_sys == DVV_COL_SYS_NTSC_443 || col_sys == DRV_COL_SYS_NTSC_443_60 ) {
+			if( (video_write_buff_vw / 2u) > video_in_rect.vw ) {
+				drv_error = DRV_GRAPHICS_VIDEO_NTSC_SIZE_ERR;
+			}
+		} else {
+			if( (video_write_buff_vw / 2u) > video_in_rect.vw ) {
+				drv_error = DRV_GRAPHICS_VIDEO_PAL_SIZE_ERR;
+			}
+		}
+	}
+
+	if( drv_error == DRV_GRAPHICS_OK ) {
+		if( video_write_buff_hw > 800 ) {
+			drv_error = DRV_GRAPHICS_PARAM_RANGE_ERR;
+		}
+	}
+#endif
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Scaling-down and rotation parameter */
+		scldw_rot = &write.scalingdown_rot;
+		/* Image area to be captured */
+		scldw_rot->res.vs = (uint16_t) ((uint32_t) video_in_rect.vs - 1u);
+		scldw_rot->res.vw = video_in_rect.vw;
+		scldw_rot->res.hs = video_in_rect.hs;
+		scldw_rot->res.hw = video_in_rect.hw;
+
+		/* Width of the image output from scaling-down control block
+		 Width of the image read from frame buffer */
+		if (video_write_buff_vw > LCD_CH0_DISP_VW) {
+			video_write_buff_vw = LCD_CH0_DISP_VW;
+		}
+
+		if (video_write_buff_hw > LCD_CH0_DISP_HW) {
+			video_write_buff_hw = LCD_CH0_DISP_HW;
+		}
+
+		//scldw_rot->res
+		/* Write data parameter */
+		framebuffer_t = framebuff;
+		framebuffer_b = &framebuffer_t[fb_stride];
+		scldw_rot->res_pfil_sel = VDC5_ON; /* Prefilter mode select for brightness signals (on/off) */
+		scldw_rot->res_out_vw = video_write_buff_vw / 2u; /* Number of valid lines in vertical direction
+		 output by scaling-down control block */
+		scldw_rot->res_out_hw = video_write_buff_hw; /* Number of valid horizontal pixels
+		 output by scaling-down control block */
+		scldw_rot->adj_sel = VDC5_ON; /* Measures to decrease the influence
+		 by lack of last-input line (on/off) */
+		scldw_rot->res_ds_wr_md = VDC5_WR_MD_NORMAL; /* Frame buffer writing mode */
+		write.res_wrswa = (vdc5_wr_rd_swa_t) wr_rd_swa; /* Frame buffer swap setting */
+		write.res_md = res_md; /* Frame buffer video-signal writing format */
+		write.res_bst_md = VDC5_BST_MD_32BYTE; /* Transfer burst length for frame buffer */
+		write.res_inter = VDC5_RES_INTER_PROGRESSIVE; /* Field operating mode select */
+		write.res_fs_rate = VDC5_RES_FS_RATE_PER1; /* Writing rate */
+		write.res_fld_sel = VDC5_RES_FLD_SEL_TOP; /* Write field select */
+		write.res_dth_on = VDC5_ON; /* Dither correction on/off */
+		write.base = framebuff; /* Frame buffer base address */
+		write.ln_off = fb_stride * 2u; /* Frame buffer line offset address [byte] */
+		write.flm_num = (uint32_t) (1u - 1u); /* Number of frames of buffer (res_flm_num + 1) */
+		/* Frame buffer frame offset address */
+		write.flm_off = fb_stride * 2u * (uint32_t) scldw_rot->res_out_vw;
+		write.btm_base = framebuffer_b; /* Frame buffer base address for bottom */
+
+		/* Write data control */
+		error = R_VDC5_WriteDataControl(ch, vdc5_layer_id, &write);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Video_Write_Setting() */
+
+/**************************************************************************//**
+ * @brief       Video surface write process setting for digital input
+ *
+ *              Description:<br>
+ *              This function set the video write process for digital input.
+ *              This function supports the following 3 image format.
+ *                  YCbCr422, RGB565, RGB888
+ * @param[in]   framebuff               : Base address of the frame buffer
+ * @param[in]   fb_stride [byte]        : Line offset address of the frame buffer
+ * @param[in]   video_format            : Frame buffer video-signal writing format
+ * @param[in]   wr_rd_swa               : Frame buffer swap setting
+ * @param[in]   video_write_size_vw [px]: output height
+ * @param[in]   video_write_size_hw [px]: output width
+ * @param[in]   cap_area                : Capture area
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Video_Write_Setting_Digital(void * framebuff,
+		uint32_t fb_stride, drv_video_format_t video_format,
+		drv_wr_rd_swa_t wr_rd_swa, uint16_t video_write_buff_vw,
+		uint16_t video_write_buff_hw, drv_rect_t * cap_area) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	vdc5_channel_t ch = VDC5_CHANNEL_0;
+	vdc5_error_t error;
+	vdc5_layer_id_t vdc5_layer_id;
+	vdc5_write_t write;
+	vdc5_scalingdown_rot_t * scldw_rot;
+	vdc5_res_md_t res_md;
+
+	vdc5_layer_id = VDC5_LAYER_ID_0_WR;
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		if (video_format == DRV_VIDEO_FORMAT_YCBCR422) {
+			res_md = VDC5_RES_MD_YCBCR422;
+		} else if (video_format == DRV_VIDEO_FORMAT_RGB888) {
+			res_md = VDC5_RES_MD_RGB888;
+		} else if (video_format == DRV_VIDEO_FORMAT_RGB565) {
+			res_md = VDC5_RES_MD_RGB565;
+		} else {
+			drv_error = DRV_GRAPHICS_FORMAT_ERR;
+		}
+	}
+
+	if (drv_error == DRV_GRAPHICS_OK) {
+		/* Scaling-down and rotation parameter */
+		scldw_rot = &write.scalingdown_rot;
+		/* Image area to be captured */
+		scldw_rot->res.vs = (uint16_t) ((uint32_t) cap_area->vs - 1u);
+		scldw_rot->res.vw = cap_area->vw;
+		scldw_rot->res.hs = cap_area->hs;
+		scldw_rot->res.hw = cap_area->hw;
+
+		/* Write data parameter */
+		scldw_rot->res_pfil_sel = VDC5_ON; /* Prefilter mode select for brightness signals (on/off) */
+		scldw_rot->res_out_vw = video_write_buff_vw; /* Number of valid lines in vertical direction
+		 output by scaling-down control block */
+		scldw_rot->res_out_hw = video_write_buff_hw; /* Number of valid horizontal pixels
+		 output by scaling-down control block */
+		scldw_rot->adj_sel = VDC5_ON; /* Measures to decrease the influence
+		 by lack of last-input line (on/off) */
+		scldw_rot->res_ds_wr_md = VDC5_WR_MD_NORMAL; /* Frame buffer writing mode */
+		write.res_wrswa = (vdc5_wr_rd_swa_t) wr_rd_swa; /* Frame buffer swap setting */
+		write.res_md = res_md; /* Frame buffer video-signal writing format */
+		write.res_bst_md = VDC5_BST_MD_32BYTE; /* Transfer burst length for frame buffer */
+		write.res_inter = VDC5_RES_INTER_PROGRESSIVE; /* Field operating mode select */
+		write.res_fs_rate = VDC5_RES_FS_RATE_PER1; /* Writing rate */
+		write.res_fld_sel = VDC5_RES_FLD_SEL_TOP; /* Write field select */
+		write.res_dth_on = VDC5_ON; /* Dither correction on/off */
+		write.base = framebuff; /* Frame buffer base address */
+		write.ln_off = fb_stride;
+		/* Frame buffer line offset address [byte] */
+		write.flm_num = (uint32_t) (1u - 1u); /* Number of frames of buffer (res_flm_num + 1) */
+		/* Frame buffer frame offset address */
+		write.flm_off = fb_stride * (uint32_t) scldw_rot->res_out_vw;
+		write.btm_base = NULL; /* Frame buffer base address for bottom */
+
+		/* Write data control */
+		error = R_VDC5_WriteDataControl(ch, vdc5_layer_id, &write);
+		if (error != VDC5_OK) {
+			drv_error = DRV_GRAPHICS_VDC5_ERR;
+		}
+	}
+	return drv_error;
+} /* End of function DRV_Video_Write_Setting_Digital() */
+
+/**************************************************************************//**
+ * @brief       Video surface write buffer change process
+ * @param[in]   video_input_ch          : Video input channle
+ * @param[in]   framebuff               : Base address of the frame buffer
+ * @param[in]   fb_stride               : Line offset address of the frame buffer
+ * @retval      Error code
+ ******************************************************************************/
+drv_graphics_error_t DRV_Video_Write_Change(
+		drv_video_input_channel_t video_input_ch, void * framebuff,
+		uint32_t fb_stride) {
+	drv_graphics_error_t drv_error = DRV_GRAPHICS_OK;
+	uint8_t * framebuffer_t;
+	uint8_t * framebuffer_b;
+
+	framebuffer_t = (uint8_t *) ((uint32_t) framebuff & ~0x1F);
+	framebuffer_b = &framebuffer_t[fb_stride];
+
+	if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_0) {
+		VDC50.SC0_SCL1_WR2 = (uint32_t) framebuffer_t;
+		VDC50.SC0_SCL1_WR8 = (uint32_t) framebuffer_b;
+		VDC50.SC0_SCL1_UPDATE = 0x10;
+	} else if (video_input_ch == DRV_VIDEO_INPUT_CHANNEL_1) {
+		VDC50.SC1_SCL1_WR2 = (uint32_t) framebuffer_t;
+		VDC50.SC1_SCL1_WR8 = (uint32_t) framebuffer_b;
+		VDC50.SC1_SCL1_UPDATE = 0x10;
+	} else {
+		drv_error = DRV_GRAPHICS_CHANNEL_ERR;
+	}
+	return drv_error;
+} /* End of function DRV_Video_Write_Change() */
+
+/* End of file */
+