#ifndef MEDIA_CAST_ENCODING_VIDEO_ENCODER_IMPL_H_
#define MEDIA_CAST_ENCODING_VIDEO_ENCODER_IMPL_H_
#include <memory>
#include "media/cast/cast_config.h"
#include "media/cast/cast_environment.h"
#include "media/cast/encoding/software_video_encoder.h"
#include "media/cast/encoding/video_encoder.h"
namespace media {
class VideoEncoderMetricsProvider;
class VideoFrame;
namespace cast {
class VideoEncoderImpl final : public VideoEncoder {
public:
struct CodecDynamicConfig {
bool key_frame_requested;
int bit_rate;
};
static bool IsSupported(const FrameSenderConfig& video_config);
VideoEncoderImpl(
scoped_refptr<CastEnvironment> cast_environment,
const FrameSenderConfig& video_config,
std::unique_ptr<VideoEncoderMetricsProvider> metrics_provider,
StatusChangeCallback status_change_cb);
VideoEncoderImpl(const VideoEncoderImpl&) = delete;
VideoEncoderImpl& operator=(const VideoEncoderImpl&) = delete;
~VideoEncoderImpl() final;
bool EncodeVideoFrame(scoped_refptr<media::VideoFrame> video_frame,
base::TimeTicks reference_time,
FrameEncodedCallback frame_encoded_callback) final;
void SetBitRate(int new_bit_rate) final;
void GenerateKeyFrame() final;
private:
scoped_refptr<CastEnvironment> cast_environment_;
CodecDynamicConfig dynamic_config_;
std::unique_ptr<SoftwareVideoEncoder> encoder_;
};
}
}
#endif