Index: remoting/protocol/webrtc_video_renderer_adapter.h |
diff --git a/remoting/protocol/webrtc_video_renderer_adapter.h b/remoting/protocol/webrtc_video_renderer_adapter.h |
index e085129e1ca9f1a3515188e989499a95922a6a94..dec60f8a4f88982dbe224c361b18d270f94ff369 100644 |
--- a/remoting/protocol/webrtc_video_renderer_adapter.h |
+++ b/remoting/protocol/webrtc_video_renderer_adapter.h |
@@ -5,10 +5,14 @@ |
#ifndef REMOTING_PROTOCOL_WEBRTC_VIDEO_RENDERER_ADAPTER_H_ |
#define REMOTING_PROTOCOL_WEBRTC_VIDEO_RENDERER_ADAPTER_H_ |
+#include <list> |
#include <memory> |
+#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/weak_ptr.h" |
+#include "remoting/protocol/client_video_stats_dispatcher.h" |
+#include "remoting/protocol/video_stats_stub.h" |
#include "third_party/webrtc/api/mediastreaminterface.h" |
#include "third_party/webrtc/media/base/videosinkinterface.h" |
@@ -24,33 +28,59 @@ class VideoFrameBuffer; |
namespace remoting { |
namespace protocol { |
-struct ClientFrameStats; |
+class MessagePipe; |
class VideoRenderer; |
+class WebrtcTransport; |
+struct ClientFrameStats; |
+struct HostFrameStats; |
class WebrtcVideoRendererAdapter |
- : public rtc::VideoSinkInterface<cricket::VideoFrame> { |
+ : public rtc::VideoSinkInterface<cricket::VideoFrame>, |
+ public VideoStatsStub, |
+ public ClientVideoStatsDispatcher::EventHandler { |
public: |
- WebrtcVideoRendererAdapter( |
- scoped_refptr<webrtc::MediaStreamInterface> media_stream, |
- VideoRenderer* video_renderer); |
+ WebrtcVideoRendererAdapter(const std::string& label, |
+ VideoRenderer* video_renderer); |
~WebrtcVideoRendererAdapter() override; |
- std::string label() const { return media_stream_->label(); } |
+ std::string label() const { return label_; } |
+ |
+ void SetMediaStream(scoped_refptr<webrtc::MediaStreamInterface> media_stream); |
+ void SetVideoStatsChannel(std::unique_ptr<MessagePipe> message_pipe); |
// rtc::VideoSinkInterface implementation. |
void OnFrame(const cricket::VideoFrame& frame) override; |
private: |
- void HandleFrameOnMainThread(std::unique_ptr<ClientFrameStats> stats, |
+ // VideoStatsStub interface. |
+ void OnVideoFrameStats(uint32_t frame_id, |
+ const HostFrameStats& frame_stats) override; |
+ |
+ // ClientVideoStatsDispatcher::EventHandler interface. |
+ void OnChannelInitialized(ChannelDispatcherBase* channel_dispatcher) override; |
+ void OnChannelClosed(ChannelDispatcherBase* channel_dispatcher) override; |
+ |
+ void HandleFrameOnMainThread(uint32_t frame_id, |
+ base::TimeTicks time_received, |
scoped_refptr<webrtc::VideoFrameBuffer> frame); |
- void DrawFrame(std::unique_ptr<ClientFrameStats> stats, |
+ void DrawFrame(uint32_t frame_id, |
+ std::unique_ptr<ClientFrameStats> stats, |
std::unique_ptr<webrtc::DesktopFrame> frame); |
- void FrameRendered(std::unique_ptr<ClientFrameStats> stats); |
+ void FrameRendered(uint32_t frame_id, |
+ std::unique_ptr<ClientFrameStats> stats); |
+ |
+ std::string label_; |
scoped_refptr<webrtc::MediaStreamInterface> media_stream_; |
VideoRenderer* video_renderer_; |
+ |
+ std::unique_ptr<ClientVideoStatsDispatcher> video_stats_dispatcher_; |
+ |
scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ std::list<std::pair<uint32_t, ClientFrameStats>> client_stats_queue_; |
+ std::list<std::pair<uint32_t, HostFrameStats>> host_stats_queue_; |
+ |
base::WeakPtrFactory<WebrtcVideoRendererAdapter> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(WebrtcVideoRendererAdapter); |