| Index: remoting/client/rectangle_update_decoder.h
|
| diff --git a/remoting/client/rectangle_update_decoder.h b/remoting/client/rectangle_update_decoder.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5f18e12123d413aa397a09fc26fc48a13db6006e
|
| --- /dev/null
|
| +++ b/remoting/client/rectangle_update_decoder.h
|
| @@ -0,0 +1,60 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef REMOTING_CLIENT_RECTANGLE_UPDATE_DECODER_H
|
| +#define REMOTING_CLIENT_RECTANGLE_UPDATE_DECODER_H
|
| +
|
| +#include "base/scoped_ptr.h"
|
| +#include "base/task.h"
|
| +#include "media/base/video_frame.h"
|
| +#include "remoting/base/decoder.h" // For UpdatedRects.
|
| +
|
| +class MessageLoop;
|
| +
|
| +namespace remoting {
|
| +
|
| +class FrameConsumer;
|
| +class RectangleFormat;
|
| +class RectangleUpdatePacket;
|
| +
|
| +// TODO(ajwong): Re-examine this API, especially with regards to how error
|
| +// conditions on each step are reported. Should they be CHECKs? Logs? Other?
|
| +class RectangleUpdateDecoder {
|
| + public:
|
| + RectangleUpdateDecoder(MessageLoop* message_loop,
|
| + FrameConsumer* consumer);
|
| + ~RectangleUpdateDecoder();
|
| +
|
| + // Decodes the contents of |packet| calling OnPartialFrameOutput() in the
|
| + // regsitered as data is avaialable. DecodePacket may keep a reference to
|
| + // |packet| so the |packet| must remain alive and valid until |done| is
|
| + // executed.
|
| + //
|
| + // TODO(ajwong): Should packet be a const pointer to make the lifetime
|
| + // more clear?
|
| + void DecodePacket(const RectangleUpdatePacket& packet, Task* done);
|
| +
|
| + private:
|
| + static bool IsValidPacket(const RectangleUpdatePacket& packet);
|
| +
|
| + void InitializeDecoder(const RectangleFormat& format, Task* done);
|
| +
|
| + void ProcessPacketData(const RectangleUpdatePacket& packet, Task* done);
|
| +
|
| + // Pointers to infrastructure objects. Not owned.
|
| + MessageLoop* message_loop_;
|
| + FrameConsumer* consumer_;
|
| +
|
| + scoped_ptr<Decoder> decoder_;
|
| + UpdatedRects updated_rects_;
|
| +
|
| + // Framebuffer for the decoder.
|
| + scoped_refptr<media::VideoFrame> frame_;
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::RectangleUpdateDecoder);
|
| +
|
| +#endif // REMOTING_CLIENT_RECTANGLE_UPDATE_DECODER_H
|
|
|