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 CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_CONTROLLER_EVENT_HANDLER_H_
6#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_CONTROLLER_EVENT_HANDLER_H_
7
8#include "base/memory/shared_memory.h"
9#include "base/time/time.h"
10#include "content/common/content_export.h"
11
12namespace gfx {
13class Rect;
14}  // namespace gfx
15
16namespace gpu {
17struct MailboxHolder;
18}  // namespace gpu
19
20namespace media {
21class VideoCaptureFormat;
22}  // namespace media
23
24namespace content {
25
26// ID used for identifying an object of VideoCaptureController.
27struct CONTENT_EXPORT VideoCaptureControllerID {
28  explicit VideoCaptureControllerID(int device_id);
29
30  bool operator<(const VideoCaptureControllerID& vc) const;
31  bool operator==(const VideoCaptureControllerID& vc) const;
32
33  int device_id;
34};
35
36// VideoCaptureControllerEventHandler is the interface for
37// VideoCaptureController to notify clients about the events such as
38// BufferReady, FrameInfo, Error, etc.
39class CONTENT_EXPORT VideoCaptureControllerEventHandler {
40 public:
41  // An Error has occurred in the VideoCaptureDevice.
42  virtual void OnError(const VideoCaptureControllerID& id) = 0;
43
44  // A buffer has been newly created.
45  virtual void OnBufferCreated(const VideoCaptureControllerID& id,
46                               base::SharedMemoryHandle handle,
47                               int length,
48                               int buffer_id) = 0;
49
50  // A previously created buffer has been freed and will no longer be used.
51  virtual void OnBufferDestroyed(const VideoCaptureControllerID& id,
52                                 int buffer_id) = 0;
53
54  // A buffer has been filled with I420 video.
55  virtual void OnBufferReady(const VideoCaptureControllerID& id,
56                             int buffer_id,
57                             const media::VideoCaptureFormat& format,
58                             const gfx::Rect& visible_rect,
59                             base::TimeTicks timestamp) = 0;
60
61  // A texture mailbox buffer has been filled with data.
62  virtual void OnMailboxBufferReady(const VideoCaptureControllerID& id,
63                                    int buffer_id,
64                                    const gpu::MailboxHolder& mailbox_holder,
65                                    const media::VideoCaptureFormat& format,
66                                    base::TimeTicks timestamp) = 0;
67
68  // The capture session has ended and no more frames will be sent.
69  virtual void OnEnded(const VideoCaptureControllerID& id) = 0;
70
71 protected:
72  virtual ~VideoCaptureControllerEventHandler() {}
73};
74
75}  // namespace content
76
77#endif  // CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_CONTROLLER_EVENT_HANDLER_H_
78