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

📄 oss_audio_render.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) 2003-2005 Intel Corporation. All Rights Reserved.//*/#include "umc_defs.h"#ifdef UMC_ENABLE_OSS_AUDIO_RENDER#include "oss_audio_render.h"#include "vm_time.h"UMC::OSSAudioRender::OSSAudioRender():    m_tickStartTime(0),    m_tickPrePauseTime(0),    m_dfStartPTS(-1.0){}UMC::StatusUMC::OSSAudioRender::Init(MediaReceiverParams* pInit){    Status umcRes = UMC_OK;    AudioRenderParams* pParams =        DynamicCast<AudioRenderParams, MediaReceiverParams>(pInit);    if (NULL == pParams)    {   umcRes = UMC_NULL_PTR;  }    if (UMC_OK == umcRes)    {   umcRes = BasicAudioRender::Init(pInit); }    m_tickStartTime = 0;    m_tickPrePauseTime = 0;    m_dfStartPTS = -1.0;    if (UMC_OK == umcRes)    {        umcRes = m_Dev.Init(pParams->info.bitPerSample,                            pParams->info.channels,                            pParams->info.sample_frequency);    }    return umcRes;}UMC::StatusUMC::OSSAudioRender::SendFrame(MediaData* in){    Status umcRes = UMC_OK;       if (UMC_OK == umcRes && (NULL == in->GetDataPointer()))    {    umcRes = UMC_NULL_PTR;    }    if (-1.0 == m_dfStartPTS)    {   m_dfStartPTS = in->GetTime();   }       if (UMC_OK == umcRes)    {        if (0 == m_tickStartTime)        {   m_tickStartTime = vm_time_get_tick();   }        umcRes = m_Dev.RenderData((vm_byte*)in->GetDataPointer(), in->GetDataSize());    }    return umcRes;}UMC::StatusUMC::OSSAudioRender::Pause(bool pause){    Status umcRes = UMC_OK;    if (pause)    {   umcRes = m_Dev.Post();  }    m_tickPrePauseTime += vm_time_get_tick() - m_tickStartTime;    m_tickStartTime = 0;    return umcRes;}floatUMC::OSSAudioRender::SetVolume(float volume){    return -1;}floatUMC::OSSAudioRender::GetVolume(){    return -1;}UMC::StatusUMC::OSSAudioRender::Close(){    m_Dev.Reset();    m_dfStartPTS = -1.0;    return BasicAudioRender::Close();}UMC::StatusUMC::OSSAudioRender::Reset(){    Status umcRes = m_Dev.Reset();    m_tickStartTime = 0;    m_tickPrePauseTime = 0;    m_dfStartPTS = -1.0;    return BasicAudioRender::Reset();}doubleUMC::OSSAudioRender::GetTimeTick(){    double dfRes = -1;    vm_var32 uiBytesPlayed = 0;    if (0 != m_tickStartTime)    {        dfRes = m_dfStartPTS +            ((double)(m_tickPrePauseTime +            vm_time_get_tick() - m_tickStartTime)) / vm_time_get_frequency();    }    else    {        dfRes = m_dfStartPTS +                        ((double)m_tickPrePauseTime) / vm_time_get_frequency();    }    Status umcRes = BasicAudioRender::GetTimeTick(dfRes);    return dfRes;}UMC::StatusUMC::OSSAudioRender::SetParams(MediaReceiverParams *pMedia){    UMC::Status umcRes = UMC::UMC_OK;    AudioRenderParams* pParams =        DynamicCast<AudioRenderParams, MediaReceiverParams>(pMedia);    if (NULL == pParams)    {   return UMC_NULL_PTR;  }    if (UMC_OK == umcRes)    {        sAudioStreamInfo* info = NULL;        info = &pParams->info;        if (info->channels != m_wInitedChannels)        {            m_Dev.SetNumOfChannels(info->channels);            m_wInitedChannels = info->channels;        }        if (info->sample_frequency != m_dwInitedFrequency)        {            m_Dev.SetFreq(info->sample_frequency);            m_dwInitedFrequency = info->sample_frequency;        }    }    else    {         umcRes = UMC_OPERATION_FAILED;    }    return umcRes;}#endif  //  UMC_ENABLE_OSS_AUDIO_RENDER

⌨️ 快捷键说明

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