#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/time.h>
#include <fcntl.h>
#include <errno.h>
#include <pthread.h>
#include <math.h>
#include <unistd.h>
#include <signal.h>
#include "sample_comm.h"
#define SAMPLE_VO_DEF_VALUE (-1)
HI_S32 SAMPLE_COMM_VO_GetWH(VO_INTF_SYNC_E enIntfSync, HI_U32* pu32W, HI_U32* pu32H, HI_U32* pu32Frm)
{
switch (enIntfSync)
{
case VO_OUTPUT_PAL :
*pu32W = 720;
*pu32H = 576;
*pu32Frm = 25;
break;
case VO_OUTPUT_NTSC :
*pu32W = 720;
*pu32H = 480;
*pu32Frm = 30;
break;
case VO_OUTPUT_1080P24 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 24;
break;
case VO_OUTPUT_1080P25 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 25;
break;
case VO_OUTPUT_1080P30 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 30;
break;
case VO_OUTPUT_720P50 :
*pu32W = 1280;
*pu32H = 720;
*pu32Frm = 50;
break;
case VO_OUTPUT_720P60 :
*pu32W = 1280;
*pu32H = 720;
*pu32Frm = 60;
break;
case VO_OUTPUT_1080I50 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 50;
break;
case VO_OUTPUT_1080I60 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 60;
break;
case VO_OUTPUT_1080P50 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 50;
break;
case VO_OUTPUT_1080P60 :
*pu32W = 1920;
*pu32H = 1080;
*pu32Frm = 60;
break;
case VO_OUTPUT_576P50 :
*pu32W = 720;
*pu32H = 576;
*pu32Frm = 50;
break;
case VO_OUTPUT_480P60 :
*pu32W = 720;
*pu32H = 480;
*pu32Frm = 60;
break;
case VO_OUTPUT_800x600_60:
*pu32W = 800;
*pu32H = 600;
*pu32Frm = 60;
break;
case VO_OUTPUT_1024x768_60:
*pu32W = 1024;
*pu32H = 768;
*pu32Frm = 60;
break;
case VO_OUTPUT_1280x1024_60:
*pu32W = 1280;
*pu32H = 1024;
*pu32Frm = 60;
break;
case VO_OUTPUT_1366x768_60:
*pu32W = 1366;
*pu32H = 768;
*pu32Frm = 60;
break;
case VO_OUTPUT_1440x900_60:
*pu32W = 1440;
*pu32H = 900;
*pu32Frm = 60;
break;
case VO_OUTPUT_1280x800_60:
*pu32W = 1280;
*pu32H = 800;
*pu32Frm = 60;
break;
case VO_OUTPUT_1600x1200_60:
*pu32W = 1600;
*pu32H = 1200;
*pu32Frm = 60;
break;
case VO_OUTPUT_1680x1050_60:
*pu32W = 1680;
*pu32H = 1050;
*pu32Frm = 60;
break;
case VO_OUTPUT_1920x1200_60:
*pu32W = 1920;
*pu32H = 1200;
*pu32Frm = 60;
break;
case VO_OUTPUT_640x480_60:
*pu32W = 640;
*pu32H = 480;
*pu32Frm = 60;
break;
case VO_OUTPUT_960H_PAL:
*pu32W = 960;
*pu32H = 576;
*pu32Frm = 50;
break;
case VO_OUTPUT_960H_NTSC:
*pu32W = 960;
*pu32H = 480;
*pu32Frm = 60;
break;
case VO_OUTPUT_1920x2160_30:
*pu32W = 1920;
*pu32H = 2160;
*pu32Frm = 30;
break;
case VO_OUTPUT_2560x1440_30:
*pu32W = 2560;
*pu32H = 1440;
*pu32Frm = 30;
break;
case VO_OUTPUT_2560x1600_60:
*pu32W = 2560;
*pu32H = 1600;
*pu32Frm = 60;
break;
case VO_OUTPUT_3840x2160_30 :
*pu32W = 3840;
*pu32H = 2160;
*pu32Frm = 30;
break;
case VO_OUTPUT_3840x2160_60 :
*pu32W = 3840;
*pu32H = 2160;
*pu32Frm = 60;
break;
case VO_OUTPUT_320x240_60 :
*pu32W = 320;
*pu32H = 240;
*pu32Frm = 60;
break;
case VO_OUTPUT_320x240_50 :
*pu32W = 320;
*pu32H = 240;
*pu32Frm = 50;
break;
case VO_OUTPUT_240x320_50 :
*pu32W = 240;
*pu32H = 320;
*pu32Frm = 50;
break;
case VO_OUTPUT_240x320_60 :
*pu32W = 240;
*pu32H = 320;
*pu32Frm = 60;
break;
case VO_OUTPUT_800x600_50 :
*pu32W = 800;
*pu32H = 600;
*pu32Frm = 50;
break;
case VO_OUTPUT_720x1280_60 :
*pu32W = 720;
*pu32H = 1280;
*pu32Frm = 60;
break;
case VO_OUTPUT_1080x1920_60 :
*pu32W = 1080;
*pu32H = 1920;
*pu32Frm = 60;
break;
case VO_OUTPUT_7680x4320_30 :
*pu32W = 7680;
*pu32H = 4320;
*pu32Frm = 30;
break;
case VO_OUTPUT_USER :
*pu32W = 720;
*pu32H = 576;
*pu32Frm = 25;
break;
default:
SAMPLE_PRT("vo enIntfSync %d not support!\n", enIntfSync);
return HI_FAILURE;
}
return HI_SUCCESS;
}
HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S* pstPubAttr)
{
HI_S32 s32Ret = HI_SUCCESS;
s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
s32Ret = HI_MPI_VO_Enable(VoDev);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
return s32Ret;
}
HI_S32 SAMPLE_COMM_VO_StopDev(VO_DEV VoDev)
{
HI_S32 s32Ret = HI_SUCCESS;
s32Ret = HI_MPI_VO_Disable(VoDev);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
return s32Ret;
}
HI_S32 SAMPLE_COMM_VO_StartLayer(VO_LAYER VoLayer, const VO_VIDEO_LAYER_ATTR_S* pstLayerAttr)
{
HI_S32 s32Ret = HI_SUCCESS;
s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoLayer, pstLayerAttr);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
s32Ret = HI_MPI_VO_EnableVideoLayer(VoLayer);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
return s32Ret;
}
HI_S32 SAMPLE_COMM_VO_StopLayer(VO_LAYER VoLayer)
{
HI_S32 s32Ret = HI_SUCCESS;
s32Ret = HI_MPI_VO_DisableVideoLayer(VoLayer);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
return s32Ret;
}
HI_S32 SAMPLE_COMM_VO_StartChn(VO_LAYER VoLayer, SAMPLE_VO_MODE_E enMode)
{
HI_S32 i;
HI_S32 s32Ret = HI_SUCCESS;
HI_U32 u32WndNum = 0;
HI_U32