1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef REMOTING_PROTOCOL_CLIENT_VIDEO_DISPATCHER_H_ 6 #define REMOTING_PROTOCOL_CLIENT_VIDEO_DISPATCHER_H_ 7 8 #include <list> 9 10 #include "base/compiler_specific.h" 11 #include "base/macros.h" 12 #include "base/memory/weak_ptr.h" 13 #include "remoting/base/constants.h" 14 #include "remoting/protocol/channel_dispatcher_base.h" 15 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" 16 17 namespace remoting { 18 namespace protocol { 19 20 class ClientStub; 21 class VideoStub; 22 23 class ClientVideoDispatcher : public ChannelDispatcherBase { 24 public: 25 ClientVideoDispatcher(VideoStub* video_stub, ClientStub* client_stub); 26 ~ClientVideoDispatcher() override; 27 28 private: 29 struct PendingFrame; 30 typedef std::list<PendingFrame> PendingFramesList; 31 32 void OnIncomingMessage(std::unique_ptr<CompoundBuffer> message) override; 33 34 // Callback for VideoStub::ProcessVideoPacket(). 35 void OnPacketDone(PendingFramesList::iterator pending_frame); 36 37 PendingFramesList pending_frames_; 38 39 VideoStub* video_stub_; 40 ClientStub* client_stub_; 41 42 webrtc::DesktopSize screen_size_; 43 webrtc::DesktopVector screen_dpi_ = 44 webrtc::DesktopVector(kDefaultDpi, kDefaultDpi); 45 46 base::WeakPtrFactory<ClientVideoDispatcher> weak_factory_{this}; 47 48 DISALLOW_COPY_AND_ASSIGN(ClientVideoDispatcher); 49 }; 50 51 } // namespace protocol 52 } // namespace remoting 53 54 #endif // REMOTING_PROTOCOL_CLIENT_VIDEO_DISPATCHER_H_ 55