25 #ifndef __NVDSINFERSERVER_IPROCESS_H__
26 #define __NVDSINFERSERVER_IPROCESS_H__
29 #include <condition_variable>
38 #include "infer_datatypes.h"
110 assert(src && (
int)src->getSize() > m_TransformIdx);
116 to->setBufId(src->bufId());
118 src->buf(m_TransformIdx) = to;
121 done(status, std::move(src));
132 const std::vector<int>& devIds) = 0;
157 int m_TransformIdx = 0;
167 class BasePostprocessor :
public IPostprocessor {
173 : m_UniqueId(uid), m_ProcessType(type) {}
197 return genericPostProcess_(std::move(inBuf), std::move(mainStream),
198 std::move(done), &BasePostprocessor::requestCudaOutBufs,
199 &BasePostprocessor::postCudaImpl);
211 return genericPostProcess_(std::move(inBuf), std::move(mainStream),
212 std::move(done), &BasePostprocessor::requestHostOutBufs,
213 &BasePostprocessor::postHostImpl);
222 const std::vector<int>& devIds) = 0;
268 template <
typename RequestBuf,
typename Impl>
277 outBuf->setBufId(inBuf->bufId());
282 done(status, std::move(outBuf));
302 template <
class BasePreprocessorT>
303 class ThreadPreprocessor :
public BasePreprocessorT {
307 enum { kBuf, kStream, kDone };
310 template <
typename... Args>
312 : BasePreprocessorT(std::forward<Args>(args)...),
314 [this](Item i) -> bool {
316 std::move(std::get<kDone>(i));
318 std::move(std::get<kBuf>(i)),
319 std::move(std::get<kStream>(i)), done);
330 m_Worker.setThreadName(name);
334 Item item = std::make_tuple(
335 std::move(src), std::move(mainStream), std::move(done));
336 if (m_Worker.queueItem(std::move(item))) {
343 QueueThread<std::vector<Item>> m_Worker;
350 template <
class BasePostprocessorT>
351 class ThreadCudaPostprocessor :
public BasePostprocessorT {
354 enum { kBuf, kStream, kDone };
357 template <
typename... Args>
359 : BasePostprocessorT(std::forward<Args>(args)...),
361 [this](ItemCuda i) -> bool {
363 std::move(std::get<kDone>(i));
365 std::move(std::get<kBuf>(i)),
366 std::move(std::get<kStream>(i)), done);
377 ItemCuda item = std::make_tuple(
378 std::move(inBuf), std::move(mainStream), std::move(done));
379 if (m_CudaWorker.queueItem(std::move(item))) {
386 QueueThread<std::vector<ItemCuda>> m_CudaWorker;
393 template <
typename BasePostprocessorT>
394 class ThreadHostPostprocessor :
public BasePostprocessorT {
397 enum { kBuf, kStream, kDone };
400 template <
typename... Args>
402 : BasePostprocessorT(std::forward<Args>(args)...),
404 [this](ItemHost i) -> bool {
406 std::move(std::get<kDone>(i));
408 std::move(std::get<kBuf>(i)),
409 std::move(std::get<kStream>(i)), done);
423 ItemHost item = std::make_tuple(
424 std::move(inBuf), std::move(mainStream), std::move(done));
425 if (m_HostWorker.queueItem(std::move(item))) {
432 QueueThread<std::vector<ItemHost>> m_HostWorker;