Files
gk-sdk/sample/ive/common/sample_comm_ive.h

243 lines
9.4 KiB
C

/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __SAMPLE_COMM_IVE_H__
#define __SAMPLE_COMM_IVE_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include "sample_comm.h"
#include "sample_comm_sys.h"
#include "sample_comm_vi.h"
#include "sample_comm_vpss.h"
#include "sample_comm_venc.h"
#include "sample_comm_isp.h"
#include "xmedia_debug.h"
#include "xmedia_ive_common.h"
#include "xmedia_ive.h"
#include "sample_comm.h"
#define VIDEO_WIDTH 352
#define VIDEO_HEIGHT 288
#define IVE_ALIGN 8
#define IVE_CHAR_CALW 8
#define IVE_CHAR_CALH 8
#define IVE_CHAR_NUM (IVE_CHAR_CALW *IVE_CHAR_CALH)
#define IVE_FILE_NAME_LEN 256
#define IVE_RECT_NUM 20
#define VPSS_CHN_NUM 2
#define SAMPLE_ALIGN_BACK(x, a) ((a) * (((x) / (a))))
//malloc
xmedia_s32 sample_ive_sys_mmz_alloc(xmedia_u64 *pu64_phy_addr,
xmedia_void **pp_vir_addr,
const xmedia_char *str_mmb,
const xmedia_char *str_zone,
xmedia_u32 u32_len);
xmedia_s32 sample_ive_sys_mmz_alloc_cached(xmedia_u64 *pu64_phy_addr,
xmedia_void **pp_vir_addr,
const xmedia_char *str_mmb,
const xmedia_char *str_zone,
xmedia_u32 u32_len);
xmedia_s32 sample_ive_sys_mmz_free(xmedia_u64 u64_phy_addr, xmedia_void *p_vir_addr);
xmedia_s32 sample_ive_sys_mmz_flush_cache(xmedia_u64 u64_phy_addr,
xmedia_void *p_vir_addr,
xmedia_u32 u32_size);
typedef struct sample_ive_switch_s
{
xmedia_bool b_venc;
xmedia_bool b_vo;
}sample_ive_switch_s;
typedef struct sample_ive_rect_s
{
xmedia_video_point ast_point[4];
} sample_ive_rect_s;
typedef struct sample_rect_array_s
{
xmedia_u16 u16_num;
sample_ive_rect_s ast_rect[IVE_RECT_NUM];
} sample_rect_array_s;
typedef struct ive_linear_data_s
{
xmedia_s32 s32_linear_num;
xmedia_s32 s32_thresh_num;
xmedia_video_point* pst_linear_point;
} ive_linear_data_s;
typedef struct sample_ive_draw_rect_msg_s
{
xmedia_video_frame_info st_frame_info;
sample_rect_array_s st_region;
} sample_ive_draw_rect_msg_s;
//free mmz
#define IVE_MMZ_FREE(phy,vir)\
do{\
if ((0 != (phy)) && (0 != (vir)))\
{\
sample_ive_sys_mmz_free((phy),(xmedia_void *)(xmedia_ulong)(vir));\
(phy) = 0;\
(vir) = 0;\
}\
}while(0)
#define IVE_CLOSE_FILE(fp)\
do{\
if (NULL != (fp))\
{\
fclose((fp));\
(fp) = NULL;\
}\
}while(0)
#define SAMPLE_PAUSE()\
do {\
printf("---------------press Enter key to exit!---------------\n");\
(void)getchar();\
} while (0)
#define SAMPLE_CHECK_EXPR(expr, fmt...)\
do\
{\
if(expr)\
{\
SAMPLE_PRT(fmt);\
}\
}while(0)
#define SAMPLE_CHECK_EXPR_RET(expr, ret, fmt...)\
do\
{\
if(expr)\
{\
SAMPLE_PRT(fmt);\
return (ret);\
}\
}while(0)
#define SAMPLE_CHECK_EXPR_GOTO(expr, label, fmt...)\
do\
{\
if(expr)\
{\
SAMPLE_PRT(fmt);\
goto label;\
}\
}while(0)
#define SAMPLE_COMM_IVE_CONVERT_64BIT_ADDR(Type,Addr) (Type*)(xmedia_ulong)(Addr)
/******************************************************************************
* function : Mpi init
******************************************************************************/
xmedia_void sample_comm_ive_check_ive_mpi_init(xmedia_void);
/******************************************************************************
* function : Mpi exit
******************************************************************************/
xmedia_s32 sample_comm_ive_ive_mpi_exit(xmedia_void);
/******************************************************************************
* function :Read file
******************************************************************************/
xmedia_s32 sample_comm_ive_read_file(xmedia_ive_image_s* pst_img, FILE* pfp);
/******************************************************************************
* function :Write file
******************************************************************************/
xmedia_s32 sample_comm_ive_write_file(xmedia_ive_image_s* pst_img, FILE* pfp);
/******************************************************************************
* function :Calc stride
******************************************************************************/
xmedia_u16 sample_comm_ive_calc_stride(xmedia_u32 u32width, xmedia_u8 u8align);
/******************************************************************************
* function : Copy blob to rect
******************************************************************************/
xmedia_void sample_comm_ive_blob_to_rect(xmedia_ive_ccblob_s *pst_blob, sample_rect_array_s *pst_rect,
xmedia_u16 u16_rect_max_num,xmedia_u16 u16_area_thr_step,
xmedia_u32 u32_src_width, xmedia_u32 u32_src_height,
xmedia_u32 u32_dst_width,xmedia_u32 u32_dst_height);
/******************************************************************************
* function : Create ive image
******************************************************************************/
xmedia_s32 sample_comm_ive_create_image(xmedia_ive_image_s* pst_img, xmedia_ive_image_type_e en_type,
xmedia_u32 u32width, xmedia_u32 u32height);
/******************************************************************************
* function : Create memory info
******************************************************************************/
xmedia_s32 sample_comm_ive_create_mem_info(xmedia_ive_mem_info_s* pst_mem_info, xmedia_u32 u32size);
/******************************************************************************
* function : Create ive image by cached
******************************************************************************/
xmedia_s32 sample_comm_ive_create_image_by_cached(xmedia_ive_image_s* pst_img,
xmedia_ive_image_type_e en_type, xmedia_u32 u32width, xmedia_u32 u32height);
/******************************************************************************
* function : Create xmedia_ive_data_s
******************************************************************************/
xmedia_s32 sample_comm_ive_create_data(xmedia_ive_data_s* pst_data,xmedia_u32 u32width, xmedia_u32 u32height);
/******************************************************************************
* function : Init Vb
******************************************************************************/
xmedia_s32 sample_comm_ive_vb_init(pic_size_e *paenSize,xmedia_video_size *pastSize,xmedia_u32 u32VpssChnNum);
/******************************************************************************
* function : Dma frame info to ive image
******************************************************************************/
xmedia_s32 sample_comm_ive_dma_image(xmedia_video_frame_info *pst_frame_info,xmedia_ive_dst_image_s *pst_dst,xmedia_bool b_instant);
/******************************************************************************
* function : Call vgs to fill rect
******************************************************************************/
xmedia_s32 sample_comm_vgs_fill_rect(xmedia_video_frame_info* pst_frm_info, sample_rect_array_s* pst_rect, xmedia_u32 u32_color);
/******************************************************************************
* function : Start Vpss
******************************************************************************/
xmedia_s32 sample_comm_ive_start_vpss(xmedia_video_size *pastSize,xmedia_u32 u32VpssChnNum);
/******************************************************************************
* function : Stop Vpss
******************************************************************************/
xmedia_void sample_comm_ive_stop_vpss(xmedia_u32 u32VpssChnNum);
/******************************************************************************
* function : Start Vo
******************************************************************************/
xmedia_s32 sample_comm_ive_start_vo(pic_size_e enPicSize);
/******************************************************************************
* function : Stop Vo
******************************************************************************/
xmedia_void sample_comm_ive_stop_vo(pic_size_e enPicSize);
/******************************************************************************
* function : Start Vi/Vpss/Venc/Vo
******************************************************************************/
xmedia_s32 sample_comm_ive_start_vi_vpss_venc_vo(sample_vi_config *pstViConfig,sample_ive_switch_s *pstSwitch,pic_size_e *penExtPicSize);
/******************************************************************************
* function : Stop Vi/Vpss/Venc/Vo
******************************************************************************/
xmedia_void sample_comm_ive_stop_vi_vpss_venc_vo(sample_vi_config *pstViConfig,sample_ive_switch_s *pstSwitch);
/*
* function : Create memory info with cache
*/
xmedia_s32 sample_common_malloc_mem_cache(xmedia_u64 *phys_addr, void **virt_addr, xmedia_u32 size);
/*
* function : free memory
*/
xmedia_s32 sample_common_free_mem(xmedia_u64 phys_addr, void *virt_addr);
#endif