diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-04 19:48:42 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-04 19:48:42 +0000 |
commit | 8ea7a167522a24be192e958af46a41d49e78504c (patch) | |
tree | 571cf839290beed90019a744c3a096be89cc67d1 /remoting/client/chromoting_view.h | |
parent | b552f1787ca864e458e4c14e6012c20b423161a5 (diff) | |
download | chromium_src-8ea7a167522a24be192e958af46a41d49e78504c.zip chromium_src-8ea7a167522a24be192e958af46a41d49e78504c.tar.gz chromium_src-8ea7a167522a24be192e958af46a41d49e78504c.tar.bz2 |
This is a monster CL.
It started as an attempt to put the decoder onto another thread. However, this became complicated due to multiple object ownership transfers and coupling between the decode layer and the network layer; the decoder's states were highly coupled with how the network packets were processed.
This could probably be broken up slightly, but at this point, it's easier to just commit as a whole The refactor includes:
1) Making the decoder interface unaware of "network packet" types.
2) Making the network layer process packets in order.
3) Threading through asynchronous APIs all over the place.
4) Simplifying the rectangle update protocol.
5) Cleaning up object lifetime and ownership semantics between the decode layer and the renderer.
As of right now, the Verbatim format is still broken on the encode side because it uses the old protocol.
BUG=52883, 57351
TEST=still connects to chromoting_simple_host
Review URL: http://codereview.chromium.org/3305001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61402 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/client/chromoting_view.h')
-rw-r--r-- | remoting/client/chromoting_view.h | 69 |
1 files changed, 9 insertions, 60 deletions
diff --git a/remoting/client/chromoting_view.h b/remoting/client/chromoting_view.h index d785b29..d1c978b 100644 --- a/remoting/client/chromoting_view.h +++ b/remoting/client/chromoting_view.h @@ -6,13 +6,19 @@ #define REMOTING_CLIENT_CHROMOTING_VIEW_H_ #include "base/ref_counted.h" -#include "remoting/base/decoder.h" +#include "media/base/video_frame.h" + +class MessageLoop; + +namespace base { +class WaitableEvent; +} // namespace base namespace remoting { // ChromotingView defines the behavior of an object that draws a view of the -// remote desktop. Its main function is to choose the right decoder and render -// the update stream onto the screen. +// remote desktop. Its main function is to render the update stream onto the +// screen. class ChromotingView { public: ChromotingView(); @@ -44,70 +50,13 @@ class ChromotingView { // extends past the end of the backing store, it is filled with black. virtual void SetViewport(int x, int y, int width, int height) = 0; - // Resize the underlying image that contains the host screen buffer. - // This should match the size of the output from the decoder. - // - // TODO(garykac): This handles only 1 screen. We need multi-screen support. - virtual void SetHostScreenSize(int width, int height) = 0; - - // Handle the BeginUpdateStream message. - // This method should perform the following tasks: - // (1) Perform any platform-specific tasks for start of update stream. - // (2) Make sure the |frame_| has been initialized. - // (3) Delete the HostMessage. - virtual void HandleBeginUpdateStream(ChromotingHostMessage* msg) = 0; - - // Handle the UpdateStreamPacket message. - // This method should perform the following tasks: - // (1) Extract the decoding from the update packet message. - // (2) Call SetupDecoder with the encoding to lazily initialize the decoder. - // We don't do this in BeginUpdateStream because the begin message - // doesn't contain the encoding. - // (3) Call BeginDecoding if this is the first packet of the stream. - // (4) Call the decoder's PartialDecode() method to decode the packet. - // This call will delete the HostMessage. - // Note: - // * For a given begin/end update stream, the encodings specified in the - // update packets must all match. We may revisit this constraint at a - // later date. - virtual void HandleUpdateStreamPacket(ChromotingHostMessage* msg) = 0; - - // Handle the EndUpdateStream message. - // This method should perform the following tasks: - // (1) Call EndDecoding(). - // (2) Perform any platform-specific tasks for end of update stream. - // (3) Delete the HostMessage. - virtual void HandleEndUpdateStream(ChromotingHostMessage* msg) = 0; - protected: - // Setup the decoder based on the given encoding. - // Returns true if a new decoder has already been started (with a call to - // BeginDecoding). - bool SetupDecoder(UpdateStreamEncoding encoding); - - // Prepare the decoder to start decoding a chunk of data. - // This needs to be called if SetupDecoder() returns false. - bool BeginDecoding(Task* partial_decode_done, Task* decode_done); - - // Decode the given message. - // BeginDecoding() must be called before any calls to Decode(). - bool Decode(ChromotingHostMessage* msg); - - // Finish decoding and send notifications to update the view. - bool EndDecoding(); - - // Decoder used to decode the video frames (or frame fragements). - scoped_ptr<Decoder> decoder_; - // Framebuffer for the decoder. scoped_refptr<media::VideoFrame> frame_; // Dimensions of |frame_| bitmap. int frame_width_; int frame_height_; - - UpdatedRects update_rects_; - UpdatedRects all_update_rects_; }; } // namespace remoting |