⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_h264_thread.cpp

📁 audio-video-codecs.rar语音编解码器
💻 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 + -