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_