📄 umc_h264_thread.cpp
字号:
/*
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright (c) 2003-2007 Intel Corporation. All Rights Reserved.
//
//
*/
#include "umc_defs.h"
#if defined (UMC_ENABLE_H264_VIDEO_DECODER)
#include "umc_h264_thread.h"
namespace UMC
{
H264Thread::H264Thread()
: m_bQuit(false)
{
} // H264Thread() :
H264Thread::~H264Thread()
{
Release();
} // ~H264Thread(void)
void H264Thread::Reset()
{
// threading tools
if (IsValid())
{
m_bQuit = true;
m_startProcessing.Set();
if (m_iNumber)
Wait();
}
m_startProcessing.Reset();
m_doneProcessing.Reset();
m_bQuit = false;
} // void Release(void)
void H264Thread::Release()
{
Reset();
Close();
} // void Release(void)
Status H264Thread::Init(Ipp32s iNumber)
{
// release object before initialization
Release();
// save thread number(s)
m_iNumber = iNumber;
// threading tools
m_bQuit = false;
if (iNumber)
{
// initialize working events
if (UMC_OK != m_startProcessing.Init(0, 0))
return UMC_ERR_INIT;
if (UMC_OK != m_doneProcessing.Init(0, 0))
return UMC_ERR_INIT;
// start decoding thread
if (UMC_OK != Create(DecodingThreadRoutine, this))
return UMC_ERR_INIT;
}
return UMC_OK;
} // Status Init(Ipp32u nNumber)
Status H264Thread::StartProcessing(void)
{
m_startProcessing.Set();
return UMC_OK;
} // Status StartProc(void)
Status H264Thread::WaitForEndOfProcessing(void)
{
m_doneProcessing.Wait();
return m_Status;
} // Status WaitForEndDecoding(void)
Ipp32u VM_THREAD_CALLCONVENTION H264Thread::DecodingThreadRoutine(void *p)
{
H264Thread *pObj = (H264Thread *) p;
// check error(s)
if (NULL == p)
return 0x0baad;
{
//return 0;
pObj->m_startProcessing.Wait(); // wait for begin decoding
while (false == pObj->m_bQuit) // do segment decoding
{
pObj->m_Status = pObj->ProcessSegment();
pObj->m_doneProcessing.Set(); // set done event
pObj->m_startProcessing.Wait(); // wait for begin decoding
}
}
return 0x0264dec0 + pObj->m_iNumber;
} // Ipp32u DecodingThreadRoutine(void *p)
} // namespace UMC
#endif // UMC_ENABLE_H264_VIDEO_DECODER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -