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

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

?? filemembers.cxx

?? openmcu 是開源的H.323會議服務器,需要pwlib 和 openh323的編譯庫文件支持。
?? CXX
字號:
/*
 * filemembers.cxx
 *
 * Various file-based Members for OpenMCU
 *
 * Copyright (C) 2003 Post Increment
 *
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is Portable Windows Library.
 *
 * The Initial Developer of the Original Code is Post Increment
 *
 * Portions of this code were written by Post Increment (http://www.postincrement.com) 
 * with the assistance of funding from Citron Networks (http://www.citron.com.tw)
 *
 * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
 * All Rights Reserved.
 *
 * Contributor(s): Derek J Smithies (derek@indranet.co.nz)
 *
 * $Log: filemembers.cxx,v $
 * Revision 2.1  2004/05/26 06:54:31  csoutheren
 * Changed to be a PHTTPServiceProcess
 * Added ability to play WAV files on member entry and exit
 * Added additional documentation on all classes
 * Preparation for re-introducing video
 *
 */

#include <ptlib.h>
#include "conference.h"
#include "filemembers.h"

ConferenceSoundCardMember::ConferenceSoundCardMember()
#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable:4355)
#endif
  : ConferenceMember(this)
#ifdef _WIN32
#pragma warning(pop)
#endif
{
  // open the default audio device
  PString deviceName = PSoundChannel::GetDefaultDevice(PSoundChannel::Player);
  soundDevice.Open(deviceName, PSoundChannel::Player, 1, 8000, 16);

  // start a thread to read from the conference and write to default audio device
  if (!soundDevice.IsOpen()) {
    thread = NULL;
  } else {
    running = TRUE;
    thread = PThread::Create(PCREATE_NOTIFIER(Thread), 0, PThread::NoAutoDeleteThread);
  }
}

ConferenceSoundCardMember::~ConferenceSoundCardMember()
{
  Unlisten();
}

void ConferenceSoundCardMember::Unlisten()
{
  if (conference->RemoveMember(this))
    conference->GetManager().RemoveConference(conference->GetID());

  if ((thread != NULL) && running) {
    running = FALSE;
    thread->WaitForTermination();
    delete thread;
    thread = NULL;
  }
}

void ConferenceSoundCardMember::Thread(PThread &, INT)
{
  AudioDelay audioDelay;
  PBYTEArray pcmData(480);
  soundDevice.SetBuffers(480, 3);

  while (running) {

    // read a block of data
    ReadAudio(pcmData.GetPointer(), pcmData.GetSize());

    // write the data to the sound card
    if (soundDevice.IsOpen())
      soundDevice.Write(pcmData.GetPointer(), pcmData.GetSize());

    audioDelay.Delay(pcmData.GetSize() / 16);
  }

  ConferenceManager & mgr = conference->GetManager();
  mgr.RemoveMember(conference->GetID(), this);
}


///////////////////////////////////////////////////////////////////////////

ConferenceFileMember::ConferenceFileMember(const PFilePath & _fn, PFile::OpenMode _mode)
#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable:4355)
#endif
  : ConferenceMember((void *)this), filename(_fn), mode(_mode)
#ifdef _WIN32
#pragma warning(pop)
#endif
{
  // open the default audio device
  if (!file.Open(filename, mode)) {
    PTRACE(1, "Cannot open WAV file " << filename);
    return;
  }

  PTRACE(1, "Playing WAV file " << filename);

  running = TRUE;

  if (mode == PFile::WriteOnly)
    thread = PThread::Create(PCREATE_NOTIFIER(WriteThread), 0, PThread::NoAutoDeleteThread);
  else
    thread = PThread::Create(PCREATE_NOTIFIER(ReadThread), 0, PThread::NoAutoDeleteThread);
}

ConferenceFileMember::~ConferenceFileMember()
{
  Unlisten();
}

void ConferenceFileMember::Unlisten()
{
  if (conference->RemoveMember(this))
    conference->GetManager().RemoveConference(conference->GetID());

  if ((thread != NULL) && running) {
    running = FALSE;
    thread->WaitForTermination();
    delete thread;
    thread = NULL;
  }
}

void ConferenceFileMember::WriteThread(PThread &, INT)
{
  PBYTEArray pcmData(480);
  AudioDelay audioDelay;

  while (running) {

    // read a block of data
    ReadAudio(pcmData.GetPointer(), pcmData.GetSize());

    // write to the file
    if (file.IsOpen())
      file.Write(pcmData.GetPointer(), pcmData.GetSize());

    // and delay
    audioDelay.Delay(pcmData.GetSize() / 16);
  }

  ConferenceManager & mgr = conference->GetManager();
  mgr.RemoveMember(conference->GetID(), this);
}

void ConferenceFileMember::ReadThread(PThread &, INT)
{
  PBYTEArray pcmData(480);
  AudioDelay audioDelay;

  while (running) {

    if (!file.IsOpen())
      break;

    // read a block of data from the file
    if (!file.Read(pcmData.GetPointer(), pcmData.GetSize()))
      break;

    // read a block of data
    WriteAudio(pcmData.GetPointer(), pcmData.GetSize());

    // and delay
    audioDelay.Delay(pcmData.GetSize() / 16);
  }

  ConferenceManager & mgr = conference->GetManager();
  mgr.RemoveMember(conference->GetID(), this);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
播五月开心婷婷综合| 91色porny| 午夜伦欧美伦电影理论片| 亚洲欧洲制服丝袜| 亚洲精品一二三| 亚洲一二三区视频在线观看| 亚洲自拍与偷拍| 亚洲第一电影网| 亚洲www啪成人一区二区麻豆| 亚洲一区二区高清| 亚洲国产精品麻豆| 日韩黄色免费电影| 久久国产精品色| 国产精品1024| 色网站国产精品| 91传媒视频在线播放| 欧美日韩国产大片| 精品国产1区二区| 中国av一区二区三区| 亚洲欧洲精品一区二区三区| 一区二区三区四区在线| 日韩电影免费在线| 国产99久久久国产精品潘金网站| 99在线精品一区二区三区| 91国产成人在线| 日韩女优电影在线观看| 国产精品美女久久久久av爽李琼| 亚洲一区在线观看免费观看电影高清 | 99久久综合国产精品| 色婷婷狠狠综合| 日韩欧美激情四射| 国产精品黄色在线观看| 午夜精品视频在线观看| 国产综合色在线| 91天堂素人约啪| 3d动漫精品啪啪| 国产精品国产馆在线真实露脸| 五月天激情综合网| 成人午夜看片网址| 欧美日本国产视频| 亚洲国产成人私人影院tom| 亚洲午夜在线电影| 国产91在线观看| 日韩一区二区高清| 一区二区三区自拍| 成人av在线电影| 欧美videos中文字幕| 亚洲猫色日本管| 国产电影一区在线| 制服丝袜国产精品| 亚洲欧美韩国综合色| 国产美女主播视频一区| 欧美日韩三级视频| 亚洲精品日韩一| 成人的网站免费观看| 日韩视频永久免费| 一区二区三区国产豹纹内裤在线| 成人综合激情网| 精品国产免费人成电影在线观看四季 | 欧美中文字幕一区二区三区| 国产区在线观看成人精品| 日产欧产美韩系列久久99| 色综合天天综合网国产成人综合天| www欧美成人18+| 卡一卡二国产精品| 91精品蜜臀在线一区尤物| 亚洲五码中文字幕| 91国偷自产一区二区三区成为亚洲经典 | 国产综合色在线| 欧美www视频| 免费高清在线一区| 91精品在线观看入口| 亚洲综合一区二区三区| 在线精品国精品国产尤物884a| 亚洲丝袜美腿综合| 99久久伊人精品| 亚洲免费伊人电影| 欧美在线免费视屏| 午夜免费久久看| 日韩三级精品电影久久久| 久久精品噜噜噜成人av农村| 日韩欧美色综合网站| 国产九色sp调教91| 国产欧美日韩在线观看| av激情亚洲男人天堂| 亚洲一区免费视频| 日韩一卡二卡三卡国产欧美| 免费高清在线一区| 国产女同互慰高潮91漫画| 91美女视频网站| 亚洲高清免费视频| 精品91自产拍在线观看一区| 国产成人av影院| 亚洲精品成a人| 欧美日韩免费不卡视频一区二区三区| 五月开心婷婷久久| 久久久久综合网| 色婷婷综合久色| 日韩精品成人一区二区三区| 欧美精品一区二区久久婷婷| 粉嫩av一区二区三区在线播放| 一区二区三区在线免费视频| 这里只有精品视频在线观看| 国内精品在线播放| 亚洲激情欧美激情| 欧美大片日本大片免费观看| 国产999精品久久久久久| 亚洲成在人线免费| 久久久久久亚洲综合影院红桃| 一本色道久久综合亚洲91| 免费在线观看视频一区| 国产精品久久久久久久久免费樱桃| 欧美日韩视频在线一区二区 | 成人动漫视频在线| 久久精品国产一区二区三区免费看| 国产精品色哟哟网站| 51午夜精品国产| gogo大胆日本视频一区| 精品一区二区日韩| 亚洲一区二区精品久久av| 26uuuu精品一区二区| 欧美疯狂做受xxxx富婆| 白白色 亚洲乱淫| 精品一区二区三区香蕉蜜桃| 亚洲一区二区三区视频在线播放| 国产精品美女久久久久aⅴ国产馆| 成人午夜在线视频| 26uuu国产电影一区二区| 色94色欧美sute亚洲线路二| 国产毛片精品国产一区二区三区| 亚洲午夜av在线| 亚洲伦在线观看| 国产精品电影一区二区| 久久久午夜精品理论片中文字幕| 欧美高清性hdvideosex| 不卡一二三区首页| 国产精品资源网| 国产又黄又大久久| 免费xxxx性欧美18vr| 婷婷成人激情在线网| 亚洲午夜久久久| 亚洲动漫第一页| 亚洲福利视频导航| 午夜一区二区三区视频| 亚洲无线码一区二区三区| 一区二区三区成人| 亚洲免费视频中文字幕| 国产精品美女视频| 国产精品毛片高清在线完整版| 国产人伦精品一区二区| 国产亚洲欧美激情| 久久久久久久av麻豆果冻| 久久综合五月天婷婷伊人| 精品久久久久久最新网址| 日韩午夜三级在线| 欧美xxxx在线观看| 国产视频亚洲色图| 国产精品久久三| 亚洲精品日韩专区silk| 亚洲国产wwwccc36天堂| 天天av天天翘天天综合网| 男人的j进女人的j一区| 精彩视频一区二区三区| 国产精品中文有码| 92国产精品观看| 欧美日韩精品一二三区| 欧美一卡2卡3卡4卡| 精品少妇一区二区| 亚洲国产精品黑人久久久| 中文字幕不卡三区| 亚洲美女视频在线观看| 午夜精品久久久久久久| 精品一二三四区| 国产成人av电影在线观看| av午夜精品一区二区三区| 欧美午夜一区二区三区免费大片| 在线综合视频播放| 久久久久久久性| 亚洲夂夂婷婷色拍ww47| 精品一二三四在线| 97精品久久久午夜一区二区三区 | 欧美三级在线视频| 欧美r级在线观看| 亚洲人精品一区| 久久精品国产精品亚洲精品| 国产成人在线影院| 欧美男人的天堂一二区| www久久精品| 亚洲成a人片在线不卡一二三区 | 99久久99久久免费精品蜜臀| 色婷婷综合久久久久中文| 精品久久免费看| 亚洲国产aⅴ成人精品无吗| 国产精品99久久久久久久女警| 欧美专区日韩专区| 国产女同性恋一区二区| 奇米精品一区二区三区四区| 色哟哟一区二区三区| 精品久久久久久久久久久久包黑料| 亚洲男同性视频|