summaryrefslogtreecommitdiffstats
path: root/remoting/codec/video_encoder_vpx.h
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/codec/video_encoder_vpx.h')
-rw-r--r--remoting/codec/video_encoder_vpx.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/remoting/codec/video_encoder_vpx.h b/remoting/codec/video_encoder_vpx.h
new file mode 100644
index 0000000..2e76532
--- /dev/null
+++ b/remoting/codec/video_encoder_vpx.h
@@ -0,0 +1,68 @@
+// Copyright 2013 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_CODEC_VIDEO_ENCODER_VPX_H_
+#define REMOTING_CODEC_VIDEO_ENCODER_VPX_H_
+
+#include "base/callback.h"
+#include "remoting/codec/scoped_vpx_codec.h"
+#include "remoting/codec/video_encoder.h"
+
+typedef struct vpx_image vpx_image_t;
+
+namespace webrtc {
+class DesktopRegion;
+class DesktopSize;
+} // namespace webrtc
+
+namespace remoting {
+
+// A class that uses VP8 to perform encoding.
+class VideoEncoderVpx : public VideoEncoder {
+ public:
+ // Creates a encoder for VP8.
+ static scoped_ptr<VideoEncoderVpx> CreateForVP8();
+
+ virtual ~VideoEncoderVpx();
+
+ // VideoEncoder interface.
+ virtual scoped_ptr<VideoPacket> Encode(
+ const webrtc::DesktopFrame& frame) OVERRIDE;
+
+ private:
+ typedef base::Callback<ScopedVpxCodec(const webrtc::DesktopSize&)>
+ InitializeCodecCallback;
+
+ VideoEncoderVpx(const InitializeCodecCallback& init_codec);
+
+ // Initializes the codec for frames of |size|. Returns true if successful.
+ bool Initialize(const webrtc::DesktopSize& size);
+
+ // Prepares |image_| for encoding. Writes updated rectangles into
+ // |updated_region|.
+ void PrepareImage(const webrtc::DesktopFrame& frame,
+ webrtc::DesktopRegion* updated_region);
+
+ // Updates the active map according to |updated_region|. Active map is then
+ // given to the encoder to speed up encoding.
+ void PrepareActiveMap(const webrtc::DesktopRegion& updated_region);
+
+ InitializeCodecCallback init_codec_;
+
+ ScopedVpxCodec codec_;
+ scoped_ptr<vpx_image_t> image_;
+ scoped_ptr<uint8[]> active_map_;
+ int active_map_width_;
+ int active_map_height_;
+ int last_timestamp_;
+
+ // Buffer for storing the yuv image.
+ scoped_ptr<uint8[]> yuv_image_;
+
+ DISALLOW_COPY_AND_ASSIGN(VideoEncoderVpx);
+};
+
+} // namespace remoting
+
+#endif // REMOTING_CODEC_VIDEO_ENCODER_VP8_H_