Compréhension du numéro de couche vidéo et du numéro de canal dans Hisi SDK

Le SDK attribue des canaux à la gestion des couches vidéo. Une couche vidéo peut afficher plusieurs vidéos. Chaque zone d'affichage vidéo est appelée une chaîne. La vidéo est limitée au canal et le canal est limité à la couche vidéo. Pour une couche vidéo, les canaux au-dessus sont indépendants. Dans le même temps, les canaux sur différentes couches vidéo sont également indépendants.

Spécifie la pause vidéo du numéro de canal de la couche vidéo:

HI_MPI_VO_PauseChn(SAMPLE_VO_LAYER_VSD0,1)

Mettre en pause la vidéo dont le numéro de couche est SAMPLE_VO_LAYER_VSD0 (définition standard) et le numéro de canal (chn) est 1

Lire les données vidéo de la mémoire partagée et les envoyer au canal de décodage hisi.
Taille de la mémoire tampon du canal de décodage Hisilicon: u32BufSize
Nombre d'octets à décoder: u32LeftStreamBytes

Comparez les données écrites à décoder avec la mémoire de décodage restante de HiSilicon. Sinon, la mémoire de décodage n'est pas suffisante pour stocker les données à écrire, et les données à écrire seront perdues, entraînant de sérieuses pertes d'images vidéo. Où BitStream.BitStreamBufLen est la taille de la vidéo décodée à écrire

			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);
			}

Je suppose que tu aimes

Origine blog.csdn.net/WANGYONGZIXUE/article/details/106623611
conseillé
Classement