michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef MEDIAENGINEDEFAULT_H_ michael@0: #define MEDIAENGINEDEFAULT_H_ michael@0: michael@0: #include "nsITimer.h" michael@0: michael@0: #include "nsCOMPtr.h" michael@0: #include "DOMMediaStream.h" michael@0: #include "nsComponentManagerUtils.h" michael@0: #include "mozilla/Monitor.h" michael@0: michael@0: #include "VideoUtils.h" michael@0: #include "MediaEngine.h" michael@0: #include "VideoSegment.h" michael@0: #include "AudioSegment.h" michael@0: #include "StreamBuffer.h" michael@0: #include "MediaStreamGraph.h" michael@0: michael@0: namespace mozilla { michael@0: michael@0: namespace layers { michael@0: class ImageContainer; michael@0: class PlanarYCbCrImage; michael@0: } michael@0: michael@0: class MediaEngineDefault; michael@0: michael@0: /** michael@0: * The default implementation of the MediaEngine interface. michael@0: */ michael@0: class MediaEngineDefaultVideoSource : public nsITimerCallback, michael@0: public MediaEngineVideoSource michael@0: { michael@0: public: michael@0: MediaEngineDefaultVideoSource(); michael@0: ~MediaEngineDefaultVideoSource(); michael@0: michael@0: virtual void GetName(nsAString&); michael@0: virtual void GetUUID(nsAString&); michael@0: michael@0: virtual nsresult Allocate(const VideoTrackConstraintsN &aConstraints, michael@0: const MediaEnginePrefs &aPrefs); michael@0: virtual nsresult Deallocate(); michael@0: virtual nsresult Start(SourceMediaStream*, TrackID); michael@0: virtual nsresult Stop(SourceMediaStream*, TrackID); michael@0: virtual nsresult Snapshot(uint32_t aDuration, nsIDOMFile** aFile); michael@0: virtual nsresult Config(bool aEchoOn, uint32_t aEcho, michael@0: bool aAgcOn, uint32_t aAGC, michael@0: bool aNoiseOn, uint32_t aNoise, michael@0: int32_t aPlayoutDelay) { return NS_OK; }; michael@0: virtual void NotifyPull(MediaStreamGraph* aGraph, michael@0: SourceMediaStream *aSource, michael@0: TrackID aId, michael@0: StreamTime aDesiredTime, michael@0: TrackTicks &aLastEndTime); michael@0: michael@0: virtual bool IsFake() { michael@0: return true; michael@0: } michael@0: michael@0: NS_DECL_THREADSAFE_ISUPPORTS michael@0: NS_DECL_NSITIMERCALLBACK michael@0: michael@0: protected: michael@0: friend class MediaEngineDefault; michael@0: michael@0: TrackID mTrackID; michael@0: nsCOMPtr mTimer; michael@0: // mMonitor protects mImage access/changes, and transitions of mState michael@0: // from kStarted to kStopped (which are combined with EndTrack() and michael@0: // image changes). Note that mSources is not accessed from other threads michael@0: // for video and is not protected. michael@0: Monitor mMonitor; michael@0: nsRefPtr mImage; michael@0: michael@0: nsRefPtr mImageContainer; michael@0: michael@0: MediaEnginePrefs mOpts; michael@0: int mCb; michael@0: int mCr; michael@0: }; michael@0: michael@0: class SineWaveGenerator; michael@0: michael@0: class MediaEngineDefaultAudioSource : public nsITimerCallback, michael@0: public MediaEngineAudioSource michael@0: { michael@0: public: michael@0: MediaEngineDefaultAudioSource(); michael@0: ~MediaEngineDefaultAudioSource(); michael@0: michael@0: virtual void GetName(nsAString&); michael@0: virtual void GetUUID(nsAString&); michael@0: michael@0: virtual nsresult Allocate(const AudioTrackConstraintsN &aConstraints, michael@0: const MediaEnginePrefs &aPrefs); michael@0: virtual nsresult Deallocate(); michael@0: virtual nsresult Start(SourceMediaStream*, TrackID); michael@0: virtual nsresult Stop(SourceMediaStream*, TrackID); michael@0: virtual nsresult Snapshot(uint32_t aDuration, nsIDOMFile** aFile); michael@0: virtual nsresult Config(bool aEchoOn, uint32_t aEcho, michael@0: bool aAgcOn, uint32_t aAGC, michael@0: bool aNoiseOn, uint32_t aNoise, michael@0: int32_t aPlayoutDelay) { return NS_OK; }; michael@0: virtual void NotifyPull(MediaStreamGraph* aGraph, michael@0: SourceMediaStream *aSource, michael@0: TrackID aId, michael@0: StreamTime aDesiredTime, michael@0: TrackTicks &aLastEndTime) {} michael@0: michael@0: virtual bool IsFake() { michael@0: return true; michael@0: } michael@0: michael@0: NS_DECL_THREADSAFE_ISUPPORTS michael@0: NS_DECL_NSITIMERCALLBACK michael@0: michael@0: protected: michael@0: TrackID mTrackID; michael@0: nsCOMPtr mTimer; michael@0: michael@0: SourceMediaStream* mSource; michael@0: nsAutoPtr mSineGenerator; michael@0: }; michael@0: michael@0: michael@0: class MediaEngineDefault : public MediaEngine michael@0: { michael@0: public: michael@0: MediaEngineDefault() michael@0: : mMutex("mozilla::MediaEngineDefault") michael@0: {} michael@0: michael@0: virtual void EnumerateVideoDevices(nsTArray >*); michael@0: virtual void EnumerateAudioDevices(nsTArray >*); michael@0: michael@0: private: michael@0: ~MediaEngineDefault() {} michael@0: michael@0: Mutex mMutex; michael@0: // protected with mMutex: michael@0: michael@0: nsTArray > mVSources; michael@0: nsTArray > mASources; michael@0: }; michael@0: michael@0: } michael@0: michael@0: #endif /* NSMEDIAENGINEDEFAULT_H_ */