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