| Index: media/cast/sender/h264_vt_encoder.h
|
| diff --git a/media/cast/sender/h264_vt_encoder.h b/media/cast/sender/h264_vt_encoder.h
|
| index 349075a5e40044df6311c6f8f21a17aa8a663ed4..d2c7ba8bd1b4f73547322e08ba146886c67bc4dc 100644
|
| --- a/media/cast/sender/h264_vt_encoder.h
|
| +++ b/media/cast/sender/h264_vt_encoder.h
|
| @@ -8,6 +8,7 @@
|
| #include "base/mac/scoped_cftyperef.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "media/base/mac/videotoolbox_glue.h"
|
| +#include "media/cast/sender/size_adaptable_video_encoder_base.h"
|
| #include "media/cast/sender/video_encoder.h"
|
|
|
| namespace media {
|
| @@ -22,15 +23,19 @@ class H264VideoToolboxEncoder : public VideoEncoder {
|
| typedef VideoToolboxGlue::VTEncodeInfoFlags VTEncodeInfoFlags;
|
|
|
| public:
|
| + // Returns true if the current platform and system configuration supports
|
| + // using H264VideoToolboxEncoder with the given |video_config|.
|
| + static bool IsSupported(const VideoSenderConfig& video_config);
|
| +
|
| H264VideoToolboxEncoder(
|
| const scoped_refptr<CastEnvironment>& cast_environment,
|
| const VideoSenderConfig& video_config,
|
| const gfx::Size& frame_size,
|
| + uint32 first_frame_id,
|
| const StatusChangeCallback& status_change_cb);
|
| ~H264VideoToolboxEncoder() override;
|
|
|
| // media::cast::VideoEncoder implementation
|
| - bool CanEncodeVariedFrameSizes() const override;
|
| bool EncodeVideoFrame(
|
| const scoped_refptr<media::VideoFrame>& video_frame,
|
| const base::TimeTicks& reference_time,
|
| @@ -43,8 +48,7 @@ class H264VideoToolboxEncoder : public VideoEncoder {
|
|
|
| private:
|
| // Initialize the compression session.
|
| - bool Initialize(const VideoSenderConfig& video_config,
|
| - const gfx::Size& frame_size);
|
| + bool Initialize(const VideoSenderConfig& video_config);
|
|
|
| // Configure the compression session.
|
| void ConfigureSession(const VideoSenderConfig& video_config);
|
| @@ -68,7 +72,13 @@ class H264VideoToolboxEncoder : public VideoEncoder {
|
| const scoped_refptr<CastEnvironment> cast_environment_;
|
|
|
| // VideoToolboxGlue provides access to VideoToolbox at runtime.
|
| - const VideoToolboxGlue* videotoolbox_glue_;
|
| + const VideoToolboxGlue* const videotoolbox_glue_;
|
| +
|
| + // The size of the visible region of the video frames to be encoded.
|
| + const gfx::Size frame_size_;
|
| +
|
| + // Callback used to report initialization status and runtime errors.
|
| + const StatusChangeCallback status_change_cb_;
|
|
|
| // Thread checker to enforce that this object is used on a specific thread.
|
| base::ThreadChecker thread_checker_;
|
| @@ -77,7 +87,7 @@ class H264VideoToolboxEncoder : public VideoEncoder {
|
| base::ScopedCFTypeRef<VTCompressionSessionRef> compression_session_;
|
|
|
| // Frame identifier counter.
|
| - uint32 frame_id_;
|
| + uint32 next_frame_id_;
|
|
|
| // Force next frame to be a keyframe.
|
| bool encode_next_frame_as_keyframe_;
|
| @@ -85,6 +95,32 @@ class H264VideoToolboxEncoder : public VideoEncoder {
|
| DISALLOW_COPY_AND_ASSIGN(H264VideoToolboxEncoder);
|
| };
|
|
|
| +// An implementation of SizeAdaptableVideoEncoderBase to proxy for
|
| +// H264VideoToolboxEncoder instances.
|
| +class SizeAdaptableH264VideoToolboxVideoEncoder
|
| + : public SizeAdaptableVideoEncoderBase {
|
| + public:
|
| + SizeAdaptableH264VideoToolboxVideoEncoder(
|
| + const scoped_refptr<CastEnvironment>& cast_environment,
|
| + const VideoSenderConfig& video_config,
|
| + const StatusChangeCallback& status_change_cb);
|
| +
|
| + ~SizeAdaptableH264VideoToolboxVideoEncoder() override;
|
| +
|
| + scoped_ptr<VideoFrameFactory> CreateVideoFrameFactory() override;
|
| +
|
| + protected:
|
| + scoped_ptr<VideoEncoder> CreateReplacementEncoder() override;
|
| + void OnEncoderReplaced(VideoEncoder* replacement_encoder) override;
|
| + void DestroyCurrentEncoder() override;
|
| +
|
| + private:
|
| + struct FactoryHolder;
|
| + const scoped_refptr<FactoryHolder> holder_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SizeAdaptableH264VideoToolboxVideoEncoder);
|
| +};
|
| +
|
| } // namespace cast
|
| } // namespace media
|
|
|
|
|