Home | History | Annotate | Download | only in codec
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef REMOTING_CODEC_VIDEO_ENCODER_H_
      6 #define REMOTING_CODEC_VIDEO_ENCODER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/callback.h"
     10 
     11 class SkRegion;
     12 
     13 namespace webrtc {
     14 class DesktopFrame;
     15 }  // namespace webrtc
     16 
     17 namespace remoting {
     18 
     19 class VideoPacket;
     20 
     21 // A class to perform the task of encoding a continuous stream of images. The
     22 // interface is asynchronous to enable maximum throughput.
     23 class VideoEncoder {
     24  public:
     25 
     26   // DataAvailableCallback is called one or more times, for each chunk the
     27   // underlying video encoder generates.
     28   typedef base::Callback<void(scoped_ptr<VideoPacket>)> DataAvailableCallback;
     29 
     30   virtual ~VideoEncoder() {}
     31 
     32   // Encode an image stored in |frame|. Doesn't take ownership of |frame|. When
     33   // encoded data is available, partial or full |data_available_callback| is
     34   // called.
     35   virtual void Encode(const webrtc::DesktopFrame* frame,
     36                       const DataAvailableCallback& data_available_callback) = 0;
     37 };
     38 
     39 }  // namespace remoting
     40 
     41 #endif  // REMOTING_CODEC_VIDEO_ENCODER_H_
     42