OpenPose  1.0.0rc2
OpenPose: A Real-Time Multi-Person Key-Point Detection And Multi-Threading C++ Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
wDatumProducer.hpp
Go to the documentation of this file.
1 #ifndef OPENPOSE_PRODUCER_W_DATUM_PRODUCER_HPP
2 #define OPENPOSE_PRODUCER_W_DATUM_PRODUCER_HPP
3 
4 #include <limits> // std::numeric_limits
8 
9 namespace op
10 {
11  template<typename TDatums, typename TDatumsNoPtr>
12  class WDatumProducer : public WorkerProducer<TDatums>
13  {
14  public:
15  explicit WDatumProducer(const std::shared_ptr<DatumProducer<TDatumsNoPtr>>& datumProducer);
16 
18 
19  TDatums workProducer();
20 
21  private:
22  std::shared_ptr<DatumProducer<TDatumsNoPtr>> spDatumProducer;
23 
24  DELETE_COPY(WDatumProducer);
25  };
26 }
27 
28 
29 
30 
31 
32 // Implementation
33 #include <openpose/core/datum.hpp>
34 namespace op
35 {
36  template<typename TDatums, typename TDatumsNoPtr>
38  spDatumProducer{datumProducer}
39  {
40  }
41 
42  template<typename TDatums, typename TDatumsNoPtr>
44  {
45  }
46 
47  template<typename TDatums, typename TDatumsNoPtr>
49  {
50  try
51  {
52  // Debugging log
53  dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
54  // Profiling speed
55  const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__);
56  // Create and fill TDatums
57  const auto isRunningAndTDatums = spDatumProducer->checkIfRunningAndGetDatum();
58  // Stop Worker if producer finished
59  if (!isRunningAndTDatums.first)
60  this->stop();
61  // Profiling speed
62  Profiler::timerEnd(profilerKey);
63  Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__);
64  // Debugging log
65  dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
66  // Return TDatums
67  return isRunningAndTDatums.second;
68  }
69  catch (const std::exception& e)
70  {
71  this->stop();
72  error(e.what(), __LINE__, __FUNCTION__, __FILE__);
73  return TDatums{};
74  }
75  }
76 
78 }
79 
80 #endif // OPENPOSE_PRODUCER_W_DATUM_PRODUCER_HPP
void initializationOnThread()
Definition: wDatumProducer.hpp:43
static const std::string timerInit(const int line, const std::string &function, const std::string &file)
OP_API void error(const std::string &message, const int line=-1, const std::string &function="", const std::string &file="")
WDatumProducer(const std::shared_ptr< DatumProducer< TDatumsNoPtr >> &datumProducer)
Definition: wDatumProducer.hpp:37
Definition: workerProducer.hpp:10
void dLog(const T &message, const Priority priority=Priority::Max, const int line=-1, const std::string &function="", const std::string &file="")
Definition: errorAndLog.hpp:53
Definition: datumProducer.hpp:14
static void printAveragedTimeMsOnIterationX(const std::string &key, const int line, const std::string &function, const std::string &file, const unsigned long long x=DEFAULT_X)
static void timerEnd(const std::string &key)
Definition: wDatumProducer.hpp:12
TDatums workProducer()
Definition: wDatumProducer.hpp:48