blob: 61318e33e3ca3a2084da00d9a69c22961d4d6ed2 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_CODEC_VIDEO_ENCODER_H_
#define REMOTING_CODEC_VIDEO_ENCODER_H_
#include <stdint.h>
#include <memory>
namespace webrtc {
class DesktopFrame;
} // namespace webrtc
namespace remoting {
namespace protocol {
class SessionConfig;
} // namespace protocol
class VideoPacket;
// A class to perform the task of encoding a continuous stream of images. The
// interface is asynchronous to enable maximum throughput.
class VideoEncoder {
public:
virtual ~VideoEncoder() {}
// Request that the encoder provide lossless encoding, or color, if possible.
virtual void SetLosslessEncode(bool want_lossless) {}
virtual void SetLosslessColor(bool want_lossless) {}
// Encode an image stored in |frame|. If |frame.updated_region()| is empty
// then the encoder may return a packet (e.g. to top-off previously-encoded
// portions of the frame to higher quality) or return nullptr to indicate that
// there is no work to do.
virtual std::unique_ptr<VideoPacket> Encode(
const webrtc::DesktopFrame& frame) = 0;
static std::unique_ptr<VideoEncoder> Create(
const protocol::SessionConfig& config);
};
} // namespace remoting
#endif // REMOTING_CODEC_VIDEO_ENCODER_H_