31 std::recursive_mutex m_oQueueMutex;
32 std::deque<cStreamItem> m_oItems;
38 ~cExternalSampleReaderQueue();
40 tResult GetSampleBeforeOrAt(tTimeStamp tmTime,
65 std::vector<cLastSampleReader*> m_oSampleReaders;
76 m_oSampleReaders.push_back(&oSampleReader);
88 template<
typename ... T>
91 constexpr size_t nSize =
sizeof...(T);
92 if (m_oSampleReaders.size() > nSize)
94 RETURN_IF_FAILED(m_oSampleReaders[m_oSampleReaders.size() - nSize - 1]->GetLastSample(pSample));
122class cSampleSetCollector
128 tStreamTypeChangeCallback m_pTypeChangeCallback;
132 std::shared_ptr<detail::cExternalSampleReaderQueue> pSampleQueue;
138 std::vector<tQueue> m_oQueues;
141 cSampleSetCollector() =
default;
150 cSampleSetCollector(
const cSampleSetCollector&) =
delete;
151 cSampleSetCollector(cSampleSetCollector&&) =
default;
153 cSampleSetCollector& operator=(
const cSampleSetCollector&) =
delete;
154 cSampleSetCollector& operator=(cSampleSetCollector&&) =
default;
178 template<
typename ...T>
181 if (m_oQueues.size() <= 0)
186 constexpr size_t nSize =
sizeof...(T);
187 if (m_oQueues.size() < nSize)
192 RETURN_IF_FAILED(RetrieveSamples());
194 return GetSamples(samples...);
200 template<
typename ... T>
203 constexpr size_t nSize =
sizeof...(T);
205 RETURN_IF_FAILED(pSample.
Reset(m_oQueues[m_oQueues.size() - nSize - 1].pFirstSample));
207 return GetSamples(samples...);
229class cTimeBasedSampleSetCollector
235 std::vector<std::shared_ptr<detail::cExternalSampleReaderQueue>> m_oQueues;
236 tStreamTypeChangeCallback m_pTypeChangeCallback;
239 cTimeBasedSampleSetCollector() =
default;
248 cTimeBasedSampleSetCollector(
const cTimeBasedSampleSetCollector&) =
delete;
249 cTimeBasedSampleSetCollector(cTimeBasedSampleSetCollector&&) =
default;
251 cTimeBasedSampleSetCollector& operator=(
const cTimeBasedSampleSetCollector&) =
delete;
252 cTimeBasedSampleSetCollector& operator=(cTimeBasedSampleSetCollector&&) =
default;
277 template<
typename ... T>
280 constexpr size_t nSize =
sizeof...(T);
282 if (m_oQueues.size() < nSize)
287 bool bSampleFound =
false;
288 RETURN_IF_FAILED(GetSampleSetWithCheckAt(tmTime, bSampleFound, samples...));
299 template<
typename ... T>
302 constexpr size_t nSize =
sizeof...(T);
304 auto& pQueue = m_oQueues[m_oQueues.size() - nSize - 1];
306 bSampleFound |=
IS_OK(pQueue->GetSampleBeforeOrAt(tmTime, pSample, pNewStreamType));
308 if (pNewStreamType && m_pTypeChangeCallback)
310 RETURN_IF_FAILED(m_pTypeChangeCallback(pQueue->GetReader(), pNewStreamType));
313 return GetSampleSetWithCheckAt(tmTime, bSampleFound, samples...);
316 tResult GetSampleSetWithCheckAt(tTimeStamp ,
bool& )
335 virtual ~cExternalSampleReaderQueue();
337 tResult GetSampleBeforeOrAt(tTimeStamp tmTime,
354 std::recursive_mutex m_oQueueMutex;
355 std::deque<cStreamItem> m_oItems;
366template<
typename Ret,
typename Class,
typename... Args>
369 using type = std::function<Ret(Args...)>;
374function_from_lambda(F
const &func)
379template <
typename ReaderType>
385 auto pReader =
dynamic_cast<ReaderType*
>(&oReader);
390 return fnCallback(*pReader, pStreamType);
394template <
typename Callable>
396get_type_change_callback_translator(Callable&& fnCallback)
398 return get_type_change_callback_translator(function_from_lambda(fnCallback));
406 std::vector<ISampleReader*> m_oSampleReaders;
417 m_oSampleReaders.push_back(&oSampleReader);
429 template<
typename ... T>
432 constexpr size_t nSize =
sizeof...(T);
433 if (m_oSampleReaders.size() > nSize)
435 RETURN_IF_FAILED(m_oSampleReaders[m_oSampleReaders.size() - nSize - 1]->GetLastSample(pSample));
450class cSampleSetCollector
456 cSampleSetCollector() =
default;
458 template <
typename Callback>
459 cSampleSetCollector(Callback pTypeChangeCallback):
460 cSampleSetCollector()
462 m_pTypeChangeCallback = detail::get_type_change_callback_translator(pTypeChangeCallback);
465 cSampleSetCollector(
const cSampleSetCollector&) =
delete;
466 cSampleSetCollector(cSampleSetCollector&&) =
default;
468 cSampleSetCollector& operator=(
const cSampleSetCollector&) =
delete;
469 cSampleSetCollector& operator=(cSampleSetCollector&&) =
default;
474 template<
typename ...T>
475 tResult GetNextSampleSet(T& ...samples)
477 if (m_oQueues.size() <= 0)
482 constexpr size_t nSize =
sizeof...(T);
483 if (m_oQueues.size() < nSize)
488 RETURN_IF_FAILED(RetrieveSamples());
490 return GetSamples(samples...);
496 template<
typename ... T>
499 constexpr size_t nSize =
sizeof...(T);
501 RETURN_IF_FAILED(pSample.
Reset(m_oQueues[m_oQueues.size() - nSize - 1].pFirstSample));
503 return GetSamples(samples...);
512 tStreamTypeChangeCallback m_pTypeChangeCallback;
516 std::shared_ptr<detail::cExternalSampleReaderQueue> pSampleQueue;
522 std::vector<tQueue> m_oQueues;
525class cTimeBasedSampleSetCollector
531 cTimeBasedSampleSetCollector() =
default;
533 template <
typename Callback>
534 cTimeBasedSampleSetCollector(Callback pTypeChangeCallback):
535 cTimeBasedSampleSetCollector()
537 m_pTypeChangeCallback = detail::get_type_change_callback_translator(pTypeChangeCallback);
540 cTimeBasedSampleSetCollector(
const cTimeBasedSampleSetCollector&) =
delete;
541 cTimeBasedSampleSetCollector(cTimeBasedSampleSetCollector&&) =
default;
543 cTimeBasedSampleSetCollector& operator=(
const cTimeBasedSampleSetCollector&) =
delete;
544 cTimeBasedSampleSetCollector& operator=(cTimeBasedSampleSetCollector&&) =
default;
549 template<
typename ... T>
550 tResult GetSampleSetAt(tTimeStamp tmTime, T& ... samples)
552 constexpr size_t nSize =
sizeof...(T);
554 if (m_oQueues.size() < nSize)
559 bool bSampleFound =
false;
560 RETURN_IF_FAILED(GetSampleSetWithCheckAt(tmTime, bSampleFound, samples...));
571 template<
typename ... T>
574 constexpr size_t nSize =
sizeof...(T);
576 auto& pQueue = m_oQueues[m_oQueues.size() - nSize - 1];
578 bSampleFound |=
IS_OK(pQueue->GetSampleBeforeOrAt(tmTime, pSample, pNewStreamType));
580 if (pNewStreamType && m_pTypeChangeCallback)
582 RETURN_IF_FAILED(m_pTypeChangeCallback(pQueue->GetReader(), pNewStreamType));
585 return GetSampleSetWithCheckAt(tmTime, bSampleFound, samples...);
588 tResult GetSampleSetWithCheckAt(tTimeStamp ,
bool& )
594 std::vector<std::shared_ptr<detail::cExternalSampleReaderQueue>> m_oQueues;
595 tStreamTypeChangeCallback m_pTypeChangeCallback;
601using flash::cLastSamplesCollector;
602using flash::cSampleSetCollector;
603using flash::cTimeBasedSampleSetCollector;
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
#define RETURN_ERROR(code)
Return specific error code, which requires the calling function's return type to be tResult.
Definition result.h:42
#define IS_OK(s)
Check if result is OK.
Definition result.h:17
Interface to create a sample reader buffer.
Definition samplestreamer_intf.h:96
Definition streamitem_intf.h:25
Sample reader which allows the registration of external queue.
Definition samplereader.h:493
Sample reader which always provides the last successful received sample.
Definition samplereader.h:545
Definition sample_collectors.h:63
tResult CollectFrom(cLastSampleReader &oSampleReader)
Adds a sample reader to the list of sample readers that data is read from.
Definition sample_collectors.h:74
tResult GetLastSamples(adtf::ucom::iobject_ptr< const ISample > &pSample, T &... samples)
Get the last samples from all sample readers if there is no new data in queue, the last sent data is ...
Definition sample_collectors.h:89
cSampleSetCollector(tStreamTypeChangeCallback pTypeChangeCallback)
tResult CollectFrom(cExternalQueueSampleReader &oSampleReader)
Adds a sample reader to the list of sample readers that data is read from.
tResult GetNextSampleSet(T &...samples)
Get the next sample set from all sample readers at least one reader must have new data based on times...
Definition sample_collectors.h:179
void ClearQueues()
Clear all internal queues for all connected sample readers.
Definition streamitem_intf.h:105
tResult GetSampleSetAt(tTimeStamp tmTime, T &... samples)
Get the next sample set from all sample readers.
Definition sample_collectors.h:278
void ClearQueues()
Clear all internal queues for all connected sample readers.
cTimeBasedSampleSetCollector(tStreamTypeChangeCallback pTypeChangeCallback)
tResult CollectFrom(cExternalQueueSampleReader &oSampleReader)
Adds a sample reader to the list of sample readers that data is read from.
tResult Push(const IStreamItem &oStreamItem, tTimeStamp tmTime) override
Push a new value to the internal sample queue.
tResult Pop(IStreamItem &oStreamItem) override
Returns the next sample from the queue.
Definition samplestreamer_intf.h:188
Definition sample_collectors.h:404
tResult GetLastSamples(adtf::ucom::iobject_ptr< const ant::ISample > &pSample, T &... samples)
Get the last samples from all sample readers if there is no new data in queue, the last sent data is ...
Definition sample_collectors.h:430
tResult CollectFrom(ISampleReader &oSampleReader)
Adds a sample reader to the list of sample readers that data is read from.
Definition sample_collectors.h:415
tResult Push(const IStreamItem &oStreamItem, tTimeStamp tmTime) override
Push a new value to the internal sample queue.
tResult Pop(IStreamItem &oStreamItem) override
Returns the next sample from the queue.
virtual tResult Reset(const iobject_ptr< T > &i_oOther)=0
Reset this object_ptr<> with the content of another iobject_ptr<>
Definition object_ptr.h:384
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
Namespace for all internally used functionality implemented.
Definition sample_collectors.h:329
Namespace for all functionality of the ADTF Streaming SDK provided since v3.5.
Definition filterbase.h:255
Namespace for the ADTF Streaming SDK.
Definition bindingproxyinport.h:14
ant::iobject_ptr< T > iobject_ptr
Alias always bringing the latest version of ant::iobject_ptr into scope.
Definition object_ptr_intf.h:437
Namespace for all functionality provided by ADTF and its SDKs.
Definition adtf_client_connector.h:14
Definition sample_collectors.h:362