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

📄 umc_audio_buffer.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 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) 2005 Intel Corporation. All Rights Reserved.////*/#include "umc_audio_buffer.h"#include "umc_automatic_mutex.h"#include "vm_time.h"namespace UMC{AudioBuffer::AudioBuffer(void){    m_MediaPortion.SetTime(-1.0);    m_MediaPortion.SetBufferPointer(NULL, 0);} // AudioBuffer::AudioBuffer(void)AudioBuffer::~AudioBuffer(void){    Close();} // AudioBuffer::AudioBuffer(void)Status AudioBuffer::LockInputBuffer(MediaData* in){    AutomaticMutex guard(m_synchro);    // check error(s)    if (NULL == in)        return UMC_NULL_PTR;    // working case    if ((0.0 <= in->GetTime()) || (0.0 <= m_MediaPortion.GetTime()))    {        // start new portion        if (0.0 <= in->GetTime())        {            Status umcRes;            // store current portion            if (0.0 <= m_MediaPortion.GetTime())            {                umcRes = SampleBuffer::UnLockInputBuffer(&m_MediaPortion);                if (UMC_OK != umcRes)                    return umcRes;            }            // set negative time for new allocation            m_MediaPortion.SetTime(-1.0);        }        // continue portion        else        {            // set pointer and available byte(s)            in->SetBufferPointer((vm_byte *) m_MediaPortion.GetBufferPointer()                                    + m_MediaPortion.GetDataSize(),                                    m_MediaPortion.GetBufferSize()                                    - m_MediaPortion.GetDataSize());            VM_ASSERT((int)m_MediaPortion.GetBufferSize() -                      (int)m_MediaPortion.GetDataSize() > 0);            in->SetDataSize(0);        }    }    // allocate memory for new portion    if (0.0 > m_MediaPortion.GetTime())    {        Status umcRes;        int deadlock_count = 0;        // lock new memory space        //do        //{            umcRes = SampleBuffer::LockInputBuffer(&m_MediaPortion);            //if(umcRes != UMC_OK)            //{            //    vm_time_sleep(1);            //}            //deadlock_count++;        //}while(umcRes != UMC_OK && deadlock_count < 5);        if (UMC_OK != umcRes)            return umcRes;        // prevent error(s)        if(0.0 > in->GetTime())            m_MediaPortion.SetTime(-1.0);        else            m_MediaPortion.SetTime(in->GetTime());        // set pointer and available byte(s)        in->SetBufferPointer((vm_byte *) m_MediaPortion.GetBufferPointer(),                       m_MediaPortion.GetBufferSize());        in->SetDataSize(0);    }    return UMC_OK;} // Status AudioBuffer::LockInputBuffer(MediaData* in)Status AudioBuffer::UnLockInputBuffer(MediaData* in, Status StreamStatus){    AutomaticMutex guard(m_synchro);    // check error(s)    if (NULL == in)        return SampleBuffer::UnLockInputBuffer(in, StreamStatus);    if ((NULL == m_MediaPortion.GetBufferPointer()) ||        (m_MediaPortion.GetBufferSize() - m_MediaPortion.GetDataSize() < in->GetDataSize()))        return UMC_OPERATION_FAILED;    // skip sample, wait for valid PTS    if ((0.0 > in->GetTime()) &&        (0.0 > m_MediaPortion.GetTime()))        return UMC_OK;    // update data counter    m_MediaPortion.SetDataSize(m_MediaPortion.GetDataSize() + in->GetDataSize());    if (UMC_END_OF_STREAM == StreamStatus)    {        SampleBuffer::UnLockInputBuffer(&m_MediaPortion, StreamStatus);        m_MediaPortion.SetTime(-1.0);    }    return UMC_OK;} // Status AudioBuffer::UnLockInputBuffer(MediaData* in, Status StreamStatus)Status AudioBuffer::Close(void){    m_MediaPortion.SetTime(-1.0);    m_MediaPortion.SetBufferPointer(NULL, 0);    return SampleBuffer::Close();} // Status AudioBuffer::Close(void)Status AudioBuffer::Reset(void){    m_MediaPortion.SetTime(-1.0);    m_MediaPortion.SetBufferPointer(NULL, 0);    return SampleBuffer::Reset();} // Status AudioBuffer::Reset(void)} // namespace UMC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -