• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ OSLeaveMutex函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中OSLeaveMutex函数的典型用法代码示例。如果您正苦于以下问题:C++ OSLeaveMutex函数的具体用法?C++ OSLeaveMutex怎么用?C++ OSLeaveMutex使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了OSLeaveMutex函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: OSEnterMutex

void OBS::CallHotkey(DWORD hotkeyID, bool bDown)
{
    OBSAPIInterface *apiInterface = (OBSAPIInterface*)API;
    OBSHOTKEYPROC hotkeyProc = NULL;
    DWORD hotkey = 0;
    UPARAM param = NULL;

    OSEnterMutex(hHotkeyMutex);

    for(UINT i=0; i<apiInterface->hotkeys.Num(); i++)
    {
        HotkeyInfo &hi = apiInterface->hotkeys[i];
        if(hi.hotkeyID == hotkeyID)
        {
            if (!hi.hotkeyProc)
            {
                OSLeaveMutex(hHotkeyMutex);
                return;
            }

            hotkeyProc  = hi.hotkeyProc;
            param       = hi.param;
            hotkey      = hi.hotkey;
            break;
        }
    }

    OSLeaveMutex(hHotkeyMutex);

    if (!hotkeyProc)
        return;

    hotkeyProc(hotkey, param, bDown);
}
开发者ID:Aslai,项目名称:OBS,代码行数:34,代码来源:API.cpp


示例2: OSEnterMutex

bool DeviceAudioSource::GetNextBuffer(void **buffer, UINT *numFrames, QWORD *timestamp)
{
    if(sampleBuffer.Num() >= sampleSegmentSize)
    {
        OSEnterMutex(hAudioMutex);

		if (!sampleBuffer.Num())
		{
			OSLeaveMutex(hAudioMutex);
			return false;
		}

        mcpy(outputBuffer.Array(), sampleBuffer.Array(), sampleSegmentSize);
        sampleBuffer.RemoveRange(0, sampleSegmentSize);

        OSLeaveMutex(hAudioMutex);

        *buffer = outputBuffer.Array();
        *numFrames = sampleFrameCount;

		*timestamp = 0;//赋值时间戳
		if (!lastTimestamp || LastTimeTimeStamp > lastTimestamp + 10) {
			*timestamp = LastTimeTimeStamp;
		}
		else {
			*timestamp = lastTimestamp + 10;
		}
		//Log(TEXT("hhhhhhhBLiveGetAudioTime() = %llu,*timestamp = %llu"), BLiveGetAudioTime(), *timestamp);
		lastTimestamp = *timestamp;
        return true;
    }

    return false;
}
开发者ID:wwllww,项目名称:LiveStream_MultiIntance,代码行数:34,代码来源:DeviceAudio.cpp


示例3: OSEnterMutex

void PipeAudioSource::ReceiveAudio(LPBYTE lpData, UINT dataLength,long long pts)
{
	if (lpData)
    {
		bool bPlayLive = false;
		if (bLiveIntance)
		{
			OSEnterMutex(hAudioMutex);
			sampleBuffer.AppendArray(lpData, dataLength);
// 			AudioTimestamp audioTimestamp;
// 			audioTimestamp.count = dataLength / m_iBlockSize;
// 			audioTimestamp.pts = pts;
// 			sampleBufferPts.push_back(audioTimestamp);
// 			if (pts - m_iLastPts > 50 || m_iLastPts - pts > 50)
// 			{
// 				Log::writeMessage(LOG_RTSPSERV, 1, "LINE:%d,FUNC:%s 音频数据有抖动: LastPts : %lld. CurrntPts : %lld. diff = %lld.",
// 					__LINE__, __FUNCTION__, m_lTimeDiffWithAPI + m_iLastPts, m_lTimeDiffWithAPI + pts, pts - m_iLastPts);
// 			}
// 			m_iLastPts = pts;
			OSLeaveMutex(hAudioMutex);
			bPlayLive = m_bPlayPcmLive;
		}
		else
		{
			OSEnterMutex(hAudioMutex);
			sampleBuffer.RemoveRange(0, sampleBuffer.Num());
			OSLeaveMutex(hAudioMutex);
		}

		OSEnterMutex(hAudioMutex);
		int Len = dataLength;
		if (m_pAudioWaveOut && (m_bPlayPcmLocal || bPlayLive))
		{
			char *OutBuffer;
			CaculateVolume((LPVOID)lpData, Len, (void**)&OutBuffer);

			m_pAudioWaveOut->push_pcm_data((char*)OutBuffer, Len);

			if (!bSameDevice && bProjector && m_pSecWaveOut)
				m_pSecWaveOut->push_pcm_data((char*)OutBuffer, Len);

		}
		else if (bProjector)
		{
			char *OutBuffer;
			CaculateVolume((LPVOID)lpData, Len, (void**)&OutBuffer);

			if (bSameDevice && m_pAudioWaveOut)
			{
				m_pAudioWaveOut->push_pcm_data((char*)OutBuffer, Len);
			}
			else if (m_pSecWaveOut)
			{
				m_pSecWaveOut->push_pcm_data((char*)OutBuffer, Len);
			}
		}
		OSLeaveMutex(hAudioMutex);
    }
}
开发者ID:wwllww,项目名称:LiveStream_MultiIntance,代码行数:59,代码来源:PipeAudio.cpp


示例4: OSEnterMutex

int RTMPPublisher::BufferedSend(RTMPSockBuf *sb, const char *buf, int len, RTMPPublisher *network)
{
    bool bWasEmpty = false;
    bool bComplete = false;
    int fullLen = len;

retrySend:

    OSEnterMutex(network->hDataBufferMutex);

    if (network->curDataBufferLen + len >= network->dataBufferSize)
    {
        ULONG idealSendBacklog;

        //Log(TEXT("RTMPPublisher::BufferedSend: Socket buffer is full (%d / %d bytes), waiting to send %d bytes"), network->curDataBufferLen, network->dataBufferSize, len);
        ++network->totalTimesWaited;
        network->totalBytesWaited += len;

        OSLeaveMutex(network->hDataBufferMutex);

        if (!idealsendbacklogquery(sb->sb_socket, &idealSendBacklog))
        {
            int curTCPBufSize, curTCPBufSizeSize = sizeof(curTCPBufSize);
            getsockopt (sb->sb_socket, SOL_SOCKET, SO_SNDBUF, (char *)&curTCPBufSize, &curTCPBufSizeSize);

            if (curTCPBufSize < (int)idealSendBacklog)
            {
                int bufferSize = (int)idealSendBacklog;
                setsockopt(sb->sb_socket, SOL_SOCKET, SO_SNDBUF, (const char *)&bufferSize, sizeof(bufferSize));
                Log(TEXT("RTMPPublisher::BufferedSend: Increasing socket send buffer to ISB %d"), idealSendBacklog, curTCPBufSize);
            }
        }

        int status = WaitForSingleObject(network->hBufferSpaceAvailableEvent, INFINITE);
        if (status == WAIT_ABANDONED || status == WAIT_FAILED || network->bStopping)
            return 0;
        goto retrySend;
    }

    if (network->curDataBufferLen <= 1000)
        bWasEmpty = true;

    mcpy(network->dataBuffer + network->curDataBufferLen, buf, len);
    network->curDataBufferLen += len;

    if (bWasEmpty)
        SetEvent (network->hBufferEvent);

    OSLeaveMutex(network->hDataBufferMutex);

    return len;
}
开发者ID:jmkstewart,项目名称:OBS,代码行数:52,代码来源:RTMPPublisher.cpp


示例5: OSEnterMutex

void MemoryCapture::Destroy()
{
    bInitialized = false;

    if(hMemoryMutex)
        OSEnterMutex(hMemoryMutex);

    copyData = NULL;
    textureBuffers[0] = NULL;
    textureBuffers[1] = NULL;
    delete texture;
    texture = NULL;

    if(sharedMemory)
        UnmapViewOfFile(sharedMemory);

    if(hFileMap)
        CloseHandle(hFileMap);

    if(hMemoryMutex)
    {
        OSLeaveMutex(hMemoryMutex);
        OSCloseMutex(hMemoryMutex);
    }
}
开发者ID:Soopah,项目名称:OBS,代码行数:25,代码来源:MemoryCapture.cpp


示例6: OSEnterMutex

void AgentSource::Render(const Vect2 &pos, const Vect2 &size, Texture *texture, bool bScaleFull, bool bIsLiveC)
{
		OSEnterMutex(HLock);
		if (globalSource) 
			globalSource->Render(pos, size, texture,bScaleFull);
		OSLeaveMutex(HLock);
}
开发者ID:wwllww,项目名称:LiveStream_MultiIntance,代码行数:7,代码来源:AgentPlugin.cpp


示例7: GetDlgItem

void OBS::SetStatusBarData()
{
    if (bRunning && OSTryEnterMutex(hStartupShutdownMutex))
    {
        if (!App->network)
            return;

        HWND hwndStatusBar = GetDlgItem(hwndMain, ID_STATUS);

        SendMessage(hwndStatusBar, WM_SETREDRAW, 0, 0);
        SendMessage(hwndStatusBar, SB_SETTEXT, 0 | SBT_OWNERDRAW, NULL);
        SendMessage(hwndStatusBar, SB_SETTEXT, 1 | SBT_OWNERDRAW, NULL);
        SendMessage(hwndStatusBar, SB_SETTEXT, 2 | SBT_OWNERDRAW, NULL);
        SendMessage(hwndStatusBar, SB_SETTEXT, 3 | SBT_OWNERDRAW, NULL);
        SendMessage(hwndStatusBar, SB_SETTEXT, 4 | SBT_OWNERDRAW, NULL);

        SendMessage(hwndStatusBar, WM_SETREDRAW, 1, 0);
        InvalidateRect(hwndStatusBar, NULL, FALSE);
    
        if(bRunning)
        {
            ReportStreamStatus(bRunning, bTestStream, 
                (UINT) App->bytesPerSec, App->curStrain, 
                (UINT)this->totalStreamTime, (UINT)App->network->NumTotalVideoFrames(),
                (UINT)App->curFramesDropped, (UINT) App->captureFPS);
        }

        OSLeaveMutex(hStartupShutdownMutex);
    }
}
开发者ID:SeargeDP,项目名称:OBS,代码行数:30,代码来源:OBS.cpp


示例8: LOBYTE

UINT OBSAPIInterface::CreateHotkey(DWORD hotkey, OBSHOTKEYPROC hotkeyProc, UPARAM param)
{
    if(!hotkey)
        return 0;

    //FIXME: vk and fsModifiers aren't used?
    DWORD vk = LOBYTE(hotkey);
    DWORD modifier = HIBYTE(hotkey);
    DWORD fsModifiers = 0;

    if(modifier & HOTKEYF_ALT)
        fsModifiers |= MOD_ALT;
    if(modifier & HOTKEYF_CONTROL)
        fsModifiers |= MOD_CONTROL;
    if(modifier & HOTKEYF_SHIFT)
        fsModifiers |= MOD_SHIFT;

    OSEnterMutex(App->hHotkeyMutex);
    HotkeyInfo &hi      = *hotkeys.CreateNew();
    hi.hotkeyID         = ++curHotkeyIDVal;
    hi.hotkey           = hotkey;
    hi.hotkeyProc       = hotkeyProc;
    hi.param            = param;
    hi.bModifiersDown   = false;
    hi.bHotkeyDown      = false;
    OSLeaveMutex(App->hHotkeyMutex);

    return curHotkeyIDVal;
}
开发者ID:ChaosPower,项目名称:OBS,代码行数:29,代码来源:API.cpp


示例9: while

bool OBS::QueryNewAudio()
{
    bool bAudioBufferFilled = false;

    while (!bAudioBufferFilled) {
        bool bGotAudio = false;

        if ((desktopAudio->QueryAudio2(curDesktopVol)) != NoAudioAvailable) {
            QueryAudioBuffers(true);
            bGotAudio = true;
        }

        bAudioBufferFilled = desktopAudio->GetBufferedTime() >= App->bufferingTime;

        if (!bGotAudio && bAudioBufferFilled)
            QueryAudioBuffers(false);

        if (bAudioBufferFilled || !bGotAudio)
            break;
    }

    /* wait until buffers are completely filled before accounting for burst */
    if (!bAudioBufferFilled)
    {
        QWORD timestamp;
        int burst = 0;

        // No more desktop data, drain auxilary/mic buffers until they're dry to prevent burst data
        OSEnterMutex(hAuxAudioMutex);
        for(UINT i=0; i<auxAudioSources.Num(); i++)
        {
            while (auxAudioSources[i]->QueryAudio2(auxAudioSources[i]->GetVolume(), true) != NoAudioAvailable)
                burst++;

            if (auxAudioSources[i]->GetLatestTimestamp(timestamp))
                auxAudioSources[i]->SortAudio(timestamp);

            /*if (burst > 10)
                Log(L"Burst happened for %s", auxAudioSources[i]->GetDeviceName2());*/
        }

        OSLeaveMutex(hAuxAudioMutex);

        burst = 0;

        if (micAudio)
        {
            while (micAudio->QueryAudio2(curMicVol, true) != NoAudioAvailable)
                burst++;

            /*if (burst > 10)
                Log(L"Burst happened for %s", micAudio->GetDeviceName2());*/

            if (micAudio->GetLatestTimestamp(timestamp))
                micAudio->SortAudio(timestamp);
        }
    }

    return bAudioBufferFilled;
}
开发者ID:robessog,项目名称:OBS,代码行数:60,代码来源:OBSCapture.cpp


示例10: OSEnterMutex

bool OBS::QueryAudioBuffers(bool bQueriedDesktopDebugParam)
{
    bool bGotSomeAudio = false;

    if (!latestAudioTime) {
        desktopAudio->GetEarliestTimestamp(latestAudioTime); //will always return true
    } else {
        QWORD latestDesktopTimestamp;
        if (desktopAudio->GetLatestTimestamp(latestDesktopTimestamp)) {
            if ((latestAudioTime+10) > latestDesktopTimestamp)
                return false;
        }
        latestAudioTime += 10;
    }

    bufferedAudioTimes << latestAudioTime;

    OSEnterMutex(hAuxAudioMutex);
    for(UINT i=0; i<auxAudioSources.Num(); i++)
    {
        if (auxAudioSources[i]->QueryAudio2(auxAudioSources[i]->GetVolume(), true) != NoAudioAvailable)
            bGotSomeAudio = true;
    }

    OSLeaveMutex(hAuxAudioMutex);

    if(micAudio != NULL)
    {
        if (micAudio->QueryAudio2(curMicVol, true) != NoAudioAvailable)
            bGotSomeAudio = true;
    }

    return bGotSomeAudio;
}
开发者ID:robessog,项目名称:OBS,代码行数:34,代码来源:OBSCapture.cpp


示例11: json_object

void WebSocketOBSTriggerHandler::ScenesChanged()
{
    json_t* update = json_object();
    json_object_set_new(update, "update-type", json_string("ScenesChanged"));
    
    OSEnterMutex(this->updateQueueMutex);
    this->updates.Add(update);
    OSLeaveMutex(this->updateQueueMutex);
}
开发者ID:MarsYoung,项目名称:OBSRemote,代码行数:9,代码来源:MessageHandling.cpp


示例12: MergeProfileInfo

 static void MergeProfileInfo(ProfileNodeInfo &info)
 {
     OSEnterMutex(hProfilerMutex);
     ProfileNodeInfo *sum = FindProfile(info.lpName);
     if(!sum)
     {
         sum = profilerData.CreateNew();
         sum->lpName = info.lpName;
     }
     sum->MergeProfileInfo(&info, info.lastCall, sum->lastCall + info.lastCall);
     OSLeaveMutex(hProfilerMutex);
 }
开发者ID:373137461,项目名称:rtmp_streamer_for_windows,代码行数:12,代码来源:Profiler.cpp


示例13: if

void DeviceSource::Preprocess()
{
    if(!bCapturing)
        return;

    //----------------------------------------

    if(bRequestVolume)
    {
        if(audioOut)
            audioOut->SetVolume(fNewVol);
        else if(audioFilter)
        {
            IBasicAudio *basicAudio;
            if(SUCCEEDED(audioFilter->QueryInterface(IID_IBasicAudio, (void**)&basicAudio)))
            {
                long lVol = long((double(fNewVol)*NEAR_SILENTf)-NEAR_SILENTf);
                if(lVol <= -NEAR_SILENT)
                    lVol = -10000;
                basicAudio->put_Volume(lVol);
                basicAudio->Release();
            }
        }
        bRequestVolume = false;
    }

    //----------------------------------------

    SampleData *lastSample = NULL;

    OSEnterMutex(hSampleMutex);

    lastSample = latestVideoSample;
    latestVideoSample = NULL;

    OSLeaveMutex(hSampleMutex);

    //----------------------------------------

    int numThreads = MAX(OSGetTotalCores()-2, 1);

    if(lastSample)
    {
        /*REFERENCE_TIME refTimeStart, refTimeFinish;
        lastSample->GetTime(&refTimeStart, &refTimeFinish);

        static REFERENCE_TIME lastRefTime = 0;
        //Log(TEXT("refTimeStart: %llu, refTimeFinish: %llu, offset = %llu"), refTimeStart, refTimeFinish, refTimeStart-lastRefTime);
        lastRefTime = refTimeStart;*/

        lastSample->Release();
    }
}
开发者ID:Jack0r,项目名称:OBS-DShowAudioPlugin,代码行数:53,代码来源:DeviceSource.cpp


示例14: OSEnterMutex

json_t* WebSocketOBSTriggerHandler::popUpdate()
{
    OSEnterMutex(this->updateQueueMutex);
    json_t* ret = NULL;
    if(this->updates.Num() > 0)
    {
        ret = this->updates.GetElement(0);
        this->updates.Remove(0);
    }
    OSLeaveMutex(this->updateQueueMutex);

    return ret;
}
开发者ID:MarsYoung,项目名称:OBSRemote,代码行数:13,代码来源:MessageHandling.cpp


示例15: OSEnterMutex

int RTMPPublisher::BufferedSend(RTMPSockBuf *sb, const char *buf, int len, RTMPPublisher *network)
{
    bool bComplete = false;
    int fullLen = len;

    //NOTE: This function is called from the SendLoop thread, be careful of race conditions.

retrySend:

    //We may have been disconnected mid-shutdown or something, just pretend we wrote the data
    //to avoid blocking if the socket loop exited.
    if (!RTMP_IsConnected(network->rtmp))
        return len;

    OSEnterMutex(network->hDataBufferMutex);

    if (network->curDataBufferLen + len >= network->dataBufferSize)
    {
        //Log(TEXT("RTMPPublisher::BufferedSend: Socket buffer is full (%d / %d bytes), waiting to send %d bytes"), network->curDataBufferLen, network->dataBufferSize, len);
        ++network->totalTimesWaited;
        network->totalBytesWaited += len;

        OSLeaveMutex(network->hDataBufferMutex);

        int status = WaitForSingleObject(network->hBufferSpaceAvailableEvent, INFINITE);
        if (status == WAIT_ABANDONED || status == WAIT_FAILED)
            return 0;
        goto retrySend;
    }

    mcpy(network->dataBuffer + network->curDataBufferLen, buf, len);
    network->curDataBufferLen += len;

    OSLeaveMutex(network->hDataBufferMutex);

    SetEvent (network->hBufferEvent);

    return len;
}
开发者ID:Crimson13,项目名称:OBS,代码行数:39,代码来源:RTMPPublisher.cpp


示例16: OSEnterMutex

UINT OBS::AddStreamInfo(CTSTR lpInfo, StreamInfoPriority priority)
{
    OSEnterMutex(hInfoMutex);

    StreamInfo &streamInfo = *streamInfoList.CreateNew();
    UINT id = streamInfo.id = ++streamInfoIDCounter;
    streamInfo.priority = priority;
    streamInfo.strInfo = lpInfo;

    OSLeaveMutex(hInfoMutex);

    return id;
}
开发者ID:ChaosPower,项目名称:OBS,代码行数:13,代码来源:API.cpp


示例17: OSEnterMutex

void DeviceSource::ReceiveVideo(IMediaSample *sample)
{
    if(bCapturing)
    {
        OSEnterMutex(hSampleMutex);

        SafeRelease(curSample);
        curSample = sample;
        curSample->AddRef();

        OSLeaveMutex(hSampleMutex);
    }
}
开发者ID:redflasher,项目名称:OBS,代码行数:13,代码来源:DeviceSource.cpp


示例18: Value

Vect2 AgentSource::GetSize() const
{
		float cx = data["cx"].asInt();
		float cy = data["cy"].asInt();
		Vect2 Value(cx, cy);

		OSEnterMutex(HLock);
		if (globalSource)
			Value = globalSource->GetSize();
		OSLeaveMutex(HLock);

		return Value;
}
开发者ID:wwllww,项目名称:LiveStream_MultiIntance,代码行数:13,代码来源:AgentPlugin.cpp


示例19: OSEnterMutex

void OBS::EncodeAudioSegment(float *buffer, UINT numFrames, QWORD timestamp)
{
    DataPacket packet;
    if(audioEncoder->Encode(buffer, numFrames, packet, timestamp))
    {
        OSEnterMutex(hSoundDataMutex);

        FrameAudio *frameAudio = pendingAudioFrames.CreateNew();
        frameAudio->audioData.CopyArray(packet.lpPacket, packet.size);
        frameAudio->timestamp = timestamp;

        OSLeaveMutex(hSoundDataMutex);
    }
}
开发者ID:bradparks,项目名称:OBS,代码行数:14,代码来源:OBSCapture.cpp


示例20: ioctlsocket

int RTMPPublisher::FlushDataBuffer()
{
    unsigned long zero = 0;
    
    //make it blocking again
    ioctlsocket(rtmp->m_sb.sb_socket, FIONBIO, &zero);

    OSEnterMutex(hDataBufferMutex);
    int ret = send(rtmp->m_sb.sb_socket, (const char *)dataBuffer, curDataBufferLen, 0);
    curDataBufferLen = 0;
    OSLeaveMutex(hDataBufferMutex);

    return ret;
}
开发者ID:jmkstewart,项目名称:OBS,代码行数:14,代码来源:RTMPPublisher.cpp



注:本文中的OSLeaveMutex函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ OSM_LOG函数代码示例发布时间:2022-05-30
下一篇:
C++ OSL_DELAY函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap