ADTF
Loading...
Searching...
No Matches
filtergraphport.h
Go to the documentation of this file.
1
7#pragma once
8
9#include "triggerpipe.h"
10#include "runner_intf.h"
11#include "pin_intf.h"
12#include "inpin_intf.h"
13#include "outpin_intf.h"
16
18
19#include <memory>
20
21namespace adtf
22{
23namespace streaming
24{
25namespace ant
26{
27namespace detail
28{
32template<typename T, typename U = T>
34{
38 std::vector<adtf::ucom::object_ptr<U>> m_oTos;
39
41 port_router() = default;
44 {
45 RemoveTos();
46 }
47
53 {
54 if (m_pFrom.Get() == pFrom.Get())
55 {
56 // we do nothing ... already routing
57 // or nullptr == nullptr
58 }
59 else
60 {
61 if (m_pFrom)
62 {
63 if (pFrom.Get())
64 {
65 RETURN_ERROR_DESC(ERR_DEVICE_IN_USE,
66 "This port is already connected to a sample stream / binding proxy.");
67 }
68
69 for (const auto& pTo : m_oTos)
70 {
72 }
73 }
74 m_pFrom = pFrom;
75 if (m_pFrom)
76 {
77 for (const auto& pTo : m_oTos)
78 {
79 RETURN_IF_FAILED(ConnectRouting(m_pFrom, pTo));
80 }
81 }
82 }
84 }
85
92 {
93 if (std::find(m_oTos.begin(), m_oTos.end(), pTo) != m_oTos.end())
94 {
95 // we do nothing ... already forwarding
96 // or nullptr == nullptr
97 }
98 else
99 {
100 if (pTo.Get())
101 {
102 if (m_pFrom)
103 {
104 RETURN_IF_FAILED(ConnectRouting(m_pFrom, pTo));
105 }
106
107 m_oTos.push_back(pTo);
108 }
109 }
111 }
112
113 void RemoveTos()
114 {
115 for (const auto& pTo : m_oTos)
116 {
118 }
119
120 m_oTos.clear();
121 }
122
130 {
131 if (pFrom.Get() != nullptr && pTo.Get() != nullptr)
132 {
133 LOG_DETAIL("Attach routing '%s' -> '%s'", get_named_graph_object_full_name(*pFrom.Get()).GetPtr(),
134 get_named_graph_object_full_name(*pTo.Get()).GetPtr());
135 return pFrom->AttachRouting(pTo);
136 }
137 else
138 {
140 }
141 }
142
149 {
150 if (pFrom.Get() != nullptr && pTo.Get() != nullptr)
151 {
152 return pFrom->DetachRouting(pTo);
153 }
154 else
155 {
157 }
158 }
159};
160} // namespace detail
161
167 public trigger_pipe_item<INamedGraphObject,
168 IPin,
169 IInPin,
170 IFilterGraphPort,
171 IFilterGraphDataPort,
172 IFilterGraphDataInPort>
173{
174private:
176 std::atomic_bool m_bActive;
177
178public:
183 cFilterGraphDataInPort(const char* strName);
185 virtual ~cFilterGraphDataInPort() override;
186
187public:
188 tResult InnerConnect(const adtf::ucom::ant::iobject_ptr<ISampleStream>& pSampleStream) override;
189 tResult InnerDisconnect() override;
190
191public:
192 tResult GetType(adtf::ucom::ant::iobject_ptr<const IStreamType>& pStreamType) const override;
193
194 bool IsConnected() const override;
195 tResult SetActive() override;
196 tResult SetInactive() override;
197
198 tResult Disconnect() override;
199 tResult GetSampleStream(adtf::ucom::ant::iobject_ptr<ISampleStream>& pSampleStream) const override;
200
201public:
202 tResult Connect(const adtf::ucom::ant::iobject_ptr<ISampleStream>& pSampleStream) override;
203};
204
210 public trigger_pipe_item<INamedGraphObject,
211 IPin,
212 IOutPin,
213 IFilterGraphPort,
214 IFilterGraphDataPort,
215 IFilterGraphDataOutPort>
216{
217public:
218 template<typename T>
219 using iobject_ptr = adtf::ucom::ant::iobject_ptr<T>;
220
221private:
223 std::atomic_bool m_bActive;
224
225public:
230 cFilterGraphDataOutPort(const char* strName);
232 virtual ~cFilterGraphDataOutPort() override;
233
234public:
235 tResult InnerConnect(const iobject_ptr<ISampleStream>& pSampleStream);
236 tResult InnerDisconnect();
237
238public:
239 tResult Connect(const iobject_ptr<ISampleStream>& pSampleStream) override;
240
241public:
242 tResult GetType(iobject_ptr<const IStreamType>& pStreamType) const override;
243
244 bool IsConnected() const override;
245 tResult SetActive() override;
246 tResult SetInactive() override;
247
248 tResult Disconnect() override;
249 tResult GetSampleStream(iobject_ptr<ISampleStream>& pSampleStream) const override;
250};
251
257 public ucom::catwo::object<IBindingObject,
258 IBindingServer,
259 IFilterGraphPort,
260 IFilterGraphInterfacePort,
261 named_graph_object<IFilterGraphInterfaceServerPort>>
262{
263public:
265 template<typename T>
267
268private:
270
271public:
276 cFilterGraphServerPort(const char* strName);
278 virtual ~cFilterGraphServerPort() override;
279
280public:
281 tResult InnerBind(const iobject_ptr<IBindingProxy>& pSampleStream);
282 tResult InnerUnbind();
283
284public:
285 tResult Bind(const iobject_ptr<IBindingProxy>& pBindingProxy);
286
287public:
288 tResult GetBindingType(iobject_ptr<const IBindingType>& pBindingType) const;
289 tResult GetServerObject(iobject_ptr<IObject>& pServerObject) const;
290 tResult GetBindingProxy(iobject_ptr<IBindingProxy>& pBindingProxy) const;
291 tResult Unbind();
292};
293
299 public ucom::catwo::object<IBindingObject,
300 IBindingClient,
301 IFilterGraphPort,
302 IFilterGraphInterfacePort,
303 named_graph_object<IFilterGraphInterfaceClientPort>>
304{
305public:
307 template<typename T>
309
310private:
313
314public:
319 cFilterGraphClientPort(const char* strName);
321 virtual ~cFilterGraphClientPort() override;
322
323public:
324 tResult InnerBind(const iobject_ptr<IBindingClient>& pClientForward) override;
325 tResult InnerUnbind() override;
326
327public:
328 tResult Bind(const iobject_ptr<IBindingProxy>& pBindingProxy) override;
329
330public:
331 tResult GetBindingType(iobject_ptr<const IBindingType>& pBindingType) const override;
332 tResult GetServerObject(iobject_ptr<IObject>& pServerObject) const override;
333 tResult GetBindingProxy(iobject_ptr<IBindingProxy>& pBindingProxy) const override;
334 tResult Unbind() override;
335};
336
342 public trigger_pipe_item<INamedGraphObject, IFilterGraphPort, IRunner, IFilterGraphRunnerPort>
343{
344public:
346 template<typename T>
348
349public:
354 cFilterGraphRunnerPort(const char* strName);
356 virtual ~cFilterGraphRunnerPort() override;
357
358public:
359 tResult InnerRegisterSubItem(const iobject_ptr<IRunner>& pRunner) override;
360 tResult InnerUnregisterSubItem(const iobject_ptr<IRunner>& pRunner) override;
361};
362
363} // namespace ant
364
365namespace flash
366{
367
369
370class cFilterGraphDataInPort :
371 public trigger_pipe_item<INamedGraphObject,
372 IPin,
373 IInPin,
374 IFilterGraphPort,
375 IFilterGraphDataPort,
376 IFilterGraphDataInPort>
377{
378public:
379 cFilterGraphDataInPort();
380 cFilterGraphDataInPort(const char* strName);
381 ~cFilterGraphDataInPort() override;
382
383public:
384 tResult InnerConnect(const ucom::ant::iobject_ptr<ant::ISampleStream>& pSampleStream) override;
385 tResult InnerDisconnect() override;
386
387public:
388 tResult GetType(ucom::ant::iobject_ptr<const ant::IStreamType>& pStreamType) const override;
389
390 bool IsConnected() const override;
391 tResult SetActive() override;
392 tResult SetInactive() override;
393
394 tResult Disconnect() override;
395 tResult GetSampleStream(ucom::ant::iobject_ptr<ant::ISampleStream>& pSampleStream) const override;
396
397public:
398 tResult Connect(const ucom::ant::iobject_ptr<ant::ISampleStream>& pSampleStream) override;
399
400protected:
401 class cImplementation;
402 std::unique_ptr<cImplementation> m_pImplementation;
403};
404
405class cFilterGraphDataOutPort :
406 public trigger_pipe_item<INamedGraphObject,
407 IPin,
408 IOutPin,
409 IFilterGraphPort,
410 IFilterGraphDataPort,
411 IFilterGraphDataOutPort>
412{
413public:
414 cFilterGraphDataOutPort();
415 cFilterGraphDataOutPort(const char* strName);
416 ~cFilterGraphDataOutPort() override;
417
418public:
419 tResult InnerConnect(const ucom::ant::iobject_ptr<ant::ISampleStream>& pSampleStream) override;
420 tResult InnerDisconnect() override;
421
422public:
423 tResult GetType(ucom::ant::iobject_ptr<const ant::IStreamType>& pStreamType) const override;
424
425 bool IsConnected() const override;
426 tResult SetActive() override;
427 tResult SetInactive() override;
428
429 tResult Disconnect() override;
430 tResult GetSampleStream(ucom::ant::iobject_ptr<ant::ISampleStream>& pSampleStream) const override;
431
432public:
433 tResult Connect(const ucom::ant::iobject_ptr<ant::ISampleStream>& pSampleStream) override;
434
435protected:
436 class cImplementation;
437 std::unique_ptr<cImplementation> m_pImplementation;
438};
439
440} // namespace flash
441
442namespace hollow
443{
444
451 public ucom::catwo::object<IBindingObject,
452 IBindingClient,
453 IFilterGraphPort,
454 IFilterGraphInterfacePort,
455 named_graph_object<IFilterGraphInterfaceClientPort>>
456{
457public:
462 cFilterGraphClientPort(const char* strName);
464 virtual ~cFilterGraphClientPort() override;
465
466public:
467 tResult InnerBind(const ucom::ant::iobject_ptr<IBindingClient>& pClientForward) override;
468 tResult InnerUnbind() override;
469
470public:
471 tResult Bind(const ucom::ant::iobject_ptr<IBindingProxy>& pBindingProxy) override;
472
473public:
474 tResult GetBindingType(ucom::ant::iobject_ptr<const IBindingType>& pBindingType) const override;
475 tResult GetServerObject(ucom::ant::iobject_ptr<IObject>& pServerObject) const override;
476 tResult GetBindingProxy(ucom::ant::iobject_ptr<IBindingProxy>& pBindingProxy) const override;
477 tResult Unbind() override;
478
479protected:
480 class cImplementation;
481 std::unique_ptr<cImplementation> m_pImplementation;
482};
483
484} // namespace hollow
485
486namespace quiet
487{
488
493
498
503
504} // namespace quiet
505
516} // namespace streaming
517} // namespace adtf
#define LOG_DETAIL(...)
Logs additional information.
Definition log.h:386
A_UTILS_NS::cResult tResult
For backwards compatibility and to bring latest version into scope.
Definition result.h:736
#define RETURN_ERROR_DESC(_code,...)
Same as RETURN_ERROR(_error) using a printf like parameter list for detailed error description.
Definition result.h:44
#define RETURN_NOERROR
Return status ERR_NOERROR, which requires the calling function's return type to be tResult.
Definition result.h:29
adtf::ucom::ant::iobject_ptr< T > iobject_ptr
used type for iobject_ptr
Definition filtergraphport.h:308
virtual ~cFilterGraphClientPort() override
DTOR.
virtual ~cFilterGraphDataInPort() override
DTOR.
virtual ~cFilterGraphDataOutPort() override
DTOR.
Definition filtergraphport.h:343
virtual ~cFilterGraphRunnerPort() override
DTOR.
adtf::ucom::ant::iobject_ptr< T > iobject_ptr
used type for iobject_ptr
Definition filtergraphport.h:347
Definition filtergraphport.h:262
adtf::ucom::ant::iobject_ptr< T > iobject_ptr
used type for iobject_ptr
Definition filtergraphport.h:266
virtual ~cFilterGraphServerPort() override
DTOR.
Definition filtergraphport.h:377
Definition filtergraphport.h:412
Definition filtergraphport.h:456
virtual T * Get() const =0
Get raw pointer to shared object.
Base object pointer to realize binary compatible reference counting in interface methods.
Definition object_ptr_intf.h:112
Definition object_ptr.h:384
Definition object.h:397
Namespace for all internally used functionality implemented.
Definition filtergraphport.h:28
Namespace for all functionality of the ADTF Streaming SDK provided since v3.0.
Definition bindingproxyoutport.h:16
adtf_util::cString get_named_graph_object_full_name(const INamedGraphObject &oGraphObject)
Namespace for all functionality of the ADTF Streaming SDK provided since v3.5.
Definition filterbase.h:255
Namespace for all functionality of the ADTF Streaming SDK provided since v3.7.
Definition filtergraphport.h:443
Namespace for all functionality of the ADTF Streaming SDK provided since v3.16.
Definition filtergraphport.h:487
Namespace for the ADTF Streaming SDK.
Definition bindingproxyinport.h:14
Namespace for all functionality provided by ADTF and its SDKs.
Definition adtf_client_connector.h:14
Definition filtergraphport.h:34
tResult ResetFrom(const adtf::ucom::ant::iobject_ptr< T > &pFrom)
Definition filtergraphport.h:52
tResult AddTo(const adtf::ucom::ant::iobject_ptr< U > &pTo)
Definition filtergraphport.h:91
tResult DisconnectRouting(const adtf::ucom::ant::iobject_ptr< T > &pFrom, const adtf::ucom::ant::iobject_ptr< U > &pTo)
Definition filtergraphport.h:148
~port_router()
DTOR.
Definition filtergraphport.h:43
tResult ConnectRouting(const adtf::ucom::ant::iobject_ptr< T > &pFrom, const adtf::ucom::ant::iobject_ptr< U > &pTo)
Definition filtergraphport.h:129
std::vector< adtf::ucom::object_ptr< U > > m_oTos
the to reference.
Definition filtergraphport.h:38
adtf::ucom::object_ptr< T > m_pFrom
the from reference.
Definition filtergraphport.h:36