git-svn-id: http://webrtc.googlecode.com/svn/trunk@156 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/utility/source/file_player_impl.h b/src/modules/utility/source/file_player_impl.h
new file mode 100644
index 0000000..bd82861
--- /dev/null
+++ b/src/modules/utility/source/file_player_impl.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_MODULES_UTILITY_SOURCE_FILE_PLAYER_IMPL_H_
+#define WEBRTC_MODULES_UTILITY_SOURCE_FILE_PLAYER_IMPL_H_
+
+#include "coder.h"
+#include "common_types.h"
+#include "critical_section_wrapper.h"
+#include "engine_configurations.h"
+#include "file_player.h"
+#include "media_file_defines.h"
+#include "media_file.h"
+#include "resampler.h"
+#include "tick_util.h"
+#include "typedefs.h"
+
+namespace webrtc {
+class VideoCoder;
+class FrameScaler;
+
+class FilePlayerImpl : public FilePlayer
+{
+public:
+ FilePlayerImpl(WebRtc_UWord32 instanceID, FileFormats fileFormat);
+ ~FilePlayerImpl();
+
+ // FilePlayer functions.
+ virtual WebRtc_Word32 Get10msAudioFromFile(
+ WebRtc_Word16* decodedDataBuffer,
+ WebRtc_UWord32& decodedDataLengthInSamples,
+ const WebRtc_UWord32 frequencyInHz);
+ virtual WebRtc_Word32 RegisterModuleFileCallback(FileCallback* callback);
+ virtual WebRtc_Word32 StartPlayingFile(
+ const WebRtc_Word8* fileName,
+ bool loop,
+ WebRtc_UWord32 startPosition,
+ float volumeScaling,
+ WebRtc_UWord32 notification,
+ WebRtc_UWord32 stopPosition = 0,
+ const CodecInst* codecInst = NULL);
+ virtual WebRtc_Word32 StartPlayingFile(
+ InStream& sourceStream,
+ WebRtc_UWord32 startPosition,
+ float volumeScaling,
+ WebRtc_UWord32 notification,
+ WebRtc_UWord32 stopPosition = 0,
+ const CodecInst* codecInst = NULL);
+ virtual WebRtc_Word32 StopPlayingFile();
+ virtual bool IsPlayingFile() const;
+ virtual WebRtc_Word32 GetPlayoutPosition(WebRtc_UWord32& durationMs);
+ virtual WebRtc_Word32 AudioCodec(CodecInst& audioCodec) const;
+ virtual WebRtc_Word32 Frequency() const;
+ virtual WebRtc_Word32 SetAudioScaling(float scaleFactor);
+
+protected:
+ WebRtc_Word32 SetUpAudioDecoder();
+
+ WebRtc_UWord32 _instanceID;
+ const FileFormats _fileFormat;
+ MediaFile& _fileModule;
+
+ WebRtc_UWord32 _decodedLengthInMS;
+
+private:
+ WebRtc_Word16 _decodedAudioBuffer[MAX_AUDIO_BUFFER_IN_SAMPLES];
+ AudioCoder _audioDecoder;
+
+ CodecInst _codec;
+ WebRtc_Word32 _numberOf10MsPerFrame;
+ WebRtc_Word32 _numberOf10MsInDecoder;
+
+ Resampler _resampler;
+ float _scaling;
+};
+
+#ifdef WEBRTC_MODULE_UTILITY_VIDEO
+class VideoFilePlayerImpl: public FilePlayerImpl
+{
+public:
+ VideoFilePlayerImpl(WebRtc_UWord32 instanceID, FileFormats fileFormat);
+ ~VideoFilePlayerImpl();
+
+ // FilePlayer functions.
+ virtual WebRtc_Word32 TimeUntilNextVideoFrame();
+ virtual WebRtc_Word32 StartPlayingVideoFile(const WebRtc_Word8* fileName,
+ bool loop,
+ bool videoOnly);
+ virtual WebRtc_Word32 StopPlayingFile();
+ virtual WebRtc_Word32 video_codec_info(VideoCodec& videoCodec) const;
+ virtual WebRtc_Word32 GetVideoFromFile(VideoFrame& videoFrame);
+ virtual WebRtc_Word32 GetVideoFromFile(VideoFrame& videoFrame,
+ const WebRtc_UWord32 outWidth,
+ const WebRtc_UWord32 outHeight);
+
+private:
+ WebRtc_Word32 SetUpVideoDecoder();
+
+ VideoCoder& _videoDecoder;
+ VideoCodec video_codec_info_;
+ WebRtc_Word32 _decodedVideoFrames;
+
+ EncodedVideoData& _encodedData;
+
+ FrameScaler& _frameScaler;
+ CriticalSectionWrapper& _critSec;
+ TickTime _startTime;
+ WebRtc_Word64 _accumulatedRenderTimeMs;
+ WebRtc_UWord32 _frameLengthMS;
+
+ WebRtc_Word32 _numberOfFramesRead;
+ bool _videoOnly;
+};
+#endif //WEBRTC_MODULE_UTILITY_VIDEO
+
+} // namespace webrtc
+#endif // WEBRTC_MODULES_UTILITY_SOURCE_FILE_PLAYER_IMPL_H_