588 lines
15 KiB
C
Executable File
588 lines
15 KiB
C
Executable File
/*
|
|
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
|
|
*/
|
|
|
|
#include "sample_comm.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/mman.h>
|
|
#include <signal.h>
|
|
|
|
|
|
static ot_mpp_chn g_sample_mpp_chn[] = {
|
|
{OT_ID_VI, OT_VI_MAX_DEV_NUM, OT_VI_MAX_CHN_NUM},
|
|
{OT_ID_VPSS, OT_VPSS_MAX_GRP_NUM, 1},
|
|
{OT_ID_VENC, 1, OT_VENC_MAX_CHN_NUM},
|
|
{OT_ID_VO, OT_VO_MAX_LAYER_NUM, OT_VO_MAX_CHN_NUM},
|
|
{OT_ID_VDEC, 1, OT_VDEC_MAX_CHN_NUM}
|
|
};
|
|
|
|
/* The order of g_sample_pic_size's element must be consistent with the enum value defined in "ot_enum_pic_size". */
|
|
static ot_size g_sample_pic_size[PIC_BUTT] = {
|
|
{ 352, 288 }, /* PIC_CIF */
|
|
{ 640, 360 }, /* PIC_360P */
|
|
{ 720, 576 }, /* PIC_D1_PAL */
|
|
{ 720, 480 }, /* PIC_D1_NTSC */
|
|
{ 960, 576 }, /* PIC_960H */
|
|
{ 1280, 720 }, /* PIC_720P */
|
|
{ 1920, 1080 }, /* PIC_1080P */
|
|
{ 720, 480 }, /* PIC_480P */
|
|
{ 720, 576 }, /* PIC_576P */
|
|
{ 800, 600 }, /* PIC_800X600 */
|
|
{ 1024, 768 }, /* PIC_1024X768 */
|
|
{ 1280, 1024 }, /* PIC_1280X1024 */
|
|
{ 1366, 768 }, /* PIC_1366X768 */
|
|
{ 1440, 900 }, /* PIC_1440X900 */
|
|
{ 1280, 800 }, /* PIC_1280X800 */
|
|
{ 1600, 1200 }, /* PIC_1600X1200 */
|
|
{ 1680, 1050 }, /* PIC_1680X1050 */
|
|
{ 1920, 1200 }, /* PIC_1920X1200 */
|
|
{ 640, 480 }, /* PIC_640X480 */
|
|
{ 1920, 2160 }, /* PIC_1920X2160 */
|
|
{ 2560, 1440 }, /* PIC_2560X1440 */
|
|
{ 2560, 1600 }, /* PIC_2560X1600 */
|
|
{ 2592, 1520 }, /* PIC_2592X1520 */
|
|
{ 2592, 1944 }, /* PIC_2592X1944 */
|
|
{ 2688, 1520 }, /* PIC_2688X1520 */
|
|
{ 3840, 2160 }, /* PIC_3840X2160 */
|
|
{ 4096, 2160 }, /* PIC_4096X2160 */
|
|
{ 3000, 3000 }, /* PIC_3000X3000 */
|
|
{ 4000, 3000 }, /* PIC_4000X3000 */
|
|
{ 6080, 2800 }, /* PIC_6080X2800 */
|
|
{ 7680, 4320 }, /* PIC_7680X4320 */
|
|
{ 3840, 8640 } /* PIC_3840X8640 */
|
|
};
|
|
|
|
#ifndef __LITEOS__
|
|
td_void libapi_sys_signal(void (*func)(int))
|
|
{
|
|
struct sigaction sa = { 0 };
|
|
|
|
sa.sa_handler = func;
|
|
sa.sa_flags = 0;
|
|
sigaction(SIGINT, &sa, TD_NULL);
|
|
sigaction(SIGTERM, &sa, TD_NULL);
|
|
}
|
|
#endif
|
|
|
|
/* get picture size(w*h), according pic_size */
|
|
td_s32 libapi_comm_sys_get_pic_size(ot_enum_pic_size pic_size, ot_size *size)
|
|
{
|
|
if (size == TD_NULL) {
|
|
sample_print("null ptr arg!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
if (pic_size >= PIC_BUTT) {
|
|
sample_print("illegal pic_size!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
size->width = g_sample_pic_size[pic_size].width;
|
|
size->height = g_sample_pic_size[pic_size].height;
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
ot_enum_pic_size libapi_comm_sys_get_pic_enum(const ot_size *size)
|
|
{
|
|
ot_enum_pic_size i;
|
|
|
|
for (i = PIC_CIF; i < PIC_BUTT; i++) {
|
|
if ((g_sample_pic_size[i].width == size->width) &&
|
|
(g_sample_pic_size[i].height == size->height)) {
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return PIC_1080P;
|
|
}
|
|
|
|
static td_s32 sample_comm_sys_set_module_mem_config(td_u32 mod)
|
|
{
|
|
td_char *mmz_name = TD_NULL;
|
|
ot_mpp_chn mpp_chn;
|
|
td_u32 max_dev_num = g_sample_mpp_chn[mod].dev_id;
|
|
td_u32 max_chn_num = g_sample_mpp_chn[mod].chn_id;
|
|
td_u32 i, j;
|
|
|
|
mpp_chn.mod_id = g_sample_mpp_chn[mod].mod_id;
|
|
|
|
for (i = 0; i < max_dev_num; ++i) {
|
|
mpp_chn.dev_id = i;
|
|
|
|
for (j = 0; j < max_chn_num; ++j) {
|
|
mpp_chn.chn_id = j;
|
|
if (ss_mpi_sys_set_mem_cfg(&mpp_chn, mmz_name) != TD_SUCCESS) {
|
|
sample_print("ss_mpi_sys_set_mem_cfg ERR!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
}
|
|
}
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
/* set system memory location */
|
|
td_s32 libapi_comm_sys_mem_config(td_void)
|
|
{
|
|
td_u32 i;
|
|
|
|
/* config memory */
|
|
for (i = 0; i < sizeof(g_sample_mpp_chn) / sizeof(g_sample_mpp_chn[0]); ++i) {
|
|
if (sample_comm_sys_set_module_mem_config(i) != TD_SUCCESS) {
|
|
return TD_FAILURE;
|
|
}
|
|
}
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
/* vb init & MPI system init */
|
|
td_s32 libapi_comm_sys_init(const ot_vb_cfg *vb_cfg)
|
|
{
|
|
td_s32 ret;
|
|
|
|
ss_mpi_sys_exit();
|
|
ss_mpi_vb_exit();
|
|
|
|
if (vb_cfg == TD_NULL) {
|
|
sample_print("input parameter is null, it is invalid!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
ret = ss_mpi_vb_set_cfg(vb_cfg);
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_vb_set_conf failed!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
ret = ss_mpi_vb_init();
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_vb_init failed!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
ret = ss_mpi_sys_init();
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_sys_init failed!\n");
|
|
ss_mpi_vb_exit();
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
/* vb init with vb_supplement & MPI system init */
|
|
td_s32 libapi_comm_sys_init_with_vb_supplement(const ot_vb_cfg *vb_conf, td_u32 supplement_config)
|
|
{
|
|
td_s32 ret;
|
|
ot_vb_supplement_cfg supplement_conf = {0};
|
|
|
|
ss_mpi_sys_exit();
|
|
ss_mpi_vb_exit();
|
|
|
|
if (vb_conf == TD_NULL) {
|
|
sample_print("input parameter is null, it is invalid!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
ret = ss_mpi_vb_set_cfg(vb_conf);
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_vb_set_conf failed!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
supplement_conf.supplement_cfg = supplement_config;
|
|
ret = ss_mpi_vb_set_supplement_cfg(&supplement_conf);
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_vb_set_supplement_conf failed!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
ret = ss_mpi_vb_init();
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_vb_init failed!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
ret = ss_mpi_sys_init();
|
|
if (ret != TD_SUCCESS) {
|
|
sample_print("ss_mpi_sys_init failed!\n");
|
|
return TD_FAILURE;
|
|
}
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
/* vb exit & MPI system exit */
|
|
td_void libapi_comm_sys_exit(td_void)
|
|
{
|
|
ss_mpi_sys_exit();
|
|
ss_mpi_vb_exit_mod_common_pool(OT_VB_UID_VDEC);
|
|
ss_mpi_vb_exit();
|
|
return;
|
|
}
|
|
|
|
td_s32 libapi_comm_vi_bind_vo(ot_vi_pipe vi_pipe, ot_vi_chn vi_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VI;
|
|
src_chn.dev_id = vi_pipe;
|
|
src_chn.chn_id = vi_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = vo_layer;
|
|
dest_chn.chn_id = vo_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VI-VO)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vi_un_bind_vo(ot_vi_pipe vi_pipe, ot_vi_chn vi_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VI;
|
|
src_chn.dev_id = vi_pipe;
|
|
src_chn.chn_id = vi_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = vo_layer;
|
|
dest_chn.chn_id = vo_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VI-VO)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vi_bind_vpss(ot_vi_pipe vi_pipe, ot_vi_chn vi_chn, ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VI;
|
|
src_chn.dev_id = vi_pipe;
|
|
src_chn.chn_id = vi_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VPSS;
|
|
dest_chn.dev_id = vpss_grp;
|
|
dest_chn.chn_id = vpss_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VI-VPSS)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vi_un_bind_vpss(ot_vi_pipe vi_pipe, ot_vi_chn vi_chn, ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VI;
|
|
src_chn.dev_id = vi_pipe;
|
|
src_chn.chn_id = vi_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VPSS;
|
|
dest_chn.dev_id = vpss_grp;
|
|
dest_chn.chn_id = vpss_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VI-VPSS)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vi_bind_venc(ot_vi_pipe vi_pipe, ot_vi_chn vi_chn, ot_venc_chn venc_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VI;
|
|
src_chn.dev_id = vi_pipe;
|
|
src_chn.chn_id = vi_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VENC;
|
|
dest_chn.dev_id = 0;
|
|
dest_chn.chn_id = venc_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VI-VENC)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vi_un_bind_venc(ot_vi_pipe vi_pipe, ot_vi_chn vi_chn, ot_venc_chn venc_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VI;
|
|
src_chn.dev_id = vi_pipe;
|
|
src_chn.chn_id = vi_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VENC;
|
|
dest_chn.dev_id = 0;
|
|
dest_chn.chn_id = venc_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VI-VENC)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_avs_bind_venc(ot_avs_grp avs_grp, ot_avs_chn avs_chn, ot_venc_chn venc_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_AVS;
|
|
src_chn.dev_id = avs_grp;
|
|
src_chn.chn_id = avs_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VENC;
|
|
dest_chn.dev_id = 0;
|
|
dest_chn.chn_id = venc_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(AVS-VENC)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_avs_un_bind_venc(ot_avs_grp avs_grp, ot_avs_chn avs_chn, ot_venc_chn venc_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_AVS;
|
|
src_chn.dev_id = avs_grp;
|
|
src_chn.chn_id = avs_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VENC;
|
|
dest_chn.dev_id = 0;
|
|
dest_chn.chn_id = venc_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(AVS-VENC)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_avs_bind_vo(ot_avs_grp avs_grp, ot_avs_chn avs_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_AVS;
|
|
src_chn.dev_id = avs_grp;
|
|
src_chn.chn_id = avs_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = vo_layer;
|
|
dest_chn.chn_id = vo_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(AVS-VO)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_avs_un_bind_vo(ot_avs_grp avs_grp, ot_avs_chn avs_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_AVS;
|
|
src_chn.dev_id = avs_grp;
|
|
src_chn.chn_id = avs_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = vo_layer;
|
|
dest_chn.chn_id = vo_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(AVS-VO)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
|
|
td_s32 libapi_comm_vpss_bind_vo(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VPSS;
|
|
src_chn.dev_id = vpss_grp;
|
|
src_chn.chn_id = vpss_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = vo_layer;
|
|
dest_chn.chn_id = vo_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VPSS-VO)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vpss_un_bind_vo(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VPSS;
|
|
src_chn.dev_id = vpss_grp;
|
|
src_chn.chn_id = vpss_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = vo_layer;
|
|
dest_chn.chn_id = vo_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VPSS-VO)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vpss_bind_avs(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn, ot_avs_grp avs_grp, ot_avs_pipe avs_pipe)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VPSS;
|
|
src_chn.dev_id = vpss_grp;
|
|
src_chn.chn_id = vpss_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_AVS;
|
|
dest_chn.dev_id = avs_grp;
|
|
dest_chn.chn_id = avs_pipe;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VPSS-AVS)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vpss_un_bind_avs(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn,
|
|
ot_avs_grp avs_grp, ot_avs_pipe avs_pipe)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VPSS;
|
|
src_chn.dev_id = vpss_grp;
|
|
src_chn.chn_id = vpss_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_AVS;
|
|
dest_chn.dev_id = avs_grp;
|
|
dest_chn.chn_id = avs_pipe;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VPSS-AVS)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
|
|
td_s32 libapi_comm_vpss_bind_venc(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn, ot_venc_chn venc_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VPSS;
|
|
src_chn.dev_id = vpss_grp;
|
|
src_chn.chn_id = vpss_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VENC;
|
|
dest_chn.dev_id = 0;
|
|
dest_chn.chn_id = venc_chn;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VPSS-VENC)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vpss_un_bind_venc(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn, ot_venc_chn venc_chn)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VPSS;
|
|
src_chn.dev_id = vpss_grp;
|
|
src_chn.chn_id = vpss_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VENC;
|
|
dest_chn.dev_id = 0;
|
|
dest_chn.chn_id = venc_chn;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VPSS-VENC)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vdec_bind_vpss(ot_vdec_chn vdec_chn, ot_vpss_grp vpss_grp)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VDEC;
|
|
src_chn.dev_id = 0;
|
|
src_chn.chn_id = vdec_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VPSS;
|
|
dest_chn.dev_id = vpss_grp;
|
|
dest_chn.chn_id = 0;
|
|
|
|
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VDEC-VPSS)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vdec_un_bind_vpss(ot_vdec_chn vdec_chn, ot_vpss_grp vpss_grp)
|
|
{
|
|
ot_mpp_chn src_chn;
|
|
ot_mpp_chn dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VDEC;
|
|
src_chn.dev_id = 0;
|
|
src_chn.chn_id = vdec_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VPSS;
|
|
dest_chn.dev_id = vpss_grp;
|
|
dest_chn.chn_id = 0;
|
|
|
|
check_return(ss_mpi_sys_unbind(&src_chn, &dest_chn), "ss_mpi_sys_unbind(VDEC-VPSS)");
|
|
|
|
return TD_SUCCESS;
|
|
}
|
|
|
|
td_s32 libapi_comm_vo_bind_vo(ot_vo_layer src_vo_layer, ot_vo_chn src_vo_chn,
|
|
ot_vo_layer dst_vo_layer, ot_vo_chn dst_vo_chn)
|
|
{
|
|
ot_mpp_chn src_chn, dest_chn;
|
|
|
|
src_chn.mod_id = OT_ID_VO;
|
|
src_chn.dev_id = src_vo_layer;
|
|
src_chn.chn_id = src_vo_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = dst_vo_layer;
|
|
dest_chn.chn_id = dst_vo_chn;
|
|
|
|
return ss_mpi_sys_bind(&src_chn, &dest_chn);
|
|
}
|
|
|
|
td_s32 libapi_comm_vo_un_bind_vo(ot_vo_layer dst_vo_layer, ot_vo_chn dst_vo_chn)
|
|
{
|
|
ot_mpp_chn dest_chn;
|
|
|
|
dest_chn.mod_id = OT_ID_VO;
|
|
dest_chn.dev_id = dst_vo_layer;
|
|
dest_chn.chn_id = dst_vo_chn;
|
|
|
|
return ss_mpi_sys_unbind(TD_NULL, &dest_chn);
|
|
}
|