summaryrefslogtreecommitdiffstats
path: root/media/video/encoded_video_source.h
blob: e2ce201deff7dead975f3af8239abc5a9bb9ffe3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Copyright 2013 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 MEDIA_VIDEO_ENCODED_VIDEO_SOURCE_H_
#define MEDIA_VIDEO_ENCODED_VIDEO_SOURCE_H_

#include "base/memory/ref_counted.h"
#include "media/base/encoded_bitstream_buffer.h"
#include "media/video/video_encode_types.h"

namespace media {

// Class to represent any encoded video source. Anything that provides encoded
// video can be an EncodedVideoSource. Notable examples of this can be video
// encoder and webcam that has encoding capabilities.
// TODO(hshi): merge this with VEA interface. http://crbug.com/248334.
class EncodedVideoSource {
 public:
  class Client {
   public:
    // Notifies client that bitstream is opened successfully. The |params|
    // contains the actual encoding parameters chosen by the browser process.
    // It may be different from the params requested in OpenBitstream().
    virtual void OnOpened(const VideoEncodingParameters& params) = 0;

    // Notifies client that bitstream is closed. After this call it is
    // guaranteed that client will not receive further calls.
    virtual void OnClosed() = 0;

    // Delivers an encoded bitstream buffer to the client.
    virtual void OnBufferReady(
        scoped_refptr<const EncodedBitstreamBuffer> buffer) = 0;

    // Notifies client that encoding parameters has changed. The |params|
    // contains the current encoding parameters chosen by the browser process.
    // It may be different from the params requested in TrySetBitstreamConfig().
    virtual void OnConfigChanged(
        const RuntimeVideoEncodingParameters& params) = 0;
  };

  // Callback is invoked once RequestCapabilities() is complete.
  typedef base::Callback<void(const VideoEncodingCapabilities& capabilities)>
      RequestCapabilitiesCallback;

  // RequestCapabilities initiates an asynchronous query for the types of
  // encoded bitstream supported by the encoder. This call should be invoked
  // only once. EncodedVideoSource will invoke |callback| when capabilities
  // become available.
  virtual void RequestCapabilities(
      const RequestCapabilitiesCallback& callback) = 0;

  // OpenBitstream opens the bitstream on the encoded video source. Only one
  // bitstream can be opened for an encoded video source.
  virtual void OpenBitstream(Client* client,
                             const VideoEncodingParameters& params) = 0;

  // CloseBitstream closes the bitstream.
  virtual void CloseBitstream() = 0;

  // ReturnBitstreamBuffer notifies that the data within the buffer has been
  // processed and it can be reused to encode upcoming bitstream.
  virtual void ReturnBitstreamBuffer(
      scoped_refptr<const media::EncodedBitstreamBuffer> buffer) = 0;

  // TrySetBitstreamConfig requests to change encoding parameters. Old config
  // must be considered valid until OnConfigChanged is invoked on the client
  // signaling successful change.
  virtual void TrySetBitstreamConfig(
      const RuntimeVideoEncodingParameters& params) = 0;
};

}  // namespace media

#endif  // MEDIA_VIDEO_ENCODED_VIDEO_SOURCE_H_