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

📄 winmm_render.h

📁 audio-video-codecs.rar语音编解码器
💻 H
字号:
/*
//
//                  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.
//
*/

#ifndef __WINMM_RENDER_H__
#define __WINMM_RENDER_H__

#include "umc_defs.h"

#ifdef UMC_ENABLE_WINMM_AUDIO_RENDER

#include "vm_debug.h"
#include <mmsystem.h>
#include "basic_audio_render.h"

#define WINMM_BUF_NUM_MAX 10
#define WINMM_BUF_SIZE    1152*16

namespace UMC
{
    class WinMMAudioRender :public BasicAudioRender
    {
    public:
        WinMMAudioRender(void);
        virtual ~WinMMAudioRender(void);

        // Initialize the audio device. The playback is paused
        Status Init(MediaReceiverParams* pInit);

        // Write sound data to sound buffer
        Status SendFrame(MediaData* in);
        Status UnLockInputBuffer(MediaData *in, Status StreamStatus = UMC_OK);

        // Toggle pause mode. Return current pts
        Status Pause(bool pause);

        // Close the sound device
        Status Close(void);

        // 0-silence 1-max, return previous volume */
        Ipp32f SetVolume(Ipp32f volume) { return volume;}
        Ipp32f GetVolume() { return 0.;}
        Status Reset(void);
        void   Release(void);

    protected:
        class BufArray
        {
        public:
            WAVEHDR m_pArray[WINMM_BUF_NUM_MAX];
            BufArray();
            ~BufArray();
            Status Init(Ipp32u uiBufSize);
            void   ZeroBuffers();
            inline Ipp32u GetHdrNum();
        protected:
            Ipp32u m_uiBufSize;
            Ipp32u m_uiHdrNum;
        };

        BufArray   m_Hdrs;

        HANDLE     m_sm_free_buffers;
        Ipp32s     m_iFreeBuf;
        Ipp32s     m_iDoneBuf;

        HWAVEOUT   m_hWO;
        WAVEFORMATEX m_WaveFmtX;

        Ipp64f     m_dfSampleNorm;
        Ipp64f     m_dfStartPTS;
        Ipp32s     m_iOffset;
        Ipp32u     m_dwVolume;
        Ipp32u     m_DataSize;

        virtual Ipp64f  GetTimeTick(void);
        Status DrainBuffer();
    };

    Ipp32u WinMMAudioRender::BufArray::GetHdrNum()
    {   return m_uiHdrNum;  }

} // namespace UMC

#endif // UMC_ENABLE_WINMM_AUDIO_RENDER

#endif // __WINMM_RENDER_H__

⌨️ 快捷键说明

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