125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  *  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_
 | 
