Comprensión del número de la capa de video y el número de canal en Hisi SDK

El SDK asigna canales a la gestión de la capa de video. Una capa de video puede mostrar varios videos. Cada área de visualización de video se llama canal. El video está restringido al canal y el canal está restringido a la capa de video. Para una capa de video, los canales por encima de ella son independientes. Al mismo tiempo, los canales en diferentes capas de video también son independientes.

Especifica la pausa de video del número de canal de la capa de video:

HI_MPI_VO_PauseChn(SAMPLE_VO_LAYER_VSD0,1)

Pausa el video cuyo número de capa es SAMPLE_VO_LAYER_VSD0 (definición estándar) y el número de canal (chn) es 1

Leer datos de video de la memoria compartida y enviarlos al canal de
decodificación hisi Tamaño del búfer del canal de decodificación Hisilicon: u32BufSize
Número de bytes a decodificar: u32LeftStreamBytes

Compare los datos escritos para ser descodificados con la memoria de descodificación restante de HiSilicon. De lo contrario, la memoria de descodificación no es suficiente para almacenar los datos a ser escritos, y los datos a ser escritos se perderán, causando una seria pérdida de cuadros de video. Donde BitStream.BitStreamBufLen es el tamaño del video decodificado que se escribirá

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

Supongo que te gusta

Origin blog.csdn.net/WANGYONGZIXUE/article/details/106623611
Recomendado
Clasificación