141 lines
3.7 KiB
C++
141 lines
3.7 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_VIDEO_RENDER_MAIN_SOURCE_INCOMING_VIDEO_STREAM_H_
|
|
#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_INCOMING_VIDEO_STREAM_H_
|
|
|
|
#include "video_render.h"
|
|
#include "map_wrapper.h"
|
|
|
|
namespace webrtc {
|
|
class CriticalSectionWrapper;
|
|
class EventWrapper;
|
|
class ThreadWrapper;
|
|
class VideoRenderCallback;
|
|
class VideoRenderFrames;
|
|
|
|
struct VideoMirroring
|
|
{
|
|
bool mirrorXAxis;
|
|
bool mirrorYAxis;
|
|
VideoMirroring() :
|
|
mirrorXAxis(false), mirrorYAxis(false)
|
|
{
|
|
}
|
|
};
|
|
|
|
// Class definitions
|
|
class IncomingVideoStream: public VideoRenderCallback
|
|
{
|
|
public:
|
|
/*
|
|
* VideoRenderer constructor/destructor
|
|
*/
|
|
IncomingVideoStream(const WebRtc_Word32 moduleId,
|
|
const WebRtc_UWord32 streamId);
|
|
~IncomingVideoStream();
|
|
|
|
WebRtc_Word32 ChangeModuleId(const WebRtc_Word32 id);
|
|
|
|
// Get callbck to deliver frames to the module
|
|
VideoRenderCallback* ModuleCallback();
|
|
virtual WebRtc_Word32 RenderFrame(const WebRtc_UWord32 streamId,
|
|
VideoFrame& videoFrame);
|
|
|
|
// Set callback to the platform dependant code
|
|
WebRtc_Word32 SetRenderCallback(VideoRenderCallback* renderCallback);
|
|
|
|
// Callback for file recording, snapshot, ...
|
|
WebRtc_Word32 SetExternalCallback(VideoRenderCallback* renderObject);
|
|
|
|
/*
|
|
* Start/Stop
|
|
*/
|
|
WebRtc_Word32 Start();
|
|
WebRtc_Word32 Stop();
|
|
|
|
// Clear all buffers
|
|
WebRtc_Word32 Reset();
|
|
|
|
/*
|
|
* Properties
|
|
*/
|
|
WebRtc_UWord32 StreamId() const;
|
|
WebRtc_UWord32 IncomingRate() const;
|
|
|
|
/*
|
|
*
|
|
*/
|
|
WebRtc_Word32 GetLastRenderedFrame(VideoFrame& videoFrame) const;
|
|
|
|
WebRtc_Word32 SetStartImage(const VideoFrame& videoFrame);
|
|
|
|
WebRtc_Word32 SetTimeoutImage(const VideoFrame& videoFrame,
|
|
const WebRtc_UWord32 timeout);
|
|
|
|
WebRtc_Word32 EnableMirroring(const bool enable,
|
|
const bool mirrorXAxis,
|
|
const bool mirrorYAxis);
|
|
|
|
protected:
|
|
static bool IncomingVideoStreamThreadFun(void* obj);
|
|
bool IncomingVideoStreamProcess();
|
|
|
|
private:
|
|
|
|
// Enums
|
|
enum
|
|
{
|
|
KEventStartupTimeMS = 10
|
|
};
|
|
enum
|
|
{
|
|
KEventMaxWaitTimeMs = 100
|
|
};
|
|
enum
|
|
{
|
|
KFrameRatePeriodMs = 1000
|
|
};
|
|
|
|
WebRtc_Word32 _moduleId;
|
|
WebRtc_UWord32 _streamId;
|
|
CriticalSectionWrapper& _streamCritsect; // Critsects in allowed to enter order
|
|
CriticalSectionWrapper& _threadCritsect;
|
|
CriticalSectionWrapper& _bufferCritsect;
|
|
ThreadWrapper* _ptrIncomingRenderThread;
|
|
EventWrapper& _deliverBufferEvent;
|
|
bool _running;
|
|
|
|
VideoRenderCallback* _ptrExternalCallback;
|
|
VideoRenderCallback* _ptrRenderCallback;
|
|
VideoRenderFrames& _renderBuffers;
|
|
|
|
RawVideoType _callbackVideoType;
|
|
WebRtc_UWord32 _callbackWidth;
|
|
WebRtc_UWord32 _callbackHeight;
|
|
|
|
WebRtc_UWord32 _incomingRate;
|
|
WebRtc_Word64 _lastRateCalculationTimeMs;
|
|
WebRtc_UWord16 _numFramesSinceLastCalculation;
|
|
VideoFrame _lastRenderedFrame;
|
|
VideoFrame _tempFrame;
|
|
VideoFrame _startImage;
|
|
VideoFrame _timeoutImage;
|
|
WebRtc_UWord32 _timeoutTime;
|
|
|
|
bool _mirrorFramesEnabled;
|
|
VideoMirroring _mirroring;
|
|
VideoFrame _transformedVideoFrame;
|
|
};
|
|
|
|
} //namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_INCOMING_VIDEO_STREAM_H_
|