video_encoder.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class SkRegion;
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace webrtc {
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class DesktopFrame;
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace webrtc
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VideoPacket;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// A class to perform the task of encoding a continuous stream of images. The
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// interface is asynchronous to enable maximum throughput.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VideoEncoder {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DataAvailableCallback is called one or more times, for each chunk the
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // underlying video encoder generates.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::Callback<void(scoped_ptr<VideoPacket>)> DataAvailableCallback;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VideoEncoder() {}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Encode an image stored in |frame|. Doesn't take ownership of |frame|. When
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // encoded data is available, partial or full |data_available_callback| is
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // called.
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void Encode(const webrtc::DesktopFrame* frame,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const DataAvailableCallback& data_available_callback) = 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace remoting
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // REMOTING_CODEC_VIDEO_ENCODER_H_
42