jl3276

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276  发布于  2016-09-11 09:56:35
采纳率 0%
8个问答
11146

hi3520D的VPSS部分我的理解

 

[i=s] 本帖最后由 jl3276 于 2017-3-22 16:24 编辑 [/i]

先声明一下,以下内容是接续我《hi3520D的VI部分我的理解》 写的,如有需要可以点击链接查看 http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=12613&extra= 前面我们分析了三部分,分别是 /** step 1: init variable **/ /** step 2: mpp system init. **/ /** step 3: start vi dev & chn **/ 下面继续, VPSS 是视频前处理单元,全称为 Video Process Sub-System。支持对一幅输入图像进行 统一预处理,如去噪、去隔行等,然后再对各通道分别进行缩放、锐化等处理,最后 输出多种不同分辨率的图像。 VPSS 单元支持的具体图像处理功能包括 PreScale、 De-ring/De-block、 NR、 IE、 DIE、 Sharpen 等。 基本概念 GROUP VPSS 对用户提供组( GROUP)的概念。最大可用数为 128 个,各 GROUP 分时 复用 VPSS 硬件。每个 VPSS GROUP 包含多个通道,通道数目视方案实现有所不 同,具体描述参见 CHANNEL。 CHANNEL VPSS 组的通道。通道分为 3 种:物理通道、直通通道和扩展通道。 VPSS 硬件提 供多个物理通道,每个通道有不同的功能(请参考图 5-1)与限制,此外提供 1 个 直通通道( bypass),此通道只具备 CROP 功能,对于无需前处理的图像,可以经 此通道透传给接收者。扩展通道具备缩放功能,它通过绑定物理通道,将物理通 道输出作为自己的输入,把图像缩放成用户设置的目标分辨率输出,目前仅 Hi3518/Hi3516C 支持。不同芯片间通道规格略有差异,具体描述参见“ 5.2.3 芯片 差异”。
我们同样贴出来第4部分的代码

hi3520D的VI部分我的理解: http://ebaina.com/bbs/thread-12613-1-1.html hi3520D的VPSS部分我的理解: http://ebaina.com/bbs/thread-12618-1-1.html hi3520D的VO部分我的理解: http://www.ebaina.com/bbs/thread-12619-1-1.html 如有问题欢迎加群讨论: 学习交流群:375323762

我来回答
回答20个
时间排序
认可量排序

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 10:01:01
认可0
[code]/******************************************
         step 4: start vpss and vi bind vpss
        ******************************************/
        s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, PIC_D1, &stSize);
        if (HI_SUCCESS != s32Ret)
        {
                SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
                goto END_8D1_0;
        }
       
        stGrpAttr.u32MaxW = stSize.u32Width;
        stGrpAttr.u32MaxH = stSize.u32Height;
        stGrpAttr.bDrEn = HI_FALSE;//保留
        stGrpAttr.bDbEn = HI_FALSE;//保留
        stGrpAttr.bIeEn = HI_TRUE;//IE 使能开关
        stGrpAttr.bNrEn = HI_TRUE;//Nr 使能开关
        stGrpAttr.bHistEn = HI_FALSE;//bHistEn
        stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO;
        stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;//#define SAMPLE_PIXEL_FORMAT   PIXEL_FORMAT_YUV_SEMIPLANAR_420

        s32Ret = SAMPLE_COMM_VPSS_Start(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM,NULL);
        if (HI_SUCCESS != s32Ret)
        {
                SAMPLE_PRT("Start Vpss failed!\n");
                goto END_8D1_1;
        }

        s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode);
        if (HI_SUCCESS != s32Ret)
        {
                SAMPLE_PRT("Vi bind Vpss failed!\n");
                goto END_8D1_2;
        }[/code]

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 10:15:00
认可0
本帖最后由 jl3276 于 2016-9-11 10:47 编辑

第4行代码调用了s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, PIC_D1, &stSize);这样一个函数,
该函数定义在sample_comm_sys.c中,我们找到该函数的定义,贴在下面

[code]/******************************************************************************
* function : get picture size(w*h), according Norm and enPicSize
******************************************************************************/
HI_S32 SAMPLE_COMM_SYS_GetPicSize(VIDEO_NORM_E enNorm, PIC_SIZE_E enPicSize, SIZE_S *pstSize)
{
    switch (enPicSize)
    {
        case PIC_QCIF:
            pstSize->u32Width = D1_WIDTH / 4;
            pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?144:120;
            break;
        case PIC_CIF:
            pstSize->u32Width = D1_WIDTH / 2;
            pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?288:240;
            break;
        case PIC_D1:
            pstSize->u32Width = D1_WIDTH;
            pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?576:480;
            break;
        case PIC_960H:
            pstSize->u32Width = 960;
            pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?576:480;
            break;                       
        case PIC_2CIF:
            pstSize->u32Width = D1_WIDTH / 2;
            pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?576:480;
            break;
        case PIC_QVGA:    /* 320 * 240 */
            pstSize->u32Width = 320;
            pstSize->u32Height = 240;
            break;
        case PIC_VGA:     /* 640 * 480 */
            pstSize->u32Width = 640;
            pstSize->u32Height = 480;
            break;
        case PIC_XGA:     /* 1024 * 768 */
            pstSize->u32Width = 1024;
            pstSize->u32Height = 768;
            break;
        case PIC_SXGA:    /* 1400 * 1050 */
            pstSize->u32Width = 1400;
            pstSize->u32Height = 1050;
            break;
        case PIC_UXGA:    /* 1600 * 1200 */
            pstSize->u32Width = 1600;
            pstSize->u32Height = 1200;
            break;
        case PIC_QXGA:    /* 2048 * 1536 */
            pstSize->u32Width = 2048;
            pstSize->u32Height = 1536;
            break;
        case PIC_WVGA:    /* 854 * 480 */
            pstSize->u32Width = 854;
            pstSize->u32Height = 480;
            break;
        case PIC_WSXGA:   /* 1680 * 1050 */
            pstSize->u32Width = 1680;
            pstSize->u32Height = 1050;
            break;
        case PIC_WUXGA:   /* 1920 * 1200 */
            pstSize->u32Width = 1920;
            pstSize->u32Height = 1200;
            break;
        case PIC_WQXGA:   /* 2560 * 1600 */
            pstSize->u32Width = 2560;
            pstSize->u32Height = 1600;
            break;
        case PIC_HD720:   /* 1280 * 720 */
            pstSize->u32Width = 1280;
            pstSize->u32Height = 720;
            break;
        case PIC_HD1080:  /* 1920 * 1080 */
            pstSize->u32Width = 1920;
            pstSize->u32Height = 1080;
            break;
        default:
            return HI_FAILURE;
    }
    return HI_SUCCESS;
}[/code]

由于我们传入的是PIC_D1,而实际采集的是4路960H的摄像头数据,因此我们进入到这个PIC_D1分支下,修改为
case PIC_D1:
            pstSize->u32Width = 960;//D1_WIDTH;
            pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?576:480;
            break;

或者不用修改直接用PIC_960H

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 10:22:40
认可0
我们回到sample_vio.c源文件,接下来是对VPSS_GRP_ATTR_S类型结构体的配置,我们贴出来该结构体类型的定义:

VPSS_GRP_ATTR_S
【说明】
定义 VPSS GROUP 静态属性。
【定义】
typedef struct HI_VPSS_GRP_ATTR_S
{
HI_U32 u32MaxW;//最大图像宽度取值范围: [48, 1920]静态属性,创建 Group时设定,不可更改。
HI_U32 u32MaxH;//最大图像高度取值范围: [32, 2048]静态属性,创建 Group时设定,不可更改。
PIXEL_FORMAT_E enPixFmt;//像素格式。仅支持 SemiPlannar422 和 SemiPlannar420。静态属性,创建 Group 时设定,不可更改。
VPSS_DIE_MODE_E enDieMode;//Die 模式。
HI_BOOL bDrEn;//保留
HI_BOOL bDbEn;//保留
HI_BOOL bIeEn;//IE 使能开关
HI_BOOL bNrEn;//Nr 使能开关
HI_BOOL bHistEn;//直方图使能开关
}VPSS_GRP_ATTR_S;

【注意事项】
Dr/Db 与 Nr、 Die 的硬件在工作时是互斥的,设置通道属性时不能同时使能。
直方图和 Die 使能时,必须同时使能 Nr。
Hi3520D/Hi3515A 不支持对超过 960 的图像做 DIE。
u32MaxW、 u32MaxH、 enPixFmt 定义了当前 GRP 最大可接收的输入图像大小,
创建 GRP 时设定,不可动态更改。
若后端是编码,则必须打开直方图开关,否则码率控制不准确。

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 10:24:53
认可0
本帖最后由 jl3276 于 2016-9-11 10:37 编辑

然后代码的21行调用了s32Ret = SAMPLE_COMM_VPSS_Start(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM,NULL);这样一个函数,
函数的参数中
s32VpssGrpCnt =4;
pstSize->u32Width = 960;
pstSize->u32Height = 576;
至于VPSS_MAX_CHN_NUM,文档里是下面这样的说明,而对于3520d而言,这个值是多少呢?我也没有查到,如果有知道的,还请多指教下小生~
最后一个参数NULL,应该是不希望对该结构体操作吧?
-------------------------------------------------------------------------------------------------------------------
VPSS_MAX_CHN_NUM
【说明】
定义 VPSS 通道的最大个数。
【定义】
#define VPSS_MAX_CHN_NUM (VPSS_MAX_PHY_CHN_NUM + VPSS_MAX_EXT_CHN_NUM +1)
【注意事项】
通道包括物理通道,扩展通道,直通(BYPASS)通道之和。
【相关数据类型及接口】
无。
VPSS_MAX_PHY_CHN_NUM
【说明】
定义 VPSS 物理通道的最大个数。
【定义】
#define VPSS_MAX_PHY_CHN_NUM 2
【注意事项】
和硬件资源相关, Hi3521/Hi3520A 为 4, Hi3518/Hi3516C 为 2
【相关数据类型及接口】
无。
VPSS_MAX_EXT_CHN_NUM
【说明】
定义 VPSS 扩展通道的最大个数。
【定义】
#define VPSS_MAX_EXT_CHN_NUM 2
【注意事项】
数目根据方案设计和系统能力而定。 Hi3518/Hi3516C 为 5
【相关数据类型及接口】
无。
-----------------------------------------------------------------------------------------------------------------------------
我们把函数定义贴出来

[code]/*****************************************************************************
* function : start vpss. VPSS chn with frame
*****************************************************************************/
HI_S32 SAMPLE_COMM_VPSS_Start(HI_S32 s32GrpCnt, SIZE_S *pstSize, HI_S32 s32ChnCnt,VPSS_GRP_ATTR_S *pstVpssGrpAttr)
{
    VPSS_GRP VpssGrp;
    VPSS_CHN VpssChn;
    VPSS_GRP_ATTR_S stGrpAttr;
    VPSS_CHN_ATTR_S stChnAttr;
    VPSS_GRP_PARAM_S stVpssParam;
    HI_S32 s32Ret;
    HI_S32 i, j;

    /*** Set Vpss Grp Attr ***/

    if(NULL == pstVpssGrpAttr)
    {
        stGrpAttr.u32MaxW = pstSize->u32Width;
        stGrpAttr.u32MaxH = pstSize->u32Height;
        stGrpAttr.bDrEn = HI_FALSE;
        stGrpAttr.bDbEn = HI_FALSE;
        stGrpAttr.bIeEn = HI_TRUE;
        stGrpAttr.bNrEn = HI_TRUE;
        stGrpAttr.bHistEn = HI_FALSE;
        stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO;
        stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;
    }
    else
    {
        memcpy(&stGrpAttr,pstVpssGrpAttr,sizeof(VPSS_GRP_ATTR_S));
    }
   

    for(i=0; i     {
        VpssGrp = i;
        /*** create vpss group ***/
        s32Ret = HI_MPI_VPSS_CreateGrp(VpssGrp, &stGrpAttr);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("HI_MPI_VPSS_CreateGrp failed with %#x!\n", s32Ret);
            return HI_FAILURE;
        }

        /*** set vpss param ***/
        s32Ret = HI_MPI_VPSS_GetGrpParam(VpssGrp, &stVpssParam);//获取 VPSS GROUP 高级属性
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("failed with %#x!\n", s32Ret);
            return HI_FAILURE;
        }
        
        stVpssParam.u32MotionThresh = 0;
        
        s32Ret = HI_MPI_VPSS_SetGrpParam(VpssGrp, &stVpssParam);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("failed with %#x!\n", s32Ret);
            return HI_FAILURE;
        }

        /*** enable vpss chn, with frame ***/
        for(j=0; j         {
            VpssChn = j;
            /* Set Vpss Chn attr */
            stChnAttr.bSpEn = HI_FALSE;//Sp 使能开关。
            stChnAttr.bFrameEn = HI_TRUE;//边框使能开关。
            stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_LEFT] = 0xff00;//stFrame 边框属性。
            stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_RIGHT] = 0xff00;
            stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_BOTTOM] = 0xff00;
            stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_TOP] = 0xff00;
            stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_LEFT] = 2;
            stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_RIGHT] = 2;
            stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_TOP] = 2;
            stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_BOTTOM] = 2;
            
            s32Ret = HI_MPI_VPSS_SetChnAttr(VpssGrp, VpssChn, &stChnAttr);//设置 VPSS 通道属性。
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_PRT("HI_MPI_VPSS_SetChnAttr failed with %#x\n", s32Ret);
                return HI_FAILURE;
            }
   
            s32Ret = HI_MPI_VPSS_EnableChn(VpssGrp, VpssChn);//启用 VPSS 通道
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_PRT("HI_MPI_VPSS_EnableChn failed with %#x\n", s32Ret);
                return HI_FAILURE;
            }
        }

        /*** start vpss group ***/
        s32Ret = HI_MPI_VPSS_StartGrp(VpssGrp);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("HI_MPI_VPSS_StartGrp failed with %#x\n", s32Ret);
            return HI_FAILURE;
        }

    }
    return HI_SUCCESS;
}[/code]

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 11:13:06
认可0
首先设置stGrpAttr这个结构体,然后循环s32GrpCnt=4次对其进行配置。每次循环中:

1.先调用HI_MPI_VPSS_CreateGrp创建一个 VPSS GROUP。
2.然后调用HI_S32 HI_MPI_VPSS_GetGrpParam(VPSS_GRP VpssGrp, VPSS_GRP_PARAM_S *pstVpssParam)获取 VPSS GRUOP 高级属性。该属性结构体的成员变量定义见下面
3.对其中的一个成员变量stVpssParam.u32MotionThresh = 0;赋值为0后,调用HI_MPI_VPSS_SetGrpParam,设置 VPSS GRUOP 高级属性。
4.后面又有一个嵌套for循环,for(j=0; j         4.1设置好通道属性结构体后调用s32Ret = HI_MPI_VPSS_SetChnAttr(VpssGrp, VpssChn, &stChnAttr);//设置 VPSS 通道属性。
        4.2然后调用s32Ret = HI_MPI_VPSS_EnableChn(VpssGrp, VpssChn);//启用 VPSS 通道
5.该组的所有通道都完成第4步之后,调用HI_MPI_VPSS_StartGrp:启用 VPSS GROUP。

--------------------------------------------------------
VPSS_GRP_PARAM_S
【说明】
定义 VPSS 高级属性。
【定义】
typedef struct HI_VPSS_GRP_PARAM_S
{
HI_U32 u32Luminance;//保留。
HI_U32 u32Contrast;//对比度。取值范围: 0~255,默认值为64。影响暗区和亮区调整幅度,值越大,调整越明显。
HI_U32 u32DarkEnhance;//保留。
HI_U32 u32BrightEnhance;//保留。
HI_U32 u32IeStrength;//IE 强度。取值范围: 0~255,默认值为6。影响对比度,值越大,对比越明显。
HI_U32 u32IeSharp;//保留。
HI_U32 u32SfStrength;//空域去噪强度。取值范围: 0~255,默认值为24。影响空域滤波强度,值越大,滤波强度越大。
HI_U32 u32TfStrength;时域去噪强度。取值范围: 0~63,默认值为 8。影响时域滤波强度,值越大,滤波强度越大。
HI_U32 u32MotionThresh;//0、 1 通道的滤波强度。取值范围: 0~8,默认值为 8。影响编码通道的滤波强度,值越大,噪声抑制越强。
HI_U32 u32DiStrength;//保留。
HI_U32 u32ChromaRange;//保留。
HI_U32 u32NrWforTsr;//保留。
VPSS_SF_WINDOW_E enSfWindow;//保留。
VPSS_DISPLAY_MODE_E enDisMode;//保留。
}VPSS_GRP_PARAM_S;

******************************************
VPSS_CHN_ATTR_S
【说明】
定义 VPSS 物理通道的属性。
【定义】
typedef struct HI_VPSS_CHN_ATTR_S
{
HI_BOOL bSpEn;// 使能开关。
HI_BOOL bFrameEn;//边框使能开关。
VPSS_FRAME_S stFrame;//边框属性。
}VPSS_CHN_ATTR_S;

-------------------------------------------------------------

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 11:14:41
认可0
下午继续去吃午饭了~~~~~~~~~~~~~

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 15:37:32
认可0
本帖最后由 jl3276 于 2016-9-11 15:57 编辑

然后第28行调用了s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode);这个函数在sample_comm_vi.c中定义,把该函数的源代码贴出来

[code]
/*****************************************************************************
* function : Vi chn bind vpss group
*****************************************************************************/
HI_S32 SAMPLE_COMM_VI_BindVpss(SAMPLE_VI_MODE_E enViMode)
{
    HI_S32 j, s32Ret;
    VPSS_GRP VpssGrp;
    MPP_CHN_S stSrcChn;
    MPP_CHN_S stDestChn;
    SAMPLE_VI_PARAM_S stViParam;
    VI_CHN ViChn;

    s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
    if (HI_SUCCESS !=s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
        return HI_FAILURE;
    }
   
    VpssGrp = 0;
    for (j=0; j     {
        ViChn = j * stViParam.s32ViChnInterval;
        
        stSrcChn.enModId = HI_ID_VIU;
        stSrcChn.s32DevId = 0;
        stSrcChn.s32ChnId = ViChn;
   
        stDestChn.enModId = HI_ID_VPSS;
        stDestChn.s32DevId = VpssGrp;
        stDestChn.s32ChnId = 0;
   
        s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("failed with %#x!\n", s32Ret);
            return HI_FAILURE;
        }
        
        VpssGrp ++;
    }
    return HI_SUCCESS;
}[/code]


首先调用了  s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);这个函数在前面讨论过,直接将操作后的结果贴出来
case SAMPLE_VI_MODE_4_D1:
            pstViParam->s32ViDevCnt = 1;
            pstViParam->s32ViDevInterval = 1;
            pstViParam->s32ViChnCnt = 4;
            pstViParam->s32ViChnInterval = 1;       
            break;
然后后面的循环(4次)就是通过调用HI_MPI_SYS_Bind将vi第0号设备i号通道与vpss的第i号设备0号通道相绑定(i=0~3),这样做的依据是下面贴出来的参考文档里的描述。
文档里面有这样两句话:
VI 和 VDEC 作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备
号置为 0, SDK 不检查输入的设备号。
VPSS 和 VENC 作为数据接收者时,是以设备( GROUP)为接收者,接收其他模
块发来的数据,用户将通道号置为 0, SDK 不检查输入的通道号。
-----------------------------------------------------------------------------------------
相关结构体定义写在下面:
MPP_CHN_S
【说明】
定义模块设备通道结构体。
【定义】
typedef struct hiMPP_CHN_S
{
MOD_ID_E enModId;//模块号
HI_S32 s32DevId;//设备号
HI_S32 s32ChnId;//通道号
} MPP_CHN_S;

typedef struct sample_vi_param_s
{
    HI_S32 s32ViDevCnt;                // VI Dev Total Count
    HI_S32 s32ViDevInterval;        // Vi Dev Interval
    HI_S32 s32ViChnCnt;                // Vi Chn Total Count
    HI_S32 s32ViChnInterval;        // VI Chn Interval
}SAMPLE_VI_PARAM_S;
------------------------------------------------------------------------------------------

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 16:00:05
认可0
好了vpss部分分析结束了,有问题可以在下面留言,有错误欢迎帮忙指正,非常感谢~后面我在发一个vo的帖子链接贴在下面

Cybers

0个粉丝

0

问答

0

专栏

0

资料

Cybers 2016-09-16 10:11:47
认可0
谢谢楼主!!!:handshake学习中。。。

Joey

1个粉丝

15

问答

0

专栏

0

资料

Joey 2016-11-24 14:45:16
认可0
多谢楼主的...............

cpf09

0个粉丝

2

问答

0

专栏

10

资料

cpf09 2016-12-14 14:19:40
认可0
谢谢楼主   学习下   

weilongsz

0个粉丝

0

问答

0

专栏

0

资料

weilongsz 2016-12-15 17:42:14
认可0
谢谢楼主,学习了。

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan 2016-12-28 08:49:45
认可0
谢谢楼主,对初学者很有用

centaur

0个粉丝

1

问答

0

专栏

0

资料

centaur 2017-04-17 12:36:32
认可0
VI 和 VDEC 作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备
号置为 0, SDK 不检查输入的设备号。
VPSS 和 VENC 作为数据接收者时,是以设备( GROUP)为接收者,接收其他模
块发来的数据,用户将通道号置为 0, SDK 不检查输入的通道号。
--------------------------------------------------------------------------------------------------------
这句是重点。还是没有太明白。还要琢磨。
谢谢楼主的指点。

ebhua0001

0个粉丝

0

问答

0

专栏

0

资料

ebhua0001 2017-05-09 10:45:46
认可0
谢谢楼主,学习了

画个圈圈诅咒你

0个粉丝

4

问答

0

专栏

0

资料

画个圈圈诅咒你 2017-06-01 10:53:49
认可0
楼主,在VPSS中可以强制转化像素格式吗?

样极致力

0个粉丝

0

问答

0

专栏

0

资料

样极致力 2017-06-12 16:13:07
认可0

谢谢楼主,对初学者很有用

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2017-06-30 14:23:20
认可0
:)                        

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-11 10:03:10
认可0
本帖最后由 jl3276 于 2016-9-11 11:13 编辑

,,,,,,,,,,,,,,,,,,,,,,,

yzm12345

0个粉丝

0

问答

0

专栏

0

资料

yzm12345 2017-10-18 09:46:13
认可0
感谢分享:):):):)
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区