gusucode.com > 嵌入式linux系统的网络编程源码程序 > 嵌入式linux系统的网络编程源码程序/视频会议源码/audio_cap_thread.cpp
/////////////////////////////////////////////////////// // FileName: audio_cap_thread.cpp // Author: b1gm0use // Project: myaudio #include <iostream> #include "network.h" #include "audio_cap_thread.h" #include "common.h" #include "audio_cap.h" #include "network_audio_send.h" #include "audio_send.h" #include "avi.h" using namespace std; /////////////////////////////////////////////////////// // Public Functions /////////////////////////////////////////////////////// // 构造函数 // 传入参数为 // ap_in 上层AudioPlayer对象指针 // stackSize QThread所用的参数 audio_cap_thread::audio_cap_thread ( avi * avi_ptr_in, AudioPlayer * ap_in, unsigned int stackSize ) :QThread( stackSize ) // {{{ { verbose_output( 2, "create audio_cap_thread." ); ap = ap_in; ns = NULL; as = NULL; avi_ptr = avi_ptr_in; } // }}} audio_cap_thread::~audio_cap_thread ( void ) // {{{ { delete as; delete ns; } // }}} // 运行部分,线程代码在这里 void audio_cap_thread::run ( void ) // {{{ { int size = 0; BUFF * image = NULL; audio_cap * ac = NULL; verbose_output( 1, "running new audio_cap_thread." ); // 如果是standalone会创建一个audio_cap对象 // 如果是listen会再创建一个network_send对象 ac = new audio_cap( avi_ptr ); ac->init(); if ( avi_ptr->net_mode == LISTEN ) { verbose_output( 3, "net_mode LISTEN" ); ns = new network_audio_send( avi_ptr ); ns->init(); } // 创建audio_send对象,用于向主体发送捕捉完毕信号 if ( avi_ptr->net_mode == STANDALONE ) { as = new audio_send; as->init( ap ); } verbose_output( 1, "begin audio capture loop." ); while ( 1 ) { // 取得一帧 if ( ac->get_image ( image, &size ) == FAILED ) { cerr << "Warning! get image error" << endl; continue; } if ( image == NULL ) { cerr << "Can't get new audio frame" << endl; ::exit( 1 ); } // 发出信号 if ( avi_ptr->net_mode == STANDALONE ) { as->send_image( image, size ); } // 如果做为listen方,则向其它connect方传送图像 if ( avi_ptr->net_mode == LISTEN ) { ns->send_image( image, size ); } } return ; } // }}}