00001
00002
00003
00004
00005
00008
00009 #ifndef _ROKU_INCLUDE_CASCADE_AV_CASCADEAUDIOPLAYER_H
00010 #define _ROKU_INCLUDE_CASCADE_AV_CASCADEAUDIOPLAYER_H
00011
00012 #include <cascade/av/CascadeAudioCodec.h>
00013 #include <cascade/av/CascadeAudioPlaybackDevice.h>
00014 #include <cascade/util/CascadeStream.h>
00015
00016 #ifndef DOXY_SKIP
00017 namespace CascadePrivate { class CascadeAudioPlayerInitializer; };
00018 #endif
00019
00035 class CascadeAudioPlayer : public CascadeObject
00036 {
00037 public: class Client;
00038 public:
00039 CascadeAudioPlayer();
00043 virtual ~CascadeAudioPlayer();
00047 public:
00048 virtual bool Open(Client * pClient = NULL);
00057 virtual void Close();
00062 virtual bool IsOpen();
00069 enum { kOutputFlagAnalog = (1 << 0), kOutputFlagSPDIF = (1 << 1) };
00070 virtual bool QueueStream(CascadeStream & stream, const char * pType = NULL, u32 nOutputFlags = (kOutputFlagAnalog|kOutputFlagSPDIF));
00101
00119 virtual bool Stop();
00125 virtual bool Pause();
00130 virtual bool Resume();
00135 virtual bool SetVolume(u16 nVolume);
00143 virtual bool SetVolumePercent(u8 nVolume);
00152 virtual bool IsPlaying();
00157 virtual bool IsStopped();
00162 virtual bool IsPaused();
00167 virtual bool AttachDevice(CascadeAudioPlaybackDevice & device);
00180 virtual bool DetachDevice();
00189 public:
00190 class SampleSet
00191 {
00192 public:
00193 u32 m_nStreamID;
00194 u32 m_nSequenceNumber;
00195 u32 m_nNumSamples;
00196 u8 * m_pSamples;
00197 u32 m_nTimestampMilliseconds;
00198 u32 m_nDurationMilliseconds;
00199 u32 m_nSampleBytes;
00200 public:
00201 u32 m_nNumChannels;
00202 u32 m_nSampleRate;
00203 u32 m_nBitsPerSample;
00204 };
00212
00213 enum PlaybackResult
00214 {
00215 kNormalCompletion = 0,
00216 kPlaybackStopped,
00217 kErrorUnknown,
00218 kErrorOutOfMemory,
00219 kErrorUnsupportedSampleRate,
00220 kErrorUnsupportedBitsPerSample,
00221 kErrorUnsupportedNumChannels,
00222 kErrorUnsupportedSamplePolarity,
00223 kErrorUnsupportedSampleEndianness,
00224 kErrorUnsupportedSampleOrder,
00225 kErrorUnknownAudioType,
00226 kErrorCodecInputFailure,
00227 kErrorStreamReadFailure,
00228 kErrorDeviceNonexistant,
00229 kErrorDeviceFailure,
00230 kErrorDeviceUnavailable,
00231 kErrorUnsupportedOutputFlags,
00232 };
00240
00241 static const char * PlaybackResultToString(PlaybackResult result);
00242
00243 class Client
00244 {
00245 public:
00246 virtual void OnAudioDecodeBegin(u32 nStreamID, CascadeStream * pStream, u32 nDurationInMilliseconds);
00247
00248
00249
00250 virtual void OnAudioBuffering(u32 nStreamID, u32 nBuffersFilled, u32 nBuffersToFill);
00251
00252
00253
00254
00255 virtual void OnAudioPlaybackBegin(u32 nStreamID);
00256
00257
00258
00259 virtual void OnAudioDecodeEnd(u32 nStreamID, CascadeStream * pStream, PlaybackResult result, u32 nPlaybackResultData);
00260
00261
00262
00263
00264
00265 virtual void OnAudioPlaybackEnd(u32 nStreamID, PlaybackResult result);
00266
00267
00268 virtual void OnVisualizePrepare(u32 nStreamID, const SampleSet & samples);
00284 virtual void OnVisualizeExecute(u32 nStreamID, u32 nSequenceNumber, u32 nTimestampMilliseconds, u32 nBuffersQueued, u32 nTotalBuffers);
00308 virtual void OnPlaybackPause();
00309 virtual void OnPlaybackResume();
00310 virtual void OnPlaybackStop();
00311 };
00312 #ifndef DOXY_SKIP
00313 private:
00314 friend class CascadePrivate::CascadeAudioPlayerInitializer;
00315 #endif
00316 private:
00317 class Player;
00318 Player * m_pPlayer;
00319 };
00320
00321 #endif // #ifndef _ROKU_INCLUDE_CASCADE_AV_CASCADEAUDIOPLAYER_H
00322
00324
00326
00327
00328
00329
00330
00331
00332
00333
00334