diff options
Diffstat (limited to 'remoting/codec/video_encoder_vpx.h')
-rw-r--r-- | remoting/codec/video_encoder_vpx.h | 68 |
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_ |