⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.c

📁 ZPAV (H265) DM64XX(TI) demo ZPAV (H265) 是 音视频 压缩解压 协议
💻 C
字号:

/*
///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//   Copyright (C) 2006-2008  Beijing,  pengzhen  (pengzhenxp@yahoo.com.cn)  //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
*/

#include "NetworkMain.h"
#include <fvid.h>

#include "System.h"

#include "tskVideoInput1.c" /* Vi */
#include "tskVideoEnc1.c"

#include "tskVideoOutput1.c" /* Vo */
#include "tskVideoDec1.c"

#ifdef __SYS_TEST__ 
#include "System1.c"
#endif /* __SYS_TEST__ */


static void dnp_init( dnp_ctx* lp_dnp_ctx, int rx )
{
	
	char* m_IpAddr = ( rx ) ? LocalIPAddr : RemoteIPAddr ; 
	int   m_Port   = 2000 ;

	memset( lp_dnp_ctx, 0x00, sizeof(dnp_ctx) );

	strcpy( lp_dnp_ctx->ip , m_IpAddr ); 
	lp_dnp_ctx->port = m_Port ;
	lp_dnp_ctx->protocol = 1 ; /* 0: TCP 1 : UDP */
	lp_dnp_ctx->receive  = rx ; /* 0: TX  1 : RX */
	
#ifdef __H265_ENC__
	printf( "Network Send to ---> IP : %s Port : %d \n", m_IpAddr, m_Port );
#endif 

#ifdef __H265_DEC__
	printf( "Network receive from ---> IP : %s Port : %d \n", m_IpAddr, m_Port );
#endif 

	dnp_open( lp_dnp_ctx ) ; 

	dnp_socket( lp_dnp_ctx ) ; 

}

/**
** dvp init 
*/

static void dvp_init( dvp_ctx* lp_dvp_ctx, int width, int height )
{
	
	printf( "\n Image Width : %d Image Height : %d \n ", width, height ) ;
	
	//memset( lp_dvp_ctx, 0x00, sizeof(dvp_ctx) );

	lp_dvp_ctx->m_handle = 0 ; /* handle */ /* the codec or system buffer (PTR) */

	lp_dvp_ctx->wavelets = 0  ; /* wavelets */ /* wavelets < 0:wavelets1, 1:wavelets2 > */
	//lp_dvp_ctx->wavelets = 1  ; /* wavelets */ /* wavelets < 0:wavelets1, 1:wavelets2 > */
	
	lp_dvp_ctx->width  = width  ;
	lp_dvp_ctx->height = height ;

	/* */

	lp_dvp_ctx->fps  = 25 ;       /* frames/second */ /* <25,30> */ 
	lp_dvp_ctx->bps  = 300*1000 ; /* bits/second */ /* <300*1000> */
	
	lp_dvp_ctx->insert_i = 1 ; /* insert picture 'I' */ /* insert 'I', if insert_i = 1 */
	lp_dvp_ctx->have_b   = 1 ; /* have picture 'B' */   /* none 'B',   if have_b = 0 */
	
	lp_dvp_ctx->me_c = 0 ; /* chroma join motion_estimate (ME) */ /* 0 : no, 1 : yes */
	lp_dvp_ctx->ms_t = 0 ; /* motion_search type */ /* 0 : diamond, 1 : advance diamond, 2 : small diamond, 3 : square,*/

	lp_dvp_ctx->abr   = 0 ; /* adaptive bit rate */ /* 0 : CBR, 1 : ABR */ 
	lp_dvp_ctx->ratio = 0 ; /* ratio of background to foreground */ /* none background, if ratio = 0 */

	lp_dvp_ctx->gop = 512 ; /* group of picture */   /* none 'P',   if gop = 0 */ 

	lp_dvp_ctx->prp = 3 ; /* previous process */ /* <0,1,2,3> */
	lp_dvp_ctx->pop = 3 ; /* post process */ /* <0,1,2,3> */

	lp_dvp_ctx->bands = 2 ; /* wavelets bands */ /* <1,2,3,4> */
	
	/* */

#ifdef __H265_ENC__
	dvp_encode_open( lp_dvp_ctx ); /* open */
#endif 

#ifdef __H265_DEC__
	dvp_decode_open( lp_dvp_ctx ); /* open */
#endif 
	
}

/* NetWork */ 
HANDLE  m_hNetTask = 0 ;
HANDLE  m_hNetSem  = 0 ;
void tskNetwork() ;

void tskNetWork0()
{

	SemPend( m_hNetSem , SYS_FOREVER ) ; /* Wait for NetWork */

#ifdef __H265_ENC__
	dnp_start( &m_dnp_ctx_tx ) ; /* Net */ /* TX */
#endif /* __H265_ENC__ */

#ifdef __H265_DEC__
	dnp_start( &m_dnp_ctx_rx ) ; /* Net */ /* RX */
#endif /* __H265_DEC__ */

    if( m_hViInTask ) TaskSetPri(m_hViInTask , OS_TASKPRILOW/*OS_TASKPRINORM*/) ; /* Vi Task Start */ 

	TaskDestroy( TaskSelf() );  
}


void SystemInit()
{

	/* Mutex */ 
	LCK_init(); 

	/* Yuv420 */
	m_Yuv420_In =  m_Yuv420_Out = Alloc_Yuv420_Queue( m_Yuv420_Cnt, image_width, image_height );

	/* Video Codec */ 
	dvp_init( &m_dvp_ctx, image_width, image_height ) ; /* Codec */
	
	/* Yuv420 to RGB */
	m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_YUY2 ) ; 
	//m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_YVYU ) ; 

//	m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_RGB555 ) ; /* ADV7123_IFMT_RGB555 */
//	m_dvp_pack_yuv420 = dvp_pack_yuv420( MPV_CSP_RGB565 ) ; /* ADV7123_IFMT_RGB565 */

	m_dvp_de_interlace = dvp_de_interlace ( MEDIAN_DEINT_FILTER ) ;  /* DeInterlace */

	/* Vi */
	m_hViInSem  = SemCreate( 0 ); /*Vi Sem */
	m_hViOutSem = SemCreate( 0 ); /*Vi Sem */
	
	/* Ai */
	m_hAiInSem  = SemCreate( 0 ); /*Ai Sem */
	m_hAiOutSem = SemCreate( 0 ); /*Ai Sem */

	/* Vo */
	m_hVoInSem  = SemCreate( 0 ); /*Vo Sem */
	m_hVoOutSem = SemCreate( 0 ); /*Vo Sem */

	/* Ao */
	m_hAoInSem  = SemCreate( 0 ); /*Ao Sem */
	m_hAoOutSem = SemCreate( 0 ); /*Ao Sem */

	/* Vi */
#ifdef __H265_ENC__
	m_hViInTask  = TaskCreate( tskVideoInput, "Vi", -1/*OS_TASKPRILOW*/, 4*1024, 0, 0, 0 );
	//TaskBlock( m_hViInTask ) ;
	m_hViOutTask = TaskCreate( tskVideoEnc, "Ve", OS_TASKPRINORM, 4*1024, 0, 0, 0 );

	dnp_init( &m_dnp_ctx_tx, 0 ) ; /* Net */ /* TX */
	m_video_streams = (Streams_Queue*)m_dnp_ctx_tx.video ;
	m_audio_streams = (Streams_Queue*)m_dnp_ctx_tx.audio ;
#endif /* __H265_ENC__*/

	/* Vo */
#ifdef __H265_DEC__
	m_hVoInTask  = TaskCreate( tskVideoOutput, "Vo", OS_TASKPRINORM, 4*1024, 0, 0, 0 );
	m_hVoOutTask = TaskCreate( tskVideoDec, "Vd", OS_TASKPRINORM, 4*1024, 0, 0, 0 );

	dnp_init( &m_dnp_ctx_rx, 1 ) ; /* Net */ /* RX */
	m_dnp_ctx_rx.m_video_semaphore = m_hVoInSem ;
	m_dnp_ctx_rx.m_audio_semaphore = m_hAoInSem ; 
#endif /* __H265_DEC__ */

	/* NetWork */
	m_hNetSem  = SemCreate( 0 ) ; /* Net */
	m_hNetTask = TaskCreate( tskNetwork, "Network", OS_TASKPRINORM, 4*1024, 0, 0, 0 );

	TaskCreate( tskNetWork0, "Network0", OS_TASKPRINORM, 4*1024, 0, 0, 0 );
	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -