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

📄 coreaudio_drv.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-2006 Intel Corporation. All Rights Reserved.
//
*/

#ifndef __COREAUDIO_DRV_H__
#define __COREAUDIO_DRV_H__

#include <umc_defs.h>

#ifdef UMC_ENABLE_COREAUDIO_RENDER

#include <ipps.h>
#include <vm_mutex.h>
#include <vm_debug.h>
#include <AudioUnit/AudioUnit.h>

#define COREAUDIO_BUFFERS_NUM  32
#define COREAUDIO_BUFFERS_SIZE 32 * 1024

#define CHECK_RESULT(err, msg, rez)                            \
if (result != err) {                                           \
    vm_debug_trace(VM_DEBUG_NONE, VM_STRING("CoreAudio:" msg " FAILED"));  \
    return rez;                                                \
}

#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */

extern void *coreaudioInit(const Ipp32u Frequency,
                           const Ipp32u Channels,
                           const Ipp32u BitPerSample);

extern Ipp32s coreaudioPlay(void *Driver,
                            Ipp8u* Buffer,
                            Ipp32s Size);

extern Ipp32s coreaudioReset(void *Driver);
extern void coreaudioClose(void *Driver);
extern Ipp32s coreaudioPause(void *Driver);
extern Ipp32s coreaudioResume(void *Driver);

extern OSStatus coreaudioCallback(void *Driver,
                                  AudioUnitRenderActionFlags *actionFlags,
                                  const AudioTimeStamp *timeStamp,
                                  UInt32 busNumber,
                                  UInt32 numFrames,
                                  AudioBufferList *outBuffers);

Ipp32f coreaudioSetVolume(void *Driver, Ipp32f volume);

Ipp32f coreaudioGetVolume(void *Driver);

#ifdef __cplusplus
}
#endif /* __cplusplus */

enum coreaudioRenderFlag
{
    COREAUDIO_RENDER_OPEN  = 0x00000000,
    COREAUDIO_RENDER_CLOSE = 0x00000001
};

typedef struct CoreAudioDrv
{
    AudioUnit aUnit;
    AudioUnit cUnit;

    Ipp32u mChannels;
    Ipp32u mFrequency;
    Ipp32u mBitPerSample;

    Ipp32u mPacketSize;
    Ipp32u mChunkSize;
    Ipp32u mChunksNumber;

    Ipp32u mBufferSize;   /* ! (chunksNumber + 1) * chunkSize */
    Ipp32u mReadPosition;
    Ipp32u mWritePosition;
    Ipp32u mRenderFlag;

    Ipp32f mVolume;              /* [0,1] */

    Ipp8u *mDataBuffer;

    vm_mutex mLockBuffer;
    vm_mutex mLockSender;
} CoreAudioDrv;

#endif // UMC_ENABLE_COREAUDIO_RENDER

#endif // __COREAUDIO_DRV_H__

⌨️ 快捷键说明

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