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

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

?? hxaudstr.cpp

?? linux下的一款播放器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
        m_Owner->AudioFormatNowKnown();    }    if (!theErr && m_bSetupDone && !m_bInited)    {        theErr = ProcessInfo();    }    return theErr;}/************************************************************************ *  Method: *              IHXAudioStream::Write *  Purpose: *      Write audio data to Audio Services.  * *      NOTE: If the renderer loses packets and there is no loss *      correction, then the renderer should write the next packet  *      using a meaningful start time.  Audio Services will play  *      silence where packets are missing. */STDMETHODIMP CHXAudioStream::Write(     HXAudioData*        pInData){    HX_RESULT theErr = HXR_OK;    if (!pInData)    {        return HXR_INVALID_PARAMETER;    }    if (!m_bInited)    {        return HXR_NOT_INITIALIZED;    }    // Init pre-mix hooks. Call this once to set up hook info.     if ( !m_bHooksInitialized )    {        InitHooks();    }    // Process any "hooks"; Add the data to the data list.    /* If buffer is NULL, it means that the user just      * wants to know what timestamp should be placed in the next      * STREAMED/TIMED audio data     */    if ( !m_bGotHooks || !pInData->pData)    {        theErr = AddData( pInData );    }    else    {        HXAudioData outData;                outData.pData       = 0;        outData.ulAudioTime = 0;        theErr = ProcessHooks( pInData, &outData );        if (!theErr && !m_bDisableWrite )        {            theErr = AddData( &outData );        }        if (outData.pData)        {            outData.pData->Release();        }    }    return theErr;}/************************************************************************ *  Method: *              IHXAudioStream::AddPreMixHook *      Purpose: *      Use this method to add a pre-mix audio data hook. */STDMETHODIMP CHXAudioStream::AddPreMixHook(           IHXAudioHook*    pHook,    const BOOL              bDisableWrite){#if defined(HELIX_FEATURE_AUDIO_PREMIXHOOK)    void* pTmp = 0;        /* Does one already exists */    if (m_PreMixHookMap.Lookup((void*)pHook, pTmp))    {        return HXR_INVALID_PARAMETER;    }    HXAudioHookInfo* pPreMixHookInfo = (HXAudioHookInfo*) new HXAudioHookInfo;    if(!pPreMixHookInfo)    {        return HXR_OUTOFMEMORY;    }    pPreMixHookInfo->pHook   	    = pHook;    pPreMixHookInfo->bDisableWrite  = bDisableWrite;    pPreMixHookInfo->bIgnoreAudioData = FALSE;    IHXValues* pValues = NULL;    if (pHook && pHook->QueryInterface(IID_IHXValues, (void**) &pValues) == HXR_OK)    {        UINT32 ulValue = 0;        pValues->GetPropertyULONG32("IgnoreAudioData", ulValue);        pPreMixHookInfo->bIgnoreAudioData = (ulValue == 1);        HX_RELEASE(pValues);    }    pHook->AddRef();            // Released in destructor    m_PreMixHookMap.SetAt(pHook, pPreMixHookInfo);    m_bGotHooks = TRUE;    /* If any one of them is Disabled, we do not write */    if (bDisableWrite)    {        m_bDisableWrite = TRUE;    }    ProcessAudioHook(ACTION_ADD, pHook);    /* If we are already initialized, send the audio format */    if (m_bHooksInitialized)    {        if (pPreMixHookInfo->bIgnoreAudioData ||            HXR_OK == ProcessAudioHook(ACTION_CHECK, pHook))        {            pHook->OnInit( &m_AudioFmt );        }    }    return HXR_OK;#else    return HXR_NOTIMPL;#endif /* HELIX_FEATURE_AUDIO_PREMIXHOOK */}/************************************************************************ *  Method: *              IHXAudioStream::RemovePreMixHook *      Purpose: *      Use this method to remove a pre-mix audio data hook. */STDMETHODIMP CHXAudioStream::RemovePreMixHook(       IHXAudioHook*    pHook){#if defined(HELIX_FEATURE_AUDIO_PREMIXHOOK)    HXAudioHookInfo* pPreMixHookInfo = 0;    BOOL bCheckForDisableWrite        = FALSE;    if (!m_PreMixHookMap.Lookup((void*)pHook, (void*&) pPreMixHookInfo))    {        return HXR_INVALID_PARAMETER;    }    m_PreMixHookMap.RemoveKey(pHook);    /* If we are removing a hook which had disable write,      * we need to re-determine if any of the remaining hooks     * has DisableWrite set to TRUE     */    if (pPreMixHookInfo->bDisableWrite)    {        bCheckForDisableWrite = TRUE;        m_bDisableWrite       = FALSE;    }    ProcessAudioHook(ACTION_REMOVE, pHook);    pPreMixHookInfo->pHook->Release();    delete pPreMixHookInfo;    if (m_PreMixHookMap.GetCount() == 0)    {        m_bGotHooks     = FALSE;        m_bDisableWrite = FALSE;    }    else if (bCheckForDisableWrite)    {        CHXMapPtrToPtr::Iterator lIter = m_PreMixHookMap.Begin();        for (; lIter != m_PreMixHookMap.End(); ++lIter)        {            HXAudioHookInfo* pPreMixHook = (HXAudioHookInfo*) (*lIter);                        /* atleast one has Disable Write ON */            if (pPreMixHook->bDisableWrite)            {                m_bDisableWrite = TRUE;                break;            }        }    }#endif /* HELIX_FEATURE_AUDIO_PREMIXHOOK */    return HXR_OK;}/*************************************************************************  Method:*       IHXAudioStream::AddDryNotification*  Purpose:*       Use this to add a notification response object to get notifications*       when audio stream is running dry.*/STDMETHODIMP CHXAudioStream::AddDryNotification                        (                            IHXDryNotification* /*IN*/ pNotification                        ){    if (!pNotification)    {        return HXR_INVALID_PARAMETER;    }    void* pTmp = 0;        /* Does one already exists */    if (m_DryNotificationMap.Lookup((void*)pNotification, pTmp))    {        return HXR_INVALID_PARAMETER;    }    pNotification->AddRef();    m_DryNotificationMap.SetAt((void*)pNotification, (void*)pNotification);    return HXR_OK;}/*************************************************************************  Method:*      IHXAudioStream2::RemoveDryNotification*  Purpose:*           Use this to remove itself from the notification response object*           during the stream switching.*/STDMETHODIMP CHXAudioStream::RemoveDryNotification                               (                                IHXDryNotification* /*IN*/ pNotification                            ){    HX_RESULT   hr = HXR_OK;    void* pTmp = 0;    if (!pNotification)    {        hr = HXR_INVALID_PARAMETER;        goto cleanup;    }    // remove only if it is exists    if (m_DryNotificationMap.Lookup((void*)pNotification, pTmp))    {        m_DryNotificationMap.RemoveKey((void*)pNotification);        HX_RELEASE(pNotification);    }    else    {        hr = HXR_INVALID_PARAMETER;        goto cleanup;    }cleanup:    return hr;}/*************************************************************************  Method:*      IHXAudioStream2::GetAudioFormat*  Purpose:*           Returns the input audio format of the data written by the *           renderer. This function will fill in the pre-allocated *           HXAudioFormat structure passed in.*/STDMETHODIMPCHXAudioStream::GetAudioFormat(HXAudioFormat*   /*IN/OUT*/pAudioFormat){    HX_ASSERT(pAudioFormat);    if (!pAudioFormat)    {        return HXR_INVALID_PARAMETER;    }    if (!m_bInited)    {        return HXR_UNEXPECTED;    }    pAudioFormat->uChannels         = m_AudioFmt.uChannels;    pAudioFormat->uBitsPerSample    = m_AudioFmt.uBitsPerSample;    pAudioFormat->ulSamplesPerSec   = m_AudioFmt.ulSamplesPerSec;    pAudioFormat->uMaxBlockSize     = m_AudioFmt.uMaxBlockSize;    return HXR_OK;} /************************************************************************ *  Method: *              IHXAudioStream::GetAudioVolume *      Purpose: *              Return this stream's IRMA volume interface. */STDMETHODIMP_(IHXVolume*) CHXAudioStream::GetAudioVolume(){    if ( m_pStreamVolume )    {        m_pStreamVolume->AddRef();        return m_pStreamVolume;    }    else    {        return 0;    }}#if defined(HELIX_FEATURE_VOLUME)/* *      IHXVolumeAdviseSink methods */STDMETHODIMP CHXAudioStream::OnVolumeChange(    const UINT16 uVolume){    m_uVolume = uVolume;    return HXR_OK;}STDMETHODIMP CHXAudioStream::OnMuteChange(    const BOOL bMute){    m_bMute = bMute;    return HXR_OK;}#endif /* HELIX_FEATURE_VOLUME *//************************************************************************ *  Method: *              IHXAudioStream::AddData *      Purpose: *              Add audio data to list. *      NOTE: Mark Streamed data also as Timed data IF we don't write a streamed packet *       since it was LATE!!! */HX_RESULT CHXAudioStream::AddData(    HXAudioData* pAudioData){    HX_RESULT       theErr = HXR_OK;    BOOL            bInTSRollOver = FALSE;    HXAudioInfo*    pAinfo = 0;    /* If buffer is NULL, it means that the user just      * wants to know what timestamp should be placed in the next      * STREAMED/TIMED audio data     */    if (!pAudioData->pData)    {        HXAudioInfo* pInfo = NULL;                if (!m_pDataList->IsEmpty() &&             NULL != (pInfo = (HXAudioInfo*) m_pDataList->GetTail()))        {            pAudioData->ulAudioTime = pInfo->ulStartTime +                                       CalcMs(pInfo->pBuffer->GetSize());        }        else        {            pAudioData->ulAudioTime = INT64_TO_UINT32(m_llLastWriteTime - CAST_TO_INT64 m_ulTSRollOver * CAST_TO_INT64 MAX_UINT32);        }        return HXR_OK;    }    // make sure the renderer does not pass NULL data!!    HX_ASSERT(pAudioData->pData->GetBuffer() != NULL &&              pAudioData->pData->GetSize() != 0);    if (pAudioData->pData->GetBuffer()  == NULL ||        pAudioData->pData->GetSize()    == 0)    {        return HXR_INVALID_PARAMETER;    }    if (m_bIsFirstPacket)    {        m_bIsFirstPacket = FALSE;                IHXErrorMessages* pErrMsg = NULL;        if (HXR_OK == m_Owner->m_pContext->QueryInterface(IID_IHXErrorMessages, (void**)&pErrMsg))        {            DEBUG_OUT(pErrMsg, DOL_GENERIC, (s,"AudioFormatIn: %lu channels %lu SamplesPerSec", m_AudioFmt.uChannels, m_AudioFmt.ulSamplesPerSec));            DEBUG_OUT(pErrMsg, DOL_GENERIC, (s,"AudioFormatOut: %lu channels %lu SamplesPerSec", m_DeviceFmt.uChannels, m_DeviceFmt.ulSamplesPerSec));        }        HX_RELEASE(pErrMsg);        if (m_bIsLive)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产福利| 精品嫩草影院久久| 日韩视频一区二区三区| 国产亚洲精品7777| 日韩国产高清影视| 99久久精品一区二区| 国产精品成人网| 日韩影院精彩在线| 色先锋资源久久综合| 久久免费午夜影院| 日日摸夜夜添夜夜添国产精品| 成人黄页毛片网站| 2023国产精华国产精品| 日韩激情一区二区| 欧美网站一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 国产麻豆视频精品| 欧美精品一区二区三区蜜桃| 天堂资源在线中文精品| 色综合视频在线观看| 国产精品丝袜91| 国产麻豆精品久久一二三| 日韩亚洲欧美成人一区| 亚洲1区2区3区4区| 欧美日韩综合在线| 亚洲尤物在线视频观看| 色偷偷成人一区二区三区91 | 狠狠久久亚洲欧美| 777xxx欧美| 日本欧美在线看| 日韩一级片网址| 免费在线观看日韩欧美| 在线综合+亚洲+欧美中文字幕| 亚洲欧美偷拍三级| 色悠悠亚洲一区二区| 亚洲欧美二区三区| 色综合久久综合| 亚洲一区精品在线| 精品视频1区2区3区| 韩国一区二区在线观看| 精品电影一区二区三区| 狠狠色伊人亚洲综合成人| 久久先锋资源网| 懂色av一区二区在线播放| 久久精品一二三| 不卡一区二区中文字幕| 中文字幕人成不卡一区| 91电影在线观看| 亚洲国产日韩一级| 日韩一本二本av| 韩国av一区二区三区四区 | 精品国内二区三区| 国产专区欧美精品| 中文字幕视频一区| 欧美日韩在线不卡| 激情综合色综合久久| 中文字幕电影一区| 在线观看免费亚洲| 久久精品久久精品| 国产免费观看久久| 欧美色精品天天在线观看视频| 日韩和的一区二区| 国产欧美一区视频| 欧美综合欧美视频| 精品午夜久久福利影院| 国产精品欧美经典| 欧美一区午夜视频在线观看| 国产成人福利片| 亚洲一区二区在线免费看| 欧美成人精品高清在线播放| 99久久综合色| 另类小说一区二区三区| 亚洲婷婷国产精品电影人久久| 欧美精品日日鲁夜夜添| 国产成人精品免费一区二区| 亚洲第一搞黄网站| 国产欧美精品一区| 欧美日韩国产电影| 成人免费毛片a| 日本欧美一区二区| ...xxx性欧美| 亚洲一区二区三区四区在线观看 | 亚洲成人av中文| 日本一区二区三级电影在线观看| 欧美性猛交xxxxxxxx| 国产精品99久久久久久久女警| 一二三区精品视频| 国产精品女主播在线观看| 91精品国产91热久久久做人人| 97精品国产露脸对白| 激情综合五月天| 石原莉奈在线亚洲三区| 亚洲摸摸操操av| 国产蜜臀av在线一区二区三区| 欧美电视剧在线看免费| 欧美在线|欧美| 91在线视频播放| 国产成人综合亚洲网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区在线视频免费观看| 久久久国产午夜精品| 91精品国产综合久久精品图片 | 国产成人精品免费一区二区| 日韩avvvv在线播放| 亚洲一区av在线| 亚洲欧美另类小说视频| 国产精品另类一区| 国产欧美一区二区三区鸳鸯浴| 精品国产乱码久久久久久久久| 91精品国产欧美日韩| 7777精品伊人久久久大香线蕉超级流畅 | 日韩视频免费观看高清在线视频| 欧美专区日韩专区| 色屁屁一区二区| 一本色道a无线码一区v| aaa国产一区| 91网上在线视频| 97se狠狠狠综合亚洲狠狠| 成人黄色国产精品网站大全在线免费观看| 久久97超碰国产精品超碰| 另类人妖一区二区av| 精品一区二区三区日韩| 久久99精品久久久久久久久久久久| 日韩国产欧美三级| 六月丁香综合在线视频| 国产最新精品精品你懂的| 国产一区二区在线免费观看| 国产一区二区三区久久悠悠色av| 韩国午夜理伦三级不卡影院| 国产成人精品免费看| www.色综合.com| 日本高清不卡aⅴ免费网站| 在线视频国内一区二区| 3d动漫精品啪啪| 亚洲精品一区二区精华| 国产精品欧美综合在线| 亚洲激情在线激情| 日韩精品乱码免费| 国产一本一道久久香蕉| www.性欧美| 在线综合视频播放| 国产亲近乱来精品视频| 亚洲精品国产一区二区精华液| 视频在线观看一区| 国产精品一线二线三线精华| 91最新地址在线播放| 91麻豆精品久久久久蜜臀| 久久九九国产精品| 亚洲一区国产视频| 狠狠色丁香久久婷婷综合_中| 成人高清视频在线观看| 欧美群妇大交群的观看方式| 久久精品日韩一区二区三区| 亚洲欧美日韩国产综合在线 | 中文字幕成人在线观看| 亚洲六月丁香色婷婷综合久久| 奇米一区二区三区av| eeuss鲁片一区二区三区| 在线不卡一区二区| 中文字幕亚洲一区二区va在线| 蜜臂av日日欢夜夜爽一区| a在线欧美一区| 日韩午夜小视频| 亚洲欧洲av色图| 国内外精品视频| 欧美日韩精品综合在线| 中文字幕精品三区| 日韩av电影免费观看高清完整版 | 欧美一级淫片007| 亚洲日本va在线观看| 激情久久五月天| 欧美裸体bbwbbwbbw| 亚洲人成精品久久久久久| 久久99精品久久久久久久久久久久| 色欧美日韩亚洲| 国产精品每日更新在线播放网址| 美女免费视频一区| 欧美另类一区二区三区| 亚洲精品写真福利| 成人免费视频视频在线观看免费| 日韩欧美卡一卡二| 亚洲国产aⅴ天堂久久| 91看片淫黄大片一级在线观看| 久久九九全国免费| 美美哒免费高清在线观看视频一区二区 | 欧美私人免费视频| ●精品国产综合乱码久久久久| 国产成人啪午夜精品网站男同| 91精品国产综合久久久蜜臀图片| 亚洲精品中文在线| 99国产精品国产精品毛片| 日本一区二区三级电影在线观看| 国模冰冰炮一区二区| 欧美va亚洲va| 韩国欧美国产1区| 久久久久久久av麻豆果冻| 91久久精品日日躁夜夜躁欧美| 国产精品久久久久久久裸模| 国产91丝袜在线18| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 |