#ifndef REMOTING_CODEC_WEBRTC_VIDEO_ENCODER_GPU_H_
#define REMOTING_CODEC_WEBRTC_VIDEO_ENCODER_GPU_H_
#include "base/memory/scoped_refptr.h"
#include "media/base/video_codecs.h"
#include "remoting/codec/webrtc_video_encoder.h"
#include "ui/gfx/geometry/size.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace remoting {
class WebrtcVideoEncoderGpu : public WebrtcVideoEncoder {
public:
struct Profile {
gfx::Size resolution;
int frame_rate;
};
static std::unique_ptr<WebrtcVideoEncoder> CreateForH264();
static bool IsSupportedByH264(const Profile& profile);
~WebrtcVideoEncoderGpu() override;
WebrtcVideoEncoderGpu(const WebrtcVideoEncoderGpu&) = delete;
WebrtcVideoEncoderGpu& operator=(const WebrtcVideoEncoderGpu&) = delete;
void Encode(std::unique_ptr<webrtc::DesktopFrame> frame,
const FrameParams& params,
WebrtcVideoEncoder::EncodeCallback done) override;
private:
class Core;
std::unique_ptr<Core> core_;
explicit WebrtcVideoEncoderGpu(media::VideoCodecProfile codec_profile);
scoped_refptr<base::SingleThreadTaskRunner> hw_encode_task_runner_;
};
}
#endif