| Index: remoting/base/encoder_row_based.h
|
| diff --git a/remoting/base/encoder_row_based.h b/remoting/base/encoder_row_based.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bdc992d343bda1bae7acd53a860ab44b660b5747
|
| --- /dev/null
|
| +++ b/remoting/base/encoder_row_based.h
|
| @@ -0,0 +1,67 @@
|
| +// 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_BASE_ENCODER_ROW_BASED_H_
|
| +#define REMOTING_BASE_ENCODER_ROW_BASED_H_
|
| +
|
| +#include "remoting/base/encoder.h"
|
| +#include "remoting/proto/video.pb.h"
|
| +
|
| +#include "gfx/rect.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +class Compressor;
|
| +class UpdateStreamPacket;
|
| +
|
| +// EncoderRowBased implements an Encoder using zlib or verbatim
|
| +// compression. Zlib-based encoder must be created using
|
| +// CreateZlibEncoder(), verbatim encoder is created with
|
| +// CreateVerbatimEncoder().
|
| +//
|
| +// Compressor is reset before encoding each rectangle, so that each
|
| +// rectangle can be decoded independently.
|
| +class EncoderRowBased : public Encoder {
|
| + public:
|
| + static EncoderRowBased* CreateZlibEncoder();
|
| + static EncoderRowBased* CreateVerbatimEncoder();
|
| +
|
| + virtual ~EncoderRowBased();
|
| +
|
| + virtual void Encode(scoped_refptr<CaptureData> capture_data,
|
| + bool key_frame,
|
| + DataAvailableCallback* data_available_callback);
|
| +
|
| + private:
|
| + EncoderRowBased(Compressor* compressor, VideoPacketFormat::Encoding encoding);
|
| + EncoderRowBased(Compressor* compressor, VideoPacketFormat::Encoding encoding,
|
| + int packet_size);
|
| +
|
| + // Encode a single dirty rect using compressor.
|
| + void EncodeRect(const gfx::Rect& rect, size_t rect_index);
|
| +
|
| + // Marks a packet as the first in a series of rectangle updates.
|
| + void PrepareUpdateStart(const gfx::Rect& rect, VideoPacket* packet);
|
| +
|
| + // Retrieves a pointer to the output buffer in |update| used for storing the
|
| + // encoded rectangle data. Will resize the buffer to |size|.
|
| + uint8* GetOutputBuffer(VideoPacket* packet, size_t size);
|
| +
|
| + // Submit |message| to |callback_|.
|
| + void SubmitMessage(VideoPacket* packet, size_t rect_index);
|
| +
|
| + // The encoding of the incoming stream.
|
| + VideoPacketFormat::Encoding encoding_;
|
| +
|
| + scoped_ptr<Compressor> compressor_;
|
| +
|
| + scoped_refptr<CaptureData> capture_data_;
|
| + scoped_ptr<DataAvailableCallback> callback_;
|
| +
|
| + int packet_size_;
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +#endif // REMOTING_BASE_ENCODER_ROW_BASED_H_
|
|
|