海思 hisi SDK中视频层号和通道号的理解

SDK 将通道归属于视频层管理,一个视频层上可显示多个视频,每一个视频显示区域称为一个通道,视频被限制通道内,通道被限制在视频层内。对于一个视频层,其上面的通道都是独立的。同时,不同的视频层上的通道也是独立的。

指定视频层的通道号的视频暂停:

HI_MPI_VO_PauseChn(SAMPLE_VO_LAYER_VSD0,1)

暂停视频层号为SAMPLE_VO_LAYER_VSD0(标清),通道号(chn)为1的视频

从共享内存读出视频数据,送给hisi解码通道
海思解码通道缓冲区大小:u32BufSize
待解码的byte数量 :u32LeftStreamBytes

写入待解码的数据和海思剩余的解码内存比较,否则解码内存不够存放待写入的数据,待写入的数据将丢失,造成视频帧严重丢失。其中BitStream.BitStreamBufLen为待写入解码视频的大小

			if (BitStreamCheckReady(&BitStream, i) == 0)//检测共享内存缓冲区是否准备好
			{
				ret = BitStreamReadLen(&BitStream, i);//先去读待写入视频的长度
				
				HI_MPI_VDEC_Query(0, &stStat);	   
				HI_MPI_VDEC_GetChnAttr(0,&vdec_attr);

				vdec_left = vdec_attr.u32BufSize - stStat.u32LeftStreamBytes ;//hisi 解码缓冲区剩余的空间
				
				if(vdec_left > BitStream.BitStreamBufLen)
				{
					ret = BitStreamRead(&BitStream, i);//
					
					stStream.pu8Addr = BitStream.pBitStreamBuf;
					stStream.u32Len  = BitStream.BitStreamBufLen;	
					s32Ret=HI_MPI_VDEC_SendStream(0, &stStream, 0);//解码函数,0表示阻塞
					if(s32Ret!=0)
					{
						printf("HD1 sndstream s32Ret=%x\n",s32Ret);//输出异常信息
					}
				}
				else
				{
					printf("total=%d,stStat.u32LeftStreamBytes=%d,stStream.u32Len=%d\n",vdec_attr.u32BufSize,stStat.u32LeftStreamBytes,BitStream.BitStreamBufLen);
				}
				
			}
			else
			{	
				printf("channel is busy\n");
				usleep(5);
			}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了维护世界和平_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值