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

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

?? helix-sp.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟件。 經過兩年開發后
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/* ********** * * This software is released under the provisions of the GPL version 2. * see file "COPYING".  If that file is not available, the full statement * of the license can be found at * * http://www.fsf.org/licensing/licenses/gpl.txt * * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. * Portions Copyright (c) Paul Cifarelli 2005 * * ********** */#include <stdlib.h>#include <stdarg.h>#include "hxcomm.h"#include "hxcore.h"#include "hxclsnk.h"#include "hxerror.h"#include "hxauth.h"#include "hxprefs.h"#include "hxstrutl.h"#include "hxvsrc.h"#include "hxresult.h"#include "hxplugn.h"#include "hspadvisesink.h"#include "hsperror.h"#include "hspauthmgr.h"#include "hspcontext.h"#include <X11/Xlib.h>#include <dlfcn.h>#include <errno.h>#include <fcntl.h>#include <sys/ioctl.h>#include "hxausvc.h"#include "dllpath.h"#include <config.h>#include "helix-sp.h"#include "hspvoladvise.h"#include "utils.h"#include "hsphook.h"#include "hxfiles.h"#ifdef USE_HELIX_ALSA#include <alsa/asoundlib.h>#include "hspalsadevice.h"#endif#ifdef HX_LOG_SUBSYSTEM#include "hxtlogutil.h"#endif#ifdef __FreeBSD__#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL#endif#if !defined(__NetBSD__) && !defined(__OpenBSD__)	#include <sys/soundcard.h>#else	#include <soundcard.h>#endiftypedef HX_RESULT (HXEXPORT_PTR FPRMSETDLLACCESSPATH) (const char*);class HelixSimplePlayerAudioStreamInfoResponse : public IHXAudioStreamInfoResponse{public:   HelixSimplePlayerAudioStreamInfoResponse(HelixSimplePlayer *player, int playerIndex) :      m_Player(player), m_index(playerIndex), m_lRefCount(0) {}   virtual ~HelixSimplePlayerAudioStreamInfoResponse() {}   /*    *  IUnknown methods    */   STDMETHOD(QueryInterface)   (THIS_                               REFIID riid,                               void** ppvObj);   STDMETHOD_(ULONG32,AddRef)  (THIS);   STDMETHOD_(ULONG32,Release) (THIS);   /*    * IHXAudioStreamInfoResponse methods    */   STDMETHOD(OnStream) (THIS_                        IHXAudioStream *pAudioStream                        );private:   HelixSimplePlayer *m_Player;   IHXAudioStream    *m_Stream;   int                m_index;   LONG32             m_lRefCount;   HXAudioFormat      m_audiofmt;};STDMETHODIMPHelixSimplePlayerAudioStreamInfoResponse::QueryInterface(REFIID riid, void**ppvObj){    if(IsEqualIID(riid, IID_IUnknown))    {        AddRef();        *ppvObj = (IUnknown*)(IHXAudioStreamInfoResponse *)this;        return HXR_OK;    }    else if(IsEqualIID(riid, IID_IHXAudioStreamInfoResponse))    {        AddRef();        *ppvObj = (IHXAudioStreamInfoResponse*)this;        return HXR_OK;    }    *ppvObj = NULL;    return HXR_NOINTERFACE;}STDMETHODIMP_(UINT32)HelixSimplePlayerAudioStreamInfoResponse::AddRef(){    return InterlockedIncrement(&m_lRefCount);}STDMETHODIMP_(UINT32)HelixSimplePlayerAudioStreamInfoResponse::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {        return m_lRefCount;    }    delete this;    return 0;}STDMETHODIMP HelixSimplePlayerAudioStreamInfoResponse::OnStream(IHXAudioStream *pAudioStream){   m_Player->print2stderr("Stream Added on player %d, stream duration %ld, sources %d\n", m_index,                          m_Player->duration(m_index), m_Player->ppctrl[m_index]->pPlayer->GetSourceCount());   m_Player->ppctrl[m_index]->pStream = pAudioStream;   m_Player->ppctrl[m_index]->pPreMixHook = new HSPPreMixAudioHook(m_Player, m_index, pAudioStream,                                                                   m_Player->ppctrl[m_index]->bFadeIn,                                                                   m_Player->ppctrl[m_index]->ulFadeLength);   // addpremixhook adds another ref   pAudioStream->AddPreMixHook(m_Player->ppctrl[m_index]->pPreMixHook, false);   m_Player->ppctrl[m_index]->pPreMixHook->Release(); // release the ref added in the premixhook constructor   m_Player->ppctrl[m_index]->bStarting = false;   return HXR_OK;}// Constantsconst int DEFAULT_TIME_DELTA = 2000;const int DEFAULT_STOP_TIME =  -1;const int SLEEP_TIME         = 10;const int GUID_LEN           = 64;// *** IUnknown methods ***///////////////////////////////////////////////////////////////////////////  Method://	IUnknown::QueryInterface//  Purpose://	Implement this to export the interfaces supported by your//	object.//STDMETHODIMP HelixSimplePlayerVolumeAdvice::QueryInterface(REFIID riid, void** ppvObj){    if (IsEqualIID(riid, IID_IUnknown))    {	AddRef();	*ppvObj = (IUnknown*)(IHXClientAdviseSink*)this;	return HXR_OK;    }    else if (IsEqualIID(riid, IID_IHXVolumeAdviseSink))    {	AddRef();	*ppvObj = (IHXVolumeAdviseSink*)this;	return HXR_OK;    }    *ppvObj = NULL;    return HXR_NOINTERFACE;}///////////////////////////////////////////////////////////////////////////  Method://	IUnknown::AddRef//  Purpose://	Everyone usually implements this the same... feel free to use//	this implementation.//STDMETHODIMP_(ULONG32) HelixSimplePlayerVolumeAdvice::AddRef(){    return InterlockedIncrement(&m_lRefCount);}///////////////////////////////////////////////////////////////////////////  Method://	IUnknown::Release//  Purpose://	Everyone usually implements this the same... feel free to use//	this implementation.//STDMETHODIMP_(ULONG32) HelixSimplePlayerVolumeAdvice::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {        return m_lRefCount;    }    delete this;    return 0;}STDMETHODIMP HelixSimplePlayerVolumeAdvice::OnVolumeChange(const UINT16 /*uVolume*/){   m_Player->onVolumeChange(m_index);#ifdef HELIX_SW_VOLUME_INTERFACE   m_Player->ppctrl[m_index]->volume = uVolume;#endif   return HXR_OK;}STDMETHODIMP HelixSimplePlayerVolumeAdvice::OnMuteChange(const BOOL bMute){   m_Player->onMuteChange(m_index);   m_Player->ppctrl[m_index]->ismute = bMute;   return HXR_OK;}int HelixSimplePlayer::print2stdout(const char *fmt, ...){    va_list args;    char buf[1024];    va_start(args, fmt);    int ret = vsprintf(buf, fmt, args);    std::cout << buf;    va_end(args);    return ret;}int HelixSimplePlayer::print2stderr(const char *fmt, ...){    va_list args;    char buf[1024];    va_start(args, fmt);    int ret = vsprintf(buf, fmt, args);    std::cerr << buf;    va_end(args);    return ret;}void HelixSimplePlayer::setFadeout(bool fadeout, unsigned long fadelength, int playerIndex ){   if (playerIndex == ALL_PLAYERS)   {      for (int i = 0; i<nNumPlayers; i++)         setFadeout(fadeout, fadelength, i);   }   else   {      if (playerIndex >=0 && playerIndex < nNumPlayers && ppctrl[playerIndex]->pPreMixHook)      {         ppctrl[playerIndex]->ulFadeLength = fadelength;         ((HSPPreMixAudioHook *)ppctrl[playerIndex]->pPreMixHook)->setFadelength(ppctrl[playerIndex]->ulFadeLength);         ((HSPPreMixAudioHook *)ppctrl[playerIndex]->pPreMixHook)->setFadeout(fadeout);      }   }}void HelixSimplePlayer::cleanUpStream(int playerIndex){   //print2stderr("CLEANUPSTREAM\n");   stop(playerIndex);}void HelixSimplePlayer::updateEQgains(){   for (int i = 0; i<nNumPlayers; i++)      if (pFinalAudioHook && isEQenabled())         ((HSPFinalAudioHook *)pFinalAudioHook)->updateEQgains(m_preamp, m_equalizerGains);}/* *  handle one event */void HelixSimplePlayer::DoEvent(){   struct _HXxEvent *pNothing = 0x0;   struct timeval    mtime;   mtime.tv_sec  = 0;   mtime.tv_usec = SLEEP_TIME * 1000;   usleep(SLEEP_TIME*1000);   pEngine->EventOccurred(pNothing);}/* *  handle events for at most nTimeDelta milliseconds */void HelixSimplePlayer::DoEvents(int){    DoEvent();}/* *  return the number of milliseconds since the epoch */UINT32 HelixSimplePlayer::GetTime(){   timeval t;   gettimeofday(&t, NULL);   // FIXME:   // the fact that the result is bigger than a UINT32 is really irrelevant;   // we can still play a stream for many many years...   return (UINT32)((t.tv_sec * 1000) + (t.tv_usec / 1000));}char* HelixSimplePlayer::RemoveWrappingQuotes(char* str){   int len = strlen(str);   if (len > 0)   {      if (str[len-1] == '"') str[--len] = 0;      if (str[0] == '"') {int i = 0; do { str[i] = str[i+1]; ++i; } while(--len); }   }   return str;}HelixSimplePlayer::HelixSimplePlayer() :   theErr(HXR_FAILED),   pErrorSink(NULL),   pErrorSinkControl(NULL),   pPluginE(0),   pPlugin2Handler(0),   ppctrl(NULL),   bURLFound(false),   nNumPlayers(0),   nNumPlayRepeats(1),   nTimeDelta(DEFAULT_TIME_DELTA),   nStopTime(DEFAULT_STOP_TIME),   bStopTime(true),   bStopping(false),   nPlay(0),   bEnableAdviceSink(false),   bEnableVerboseMode(false),   pEngine(NULL),   pEngineContext(NULL),   m_pszUsername(NULL),   m_pszPassword(NULL),   m_pszGUIDFile(NULL),   m_pszGUIDList(NULL),   m_Error(0),   m_ulNumSecondsPlayed(0),   mimehead(0),   mimelistlen(0),   m_preamp(0),   m_outputsink(OSS),   m_device(0),#ifdef USE_HELIX_ALSA   m_direct(ALSA),  // TODO: out why my alsa direct HW reader doesn't pickup changes in kmix (the whole purpose of this!)#else   m_direct(OSS),#endif   m_AlsaCapableCore(false),   m_nDevID(-1),   m_pAlsaMixerHandle(NULL),   m_pAlsaMasterMixerElem(NULL),   m_pAlsaPCMMixerElem(NULL),   m_alsaDevice("default"),   m_urlchanged(0),   m_volBefore(-1),   m_volAtStart(-1),   m_MvolBefore(-1),   m_MvolAtStart(-1){   pthread_mutexattr_t ma;   pthread_mutexattr_init(&ma);   pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_FAST_NP); // note this is not portable outside linux and a few others   pthread_mutex_init(&m_engine_m, &ma);}void HelixSimplePlayer::init(const char *corelibhome, const char *pluginslibhome, const char *codecshome, int numPlayers){   int i;   theErr = HXR_OK;   FPRMCREATEENGINE        fpCreateEngine;   FPRMSETDLLACCESSPATH    fpSetDLLAccessPath;   SafeSprintf(mCoreLibPath, MAX_PATH, "%s/%s", corelibhome, "clntcore.so");   // Allocate arrays to keep track of players and client   // context pointers   ppctrl = new struct playerCtrl *[MAX_PLAYERS];   memset(ppctrl, 0, sizeof(struct playerCtrl *) * MAX_PLAYERS);   if (!ppctrl)   {      print2stderr("Error: Out of Memory.\n");      theErr = HXR_UNEXPECTED;      return;   }   fpCreateEngine    = NULL;   // prepare/load the HXCore module   //print2stdout("Simpleplayer is looking for the client core at %s\n", mCoreLibPath );   core_handle = dlopen(mCoreLibPath, RTLD_LAZY | RTLD_GLOBAL);   if (!core_handle)   {      print2stderr("splayer: failed to open corelib, errno %d\n", errno);      theErr = HXR_FAILED;      return;   }   fpCreateEngine = (FPRMCREATEENGINE) dlsym(core_handle, "CreateEngine");   fpSetDLLAccessPath = (FPRMSETDLLACCESSPATH) dlsym(core_handle, "SetDLLAccessPath");   if (fpCreateEngine == NULL ||       fpSetDLLAccessPath == NULL )   {      theErr = HXR_FAILED;      return;   }   //Now tell the client core where to find the plugins and codecs it   //will be searching for.   if (NULL != fpSetDLLAccessPath)   {      //Create a null delimited, double-null terminated string      //containing the paths to the encnet library (DT_Common) and      //the sdpplin library (DT_Plugins)...      char pPaths[256]; /* Flawfinder: ignore */      char* pPathNextPosition = pPaths;      memset(pPaths, 0, 256);      UINT32 ulBytesLeft = 256;      char* pNextPath = new char[256];      memset(pNextPath, 0, 256);      SafeSprintf(pNextPath, 256, "DT_Common=%s", corelibhome);      //print2stderr("Common DLL path %s\n", pNextPath );      UINT32 ulBytesToCopy = strlen(pNextPath) + 1;      if (ulBytesToCopy <= ulBytesLeft)      {         memcpy(pPathNextPosition, pNextPath, ulBytesToCopy);         pPathNextPosition += ulBytesToCopy;         ulBytesLeft -= ulBytesToCopy;      }      SafeSprintf(pNextPath, 256, "DT_Plugins=%s", pluginslibhome);      //print2stderr("Plugin path %s\n", pNextPath );      ulBytesToCopy = strlen(pNextPath) + 1;      if (ulBytesToCopy <= ulBytesLeft)      {         memcpy(pPathNextPosition, pNextPath, ulBytesToCopy);         pPathNextPosition += ulBytesToCopy;         ulBytesLeft -= ulBytesToCopy;      }      SafeSprintf(pNextPath, 256, "DT_Codecs=%s", codecshome);      //print2stderr("Codec path %s\n", pNextPath );      ulBytesToCopy = strlen(pNextPath) + 1;      if (ulBytesToCopy <= ulBytesLeft)      {         memcpy(pPathNextPosition, pNextPath, ulBytesToCopy);         pPathNextPosition += ulBytesToCopy;         ulBytesLeft -= ulBytesToCopy;         *pPathNextPosition='\0';      }      fpSetDLLAccessPath((char*)pPaths);      HX_VECTOR_DELETE(pNextPath);   }   // create client engine   if (HXR_OK != fpCreateEngine((IHXClientEngine**)&pEngine))   {      theErr = HXR_FAILED;      return;   }   pCommonClassFactory = 0;   // get the common class factory   pEngine->QueryInterface(IID_IHXCommonClassFactory, (void **) &pCommonClassFactory);   if (!pCommonClassFactory)      print2stderr("no CommonClassFactory\n");   // get the engine setup interface   IHXClientEngineSetup *pEngineSetup = 0;   pEngine->QueryInterface(IID_IHXClientEngineSetup, (void **) &pEngineSetup);   if (!pEngineSetup)      print2stderr("no engine setup interface\n");   else   {      pEngineContext = new HSPEngineContext(this, pCommonClassFactory);      pEngineContext->AddRef();#ifdef HX_LOG_SUBSYSTEM      HX_ENABLE_LOGGING(pEngineContext);#endif      pEngineSetup->Setup(pEngineContext);      pEngineSetup->Release();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品中文字幕一区二区| 欧美日韩国产三级| 精品视频一区三区九区| 久久久久高清精品| 日韩在线一区二区三区| 成人激情免费网站| 欧美成人福利视频| 午夜精品福利一区二区蜜股av| 成人黄色小视频| 久久综合五月天婷婷伊人| 一区二区三区高清| 99精品欧美一区二区三区综合在线| 日韩一卡二卡三卡| 亚洲成av人片观看| 日本韩国欧美三级| 亚洲三级视频在线观看| zzijzzij亚洲日本少妇熟睡| 欧美成人午夜电影| 日韩国产高清在线| 欧美日韩国产经典色站一区二区三区| 欧美国产禁国产网站cc| 国产伦理精品不卡| 久久一夜天堂av一区二区三区| 日韩精品久久久久久| 欧美日韩一区久久| 亚洲国产精品尤物yw在线观看| 99国产欧美另类久久久精品| 国产精品看片你懂得| 国产河南妇女毛片精品久久久| 精品卡一卡二卡三卡四在线| 久热成人在线视频| 欧美videos大乳护士334| 欧美aaa在线| 精品入口麻豆88视频| 看电视剧不卡顿的网站| 日韩免费视频线观看| 美女免费视频一区二区| 日韩欧美精品三级| 狠狠色综合日日| 国产午夜精品久久| 国产成人av影院| 中文字幕免费不卡在线| 91美女福利视频| 亚洲一区在线观看视频| 7777精品伊人久久久大香线蕉完整版 | 亚洲视频 欧洲视频| 99久久精品情趣| 亚洲激情第一区| 精品视频1区2区3区| 蜜桃精品视频在线| 日本一区二区三区电影| 播五月开心婷婷综合| 亚洲美女淫视频| 欧美一区二区在线视频| 国内精品在线播放| 中文字幕色av一区二区三区| 色成年激情久久综合| 视频在线观看一区二区三区| 精品国产一区二区三区不卡| 成人动漫在线一区| 亚洲一本大道在线| 精品蜜桃在线看| 色哟哟日韩精品| 免费av成人在线| 国产精品你懂的在线| 欧美日韩精品欧美日韩精品 | 一区二区三区中文字幕电影| 欧美丰满美乳xxx高潮www| 国产精品亚洲成人| 亚洲成人中文在线| 国产亚洲综合在线| 欧美三级视频在线观看| 国产丶欧美丶日本不卡视频| 亚洲自拍偷拍综合| 国产亚洲精品aa| 7777精品伊人久久久大香线蕉经典版下载| 麻豆成人免费电影| 亚洲香肠在线观看| 久久精品日产第一区二区三区高清版 | 亚洲综合一区二区| 久久精品欧美一区二区三区不卡| 日本高清不卡aⅴ免费网站| 国产一区视频导航| 日韩精品乱码免费| 亚洲精品高清在线观看| 久久夜色精品国产噜噜av | 视频一区欧美精品| 国产精品久久久久久久久快鸭| 日韩三级在线观看| 欧美日韩视频第一区| 99re亚洲国产精品| 成人看片黄a免费看在线| 另类小说图片综合网| 午夜精品久久久久久久| 成人欧美一区二区三区黑人麻豆| 欧美成人猛片aaaaaaa| 欧美人体做爰大胆视频| 91黄色免费版| 91福利视频久久久久| 99麻豆久久久国产精品免费优播| 韩国av一区二区三区四区| 青青草97国产精品免费观看| 亚洲国产另类av| 亚洲国产成人av好男人在线观看| 亚洲婷婷国产精品电影人久久| 国产网红主播福利一区二区| 26uuu国产在线精品一区二区| 欧美日韩一区二区三区不卡 | 99热精品一区二区| 国产精品一二三区| 国产精选一区二区三区| 国产一区二区在线视频| 美腿丝袜亚洲综合| 久久精品99国产精品日本| 另类小说欧美激情| 极品少妇xxxx精品少妇| 精品亚洲成a人| 国产麻豆精品theporn| 国产乱人伦偷精品视频不卡 | 中文字幕在线不卡视频| 国产精品美女久久久久av爽李琼| 国产精品麻豆网站| 1区2区3区国产精品| 亚洲色图制服丝袜| 亚洲最大成人网4388xx| 亚洲第一精品在线| 日韩电影在线看| 韩国v欧美v日本v亚洲v| 成人黄色综合网站| 色狠狠一区二区三区香蕉| 欧美日韩中文字幕一区二区| 欧美精品日韩一本| 精品欧美一区二区三区精品久久| 精品国产欧美一区二区| 日本一区二区三区免费乱视频| 国产精品女同互慰在线看| 亚洲一区在线观看免费| 免费不卡在线视频| 国产成人在线视频网站| 一本到一区二区三区| 91精品免费在线| 国产嫩草影院久久久久| 亚洲精品成人在线| 久久99久久久久久久久久久| 丰满少妇久久久久久久| 在线观看www91| 欧美精品一区男女天堂| 亚洲免费av网站| 日本欧美大码aⅴ在线播放| 国产乱码精品一区二区三区五月婷| 91色婷婷久久久久合中文| 91麻豆精品国产| 亚洲欧美综合色| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产suv精品一区二区三区| 欧美日韩免费一区二区三区视频| 26uuu欧美日本| 亚洲成a人片在线观看中文| 国产精品一区二区久久不卡| 欧美自拍偷拍一区| 久久久国产精品麻豆| 日韩精品久久久久久| 99久久精品情趣| 久久欧美中文字幕| 日韩av一区二区三区| 99精品热视频| 久久精品无码一区二区三区| 婷婷开心久久网| av中文一区二区三区| 久久综合色之久久综合| 亚洲一区二区三区三| 99久久久久久99| 国产三级精品三级在线专区| 美女脱光内衣内裤视频久久网站| 色综合久久中文字幕综合网| 日本一区二区三区国色天香| 老司机精品视频一区二区三区| 欧美天天综合网| 亚洲女人小视频在线观看| 国产成人夜色高潮福利影视| 日韩欧美国产麻豆| 视频一区在线播放| 欧美日韩不卡一区二区| 一区二区三区欧美亚洲| 波多野结衣在线一区| 国产欧美久久久精品影院| 狠狠色狠狠色综合日日91app| 欧美日韩久久久一区| 亚洲激情在线播放| 99久精品国产| 亚洲黄色av一区| 色激情天天射综合网| 亚洲美女视频在线观看| 91视频在线观看| 亚洲视频一区二区在线| 色拍拍在线精品视频8848| 亚洲精品写真福利| 色老综合老女人久久久| 亚洲午夜三级在线| 精品视频一区二区不卡|