15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef REMOTING_CODEC_VIDEO_ENCODER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REMOTING_CODEC_VIDEO_ENCODER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace webrtc {
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class DesktopFrame;
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace webrtc
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VideoPacket;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// A class to perform the task of encoding a continuous stream of images. The
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// interface is asynchronous to enable maximum throughput.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VideoEncoder {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VideoEncoder() {}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Request that the encoder provide lossless encoding, or color, if possible.
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetLosslessEncode(bool want_lossless) {}
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetLosslessColor(bool want_lossless) {}
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Encode an image stored in |frame|.
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual scoped_ptr<VideoPacket> Encode(const webrtc::DesktopFrame& frame) = 0;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace remoting
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // REMOTING_CODEC_VIDEO_ENCODER_H_
35