亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? network_ctrl.cpp

?? ARM上實現視頻會議源代碼
?? CPP
字號:
///////////////////////////////////////////////////////// FileName:	network_ctrl.cpp// Author:		b1gm0use// Project:		myvideo#include <iostream>#include <qwaitcondition.h>#include "network_ctrl.h"#include "capture_event.h"#include "network_ctrl_send_thread.h"#include "network_ctrl_recv_thread.h"#include "video.h"#include "audio.h"#include "network.h"#include "avi.h"using namespace std;///////////////////////////////////////////////////////// Public Functions///////////////////////////////////////////////////////// 構造函數// 其余三個為widget的子類要求的參數network_ctrl::network_ctrl( avi * avi_ptr_in, QWidget *parent, const char *name, int wFlags ) 		: QWidget( parent, name, wFlags ) // {{{{	verbose_output( 2, "create network_ctrl." );	ncrt = NULL;	ncst = NULL;	audio_send_buff_sema = NULL;	video_send_buff_sema = NULL;		ready_to_send_audio = NULL;	ready_to_send_video = NULL;	audio_buff[0] = audio_buff[1] = audio_buff[2] = NULL;	video_buff[0] = video_buff[1] = video_buff[2] = NULL;	video_frame = audio_frame = 0;	avi_ptr = avi_ptr_in;	term_sub_thread_sema = NULL;	term_sub_thread = false;} // }}}// 析構函數network_ctrl::~network_ctrl( void ) // {{{{	verbose_output( 2, "delete network_ctrl." );	if ( avi_ptr->net_mode == CONNECT && NULL != ncrt )	{		if ( ncrt->running() )		{			ncrt->terminate();		}		delete ncrt;	}	if ( avi_ptr->net_mode == LISTEN && NULL != ncst )	{		if ( ncst->running() )		{			ncst->terminate();		}		delete ncst;	}	delete audio_send_buff_sema;	delete video_send_buff_sema;	delete ready_to_send_audio;	delete ready_to_send_video;	delete [] audio_buff[0];	delete [] audio_buff[1];	delete [] audio_buff[2];	delete [] video_buff[0];	delete [] video_buff[1];	delete [] video_buff[2];	delete term_sub_thread_sema;} // }}}// 初始化函數int network_ctrl::init ( void ) // {{{{	verbose_output( 2, "init network_ctrl." );	audio_send_buff_sema = new QSemaphore( 1 );	video_send_buff_sema = new QSemaphore( 1 );		ready_to_send_audio = new QWaitCondition;	ready_to_send_video = new QWaitCondition;	BUFF * temp;	term_sub_thread_sema = new QSemaphore( 1 );	// 如果做做為LISTEN方,則要接收數據幀	// 開辟緩沖區	if ( avi_ptr->net_mode == LISTEN )	{		if ( avi_ptr->use_g723 )		{			for ( int i=0; i<3; i++ )			{				temp = new BUFF [ BUFF_SIZE_G723 * LENGTH ];				audio_buff[i] = new buff_t( temp, BUFF_SIZE_G723 * LENGTH );			}		}		else		{			for ( int i=0; i<3; i++ )			{				temp = new BUFF [ BUFF_SIZE_G711 * LENGTH ];				audio_buff[i] = new buff_t( temp, BUFF_SIZE_G711 * LENGTH );			}		}		for ( int i=0; i<3; i++ )		{			temp = new BUFF [ avi_ptr->video_opt.min_width * avi_ptr->video_opt.factor * avi_ptr->video_opt.min_height * avi_ptr->video_opt.factor * 3 ];			video_buff[i] = new buff_t( temp, avi_ptr->video_opt.min_width * avi_ptr->video_opt.factor * avi_ptr->video_opt.min_height * avi_ptr->video_opt.factor * 3 );		}	}	return SUCCEED;} // }}}void network_ctrl::stop_running ( void ) // {{{{	if ( avi_ptr->net_mode == LISTEN )	{		if ( NULL != ncst )		{			(*term_sub_thread_sema)++;			term_sub_thread = true;			(*term_sub_thread_sema)--;						cout << "before ncst wait" << endl;			if ( ncst->wait() )			{				cout << "before ncst wait" << endl;				delete ncst;				term_sub_thread = false;				cout << "kill ok" << endl;				ncst = NULL;				return;			}		}	}	else	{		if ( avi_ptr->net_mode == CONNECT )		{			if ( NULL != ncrt )			{				(*term_sub_thread_sema)++;				term_sub_thread = true;				(*term_sub_thread_sema)--;				cout << "before wait" << endl;				if ( ncrt->wait() )				{				cout << "after wait" << endl;					delete ncrt;					term_sub_thread = false;					ncrt = NULL;					cout << "kill ok" << endl;					return;				}			}		}	}	return;} // }}}void network_ctrl::begin_running ( void ) // {{{{		// 創建不同的連接線程	if ( avi_ptr->net_mode == LISTEN && NULL == ncst )	{		ncst = new network_ctrl_send_thread( avi_ptr, this );		ncst->start();	}	else	{		if ( avi_ptr->net_mode == CONNECT && NULL == ncrt )		{			ncrt = new network_ctrl_recv_thread( avi_ptr, this );			ncrt->start();		}	}	return;} // }}}bool network_ctrl::running ( void ) // {{{{	if ( avi_ptr->net_mode == LISTEN  )	{		if ( NULL != ncst )		{			return true;		}		else		{			return false;		}	}	else	{		if ( avi_ptr->net_mode == CONNECT )		{			if ( NULL != ncrt )			{				return true;			}			else			{				return false;			}		}	}	return false;} // }}}///////////////////////////////////////////////////////// Protected Functions///////////////////////////////////////////////////////// 內部函數,用于接收自定義的事件void network_ctrl::customEvent ( QCustomEvent * e ) // {{{{	verbose_output( 4, "network_ctrl change image event." );	// 判斷事件類型,是否正確	if ( e->type() == VIDEO_NET_SEND_EVENT )	{		// 視頻數據		capture_event * new_event = (capture_event *) e;		BUFF * temp = new_event->get_buff();		int size = new_event->get_size();		(*video_send_buff_sema)++;		memcpy( video_buff[video_frame]->buff_ptr, temp, size );		video_buff[video_frame]->buff_size = size;		(*video_send_buff_sema)--;		video_frame = (video_frame+1) % 3;		ready_to_send_video->wakeAll();	}	else	{		if ( e->type() == AUDIO_NET_SEND_EVENT )		{			// 音頻數據			capture_event * new_event = (capture_event*) e;			BUFF * temp = new_event->get_buff();			int size = new_event->get_size();			(*audio_send_buff_sema)++;			memcpy( audio_buff[audio_frame]->buff_ptr, temp, size );			audio_buff[audio_frame]->buff_size = size;			(*audio_send_buff_sema)--;			audio_frame = (audio_frame + 1) % 3;			ready_to_send_audio->wakeAll();		}		else		{			cerr << "Error! You shouldn't be here!" << endl;			cerr << "Error in network_ctrl." << endl;			exit( 1 );		}	}} // }}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩蜜臀av国产精品网站| 国产精品一线二线三线| 日韩精品乱码av一区二区| 国产自产高清不卡| 色综合久久久久综合| 国产精品伦一区二区三级视频| 亚洲精品欧美二区三区中文字幕| 奇米亚洲午夜久久精品| 99国产精品久| 久久日韩粉嫩一区二区三区| 亚洲一区二区美女| 不卡一区中文字幕| 精品国产乱码久久久久久图片| 亚洲一卡二卡三卡四卡无卡久久| 国产成人精品免费一区二区| 日韩一区二区在线观看视频播放| 亚洲摸摸操操av| 成人精品小蝌蚪| 精品久久久久99| 午夜电影一区二区| 91视频91自| 一区二区中文字幕在线| 国产91精品免费| 精品国产欧美一区二区| 偷拍亚洲欧洲综合| 欧美在线播放高清精品| 国产精品国产三级国产| 国产传媒日韩欧美成人| 日韩免费一区二区| 奇米色一区二区| 91精品国产综合久久精品图片 | 欧美影视一区二区三区| 亚洲国产精品v| 精品一区二区日韩| 日韩精品在线网站| 日韩精品1区2区3区| 欧美久久久久久久久| 一区二区三区四区乱视频| 99精品视频在线免费观看| 国产精品乱码妇女bbbb| 99久久久国产精品| 国产精品成人一区二区艾草| 91首页免费视频| 亚洲精品第1页| 欧美日韩久久久久久| 亚洲国产综合色| 欧美男人的天堂一二区| 首页国产欧美久久| 日韩一级成人av| 精品一区二区三区免费毛片爱| 久久综合九色综合欧美98| 国产一区二区美女诱惑| 国产精品久久久久久久久久免费看| 国产超碰在线一区| 亚洲欧美韩国综合色| 91国产视频在线观看| 婷婷成人综合网| 日韩免费一区二区三区在线播放| 国产一区免费电影| 国产精品乱码一区二三区小蝌蚪| 91小视频免费观看| 亚洲高清免费一级二级三级| 日韩一级免费观看| 国产精品91xxx| 亚洲精品乱码久久久久久 | 国产精品盗摄一区二区三区| 欧美在线色视频| 奇米色一区二区| 中文字幕第一区| 欧美色网一区二区| 久久成人免费电影| 亚洲天堂免费在线观看视频| 欧美日韩高清影院| 国产成人精品三级| 亚洲综合偷拍欧美一区色| 欧美成人激情免费网| 成人一区二区三区中文字幕| 亚洲自拍偷拍麻豆| 久久久久9999亚洲精品| 日本高清视频一区二区| 久久99九九99精品| 亚洲蜜臀av乱码久久精品| 91麻豆精品国产91久久久久久久久| 国产成人精品三级麻豆| 午夜精品久久久久久久久| 日本一二三不卡| 制服丝袜国产精品| 99re视频精品| 激情伊人五月天久久综合| 一区二区久久久久| 国产午夜精品久久久久久免费视| 欧美私模裸体表演在线观看| 91精品午夜视频| av在线播放不卡| 久久精品国产网站| 亚洲国产视频直播| 中文字幕第一区二区| 日韩精品一区二区三区在线观看 | 亚洲老司机在线| 久久这里只有精品首页| 欧美精品日日鲁夜夜添| 91色|porny| 风流少妇一区二区| 国产美女精品在线| 美女看a上一区| 亚洲一二三级电影| 一区二区三区免费看视频| 国产视频一区在线观看| 精品久久人人做人人爽| 欧美日韩成人综合| 在线观看成人免费视频| 99精品热视频| 99re在线视频这里只有精品| 成人亚洲一区二区一| 国产精品1区2区| 韩国女主播成人在线| 久久国产精品色婷婷| 日本欧美在线看| 日本欧美一区二区在线观看| 婷婷成人激情在线网| 香蕉乱码成人久久天堂爱免费| 亚洲综合一区二区| 亚洲国产成人高清精品| 亚洲第一福利一区| 亚洲一区二区美女| 日韩专区中文字幕一区二区| 日韩精品一区第一页| 青娱乐精品视频| 美国精品在线观看| 久久99国产精品麻豆| 国精产品一区一区三区mba桃花| 久久99九九99精品| 国产精品123| 成人激情电影免费在线观看| 99国产精品一区| 欧美性高清videossexo| 欧美日韩国产一二三| 欧美一区二区精品在线| 日韩欧美国产高清| 国产欧美一区二区精品忘忧草| 欧美激情一区二区在线| 亚洲欧洲日韩在线| 亚洲精品水蜜桃| 日韩精品午夜视频| 国产毛片精品视频| av不卡免费在线观看| 欧美午夜片在线看| 日韩情涩欧美日韩视频| 国产欧美久久久精品影院| 一色桃子久久精品亚洲| 午夜精品免费在线| 国产精品亚洲人在线观看| 99久久er热在这里只有精品15| 欧美日韩国产经典色站一区二区三区| 日韩一区二区精品在线观看| 国产蜜臀97一区二区三区| 亚洲女同女同女同女同女同69| 日产国产高清一区二区三区| 国产在线精品一区二区 | 精品一区二区三区av| 成人精品鲁一区一区二区| 欧美色网站导航| 亚洲国产岛国毛片在线| 午夜精品久久久久久| 成人免费观看av| 日韩免费观看高清完整版| 国产精品美女久久久久久久久| 亚洲r级在线视频| 高清免费成人av| 欧美一区二区三区男人的天堂 | 日韩一区二区三区高清免费看看| 中文乱码免费一区二区| 日韩精品免费视频人成| 91丨九色丨国产丨porny| 精品久久久久久久一区二区蜜臀| 一区二区三区四区蜜桃| 国产精品99久久久| 91精品国产入口| 亚洲免费在线看| 国产精品一线二线三线| 69av一区二区三区| 亚洲日本电影在线| 国产99久久久国产精品免费看 | 日韩三级视频在线看| 亚洲精品少妇30p| 国产成人在线视频免费播放| 日韩欧美中文字幕精品| 一区二区三区高清在线| 波多野结衣亚洲| 久久久久97国产精华液好用吗| 日韩高清一区在线| 欧美性生活一区| 一区二区三区在线免费视频| 成人午夜看片网址| 久久综合久久综合久久| 毛片不卡一区二区| 欧美一区二区三区在线视频| 亚洲成人自拍网| 在线观看成人小视频| 亚洲综合色自拍一区|