Index: media/cast/sender/external_video_encoder.h |
diff --git a/media/cast/sender/external_video_encoder.h b/media/cast/sender/external_video_encoder.h |
index 90125557c05b4dcd986f8d7377d0159fac09ae81..f6474217c1bbc57486eed4fbc3fad2fdd4b182a1 100644 |
--- a/media/cast/sender/external_video_encoder.h |
+++ b/media/cast/sender/external_video_encoder.h |
@@ -11,26 +11,23 @@ |
#include "media/cast/cast_environment.h" |
#include "media/cast/sender/video_encoder.h" |
#include "media/video/video_encode_accelerator.h" |
- |
-namespace media { |
-class VideoFrame; |
-} |
+#include "ui/gfx/geometry/size.h" |
namespace media { |
namespace cast { |
-class LocalVideoEncodeAcceleratorClient; |
- |
-// This object is called external from the main cast thread and internally from |
-// the video encoder thread. |
+// Cast MAIN thread proxy to the internal media::VideoEncodeAccelerator |
+// implementation running on a separate thread. Encodes media::VideoFrames and |
+// emits media::cast::EncodedFrames. |
class ExternalVideoEncoder : public VideoEncoder { |
public: |
ExternalVideoEncoder( |
- scoped_refptr<CastEnvironment> cast_environment, |
+ const scoped_refptr<CastEnvironment>& cast_environment, |
const VideoSenderConfig& video_config, |
+ const gfx::Size& frame_size, |
const CastInitializationCallback& initialization_cb, |
const CreateVideoEncodeAcceleratorCallback& create_vea_cb, |
- const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb); |
+ const CreateVideoEncodeMemoryCallback& create_video_encode_memory_cb); |
~ExternalVideoEncoder() override; |
@@ -43,33 +40,28 @@ class ExternalVideoEncoder : public VideoEncoder { |
void GenerateKeyFrame() override; |
void LatestFrameIdToReference(uint32 frame_id) override; |
- // Called when video_accelerator_client_ has finished creating the VEA and |
- // is ready for use. |
- void OnCreateVideoEncodeAccelerator( |
- scoped_refptr<base::SingleThreadTaskRunner> encoder_task_runner); |
- |
- protected: |
- // If |success| is true then encoder is initialized successfully. |
- // Otherwise encoder initialization failed. |
- void EncoderInitialized(bool success); |
- void EncoderError(); |
- |
private: |
- friend class LocalVideoEncodeAcceleratorClient; |
+ class VEAClientImpl; |
- VideoSenderConfig video_config_; |
- scoped_refptr<CastEnvironment> cast_environment_; |
+ // Method invoked by the CreateVideoEncodeAcceleratorCallback to construct a |
+ // VEAClientImpl to own and interface with a new |vea|. Upon return, |
+ // |client_| holds a reference to the new VEAClientImpl. |
+ void OnCreateVideoEncodeAccelerator( |
+ const gfx::Size& frame_size, |
+ VideoCodecProfile codec_profile, |
+ int max_frame_rate, |
+ const CastInitializationCallback& initialization_cb, |
+ scoped_refptr<base::SingleThreadTaskRunner> encoder_task_runner, |
+ scoped_ptr<media::VideoEncodeAccelerator> vea); |
- bool encoder_active_; |
+ const scoped_refptr<CastEnvironment> cast_environment_; |
+ const CreateVideoEncodeMemoryCallback create_video_encode_memory_cb_; |
+ int bit_rate_; |
bool key_frame_requested_; |
- scoped_refptr<LocalVideoEncodeAcceleratorClient> video_accelerator_client_; |
- scoped_refptr<base::SingleThreadTaskRunner> encoder_task_runner_; |
- |
- CastInitializationCallback initialization_cb_; |
+ scoped_refptr<VEAClientImpl> client_; |
- // Weak pointer factory for posting back LocalVideoEncodeAcceleratorClient |
- // notifications to ExternalVideoEncoder. |
+ // Provides a weak pointer for the OnCreateVideoEncoderAccelerator() callback. |
// NOTE: Weak pointers must be invalidated before all other member variables. |
base::WeakPtrFactory<ExternalVideoEncoder> weak_factory_; |