📄 system.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 + -