You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
8.4 KiB
288 lines
8.4 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2020. All rights reserved.
|
|
* Description : iapi tvd
|
|
* Author : sdk
|
|
* Create : 2019/11/21
|
|
*/
|
|
|
|
#include "td_type.h"
|
|
#include "uapi_tvd.h"
|
|
#include "mpi_tvd_ext.h"
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
static ext_tvd_video_format_convert g_tvd_vid_format[] = {
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_422_VU, EXT_DRV_PIXEL_FMT_NV61_2X1 },
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_420_VU, EXT_DRV_PIXEL_FMT_NV21 },
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_420_UV, EXT_DRV_PIXEL_FMT_NV12 },
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_400, EXT_DRV_PIXEL_FMT_NV80 },
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_411_VU, EXT_DRV_PIXEL_FMT_NV12_411 },
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_422_UV, EXT_DRV_PIXEL_FMT_NV61 },
|
|
{ UAPI_FORMAT_YUV_SEMIPLANAR_444_VU, EXT_DRV_PIXEL_FMT_NV42 },
|
|
{ UAPI_FORMAT_YUV_PACKAGE_UYVY, EXT_DRV_PIXEL_FMT_UYVY },
|
|
{ UAPI_FORMAT_YUV_PACKAGE_YUYV, EXT_DRV_PIXEL_FMT_YUYV },
|
|
{ UAPI_FORMAT_YUV_PACKAGE_YVYU, EXT_DRV_PIXEL_FMT_YVYU },
|
|
{ UAPI_FORMAT_YUV_PLANAR_400, EXT_DRV_PIXEL_FMT_YUV400 },
|
|
{ UAPI_FORMAT_YUV_PLANAR_411_VU, EXT_DRV_PIXEL_FMT_YUV411 },
|
|
{ UAPI_FORMAT_YUV_PLANAR_420_VU, EXT_DRV_PIXEL_FMT_YUV420P },
|
|
{ UAPI_FORMAT_YUV_PLANAR_422_UV, EXT_DRV_PIXEL_FMT_YUV422_1X2 },
|
|
{ UAPI_FORMAT_YUV_PLANAR_422_VU, EXT_DRV_PIXEL_FMT_YUV422_2X1 },
|
|
{ UAPI_FORMAT_YUV_PLANAR_444_UV, EXT_DRV_PIXEL_FMT_YUV_444 },
|
|
{ UAPI_FORMAT_YUV_PLANAR_410_VU, EXT_DRV_PIXEL_FMT_YUV410P },
|
|
{ UAPI_FORMAT_RGB_SEMIPLANAR_444, EXT_DRV_PIXEL_FMT_NV42_RGB },
|
|
{ UAPI_FORMAT_RGB888, EXT_DRV_PIXEL_FMT_RGB24 },
|
|
{ UAPI_FORMAT_ARGB8888, EXT_DRV_PIXEL_FMT_ARGB8888 },
|
|
};
|
|
|
|
td_s32 uapi_tvd_init(td_void)
|
|
{
|
|
return ext_mpi_tvd_init();
|
|
}
|
|
|
|
td_s32 uapi_tvd_deinit(td_void)
|
|
{
|
|
return ext_mpi_tvd_de_init();
|
|
}
|
|
|
|
td_s32 uapi_tvd_connect(const uapi_tvd_src_attr *src_attr)
|
|
{
|
|
ext_drv_tvd_src_attr_in drv_src_attr;
|
|
if (src_attr == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
drv_src_attr.type = (ext_drv_source)src_attr->type;
|
|
drv_src_attr.index = src_attr->index;
|
|
|
|
return ext_mpi_tvd_connect(&drv_src_attr);
|
|
}
|
|
|
|
td_s32 uapi_tvd_disconnect(td_void)
|
|
{
|
|
return ext_mpi_tvd_dis_connect();
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_signal_status(uapi_sig_status *signal_status)
|
|
{
|
|
td_s32 ret;
|
|
if (signal_status == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ext_drv_sig_status sig_status;
|
|
ret = ext_mpi_tvd_get_signal_status(&sig_status);
|
|
*signal_status = (uapi_sig_status)sig_status;
|
|
return ret;
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_timing_info(uapi_tvd_timing_info *timing_info)
|
|
{
|
|
td_s32 ret;
|
|
td_u32 max_index;
|
|
td_u32 index;
|
|
|
|
ext_drv_tvd_timing_info drv_timing_info;
|
|
if (timing_info == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ret = ext_mpi_tvd_get_std_timing_info(&drv_timing_info);
|
|
|
|
timing_info->interlace = drv_timing_info.interlace;
|
|
timing_info->width = drv_timing_info.width;
|
|
timing_info->height = drv_timing_info.height;
|
|
timing_info->frame_rate = drv_timing_info.frame_rate;
|
|
timing_info->oversample = (uapi_oversample)(drv_timing_info.oversample);
|
|
timing_info->bit_depth = (uapi_pixel_bit_depth)(drv_timing_info.bit_width);
|
|
|
|
max_index = sizeof(g_tvd_vid_format) / sizeof(g_tvd_vid_format[0]);
|
|
for (index = 0; index < max_index; index++) {
|
|
if (drv_timing_info.pixel_fmt == g_tvd_vid_format[index].drv_video_format) {
|
|
timing_info->pixel_fmt = g_tvd_vid_format[index].iapi_video_format;
|
|
break;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
td_s32 uapi_tvd_set_color_system(uapi_color_sys color_sys)
|
|
{
|
|
ext_drv_color_sys drv_color_sys = (ext_drv_color_sys)color_sys;
|
|
return ext_mpi_tvd_set_color_system(drv_color_sys);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_color_system(uapi_color_sys *color_sys)
|
|
{
|
|
td_s32 ret;
|
|
ext_drv_color_sys color_system;
|
|
if (color_sys == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ret = ext_mpi_tvd_get_color_system(&color_system);
|
|
*color_sys = (uapi_color_sys)color_system;
|
|
return ret;
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_signal_lock(td_bool *lock)
|
|
{
|
|
if (lock == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
return ext_mpi_tvd_get_signal_lock(lock);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_noise_value(td_u32 *noise_value)
|
|
{
|
|
if (noise_value == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
return ext_mpi_tvd_get_noise_value(noise_value);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_macrovision_status(td_bool *status)
|
|
{
|
|
if (status == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
return ext_mpi_tvd_get_macrovision_status(status);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_nonstd_info(uapi_video_nonstd_info *nstd_info)
|
|
{
|
|
td_s32 ret;
|
|
ext_drv_video_nonstd_info non_std_info;
|
|
if (nstd_info == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ret = ext_mpi_tvd_get_nstd_info(&non_std_info);
|
|
nstd_info->is_non_std = non_std_info.non_std;
|
|
nstd_info->height = non_std_info.height;
|
|
nstd_info->v_freq = non_std_info.v_freq;
|
|
return ret;
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_range(uapi_tvd_position type, uapi_sys_range *range)
|
|
{
|
|
td_s32 ret;
|
|
ext_drv_tvd_pos_type drv_type = (ext_drv_tvd_pos_type)type;
|
|
ext_range drv_range;
|
|
if (range == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ret = ext_mpi_tvd_get_range(drv_type, &drv_range);
|
|
if (ret != TD_SUCCESS) {
|
|
return TD_FAILURE;
|
|
}
|
|
range->max = drv_range.max;
|
|
range->min = drv_range.min;
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_position(uapi_tvd_position type, td_u32 *position)
|
|
{
|
|
ext_drv_tvd_pos_type pos_type;
|
|
if (position == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
pos_type = (ext_drv_tvd_pos_type)type;
|
|
return ext_mpi_tvd_get_position(pos_type, position);
|
|
}
|
|
|
|
td_s32 uapi_tvd_set_position(uapi_tvd_position type, td_u32 position)
|
|
{
|
|
ext_drv_tvd_pos_type pos_type = (ext_drv_tvd_pos_type)type;
|
|
return ext_mpi_tvd_set_position(pos_type, position);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_offline_status(const uapi_tvd_src_attr *src_attr, td_bool *status)
|
|
{
|
|
td_s32 ret;
|
|
ext_drv_tvd_src_attr_in drv_attr;
|
|
if ((src_attr == TD_NULL) || (status == TD_NULL)) {
|
|
return TD_FAILURE;
|
|
}
|
|
drv_attr.type = (ext_drv_source)src_attr->type;
|
|
drv_attr.index = src_attr->index;
|
|
ret = ext_mpi_tvd_get_offline_status(&drv_attr, status);
|
|
return ret;
|
|
}
|
|
|
|
td_s32 uapi_tvd_set_pedestal(td_bool enable)
|
|
{
|
|
return ext_mpi_tvd_set_pedestal(enable);
|
|
}
|
|
|
|
td_s32 uapi_tvd_set_color_system_filter(const uapi_tvd_sys_filter *sys_filter)
|
|
{
|
|
ext_drv_tvd_sys_filter drv_sys_filter;
|
|
if (sys_filter == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
drv_sys_filter.dis_ntsc443 = sys_filter->dis_ntsc443;
|
|
drv_sys_filter.dis_pal_m = sys_filter->dis_palm;
|
|
drv_sys_filter.dis_pal_n = sys_filter->dis_paln;
|
|
drv_sys_filter.dis_secam = sys_filter->dis_secam;
|
|
drv_sys_filter.dis_pal60 = sys_filter->dis_pal60;
|
|
|
|
return ext_mpi_tvd_set_color_system_filter(&drv_sys_filter);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_color_system_filter(uapi_tvd_sys_filter *sys_filter)
|
|
{
|
|
td_s32 ret;
|
|
ext_drv_tvd_sys_filter drv_sys_filter;
|
|
if (sys_filter == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ret = ext_mpi_tvd_get_color_system_filter(&drv_sys_filter);
|
|
sys_filter->dis_ntsc443 = drv_sys_filter.dis_ntsc443;
|
|
sys_filter->dis_palm = drv_sys_filter.dis_pal_m;
|
|
sys_filter->dis_paln = drv_sys_filter.dis_pal_n;
|
|
sys_filter->dis_secam = drv_sys_filter.dis_secam;
|
|
sys_filter->dis_pal60 = drv_sys_filter.dis_pal60;
|
|
return ret;
|
|
}
|
|
|
|
|
|
td_s32 uapi_tvd_set_comb_filter_mode(uapi_tvd_comb_mode mode)
|
|
{
|
|
ext_drv_tvd_comb_mode comb_mode = (ext_drv_tvd_comb_mode)mode;
|
|
return ext_mpi_tvd_set_comb_filter_mode(comb_mode);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_line_status(td_bool *is_625mode)
|
|
{
|
|
if (is_625mode == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
return ext_mpi_tvd_get_line_status(is_625mode);
|
|
}
|
|
|
|
td_s32 uapi_tvd_set_work_mode(uapi_tvd_work_mode work_mode)
|
|
{
|
|
ext_drv_tvd_work_mode tvd_work_mode = (ext_drv_tvd_work_mode)work_mode;
|
|
return ext_mpi_tvd_set_work_mode(tvd_work_mode);
|
|
}
|
|
|
|
td_s32 uapi_tvd_get_capability(uapi_tvd_capability *capability)
|
|
{
|
|
td_s32 ret;
|
|
ext_drv_tvd_capability drv_capability;
|
|
if (capability == TD_NULL) {
|
|
return TD_FAILURE;
|
|
}
|
|
ret = ext_mpi_tvd_get_capability(&drv_capability);
|
|
capability->atv_max = drv_capability.atv_max;
|
|
capability->cvbs_max = drv_capability.cvbs_max;
|
|
capability->scart_max = drv_capability.scart_max;
|
|
return ret;
|
|
}
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* __cplusplus */
|