Battery Status API: add UMA logging for Linux.
[chromium-blink-merge.git] / remoting / codec / video_encoder_vpx.h
blob133b754ec4c0e7554a37f6adde472a285217ca03
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef REMOTING_CODEC_VIDEO_ENCODER_VPX_H_
6 #define REMOTING_CODEC_VIDEO_ENCODER_VPX_H_
8 #include "base/callback.h"
9 #include "base/time/time.h"
10 #include "remoting/codec/scoped_vpx_codec.h"
11 #include "remoting/codec/video_encoder.h"
13 typedef struct vpx_image vpx_image_t;
15 namespace webrtc {
16 class DesktopRegion;
17 class DesktopSize;
18 } // namespace webrtc
20 namespace remoting {
22 class VideoEncoderVpx : public VideoEncoder {
23 public:
24 // Create encoder for the specified protocol.
25 static scoped_ptr<VideoEncoderVpx> CreateForVP8();
26 static scoped_ptr<VideoEncoderVpx> CreateForVP9();
28 virtual ~VideoEncoderVpx();
30 // VideoEncoder interface.
31 virtual void SetLosslessEncode(bool want_lossless) OVERRIDE;
32 virtual void SetLosslessColor(bool want_lossless) OVERRIDE;
33 virtual scoped_ptr<VideoPacket> Encode(
34 const webrtc::DesktopFrame& frame) OVERRIDE;
36 private:
37 explicit VideoEncoderVpx(bool use_vp9);
39 // Initializes the codec for frames of |size|. Returns true if successful.
40 bool Initialize(const webrtc::DesktopSize& size);
42 // Prepares |image_| for encoding. Writes updated rectangles into
43 // |updated_region|.
44 void PrepareImage(const webrtc::DesktopFrame& frame,
45 webrtc::DesktopRegion* updated_region);
47 // Updates the active map according to |updated_region|. Active map is then
48 // given to the encoder to speed up encoding.
49 void PrepareActiveMap(const webrtc::DesktopRegion& updated_region);
51 // True if the encoder should generate VP9, false for VP8.
52 bool use_vp9_;
54 // Options controlling VP9 encode quantization and color space.
55 // These are always off (false) for VP8.
56 bool lossless_encode_;
57 bool lossless_color_;
59 ScopedVpxCodec codec_;
60 base::TimeTicks timestamp_base_;
62 // VPX image and buffer to hold the actual YUV planes.
63 scoped_ptr<vpx_image_t> image_;
64 scoped_ptr<uint8[]> image_buffer_;
66 // Active map used to optimize out processing of un-changed macroblocks.
67 scoped_ptr<uint8[]> active_map_;
68 int active_map_width_;
69 int active_map_height_;
71 DISALLOW_COPY_AND_ASSIGN(VideoEncoderVpx);
74 } // namespace remoting
76 #endif // REMOTING_CODEC_VIDEO_ENCODER_VP8_H_