| Index: remoting/client/chromoting_view.h
|
| ===================================================================
|
| --- remoting/client/chromoting_view.h (revision 57131)
|
| +++ remoting/client/chromoting_view.h (working copy)
|
| @@ -6,16 +6,16 @@
|
| #define REMOTING_CLIENT_CHROMOTING_VIEW_H_
|
|
|
| #include "base/ref_counted.h"
|
| +#include "remoting/base/decoder.h"
|
|
|
| namespace remoting {
|
|
|
| -class HostMessage;
|
| -
|
| // 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.
|
| class ChromotingView {
|
| public:
|
| + ChromotingView();
|
| virtual ~ChromotingView() {}
|
|
|
| // Initialize the common structures for the view.
|
| @@ -47,13 +47,63 @@
|
| 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(HostMessage* 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(HostMessage* 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(HostMessage* 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(HostMessage* 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
|
|
|