Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / media / cast / sender / external_video_encoder.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_EXTERNAL_VIDEO_ENCODER_H_
6 #define MEDIA_CAST_SENDER_EXTERNAL_VIDEO_ENCODER_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/weak_ptr.h"
10 #include "media/cast/cast_config.h"
11 #include "media/cast/cast_environment.h"
12 #include "media/cast/sender/video_encoder.h"
13 #include "media/video/video_encode_accelerator.h"
14
15 namespace media {
16 class VideoFrame;
17 }
18
19 namespace media {
20 namespace cast {
21
22 class LocalVideoEncodeAcceleratorClient;
23
24 // This object is called external from the main cast thread and internally from
25 // the video encoder thread.
26 class ExternalVideoEncoder : public VideoEncoder {
27  public:
28   ExternalVideoEncoder(
29       scoped_refptr<CastEnvironment> cast_environment,
30       const VideoSenderConfig& video_config,
31       const CastInitializationCallback& initialization_cb,
32       const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
33       const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb);
34
35   ~ExternalVideoEncoder() 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   // Called when video_accelerator_client_ has finished creating the VEA and
47   // is ready for use.
48   void OnCreateVideoEncodeAccelerator(
49       scoped_refptr<base::SingleThreadTaskRunner> encoder_task_runner);
50
51  protected:
52   // If |success| is true then encoder is initialized successfully.
53   // Otherwise encoder initialization failed.
54   void EncoderInitialized(bool success);
55   void EncoderError();
56
57  private:
58   friend class LocalVideoEncodeAcceleratorClient;
59
60   VideoSenderConfig video_config_;
61   scoped_refptr<CastEnvironment> cast_environment_;
62
63   bool encoder_active_;
64   bool key_frame_requested_;
65
66   scoped_refptr<LocalVideoEncodeAcceleratorClient> video_accelerator_client_;
67   scoped_refptr<base::SingleThreadTaskRunner> encoder_task_runner_;
68
69   CastInitializationCallback initialization_cb_;
70
71   // Weak pointer factory for posting back LocalVideoEncodeAcceleratorClient
72   // notifications to ExternalVideoEncoder.
73   // NOTE: Weak pointers must be invalidated before all other member variables.
74   base::WeakPtrFactory<ExternalVideoEncoder> weak_factory_;
75
76   DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoder);
77 };
78
79 }  // namespace cast
80 }  // namespace media
81
82 #endif  // MEDIA_CAST_SENDER_EXTERNAL_VIDEO_ENCODER_H_