You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1730 lines
49 KiB
1730 lines
49 KiB
|
|
/*
|
|
*
|
|
* This software is released under the provisions of the GPL version 2.
|
|
* see file "COPYING". If that file is not available, the full statement
|
|
* of the license can be found at
|
|
*
|
|
* http://www.fsf.org/licensing/licenses/gpl.txt
|
|
*
|
|
* Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
|
|
*
|
|
*/
|
|
|
|
#ifndef _HXAUSVC_H_
|
|
#define _HXAUSVC_H_
|
|
|
|
#define HX_MAX_VOLUME 100
|
|
#define HX_INIT_VOLUME 50
|
|
#define HX_MIN_VOLUME 0
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Forward declarations of some interfaces defined here-in.
|
|
*/
|
|
typedef _INTERFACE IHXAudioPlayer IHXAudioPlayer;
|
|
typedef _INTERFACE IHXAudioPlayerResponse IHXAudioPlayerResponse;
|
|
typedef _INTERFACE IHXAudioStream IHXAudioStream;
|
|
typedef _INTERFACE IHXAudioStream2 IHXAudioStream2;
|
|
typedef _INTERFACE IHXAudioDevice IHXAudioDevice;
|
|
typedef _INTERFACE IHXAudioDeviceResponse IHXAudioDeviceResponse;
|
|
typedef _INTERFACE IHXAudioHook IHXAudioHook;
|
|
typedef _INTERFACE IHXAudioDeviceHookManager IHXAudioDeviceHookManager;
|
|
typedef _INTERFACE IHXAudioStreamInfoResponse IHXAudioStreamInfoResponse;
|
|
// $Private:
|
|
typedef _INTERFACE IHXMultiPlayPauseSupport IHXMultiPlayPauseSupport;
|
|
typedef _INTERFACE IHXAudioDeviceManager2 IHXAudioDeviceManager2;
|
|
typedef _INTERFACE IHXAudioResampler IHXAudioResampler;
|
|
typedef _INTERFACE IHXAudioResamplerManager IHXAudioResamplerManager;
|
|
typedef _INTERFACE IHXAudioPushdown2 IHXAudioPushdown2;
|
|
// $EndPrivate.
|
|
typedef _INTERFACE IHXVolume IHXVolume;
|
|
typedef _INTERFACE IHXVolumeAdviseSink IHXVolumeAdviseSink;
|
|
typedef _INTERFACE IHXDryNotification IHXDryNotification;
|
|
typedef _INTERFACE IHXBuffer IHXBuffer;
|
|
typedef _INTERFACE IHXValues IHXValues;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Audio Services Data Structures
|
|
*/
|
|
typedef struct _HXAudioFormat
|
|
{
|
|
UINT16 uChannels; /* Num. of Channels (1=Mono, 2=Stereo, etc. */
|
|
UINT16 uBitsPerSample; /* 8 or 16 */
|
|
UINT32 ulSamplesPerSec;/* Sampling Rate */
|
|
UINT16 uMaxBlockSize; /* Max Blocksize */
|
|
} HXAudioFormat;
|
|
|
|
typedef enum _AudioStreamType
|
|
{
|
|
STREAMING_AUDIO = 0,
|
|
INSTANTANEOUS_AUDIO = 1,
|
|
TIMED_AUDIO = 2,
|
|
STREAMING_INSTANTANEOUS_AUDIO = 3
|
|
} AudioStreamType;
|
|
|
|
typedef struct _HXAudioData
|
|
{
|
|
IHXBuffer* pData; /* Audio data */
|
|
ULONG32 ulAudioTime; /* Start time in milliseconds */
|
|
AudioStreamType uAudioStreamType;
|
|
} HXAudioData;
|
|
|
|
typedef enum _AudioDeviceHookType
|
|
{
|
|
READ_ONLY_EARLY = 0,
|
|
WRITABLE = 127,
|
|
READ_ONLY_LATE = 255
|
|
} AudioDeviceHookType;
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioPlayer
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface provides access to the Audio Player services. Use this
|
|
* interface to create audio streams, "hook" post-mixed audio data, and to
|
|
* control volume levels.
|
|
*
|
|
* IID_IHXAudioPlayer:
|
|
*
|
|
* {00000700-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioPlayer, 0x00000700, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioPlayer
|
|
|
|
DECLARE_INTERFACE_(IHXAudioPlayer, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioPlayer methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::CreateAudioStream
|
|
* Purpose:
|
|
* Call this to create an audio stream.
|
|
*/
|
|
STDTQT_METHOD(CreateAudioStream) (THIS_
|
|
IHXAudioStream** /*OUT*/ pAudioStream
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::AddPostMixHook
|
|
* Purpose:
|
|
* Call this to hook audio data after all audio streams in this
|
|
* have been mixed.
|
|
*/
|
|
STDTQT_METHOD(AddPostMixHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook,
|
|
const HXBOOL /*IN*/ bDisableWrite,
|
|
const HXBOOL /*IN*/ bFinal
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::RemovePostMixHook
|
|
* Purpose:
|
|
* Call this to remove an already added post hook.
|
|
*/
|
|
STDTQT_METHOD(RemovePostMixHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::GetAudioStreamCount
|
|
* Purpose:
|
|
* Get the number of audio streams currently active in the
|
|
* audio player. Since streams can be added mid-presentation
|
|
* this function may return different values on different calls.
|
|
* If the user needs to know about all the streams as they get
|
|
* get added to the player, IHXAudioStreamInfoResponse should
|
|
* be implemented and passed in SetStreamInfoResponse.
|
|
*/
|
|
STDMETHOD_(UINT16,GetAudioStreamCount) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::GetAudioStream
|
|
* Purpose:
|
|
* Get an audio stream at position given.
|
|
*/
|
|
STDMETHOD_(IHXAudioStream*,GetAudioStream) (THIS_
|
|
UINT16 /*IN*/ uIndex
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::SetStreamInfoResponse
|
|
* Purpose:
|
|
* Set a stream info response interface. A client must implement
|
|
* an IHXAudioStreamInfoResponse and then call this method with
|
|
* the IHXAudioStreamInfoResponse as the parameter. The audio
|
|
* player will call IHXAudioStreamInfoResponse::OnStreamsReady
|
|
* with the total number of audio streams associated with this
|
|
* audio player.
|
|
*/
|
|
STDTQT_METHOD(SetStreamInfoResponse) (THIS_
|
|
IHXAudioStreamInfoResponse* /*IN*/ pResponse
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::RemoveStreamInfoResponse
|
|
* Purpose:
|
|
* Remove stream info response that was added earlier
|
|
*/
|
|
STDTQT_METHOD(RemoveStreamInfoResponse) (THIS_
|
|
IHXAudioStreamInfoResponse* /*IN*/ pResponse
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::GetAudioVolume
|
|
* Purpose:
|
|
* Get the audio player's volume interface. This volume controls
|
|
* the volume level of all the mixed audio streams for this
|
|
* audio player.
|
|
*/
|
|
STDMETHOD_(IHXVolume*,GetAudioVolume) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayer::GetDeviceVolume
|
|
* Purpose:
|
|
* Get the audio device volume interface. This volume controls
|
|
* the audio device volume levels.
|
|
*/
|
|
STDMETHOD_(IHXVolume*,GetDeviceVolume) (THIS) PURE;
|
|
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioPlayerResponse
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface provides access to the Audio Player Response. Use this
|
|
* to receive audio player playback notifications. Your implementation of
|
|
* OnTimeSync() is called with the current audio playback time (millisecs).
|
|
* This interface is currently to be used ONLY by the RMA engine internally.
|
|
*
|
|
* IID_IHXAudioPlayerResponse:
|
|
*
|
|
* {00000701-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioPlayerResponse, 0x00000701, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioPlayerResponse
|
|
|
|
DECLARE_INTERFACE_(IHXAudioPlayerResponse, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioPlayerResponse methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPlayerResponse::OnTimeSync
|
|
* Purpose:
|
|
* This method is called with the current audio playback time.
|
|
*/
|
|
STDTQT_METHOD(OnTimeSync) (THIS_
|
|
ULONG32 /*IN*/ ulTimeEnd
|
|
) PURE;
|
|
|
|
};
|
|
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioStream
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface provides access to an Audio Stream. Use this to play
|
|
* audio, "hook" audio stream data, and to get audio stream information.
|
|
*
|
|
* IID_IHXAudioStream:
|
|
*
|
|
* {00000702-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioStream, 0x00000702, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioStream
|
|
|
|
DECLARE_INTERFACE_(IHXAudioStream, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioStream methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::Init
|
|
* Purpose:
|
|
* Initialize an audio stream with the given audio format. The
|
|
* IHXValues contains stream identification information.
|
|
*/
|
|
STDTQT_METHOD(Init) (THIS_
|
|
const HXAudioFormat* /*IN*/ pAudioFormat,
|
|
IHXValues* /*IN*/ pValues
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::Write
|
|
* Purpose:
|
|
* Write audio data to Audio Services.
|
|
*
|
|
* NOTE: If the renderer loses packets and there is no loss
|
|
* correction, then the renderer should write the next packet
|
|
* using a meaningful start time. Audio Services will play
|
|
* silence where packets are missing.
|
|
*/
|
|
STDTQT_METHOD(Write) (THIS_
|
|
HXAudioData* /*IN*/ pAudioData
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::AddPreMixHook
|
|
* Purpose:
|
|
* Use this to "hook" audio stream data prior to the mixing.
|
|
* Set bDisableWrite to TRUE to prevent this audio stream data
|
|
* from being mixed with other audio stream data associated
|
|
* with this audio player.
|
|
*/
|
|
STDTQT_METHOD(AddPreMixHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook,
|
|
const HXBOOL /*IN*/ bDisableWrite
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::RemovePreMixHook
|
|
* Purpose:
|
|
* Use this to remove an already added "hook".
|
|
*/
|
|
STDTQT_METHOD(RemovePreMixHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::AddDryNotification
|
|
* Purpose:
|
|
* Use this to add a notification response object to get
|
|
* notifications when audio stream is running dry.
|
|
*/
|
|
STDTQT_METHOD(AddDryNotification) (THIS_
|
|
IHXDryNotification* /*IN*/ pNotification
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::GetStreamInfo
|
|
* Purpose:
|
|
* Use this to get information specific to this audio stream.
|
|
*/
|
|
STDMETHOD_(IHXValues*,GetStreamInfo) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream::GetAudioVolume
|
|
* Purpose:
|
|
* Get the audio stream's volume interface. This volume controls
|
|
* the volume level for this audio stream.
|
|
*/
|
|
STDMETHOD_(IHXVolume*,GetAudioVolume) (THIS) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioDevice
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Object that exports audio device API
|
|
* This interface is currently to be used ONLY by the RMA engine
|
|
* internally.
|
|
*
|
|
* IID_IHXAudioDevice:
|
|
*
|
|
* {00000703-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioDevice, 0x00000703, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioDevice
|
|
|
|
DECLARE_INTERFACE_(IHXAudioDevice, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioDevice methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Open
|
|
* Purpose:
|
|
* The caller calls this to open the audio device using the audio
|
|
* format given.
|
|
*/
|
|
STDTQT_METHOD(Open) (THIS_
|
|
const HXAudioFormat* /*IN*/ pAudioFormat,
|
|
IHXAudioDeviceResponse* /*IN*/ pStreamResponse) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Close
|
|
* Purpose:
|
|
* The caller calls this to close the audio device.
|
|
*/
|
|
STDTQT_METHOD(Close) (THIS_
|
|
const HXBOOL /*IN*/ bFlush ) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Resume
|
|
* Purpose:
|
|
* The caller calls this to start or resume audio playback.
|
|
*/
|
|
STDTQT_METHOD(Resume) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Pause
|
|
* Purpose:
|
|
* The caller calls this to pause the audio device. If bFlush is
|
|
* TRUE, any buffers in the audio device will be flushed; otherwise,
|
|
* the buffers are played.
|
|
*/
|
|
STDTQT_METHOD(Pause) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Write
|
|
* Purpose:
|
|
* The caller calls this to write an audio buffer.
|
|
*/
|
|
STDTQT_METHOD(Write) (THIS_
|
|
const HXAudioData* /*IN*/ pAudioData) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::InitVolume
|
|
* Purpose:
|
|
* The caller calls this to inform the audio stream of the client's
|
|
* volume range. The audio stream maps the client's volume range
|
|
* into the audio device volume range.
|
|
* NOTE: This function returns TRUE if volume is supported by this
|
|
* audio device.
|
|
*/
|
|
STDMETHOD_(HXBOOL,InitVolume) (THIS_
|
|
const UINT16 /*IN*/ uMinVolume,
|
|
const UINT16 /*IN*/ uMaxVolume) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::SetVolume
|
|
* Purpose:
|
|
* The caller calls this to set the audio device volume level.
|
|
*/
|
|
STDTQT_METHOD(SetVolume) (THIS_
|
|
const UINT16 /*IN*/ uVolume) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::GetVolume
|
|
* Purpose:
|
|
* The caller calls this to get the audio device volume level.
|
|
*/
|
|
STDMETHOD_(UINT16,GetVolume) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Reset
|
|
* Purpose:
|
|
* The caller calls this to reset the audio device.
|
|
*/
|
|
STDTQT_METHOD(Reset) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::Drain
|
|
* Purpose:
|
|
* The caller calls this to drain the audio device.
|
|
*/
|
|
STDTQT_METHOD(Drain) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::CheckFormat
|
|
* Purpose:
|
|
* The caller calls this to check the input format with the
|
|
* audio device format.
|
|
*/
|
|
STDTQT_METHOD(CheckFormat) (THIS_
|
|
const HXAudioFormat* /*IN*/ pAudioFormat ) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDevice::GetCurrentAudioTime
|
|
* Purpose:
|
|
* The caller calls this to get current system audio time.
|
|
*/
|
|
STDTQT_METHOD(GetCurrentAudioTime) (THIS_
|
|
REF(ULONG32) /*OUT*/ ulCurrentTime) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
* IHXAudioDeviceResponse
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Object that exports audio device Response API
|
|
* This interface is currently to be used ONLY by the RMA engine
|
|
* internally.
|
|
*
|
|
* IID_IHXAudioDeviceResponse:
|
|
*
|
|
* {00000704-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioDeviceResponse, 0x00000704, 0x901, 0x11d1, 0x8b, 0x6,
|
|
0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioDeviceResponse
|
|
|
|
DECLARE_INTERFACE_(IHXAudioDeviceResponse, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioDeviceResponse methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceResponse::OnTimeSync
|
|
* Purpose:
|
|
* Notification interface provided by users of the IHXAudioDevice
|
|
* interface. This method is called by the IHXAudioDevice when
|
|
* audio playback occurs.
|
|
*/
|
|
STDTQT_METHOD(OnTimeSync) (THIS_
|
|
ULONG32 /*IN*/ ulTimeEnd) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioHook
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Clients must implement this interface to access pre- or post-mixed
|
|
* audio data. Use this interface to get post processed audio buffers and
|
|
* their associated audio format.
|
|
*
|
|
* IID_IHXAudioHook:
|
|
*
|
|
* {00000705-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioHook, 0x00000705, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioHook
|
|
|
|
DECLARE_INTERFACE_(IHXAudioHook, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods!
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioHook methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioHook::OnInit
|
|
* Purpose:
|
|
* Audio Services calls OnInit() with the audio data format of the
|
|
* audio data that will be provided in the OnBuffer() method.
|
|
*/
|
|
STDTQT_METHOD(OnInit) (THIS_
|
|
HXAudioFormat* /*IN*/ pFormat) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioHook::OnBuffer
|
|
* Purpose:
|
|
* Audio Services calls OnBuffer() with audio data packets. The
|
|
* renderer should not modify the data in the IHXBuffer part of
|
|
* pAudioInData. If the renderer wants to write a modified
|
|
* version of the data back to Audio Services, then it should
|
|
* create its own IHXBuffer, modify the data and then associate
|
|
* this buffer with the pAudioOutData->pData member.
|
|
*/
|
|
STDTQT_METHOD(OnBuffer) (THIS_
|
|
HXAudioData* /*IN*/ pAudioInData,
|
|
HXAudioData* /*OUT*/ pAudioOutData) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioDeviceHookManager
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Allows setting audio hooks in the audio device itself.
|
|
*
|
|
* IID_IHXAudioDeviceHookManager:
|
|
*
|
|
* {00000715-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioDeviceHookManager, 0x00000715, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioDeviceHookManager
|
|
|
|
DECLARE_INTERFACE_(IHXAudioDeviceHookManager, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods!
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioDeviceHookManager methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceHookManager::AddAudioDeviceHook
|
|
* Purpose:
|
|
* Last chance to modify data being written to the audio device.
|
|
*/
|
|
STDTQT_METHOD(AddAudioDeviceHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook,
|
|
AudioDeviceHookType /*IN*/ type
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceHookManager::RemoveAudioDeviceHook
|
|
* Purpose:
|
|
* Removes the audio device hook that was set with AddAudioDeviceHook.
|
|
*/
|
|
STDTQT_METHOD(RemoveAudioDeviceHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceHookManager::ProcessHooks
|
|
* Purpose:
|
|
* Called by audio device implementations to process the hooks on a
|
|
* given audio buffer
|
|
*/
|
|
STDTQT_METHOD(ProcessAudioDeviceHooks) (THIS_
|
|
IHXBuffer*& /*IN/OUT*/ pBuffer,
|
|
HXBOOL& /*OUT*/ bChanged
|
|
) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioStreamInfoResponse
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Clients must implement this interface when interested in receiving
|
|
* notification of the total number of streams associated with this
|
|
* audio player.
|
|
*
|
|
* IID_IHXAudioStreamInfoResponse:
|
|
*
|
|
* {00000706-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioStreamInfoResponse, 0x00000706, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioStreamInfoResponse
|
|
|
|
DECLARE_INTERFACE_(IHXAudioStreamInfoResponse, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioStreamInfoResponse methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStreamInfoResponse::OnStream
|
|
* Purpose:
|
|
* The client implements this to get notification of streams
|
|
* associated with this player. Use
|
|
* AudioPlayer::SetStreamInfoResponse() to register your
|
|
* implementation with the AudioPlayer. Once player has been
|
|
* initialized, it will call OnStream() multiple times to pass all
|
|
* the streams. Since a stream can be added mid-presentation,
|
|
* IHXAudioStreamInfoResponse object should be written to handle
|
|
* OnStream() in the midst of the presentation as well.
|
|
*/
|
|
STDTQT_METHOD(OnStream) (THIS_
|
|
IHXAudioStream* /*IN*/ pAudioStream) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXVolume
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface provides access to Audio Services volume control. Use this
|
|
* interface to get, set, or receive notifications of volume changes. Audio
|
|
* Services implements IHXVolume for IHXAudioPlayer, IHXAudioStream and
|
|
* for the audio device. Clients can use the IHXVolume interface to get/set
|
|
* volume levels of each audio stream, to get/set volume levels for the
|
|
* audio player's mixed data, or to get/set the volume levels of the audio
|
|
* device. See AudioStream::GetStreamVolume() (TBD), AudioPlayer::
|
|
* GetAudioVolume() and AudioPlayer::GetDeviceVolume().
|
|
*
|
|
* IID_IHXVolume:
|
|
*
|
|
* {00000707-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXVolume, 0x00000707, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXVolume
|
|
|
|
DECLARE_INTERFACE_(IHXVolume, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXVolume methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolume::SetVolume
|
|
* Purpose:
|
|
* Call this to set the volume level.
|
|
*/
|
|
STDTQT_METHOD(SetVolume) (THIS_
|
|
const UINT16 /*IN*/ uVolume ) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolume::GetVolume
|
|
* Purpose:
|
|
* Call this to get the current volume level.
|
|
*/
|
|
STDMETHOD_(UINT16,GetVolume) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolume::SetMute
|
|
* Purpose:
|
|
* Call this to mute the volume.
|
|
*/
|
|
STDTQT_METHOD(SetMute) (THIS_
|
|
const HXBOOL /*IN*/ bMute ) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolume::GetMute
|
|
* Purpose:
|
|
* Call this to determine if the volume is muted.
|
|
*
|
|
*/
|
|
STDMETHOD_(HXBOOL,GetMute) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolume::AddAdviseSink
|
|
* Purpose:
|
|
* Call this to register an IHXVolumeAdviseSink. The advise sink
|
|
* methods: OnVolumeChange() and OnMuteChange() are called when
|
|
* ever IHXVolume::SetVolume() and IHXVolume::SetMute() are
|
|
* called.
|
|
*/
|
|
STDTQT_METHOD(AddAdviseSink) (THIS_
|
|
IHXVolumeAdviseSink* /*IN*/ pSink
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolume::RemoveAdviseSink
|
|
* Purpose:
|
|
* Call this to unregister an IHXVolumeAdviseSink. Use this when
|
|
* you are no longer interested in receiving volume or mute change
|
|
* notifications.
|
|
*/
|
|
STDTQT_METHOD(RemoveAdviseSink) (THIS_
|
|
IHXVolumeAdviseSink* /*IN*/ pSink
|
|
) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXVolumeAdviseSink
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface provides access to notifications of volume changes. A
|
|
* client must implement this interface if they are interested in receiving
|
|
* notifications of volume level changes or mute state changes. A client must
|
|
* register their volume advise sink using IHXVolume::AddAdviseSink().
|
|
* See the IHXVolume interface.
|
|
*
|
|
* IID_IHXVolumeAdviseSink:
|
|
*
|
|
* {00000708-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXVolumeAdviseSink, 0x00000708, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXVolumeAdviseSink
|
|
|
|
DECLARE_INTERFACE_(IHXVolumeAdviseSink, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXVolumeAdviseSink methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolumeAdviseSink::OnVolumeChange
|
|
* Purpose:
|
|
* This interface is called whenever the associated IHXVolume
|
|
* SetVolume() is called.
|
|
*/
|
|
STDTQT_METHOD(OnVolumeChange) (THIS_
|
|
const UINT16 uVolume
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXVolumeAdviseSink::OnMuteChange
|
|
* Purpose:
|
|
* This interface is called whenever the associated IHXVolume
|
|
* SetMute() is called.
|
|
*
|
|
*/
|
|
STDTQT_METHOD(OnMuteChange) (THIS_
|
|
const HXBOOL bMute
|
|
) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioLevelNormalization
|
|
*
|
|
* IID_IHXAudioLevelNormalization:
|
|
*
|
|
* {00000716-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioLevelNormalization, 0x00000716, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioLevelNormalization
|
|
|
|
DECLARE_INTERFACE_(IHXAudioLevelNormalization, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioLevelNormalization methods
|
|
*/
|
|
STDTQT_METHOD(SetSoundLevelOffset) (THIS_ INT16 nOffset) PURE;
|
|
STDMETHOD_(INT16, GetSoundLevelOffset)(THIS) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXDryNotification
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Audio Renderer should implement this if it needs notification when the
|
|
* audio stream is running dry.
|
|
*
|
|
* IID_IHXDryNotification:
|
|
*
|
|
* {00000709-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXDryNotification, 0x00000709, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXDryNotification
|
|
|
|
DECLARE_INTERFACE_(IHXDryNotification, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXDryNotification methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXDryNotification::OnDryNotification
|
|
* Purpose:
|
|
* This function is called when it is time to write to audio device
|
|
* and there is not enough data in the audio stream. The renderer can
|
|
* then decide to add more data to the audio stream. This should be
|
|
* done synchronously within the call to this function.
|
|
* It is OK to not write any data. Silence will be played instead.
|
|
*/
|
|
STDTQT_METHOD(OnDryNotification) (THIS_
|
|
UINT32 /*IN*/ ulCurrentStreamTime,
|
|
UINT32 /*IN*/ ulMinimumDurationRequired
|
|
) PURE;
|
|
};
|
|
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioDeviceManager
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Allows the default audio device to be replaced.
|
|
*
|
|
* IID_IHXAudioDeviceManager:
|
|
*
|
|
* {0000070A-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioDeviceManager, 0x0000070A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioDeviceManager
|
|
|
|
DECLARE_INTERFACE_(IHXAudioDeviceManager, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioDeviceManager methods
|
|
*/
|
|
|
|
/**********************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceManager::Replace
|
|
* Purpose:
|
|
* This is used to replace the default implementation of the audio
|
|
* device by the given audio device interface.
|
|
*/
|
|
STDTQT_METHOD(Replace) (THIS_
|
|
IHXAudioDevice* /*IN*/ pAudioDevice) PURE;
|
|
|
|
/**********************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceManager::Remove
|
|
* Purpose:
|
|
* This is used to remove the audio device given to the manager in
|
|
* the earlier call to Replace.
|
|
*/
|
|
STDTQT_METHOD(Remove) (THIS_
|
|
IHXAudioDevice* /*IN*/ pAudioDevice) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceManager::AddFinalHook
|
|
* Purpose:
|
|
* One last chance to modify data being written to the audio device.
|
|
* This hook allows the user to change the audio format that
|
|
* is to be written to the audio device. This can be done in call
|
|
* to OnInit() in IHXAudioHook.
|
|
*/
|
|
STDTQT_METHOD(SetFinalHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceManager::RemoveFinalHook
|
|
* Purpose:
|
|
* Remove final hook
|
|
*/
|
|
STDTQT_METHOD(RemoveFinalHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceManager::GetAudioFormat
|
|
* Purpose:
|
|
* Returns the audio format in which the audio device is opened.
|
|
* This function will fill in the pre-allocated HXAudioFormat
|
|
* structure passed in.
|
|
*/
|
|
STDTQT_METHOD(GetAudioFormat) (THIS_
|
|
HXAudioFormat* /*IN/OUT*/pAudioFormat) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioCrossFade
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface can be used to cross-fade two audio streams. It is exposed
|
|
* by IHXAudioPlayer
|
|
*
|
|
* IID_IHXAudioCrossFade:
|
|
*
|
|
* {0000070B-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioCrossFade, 0x0000070B, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioCrossFade
|
|
|
|
DECLARE_INTERFACE_(IHXAudioCrossFade, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioCrossFade methods
|
|
*/
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioCrossFade::CrossFade
|
|
* Purpose:
|
|
* Cross-fade two audio streams.
|
|
* pStreamFrom - Stream to be cross faded from
|
|
* pStreamTo - Stream to be cross faded to
|
|
* ulFromCrossFadeStartTime- "From" Stream time when cross fade is
|
|
* to be started
|
|
* ulToCrossFadeStartTime - "To" Stream time when cross fade is to
|
|
* be started
|
|
* ulCrossFadeDuration - Duration over which cross-fade needs
|
|
* to be done
|
|
*
|
|
*/
|
|
STDTQT_METHOD(CrossFade) (THIS_
|
|
IHXAudioStream* pStreamFrom,
|
|
IHXAudioStream* pStreamTo,
|
|
UINT32 ulFromCrossFadeStartTime,
|
|
UINT32 ulToCrossFadeStartTime,
|
|
UINT32 ulCrossFadeDuration) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioStream2
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface contains some last-minute added audio stream functions
|
|
*
|
|
* IID_IHXAudioStream2:
|
|
*
|
|
* {0000070C-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioStream2, 0x0000070C, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioStream2
|
|
|
|
DECLARE_INTERFACE_(IHXAudioStream2, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioStream2 methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream2::RemoveDryNotification
|
|
* Purpose:
|
|
* Use this to remove itself from the notification response object
|
|
* during the stream switching.
|
|
*/
|
|
STDTQT_METHOD(RemoveDryNotification) (THIS_
|
|
IHXDryNotification* /*IN*/ pNotification
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioStream2::GetAudioFormat
|
|
* Purpose:
|
|
* Returns the input audio format of the data written by the
|
|
* renderer. This function will fill in the pre-allocated
|
|
* HXAudioFormat structure passed in.
|
|
*/
|
|
STDTQT_METHOD(GetAudioFormat) (THIS_
|
|
HXAudioFormat* /*IN/OUT*/pAudioFormat) PURE;
|
|
};
|
|
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioPushdown
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface can be used to setup the audio pushdown time.
|
|
*
|
|
* IID_IHXAudioPushdown:
|
|
*
|
|
* {0000070D-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioPushdown, 0x0000070D, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioPushdown
|
|
|
|
DECLARE_INTERFACE_(IHXAudioPushdown, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioPushdown methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPushdown::SetAudioPushdown
|
|
* Purpose:
|
|
* Use this to set the minimum audio pushdown value in ms.
|
|
* This is the amount of audio data that is being written
|
|
* to the audio device before starting playback.
|
|
*/
|
|
STDTQT_METHOD(SetAudioPushdown) (THIS_
|
|
UINT32 /*IN*/ ulAudioPushdown
|
|
) PURE;
|
|
};
|
|
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioHookManager
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface can be used to add a hook at the audio device layer.
|
|
*
|
|
* IID_IHXAudioHookManager:
|
|
*
|
|
* {0000070E-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioHookManager, 0x0000070E, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioHookManager
|
|
|
|
DECLARE_INTERFACE_(IHXAudioHookManager, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioHookManager methods
|
|
*/
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioHookManager::AddHook
|
|
* Purpose:
|
|
* Use this to add a hook
|
|
*/
|
|
STDTQT_METHOD(AddHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioHookManager::RemoveHook
|
|
* Purpose:
|
|
* Use this to remove a hook
|
|
*/
|
|
STDTQT_METHOD(RemoveHook) (THIS_
|
|
IHXAudioHook* /*IN*/ pHook
|
|
) PURE;
|
|
};
|
|
|
|
// $Private:
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXMultiPlayPauseSupport
|
|
*
|
|
* Purpose:
|
|
*
|
|
* This interface can be used to control whether audio services handles multi-player pause / rewind support
|
|
*
|
|
* IID_IHXMultiPlayPauseSupport:
|
|
*
|
|
* {0000070F-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXMultiPlayPauseSupport,
|
|
0x0000070F, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXMultiPlayPauseSupport
|
|
|
|
DECLARE_INTERFACE_(IHXMultiPlayPauseSupport, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXMultiPlayPauseSupport methods
|
|
*/
|
|
STDMETHOD_(HXBOOL,GetDisableMultiPlayPauseSupport) (THIS) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioDeviceManager2
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Audio Device Manager extension
|
|
*
|
|
* IID_IHXAudioDeviceManager2:
|
|
*
|
|
* {00000710-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioDeviceManager2, 0x00000710, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioDeviceManager2
|
|
|
|
DECLARE_INTERFACE_(IHXAudioDeviceManager2, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioDeviceManager2 methods
|
|
*/
|
|
|
|
/**********************************************************************
|
|
* Method:
|
|
* IHXAudioDeviceManager2::IsReplacedDevice
|
|
* Purpose:
|
|
* This is used to determine if the audio device has been replaced.
|
|
*/
|
|
STDMETHOD_(HXBOOL, IsReplacedDevice) (THIS) PURE;
|
|
|
|
};
|
|
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioResampler
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Audio Resampler
|
|
*
|
|
* IID_IHXAudioResampler:
|
|
*
|
|
* {00000711-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioResampler, 0x00000711, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioResampler
|
|
|
|
DECLARE_INTERFACE_(IHXAudioResampler, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioResampler methods
|
|
*/
|
|
|
|
/**********************************************************************
|
|
* Method:
|
|
* IHXAudioResampler::Resample
|
|
* Purpose:
|
|
* Will produce 1 output frame for every (upFactor/downFactor) inputs
|
|
* frames, straddling if not an integer. Works down to 1 sample/call.
|
|
*
|
|
* Returns actual number of output frames.
|
|
***********************************************************************/
|
|
|
|
STDMETHOD_(UINT32, Resample) ( THIS_
|
|
UINT16* pInput,
|
|
UINT32 ulInputBytes,
|
|
UINT16* pOutput) PURE;
|
|
|
|
/**********************************************************************
|
|
* Method:
|
|
* IHXAudioResampler::Requires
|
|
* Purpose:
|
|
* Returns number of input frames required to produce this number
|
|
* of output frames, given the current state of the filter.
|
|
*/
|
|
|
|
STDMETHOD_(UINT32, Requires) ( THIS_
|
|
UINT32 ulOutputFrames) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioResamplerManager
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Audio Resampler Manager
|
|
*
|
|
* IID_IHXAudioResamplerManager:
|
|
*
|
|
* {00000712-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioResamplerManager, 0x00000712, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioResamplerManager
|
|
|
|
DECLARE_INTERFACE_(IHXAudioResamplerManager, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioResamplerManager methods
|
|
*
|
|
*/
|
|
STDTQT_METHOD(CreateResampler) (THIS_
|
|
HXAudioFormat inAudioFormat,
|
|
REF(HXAudioFormat) outAudioFormat,
|
|
REF(IHXAudioResampler*) pResampler) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioPushdown2
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Audio PushDown access methods
|
|
*
|
|
* IID_IHXAudioPushdown2:
|
|
*
|
|
* {00000713-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioPushdown2, 0x00000713, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioPushdown2
|
|
|
|
DECLARE_INTERFACE_(IHXAudioPushdown2, IHXAudioPushdown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPushdown::SetAudioPushdown
|
|
* Purpose:
|
|
* Use this to set the minimum audio pushdown value in ms.
|
|
* This is the amount of audio data that is being written
|
|
* to the audio device before starting playback.
|
|
*/
|
|
STDTQT_METHOD(SetAudioPushdown) (THIS_
|
|
UINT32 /*IN */ ulAudioPushdown) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPushdown2::GetAudioPushdown
|
|
* Purpose:
|
|
* Use this to get the minimum audio pushdown value in ms.
|
|
* This is the amount of audio data that is being written
|
|
* to the audio device before starting playback.
|
|
*/
|
|
STDTQT_METHOD(GetAudioPushdown) (THIS_
|
|
REF(UINT32) /*OUT*/ ulAudioPushdown) PURE;
|
|
|
|
/************************************************************************
|
|
* Method:
|
|
* IHXAudioPushdown2::GetCurrentAudioDevicePushdown
|
|
* Purpose:
|
|
* Use this to get the audio pushed down to the audio device and haven't
|
|
* been played yet
|
|
*/
|
|
STDTQT_METHOD(GetCurrentAudioDevicePushdown) (THIS_
|
|
REF(UINT32) /*OUT*/ ulAudioPusheddown) PURE;
|
|
};
|
|
|
|
/****************************************************************************
|
|
*
|
|
* Interface:
|
|
*
|
|
* IHXAudioMultiChannel
|
|
*
|
|
* Purpose:
|
|
*
|
|
* Multi-channel audio support
|
|
*
|
|
* IID_IHXAudioMultiChannel:
|
|
*
|
|
* {00000714-0901-11d1-8B06-00A024406D59}
|
|
*
|
|
*/
|
|
DEFINE_GUID(IID_IHXAudioMultiChannel, 0x00000714, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
|
|
0xa0, 0x24, 0x40, 0x6d, 0x59);
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXAudioMultiChannel
|
|
|
|
DECLARE_INTERFACE_(IHXAudioMultiChannel, IUnknown)
|
|
{
|
|
/*
|
|
* IUnknown methods
|
|
*/
|
|
STDTQT_METHOD(QueryInterface) (THIS_
|
|
REFIID riid,
|
|
void** ppvObj) PURE;
|
|
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
/*
|
|
* IHXAudioMultiChannel methods
|
|
*/
|
|
STDMETHOD_(HXBOOL,GetMultiChannelSupport) (THIS) PURE;
|
|
};
|
|
// $EndPrivate.
|
|
|
|
|
|
#if defined(HELIX_FEATURE_TIMELINE_WATCHER)
|
|
|
|
// Timeline watcher.
|
|
// {211A3CAE-F1DA-4678-84D5-0F12E7B1D8C6}
|
|
DEFINE_GUID(IID_IHXTimelineWatcher,
|
|
0x211a3cae, 0xf1da, 0x4678, 0x84, 0xd5, 0xf, 0x12, 0xe7, 0xb1, 0xd8, 0xc6);
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXTimelineWatcher
|
|
DECLARE_INTERFACE_(IHXTimelineWatcher, IUnknown)
|
|
{
|
|
STDTQT_METHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
STDTQT_METHOD(OnPause) (THIS) PURE;
|
|
STDTQT_METHOD(OnResume) (THIS) PURE;
|
|
STDTQT_METHOD(OnClose) (THIS) PURE;
|
|
STDTQT_METHOD(OnTimeSync) (THIS_ UINT32 currentTime ) PURE;
|
|
};
|
|
|
|
// TimelineManager
|
|
// {9ED91BC3-9E92-46bb-A094-6C8B9416CFB6}
|
|
DEFINE_GUID(IID_IHXTimelineManager,
|
|
0x9ed91bc3, 0x9e92, 0x46bb, 0xa0, 0x94, 0x6c, 0x8b, 0x94, 0x16, 0xcf, 0xb6);
|
|
#undef INTERFACE
|
|
#define INTERFACE IHXTimelineManager
|
|
DECLARE_INTERFACE_(IHXTimelineManager, IUnknown)
|
|
{
|
|
STDTQT_METHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
|
|
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG32,Release) (THIS) PURE;
|
|
|
|
STDTQT_METHOD(AddTimelineWatcher) (THIS_ IHXTimelineWatcher* ) PURE;
|
|
STDTQT_METHOD(RemoveTimelineWatcher) (THIS_ IHXTimelineWatcher* ) PURE;
|
|
};
|
|
#endif /* #if defined(HELIX_FEATURE_TIMELINE_WATCHER) */
|
|
|
|
|
|
#endif /* _HXAUSVC_H_ */
|