Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / media / cast / sender / video_encoder_impl.h
1 // Copyright 2014 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.
4
5 #ifndef MEDIA_CAST_SENDER_VIDEO_ENCODER_IMPL_H_
6 #define MEDIA_CAST_SENDER_VIDEO_ENCODER_IMPL_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "media/cast/cast_config.h"
10 #include "media/cast/cast_environment.h"
11 #include "media/cast/sender/software_video_encoder.h"
12 #include "media/cast/sender/video_encoder.h"
13
14 namespace media {
15 class VideoFrame;
16
17 namespace cast {
18
19 // This object is called external from the main cast thread and internally from
20 // the video encoder thread.
21 class VideoEncoderImpl : public VideoEncoder {
22  public:
23   struct CodecDynamicConfig {
24     bool key_frame_requested;
25     uint32 latest_frame_id_to_reference;
26     int bit_rate;
27   };
28
29   typedef base::Callback<void(scoped_ptr<EncodedFrame>)>
30       FrameEncodedCallback;
31
32   VideoEncoderImpl(scoped_refptr<CastEnvironment> cast_environment,
33                    const VideoSenderConfig& video_config);
34
35   ~VideoEncoderImpl() override;
36
37   // VideoEncoder implementation.
38   bool EncodeVideoFrame(
39       const scoped_refptr<media::VideoFrame>& video_frame,
40       const base::TimeTicks& reference_time,
41       const FrameEncodedCallback& frame_encoded_callback) override;
42   void SetBitRate(int new_bit_rate) override;
43   void GenerateKeyFrame() override;
44   void LatestFrameIdToReference(uint32 frame_id) override;
45
46  private:
47   scoped_refptr<CastEnvironment> cast_environment_;
48   CodecDynamicConfig dynamic_config_;
49
50   // This member belongs to the video encoder thread. It must not be
51   // dereferenced on the main thread. We manage the lifetime of this member
52   // manually because it needs to be initialize, used and destroyed on the
53   // video encoder thread and video encoder thread can out-live the main thread.
54   scoped_ptr<SoftwareVideoEncoder> encoder_;
55
56   DISALLOW_COPY_AND_ASSIGN(VideoEncoderImpl);
57 };
58
59 }  // namespace cast
60 }  // namespace media
61
62 #endif  // MEDIA_CAST_SENDER_VIDEO_ENCODER_IMPL_H_