Libargus API Libargus Camera API

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Event.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of NVIDIA CORPORATION nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 /**
30 * @file
31 * <b>Libargus API: Event API</b>
32 *
33 * @b Description: Defines the Event objects and interfaces.
34 */
35
36 #ifndef _ARGUS_EVENT_H
37 #define _ARGUS_EVENT_H
38
39 namespace Argus
40 {
41
42 /**
43 * Container representing a single event.
44 *
45 * Every Event will have a single EventType and will expose one or more
46 * interfaces, with the core IEvent interface being mandatory.
47 *
48 * @defgroup ArgusEvent Event
49 * @ingroup ArgusObjects
50 */
51 class Event : public InterfaceProvider
52 {
53 protected:
54 ~Event() {}
55 };
56
57 /**
58 * A unique identifier for a particular type of Event.
59 *
60 * @ingroup ArgusEvent
61 */
62 class EventType : public NamedUUID
63 {
64 public:
65 EventType(uint32_t time_low_
66 , uint16_t time_mid_
67 , uint16_t time_hi_and_version_
68 , uint16_t clock_seq_
69 , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5
70 , const char* name)
71 : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_,
72 c0, c1, c2, c3, c4, c5, name)
73 {}
74
75 EventType()
76 : NamedUUID(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "EVENT_TYPE_UNSPECIFIED")
77 {}
78 };
79
80
81 /*
82 * Core Event types
83 */
84
85 /**
86 * Event type used to report an error.
87 *
88 * @defgroup ArgusEventError Error Event
89 * @ingroup ArgusEvent
90 */
91 DEFINE_UUID(EventType, EVENT_TYPE_ERROR, 2c80d8b0,2bfd,11e5,a2cb,08,00,20,0c,9a,66);
92
93 /**
94 * Event type used to report when a capture starts.
95 *
96 * @defgroup ArgusEventCaptureStarted CaptureStarted Event
97 * @ingroup ArgusEvent
98 */
99 DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1,2bfd,11e5,a2cb,08,00,20,0c,9a,66);
100
101 /**
102 * Event type used to report when all capture processing has completed.
103 *
104 * @defgroup ArgusEventCaptureComplete CaptureComplete Event
105 * @ingroup ArgusEvent
106 */
107 DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2,2bfd,11e5,a2cb,08,00,20,0c,9a,66);
108
109
110 /**
111 * @class IEvent
112 *
113 * Interface to the common Event properties.
114 *
115 * @ingroup ArgusEvent
116 */
117 DEFINE_UUID(InterfaceID, IID_EVENT, 98bcb49e,fd7d,11e4,a322,16,97,f9,25,ec,7b);
118 class IEvent : public Interface
119 {
120 public:
121 static const InterfaceID& id() { return IID_EVENT; }
122
123 /**
124 * Returns the event type.
125 */
126 virtual EventType getEventType() const = 0;
127
128 /**
129 * Returns the time of the event, in nanoseconds.
130 */
131 virtual uint64_t getTime() const = 0;
132
133 /**
134 * Returns the capture id for the event.
135 */
136 virtual uint32_t getCaptureId() const = 0;
137
138 protected:
139 ~IEvent() {}
140 };
141
142 /**
143 * @class IEventError
144 *
145 * Interface exposed by Events having type EVENT_TYPE_ERROR.
146 *
147 * @ingroup ArgusEventError
148 */
149 DEFINE_UUID(InterfaceID, IID_EVENT_ERROR, 13e0fc70,1ab6,11e5,b939,08,00,20,0c,9a,66);
150 class IEventError : public Interface
151 {
152 public:
153 static const InterfaceID& id() { return IID_EVENT_ERROR; }
154
155 /**
156 * Returns the Status value describing the error.
157 */
158 virtual Status getStatus() const = 0;
159
160 protected:
161 ~IEventError() {}
162 };
163
164 /**
165 * @class IEventCaptureComplete
166 *
167 * Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE
168 *
169 * @ingroup ArgusEventCaptureComplete
170 */
171 DEFINE_UUID(InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5,f1e4,4c4d,ae1c,f3,93,f6,54,06,d5);
172 class IEventCaptureComplete : public Interface
173 {
174 public:
175 static const InterfaceID& id() { return IID_EVENT_CAPTURE_COMPLETE; }
176
177 /**
178 * Returns all dynamic metadata associated with this capture.
179 * The lifetime of the returned pointer is equivalent to the lifetime of this event.
180 * NULL may be returned if no metadata is available because the
181 * capture failed or was aborted.
182 */
183 virtual const CaptureMetadata* getMetadata() const = 0;
184
185 /**
186 * Returns the error status of the metadata event.
187 * If this value is not STATUS_OK, getMetadata() will return NULL.
188 */
189 virtual Status getStatus() const = 0;
190
191 protected:
192 ~IEventCaptureComplete() {}
193 };
194
195 } // namespace Argus
196
197 #endif // _ARGUS_EVENT_H