/* * 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_