📄 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 ;} // }}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -