提交 8422af53 编写于 作者: T Travis CI

Deploy code docs to GitHub Pages Travis build: 446

Commit: 3caf642d
上级 3733b866
......@@ -1047,7 +1047,8 @@ Ge/home/travis/build/CMU-Perceptual-Computing-Lab/openpose/include/openpose/cali
/home/travis/build/CMU-Perceptual-Computing-Lab/openpose/include/openpose/face/faceExtractorNet.hpp:18: warning: The following parameters of op::FaceExtractorNet::FaceExtractorNet(const Point< int > &netInputSize, const Point< int > &netOutputSize, const std::vector< HeatMapType > &heatMapTypes={}, const ScaleMode heatMapScale=ScaleMode::ZeroToOne) are not documented:
parameter 'heatMapTypes'
parameter 'heatMapScale'
/home/travis/build/CMU-Perceptual-Computing-Lab/openpose/include/openpose/filestream/cocoJsonSaver.hpp:18: warning: The following parameters of op::CocoJsonSaver::CocoJsonSaver(const std::string &filePathToSave, const bool humanReadable=true, const CocoJsonFormat cocoJsonFormat=CocoJsonFormat::Body, const int mCocoJsonVariant=0) are not documented:
/home/travis/build/CMU-Perceptual-Computing-Lab/openpose/include/openpose/filestream/cocoJsonSaver.hpp:19: warning: The following parameters of op::CocoJsonSaver::CocoJsonSaver(const std::string &filePathToSave, const PoseModel poseModel, const bool humanReadable=true, const CocoJsonFormat cocoJsonFormat=CocoJsonFormat::Body, const int mCocoJsonVariant=0) are not documented:
parameter 'poseModel'
parameter 'humanReadable'
parameter 'cocoJsonFormat'
parameter 'mCocoJsonVariant'
......@@ -1265,5 +1266,5 @@ Generating file index...
Generating file member index...
Generating example index...
finalizing index lists...
lookup cache used 5046/65536 hits=39009 misses=5415
lookup cache used 5050/65536 hits=39033 misses=5419
finished...
......@@ -112,7 +112,7 @@ $(document).ready(function(){initNavTree('classop_1_1_coco_json_saver.html','');
<p>This is the complete list of members for <a class="el" href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8">CocoJsonSaver</a>(const std::string &amp;filePathToSave, const bool humanReadable=true, const CocoJsonFormat cocoJsonFormat=CocoJsonFormat::Body, const int mCocoJsonVariant=0)</td><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe">CocoJsonSaver</a>(const std::string &amp;filePathToSave, const PoseModel poseModel, const bool humanReadable=true, const CocoJsonFormat cocoJsonFormat=CocoJsonFormat::Body, const int mCocoJsonVariant=0)</td><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html#a3a7fd417aa5d85044fb0703379af1a23">record</a>(const Array&lt; float &gt; &amp;poseKeypoints, const Array&lt; float &gt; &amp;poseScores, const std::string &amp;imageName)</td><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html#a8bbfab84a7816cb0f189f243246f744b">~CocoJsonSaver</a>()</td><td class="entry"><a class="el" href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
......
......@@ -117,8 +117,8 @@ $(document).ready(function(){initNavTree('classop_1_1_coco_json_saver.html','');
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a380d4638d09cfe9c26551cc2efb7c3a8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8">CocoJsonSaver</a> (const std::string &amp;filePathToSave, const bool humanReadable=true, const <a class="el" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac">CocoJsonFormat</a> cocoJsonFormat=<a class="el" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8">CocoJsonFormat::Body</a>, const int mCocoJsonVariant=0)</td></tr>
<tr class="separator:a380d4638d09cfe9c26551cc2efb7c3a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a98c5187aaa0f34cb6ce49cf2c81cfe"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe">CocoJsonSaver</a> (const std::string &amp;filePathToSave, const <a class="el" href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261f">PoseModel</a> poseModel, const bool humanReadable=true, const <a class="el" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac">CocoJsonFormat</a> cocoJsonFormat=<a class="el" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8">CocoJsonFormat::Body</a>, const int mCocoJsonVariant=0)</td></tr>
<tr class="separator:a6a98c5187aaa0f34cb6ce49cf2c81cfe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8bbfab84a7816cb0f189f243246f744b"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classop_1_1_coco_json_saver.html#a8bbfab84a7816cb0f189f243246f744b">~CocoJsonSaver</a> ()</td></tr>
<tr class="separator:a8bbfab84a7816cb0f189f243246f744b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a7fd417aa5d85044fb0703379af1a23"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classop_1_1_coco_json_saver.html#a3a7fd417aa5d85044fb0703379af1a23">record</a> (const <a class="el" href="classop_1_1_array.html">Array</a>&lt; float &gt; &amp;poseKeypoints, const <a class="el" href="classop_1_1_array.html">Array</a>&lt; float &gt; &amp;poseScores, const std::string &amp;imageName)</td></tr>
......@@ -127,7 +127,7 @@ Public Member Functions</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>The <a class="el" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a> class creates a COCO validation json file with details about the processed images. It inherits from Recorder. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a380d4638d09cfe9c26551cc2efb7c3a8"></a>
<a class="anchor" id="a6a98c5187aaa0f34cb6ce49cf2c81cfe"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
......@@ -140,6 +140,12 @@ Public Member Functions</h2></td></tr>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filePathToSave</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261f">PoseModel</a>&#160;</td>
<td class="paramname"><em>poseModel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
......
var classop_1_1_coco_json_saver =
[
[ "CocoJsonSaver", "classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8", null ],
[ "CocoJsonSaver", "classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe", null ],
[ "~CocoJsonSaver", "classop_1_1_coco_json_saver.html#a8bbfab84a7816cb0f189f243246f744b", null ],
[ "record", "classop_1_1_coco_json_saver.html#a3a7fd417aa5d85044fb0703379af1a23", null ]
];
\ No newline at end of file
......@@ -112,6 +112,7 @@ $(document).ready(function(){initNavTree('coco_json_saver_8hpp.html','');});
<div class="contents">
<div class="textblock"><code>#include &lt;<a class="el" href="common_8hpp_source.html">openpose/core/common.hpp</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="filestream_2enum_classes_8hpp_source.html">openpose/filestream/enumClasses.hpp</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="pose_2enum_classes_8hpp_source.html">openpose/pose/enumClasses.hpp</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="json_ofstream_8hpp_source.html">openpose/filestream/jsonOfstream.hpp</a>&gt;</code><br/>
</div>
<p><a href="coco_json_saver_8hpp_source.html">Go to the source code of this file.</a></p>
......
......@@ -112,37 +112,41 @@ $(document).ready(function(){initNavTree('coco_json_saver_8hpp_source.html','');
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="common_8hpp.html">openpose/core/common.hpp</a>&gt;</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="filestream_2enum_classes_8hpp.html">openpose/filestream/enumClasses.hpp</a>&gt;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="json_ofstream_8hpp.html">openpose/filestream/jsonOfstream.hpp</a>&gt;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">namespace </span>op</div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;{</div>
<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="classop_1_1_coco_json_saver.html"> 14</a></span>&#160; <span class="keyword">class </span><a class="code" href="macros_8hpp.html#a4ba443bb7a0e5dbe8054a9ac37a5e000">OP_API</a> <a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; {</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a>(<span class="keyword">const</span> <a class="code" href="namespacecl.html#abff80bfb254d646f6afeb6638df41686">std::string</a>&amp; filePathToSave, <span class="keyword">const</span> <span class="keywordtype">bool</span> humanReadable = <span class="keyword">true</span>,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac">CocoJsonFormat</a> cocoJsonFormat = <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8">CocoJsonFormat::Body</a>,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> mCocoJsonVariant = 0);</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a>();</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">void</span> record(<span class="keyword">const</span> <a class="code" href="classop_1_1_array.html">Array&lt;float&gt;</a>&amp; poseKeypoints, <span class="keyword">const</span> <a class="code" href="classop_1_1_array.html">Array&lt;float&gt;</a>&amp; poseScores, <span class="keyword">const</span> <a class="code" href="namespacecl.html#abff80bfb254d646f6afeb6638df41686">std::string</a>&amp; imageName);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac">CocoJsonFormat</a> mCocoJsonFormat;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> mCocoJsonVariant;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classop_1_1_json_ofstream.html">JsonOfstream</a> mJsonOfstream;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">bool</span> mFirstElementAdded;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="macros_8hpp.html#abef96b5dd35dd9d44ad27ddf0e2f5f2e">DELETE_COPY</a>(<a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a>);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; };</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;}</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif // OPENPOSE_FILESTREAM_POSE_JSON_COCO_SAVER_HPP</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="pose_2enum_classes_8hpp.html">openpose/pose/enumClasses.hpp</a>&gt;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="json_ofstream_8hpp.html">openpose/filestream/jsonOfstream.hpp</a>&gt;</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">namespace </span>op</div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;{</div>
<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classop_1_1_coco_json_saver.html"> 15</a></span>&#160; <span class="keyword">class </span><a class="code" href="macros_8hpp.html#a4ba443bb7a0e5dbe8054a9ac37a5e000">OP_API</a> <a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; {</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a>(</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacecl.html#abff80bfb254d646f6afeb6638df41686">std::string</a>&amp; filePathToSave, <span class="keyword">const</span> <a class="code" href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261f">PoseModel</a> poseModel, <span class="keyword">const</span> <span class="keywordtype">bool</span> humanReadable = <span class="keyword">true</span>,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac">CocoJsonFormat</a> cocoJsonFormat = <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8">CocoJsonFormat::Body</a>, <span class="keyword">const</span> <span class="keywordtype">int</span> mCocoJsonVariant = 0);</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a>();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">void</span> record(<span class="keyword">const</span> <a class="code" href="classop_1_1_array.html">Array&lt;float&gt;</a>&amp; poseKeypoints, <span class="keyword">const</span> <a class="code" href="classop_1_1_array.html">Array&lt;float&gt;</a>&amp; poseScores, <span class="keyword">const</span> <a class="code" href="namespacecl.html#abff80bfb254d646f6afeb6638df41686">std::string</a>&amp; imageName);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261f">PoseModel</a> mPoseModel;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac">CocoJsonFormat</a> mCocoJsonFormat;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> mCocoJsonVariant;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classop_1_1_json_ofstream.html">JsonOfstream</a> mJsonOfstream;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> mFirstElementAdded;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="macros_8hpp.html#abef96b5dd35dd9d44ad27ddf0e2f5f2e">DELETE_COPY</a>(<a class="code" href="classop_1_1_coco_json_saver.html">CocoJsonSaver</a>);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; };</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#endif // OPENPOSE_FILESTREAM_POSE_JSON_COCO_SAVER_HPP</span></div>
<div class="ttc" id="macros_8hpp_html_abef96b5dd35dd9d44ad27ddf0e2f5f2e"><div class="ttname"><a href="macros_8hpp.html#abef96b5dd35dd9d44ad27ddf0e2f5f2e">DELETE_COPY</a></div><div class="ttdeci">#define DELETE_COPY(className)</div><div class="ttdef"><b>Definition:</b> macros.hpp:34</div></div>
<div class="ttc" id="pose_2enum_classes_8hpp_html"><div class="ttname"><a href="pose_2enum_classes_8hpp.html">enumClasses.hpp</a></div></div>
<div class="ttc" id="namespaceop_html_a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8"><div class="ttname"><a href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8">op::CocoJsonFormat::Body</a></div></div>
<div class="ttc" id="namespaceop_html_af5b3ce2a5d3de87cb31b9b67e96f261f"><div class="ttname"><a href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261f">op::PoseModel</a></div><div class="ttdeci">PoseModel</div><div class="ttdef"><b>Definition:</b> enumClasses.hpp:9</div></div>
<div class="ttc" id="common_8hpp_html"><div class="ttname"><a href="common_8hpp.html">common.hpp</a></div></div>
<div class="ttc" id="classop_1_1_json_ofstream_html"><div class="ttname"><a href="classop_1_1_json_ofstream.html">op::JsonOfstream</a></div><div class="ttdef"><b>Definition:</b> jsonOfstream.hpp:9</div></div>
<div class="ttc" id="classop_1_1_coco_json_saver_html"><div class="ttname"><a href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a></div><div class="ttdef"><b>Definition:</b> cocoJsonSaver.hpp:14</div></div>
<div class="ttc" id="classop_1_1_coco_json_saver_html"><div class="ttname"><a href="classop_1_1_coco_json_saver.html">op::CocoJsonSaver</a></div><div class="ttdef"><b>Definition:</b> cocoJsonSaver.hpp:15</div></div>
<div class="ttc" id="filestream_2enum_classes_8hpp_html"><div class="ttname"><a href="filestream_2enum_classes_8hpp.html">enumClasses.hpp</a></div></div>
<div class="ttc" id="classop_1_1_array_html"><div class="ttname"><a href="classop_1_1_array.html">op::Array&lt; float &gt;</a></div></div>
<div class="ttc" id="json_ofstream_8hpp_html"><div class="ttname"><a href="json_ofstream_8hpp.html">jsonOfstream.hpp</a></div></div>
......
......@@ -194,7 +194,7 @@ $(document).ready(function(){initNavTree('functions_c.html','');});
, <a class="el" href="structop_1_1_datum.html#a847f62b3060c5d0d106e60c29df87a0b">op::Datum</a>
</li>
<li>CocoJsonSaver()
: <a class="el" href="classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8">op::CocoJsonSaver</a>
: <a class="el" href="classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe">op::CocoJsonSaver</a>
</li>
<li>comma()
: <a class="el" href="classop_1_1_json_ofstream.html#ae4468279f789c8026d431b2ef62646f9">op::JsonOfstream</a>
......
......@@ -173,7 +173,7 @@ $(document).ready(function(){initNavTree('functions_func_c.html','');});
, <a class="el" href="structop_1_1_datum.html#a847f62b3060c5d0d106e60c29df87a0b">op::Datum</a>
</li>
<li>CocoJsonSaver()
: <a class="el" href="classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8">op::CocoJsonSaver</a>
: <a class="el" href="classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe">op::CocoJsonSaver</a>
</li>
<li>comma()
: <a class="el" href="classop_1_1_json_ofstream.html#ae4468279f789c8026d431b2ef62646f9">op::JsonOfstream</a>
......
......@@ -127,8 +127,8 @@ var NAVTREEINDEX2 =
"classop_1_1_camera_parameter_reader.html#adf7ad0ef26603129a251fdc166ffa548":[1,0,3,2,5],
"classop_1_1_camera_parameter_reader.html#ae33e8637012413719b389649d1e5448a":[1,0,3,2,12],
"classop_1_1_coco_json_saver.html":[1,0,3,36],
"classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8":[1,0,3,36,0],
"classop_1_1_coco_json_saver.html#a3a7fd417aa5d85044fb0703379af1a23":[1,0,3,36,2],
"classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe":[1,0,3,36,0],
"classop_1_1_coco_json_saver.html#a8bbfab84a7816cb0f189f243246f744b":[1,0,3,36,1],
"classop_1_1_cv_mat_to_op_input.html":[1,0,3,6],
"classop_1_1_cv_mat_to_op_input.html#a6c4ac1b8c6fc994cc332253c56e20c4a":[1,0,3,6,0],
......
......@@ -59,7 +59,7 @@ var searchData=
['coco_5f18',['COCO_18',['../namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261fa0c4a19d9254adcb3ca1f0f527ee141fd',1,'op']]],
['cocojsonformat',['CocoJsonFormat',['../namespaceop.html#a5418b76dad5b4aea1133325f4aa715ac',1,'op']]],
['cocojsonsaver',['CocoJsonSaver',['../classop_1_1_coco_json_saver.html',1,'op']]],
['cocojsonsaver',['CocoJsonSaver',['../classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8',1,'op::CocoJsonSaver']]],
['cocojsonsaver',['CocoJsonSaver',['../classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe',1,'op::CocoJsonSaver']]],
['cocojsonsaver_2ehpp',['cocoJsonSaver.hpp',['../coco_json_saver_8hpp.html',1,'']]],
['comma',['comma',['../classop_1_1_json_ofstream.html#ae4468279f789c8026d431b2ef62646f9',1,'op::JsonOfstream']]],
['commandqueue',['CommandQueue',['../classcl_1_1_command_queue.html#a8462de408ebfaf6332429a92b7938490',1,'cl::CommandQueue::CommandQueue(cl_command_queue_properties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a05ae8e9e44e9b28fc755937490535550',1,'cl::CommandQueue::CommandQueue(QueueProperties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#adcb116a4e1a53417dad3d3850c33d42f',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, cl_command_queue_properties properties=0, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a975c3dce399cb77a5c6b0e294e4778fe',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, QueueProperties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a887826e515b03224aec87b33ac59f327',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, const Device &amp;device, cl_command_queue_properties properties=0, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a8dd467bd94839921b7318cb30f92b5a4',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, const Device &amp;device, QueueProperties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#ab1beb7ab6e619a4e050d87c70bb001a6',1,'cl::CommandQueue::CommandQueue()'],['../classcl_1_1_command_queue.html#a09be675998c51f36aa7744b47eabebd3',1,'cl::CommandQueue::CommandQueue(const cl_command_queue &amp;commandQueue, bool retainObject=false)'],['../classcl_1_1_command_queue.html#ae2ce434c5100e5b467ea8c6561e1f11e',1,'cl::CommandQueue::CommandQueue(const CommandQueue &amp;queue)'],['../classcl_1_1_command_queue.html#a1c5830678be567e34dccbb0065c89b21',1,'cl::CommandQueue::CommandQueue(CommandQueue &amp;&amp;queue) CL_HPP_NOEXCEPT_']]],
......
......@@ -17,7 +17,7 @@ var searchData=
['checkthread',['checkThread',['../classop_1_1_pose_extractor_net.html#a073db5b9847c8afbc10ce534ea533a84',1,'op::PoseExtractorNet']]],
['clear',['clear',['../classop_1_1_pose_extractor_net.html#a3fe7256d9860f4c624f5cf928556bc28',1,'op::PoseExtractorNet::clear()'],['../classop_1_1_queue_base.html#a247f435c95709f3246d352eee4f757af',1,'op::QueueBase::clear()']]],
['clone',['clone',['../classop_1_1_array.html#af42f4570122d1b8259c211f52335909b',1,'op::Array::clone()'],['../structop_1_1_datum.html#a847f62b3060c5d0d106e60c29df87a0b',1,'op::Datum::clone()']]],
['cocojsonsaver',['CocoJsonSaver',['../classop_1_1_coco_json_saver.html#a380d4638d09cfe9c26551cc2efb7c3a8',1,'op::CocoJsonSaver']]],
['cocojsonsaver',['CocoJsonSaver',['../classop_1_1_coco_json_saver.html#a6a98c5187aaa0f34cb6ce49cf2c81cfe',1,'op::CocoJsonSaver']]],
['comma',['comma',['../classop_1_1_json_ofstream.html#ae4468279f789c8026d431b2ef62646f9',1,'op::JsonOfstream']]],
['commandqueue',['CommandQueue',['../classcl_1_1_command_queue.html#a8462de408ebfaf6332429a92b7938490',1,'cl::CommandQueue::CommandQueue(cl_command_queue_properties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a05ae8e9e44e9b28fc755937490535550',1,'cl::CommandQueue::CommandQueue(QueueProperties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#adcb116a4e1a53417dad3d3850c33d42f',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, cl_command_queue_properties properties=0, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a975c3dce399cb77a5c6b0e294e4778fe',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, QueueProperties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a887826e515b03224aec87b33ac59f327',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, const Device &amp;device, cl_command_queue_properties properties=0, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#a8dd467bd94839921b7318cb30f92b5a4',1,'cl::CommandQueue::CommandQueue(const Context &amp;context, const Device &amp;device, QueueProperties properties, cl_int *err=NULL)'],['../classcl_1_1_command_queue.html#ab1beb7ab6e619a4e050d87c70bb001a6',1,'cl::CommandQueue::CommandQueue()'],['../classcl_1_1_command_queue.html#a09be675998c51f36aa7744b47eabebd3',1,'cl::CommandQueue::CommandQueue(const cl_command_queue &amp;commandQueue, bool retainObject=false)'],['../classcl_1_1_command_queue.html#ae2ce434c5100e5b467ea8c6561e1f11e',1,'cl::CommandQueue::CommandQueue(const CommandQueue &amp;queue)'],['../classcl_1_1_command_queue.html#a1c5830678be567e34dccbb0065c89b21',1,'cl::CommandQueue::CommandQueue(CommandQueue &amp;&amp;queue) CL_HPP_NOEXCEPT_']]],
['compile',['compile',['../classcl_1_1_program.html#a8da346ecc73cf9df257690815039ddb5',1,'cl::Program']]],
......
......@@ -703,7 +703,7 @@ $(document).ready(function(){initNavTree('wrapper_auxiliary_8hpp_source.html',''
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">// If humanFormat: bigger size (&amp; maybe slower to process), but easier for user to read it</span></div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> humanFormat = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> cocoJsonSaver = std::make_shared&lt;CocoJsonSaver&gt;(</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a6efbd77da8ebcea3abc4109bb2f39c0b">writeCocoJson</a>, humanFormat,</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a6efbd77da8ebcea3abc4109bb2f39c0b">writeCocoJson</a>, wrapperStructPose.poseModel, humanFormat,</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; (wrapperStructPose.poseModel != <a class="code" href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261fa372b9885bba8bc32ad323fffcf99e39e">PoseModel::CAR_22</a></div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; &amp;&amp; wrapperStructPose.poseModel != <a class="code" href="namespaceop.html#af5b3ce2a5d3de87cb31b9b67e96f261fa66ae79a5ac5fa502ae8bbecd3e07e71c">PoseModel::CAR_12</a></div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; ? <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acaac101b32dda4448cf13a93fe283dddd8">CocoJsonFormat::Body</a> : <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715acae9989db5dabeea617f40c8dbfd07f5fb">CocoJsonFormat::Car</a>),</div>
......@@ -715,380 +715,381 @@ $(document).ready(function(){initNavTree('wrapper_auxiliary_8hpp_source.html',''
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="comment">// If humanFormat: bigger size (&amp; maybe slower to process), but easier for user to read it</span></div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> humanFormat = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> cocoJsonSaver = std::make_shared&lt;CocoJsonSaver&gt;(wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#aaadbe4f8f765a751973ed1b405843c74">writeCocoFootJson</a>,</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; humanFormat, <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715aca129e74dde7b475c8848310e16754c965">CocoJsonFormat::Foot</a>);</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_coco_json_saver.html">WCocoJsonSaver&lt;TDatumsSP&gt;</a>&gt;(cocoJsonSaver));</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="comment">// Write frames as desired image format on hard disk</span></div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">if</span> (!writeImagesCleaned.empty())</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; {</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> imageSaver = std::make_shared&lt;ImageSaver&gt;(writeImagesCleaned,</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#aba2aed26f1d01771a0c896bc50e477a5">writeImagesFormat</a>);</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_image_saver.html">WImageSaver&lt;TDatumsSP&gt;</a>&gt;(imageSaver));</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="comment">// Write frames as *.avi video on hard disk</span></div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (!wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a73d6a5687ab8abac22f5cd29690b6277">writeVideo</a>.empty() || !wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#add74785fc0cb1fc7d2c6b5f88b622d53">writeBvh</a>.empty())</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">if</span> (wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#ad595edffced2bfd80c3bee183f32f505">writeVideoFps</a> &lt;= 0</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; &amp;&amp; (!oPProducer || producerSharedPtr-&gt;get(CV_CAP_PROP_FPS) &lt;= 0))</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;The frame rate of the frames producer is unknown. Set `--write_video_fps` to your desired&quot;</span></div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="stringliteral">&quot; FPS if you wanna record video (`--write_video`). E.g., if it is a folder of images, you&quot;</span></div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="stringliteral">&quot; will have to know or guess the frame rate; if it is a webcam, you should use the OpenPose&quot;</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="stringliteral">&quot; displayed FPS as desired value. If you do not care, simply add `--write_video_fps 30`.&quot;</span>,</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> originalVideoFps = (</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#ad595edffced2bfd80c3bee183f32f505">writeVideoFps</a> &gt; 0 ?</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#ad595edffced2bfd80c3bee183f32f505">writeVideoFps</a> : producerSharedPtr-&gt;get(CV_CAP_PROP_FPS));</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span> (!wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a73d6a5687ab8abac22f5cd29690b6277">writeVideo</a>.empty())</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">if</span> (!oPProducer)</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;Video file can only be recorded inside `wrapper/wrapper.hpp` if the producer&quot;</span></div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="stringliteral">&quot; is one of the default ones (e.g., video, webcam, ...).&quot;</span>,</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> videoSaver = std::make_shared&lt;VideoSaver&gt;(</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a73d6a5687ab8abac22f5cd29690b6277">writeVideo</a>, CV_FOURCC(<span class="charliteral">&#39;M&#39;</span>,<span class="charliteral">&#39;J&#39;</span>,<span class="charliteral">&#39;P&#39;</span>,<span class="charliteral">&#39;G&#39;</span>), originalVideoFps);</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_video_saver.html">WVideoSaver&lt;TDatumsSP&gt;</a>&gt;(videoSaver));</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="comment">// Write joint angles as *.bvh file on hard disk</span></div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="preprocessor">#ifdef USE_3D_ADAM_MODEL</span></div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">if</span> (!wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#add74785fc0cb1fc7d2c6b5f88b622d53">writeBvh</a>.empty())</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> bvhSaver = std::make_shared&lt;BvhSaver&gt;(</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#add74785fc0cb1fc7d2c6b5f88b622d53">writeBvh</a>, JointAngleEstimation::getTotalModel(), originalVideoFps</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; );</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; outputWs.emplace_back(std::make_shared&lt;WBvhSaver&lt;TDatumsSP&gt;&gt;(bvhSaver));</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; }</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;<span class="preprocessor"></span> }</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// Write heat maps as desired image format on hard disk</span></div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span> (!writeHeatMapsCleaned.empty())</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; {</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> heatMapSaver = std::make_shared&lt;HeatMapSaver&gt;(writeHeatMapsCleaned,</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a34d5796e02b8afaaaef99fc26e7f3056">writeHeatMapsFormat</a>);</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_heat_map_saver.html">WHeatMapSaver&lt;TDatumsSP&gt;</a>&gt;(heatMapSaver));</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="comment">// Add frame information for GUI</span></div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> guiEnabled = (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> != <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a28b652e57d2da6b7c939166be21efd9a">DisplayMode::NoDisplay</a>);</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="comment">// If this WGuiInfoAdder instance is placed before the WImageSaver or WVideoSaver, then the resulting</span></div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="comment">// recorded frames will look exactly as the final displayed image by the GUI</span></div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a9dbb0bfce2593b0a560ed738e11708ce">guiVerbose</a> &amp;&amp; (guiEnabled || !userOutputWs.empty()</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; || threadManagerMode == <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; || threadManagerMode == <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36ac68f8680ccf3a65dfcfc63356112c9f9">ThreadManagerMode::AsynchronousOut</a>))</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> guiInfoAdder = std::make_shared&lt;GuiInfoAdder&gt;(numberThreads, guiEnabled);</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_gui_info_adder.html">WGuiInfoAdder&lt;TDatumsSP&gt;</a>&gt;(guiInfoAdder));</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// Minimal graphical user interface (GUI)</span></div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; TWorker guiW;</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (guiEnabled)</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; {</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// PoseRenderers to Renderers</span></div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; std::vector&lt;std::shared_ptr&lt;Renderer&gt;&gt; renderers;</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (wrapperStructPose.renderMode == <a class="code" href="namespaceop.html#afce557f02e337e16150d00bdf72ec033a54c82ef76ecbbd4c2293e09bae01b54e">RenderMode::Cpu</a>)</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; renderers.emplace_back(std::static_pointer_cast&lt;Renderer&gt;(poseCpuRenderer));</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; poseGpuRenderer : poseGpuRenderers)</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; renderers.emplace_back(std::static_pointer_cast&lt;Renderer&gt;(poseGpuRenderer));</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="comment">// Display</span></div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> numberViews = (<a class="code" href="namespaceop.html#adcfd0bf5ba782278488c157667a80c54">intRound</a>(producerSharedPtr-&gt;get(<a class="code" href="namespaceop.html#abc501c56c6cf6cf1989c84b1692cb774a3b6cff57206f4ce645622b2e55f784a6">ProducerProperty::NumberViews</a>)));</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keyword">auto</span> finalOutputSizeGui = finalOutputSize;</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">if</span> (numberViews &gt; 1 &amp;&amp; finalOutputSizeGui.x &gt; 0)</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; finalOutputSizeGui.x *= numberViews;</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="comment">// Adam (+3-D/2-D) display</span></div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">if</span> (displayAdam)</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="preprocessor">#ifdef USE_3D_ADAM_MODEL</span></div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="preprocessor"></span> <span class="comment">// Gui</span></div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> gui = std::make_shared&lt;GuiAdam&gt;(</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; finalOutputSizeGui, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#ac1d393d3ce6be9304017c1aa3afd8f13">fullScreen</a>, threadManager.<a class="code" href="classop_1_1_thread_manager.html#a48ea53b3de4d09c84db18e2c31ce1be1">getIsRunningSharedPtr</a>(),</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; spVideoSeek, poseExtractorNets, faceExtractorNets, handExtractorNets, renderers,</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a>, JointAngleEstimation::getTotalModel(),</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a94538578a465c78788760cadb8ea86f6">writeVideoAdam</a></div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; );</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// WGui</span></div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; guiW = {std::make_shared&lt;WGuiAdam&lt;TDatumsSP&gt;&gt;(gui)};</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;<span class="preprocessor"></span> }</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="comment">// 3-D (+2-D) display</span></div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> == <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6ae18221460ca8434295f980225fd6a91b">DisplayMode::Display3D</a></div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; || wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> == <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a105036ef087117869f656cd72bfd8dd6">DisplayMode::DisplayAll</a>)</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; {</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="comment">// Gui</span></div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> gui = std::make_shared&lt;Gui3D&gt;(</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; finalOutputSizeGui, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#ac1d393d3ce6be9304017c1aa3afd8f13">fullScreen</a>, threadManager.<a class="code" href="classop_1_1_thread_manager.html#a48ea53b3de4d09c84db18e2c31ce1be1">getIsRunningSharedPtr</a>(),</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; spVideoSeek, poseExtractorNets, faceExtractorNets, handExtractorNets, renderers,</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; wrapperStructPose.poseModel, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a></div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; );</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="comment">// WGui</span></div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; guiW = {std::make_shared&lt;WGui3D&lt;TDatumsSP&gt;&gt;(gui)};</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="comment">// 2-D display</span></div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> == <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a3bd9369403112127ae7db2f866002be2">DisplayMode::Display2D</a>)</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; {</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="comment">// Gui</span></div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> gui = std::make_shared&lt;Gui&gt;(</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; finalOutputSizeGui, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#ac1d393d3ce6be9304017c1aa3afd8f13">fullScreen</a>, threadManager.<a class="code" href="classop_1_1_thread_manager.html#a48ea53b3de4d09c84db18e2c31ce1be1">getIsRunningSharedPtr</a>(),</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; spVideoSeek, poseExtractorNets, faceExtractorNets, handExtractorNets, renderers</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; );</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="comment">// WGui</span></div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; guiW = {std::make_shared&lt;WGui&lt;TDatumsSP&gt;&gt;(gui)};</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;Unknown DisplayMode.&quot;</span>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; }</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// Set FpsMax</span></div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; TWorker wFpsMax;</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">if</span> (wrapperStructPose.fpsMax &gt; 0.)</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; wFpsMax = std::make_shared&lt;WFpsMax&lt;TDatumsSP&gt;&gt;(wrapperStructPose.fpsMax);</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="comment">// Set wrapper as configured</span></div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> cocoJsonSaver = std::make_shared&lt;CocoJsonSaver&gt;(</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#aaadbe4f8f765a751973ed1b405843c74">writeCocoFootJson</a>, wrapperStructPose.poseModel, humanFormat,</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="namespaceop.html#a5418b76dad5b4aea1133325f4aa715aca129e74dde7b475c8848310e16754c965">CocoJsonFormat::Foot</a>);</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_coco_json_saver.html">WCocoJsonSaver&lt;TDatumsSP&gt;</a>&gt;(cocoJsonSaver));</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// Write frames as desired image format on hard disk</span></div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">if</span> (!writeImagesCleaned.empty())</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> imageSaver = std::make_shared&lt;ImageSaver&gt;(writeImagesCleaned,</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#aba2aed26f1d01771a0c896bc50e477a5">writeImagesFormat</a>);</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_image_saver.html">WImageSaver&lt;TDatumsSP&gt;</a>&gt;(imageSaver));</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="comment">// Write frames as *.avi video on hard disk</span></div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">if</span> (!wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a73d6a5687ab8abac22f5cd29690b6277">writeVideo</a>.empty() || !wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#add74785fc0cb1fc7d2c6b5f88b622d53">writeBvh</a>.empty())</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; {</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span> (wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#ad595edffced2bfd80c3bee183f32f505">writeVideoFps</a> &lt;= 0</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; &amp;&amp; (!oPProducer || producerSharedPtr-&gt;get(CV_CAP_PROP_FPS) &lt;= 0))</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;The frame rate of the frames producer is unknown. Set `--write_video_fps` to your desired&quot;</span></div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="stringliteral">&quot; FPS if you wanna record video (`--write_video`). E.g., if it is a folder of images, you&quot;</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="stringliteral">&quot; will have to know or guess the frame rate; if it is a webcam, you should use the OpenPose&quot;</span></div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="stringliteral">&quot; displayed FPS as desired value. If you do not care, simply add `--write_video_fps 30`.&quot;</span>,</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> originalVideoFps = (</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#ad595edffced2bfd80c3bee183f32f505">writeVideoFps</a> &gt; 0 ?</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#ad595edffced2bfd80c3bee183f32f505">writeVideoFps</a> : producerSharedPtr-&gt;get(CV_CAP_PROP_FPS));</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (!wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a73d6a5687ab8abac22f5cd29690b6277">writeVideo</a>.empty())</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">if</span> (!oPProducer)</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;Video file can only be recorded inside `wrapper/wrapper.hpp` if the producer&quot;</span></div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="stringliteral">&quot; is one of the default ones (e.g., video, webcam, ...).&quot;</span>,</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> videoSaver = std::make_shared&lt;VideoSaver&gt;(</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a73d6a5687ab8abac22f5cd29690b6277">writeVideo</a>, CV_FOURCC(<span class="charliteral">&#39;M&#39;</span>,<span class="charliteral">&#39;J&#39;</span>,<span class="charliteral">&#39;P&#39;</span>,<span class="charliteral">&#39;G&#39;</span>), originalVideoFps);</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_video_saver.html">WVideoSaver&lt;TDatumsSP&gt;</a>&gt;(videoSaver));</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="comment">// Write joint angles as *.bvh file on hard disk</span></div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="preprocessor">#ifdef USE_3D_ADAM_MODEL</span></div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;<span class="preprocessor"></span> <span class="keywordflow">if</span> (!wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#add74785fc0cb1fc7d2c6b5f88b622d53">writeBvh</a>.empty())</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> bvhSaver = std::make_shared&lt;BvhSaver&gt;(</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#add74785fc0cb1fc7d2c6b5f88b622d53">writeBvh</a>, JointAngleEstimation::getTotalModel(), originalVideoFps</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; );</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; outputWs.emplace_back(std::make_shared&lt;WBvhSaver&lt;TDatumsSP&gt;&gt;(bvhSaver));</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="preprocessor"></span> }</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// Write heat maps as desired image format on hard disk</span></div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (!writeHeatMapsCleaned.empty())</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> heatMapSaver = std::make_shared&lt;HeatMapSaver&gt;(writeHeatMapsCleaned,</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a34d5796e02b8afaaaef99fc26e7f3056">writeHeatMapsFormat</a>);</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_heat_map_saver.html">WHeatMapSaver&lt;TDatumsSP&gt;</a>&gt;(heatMapSaver));</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="comment">// Add frame information for GUI</span></div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> guiEnabled = (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> != <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a28b652e57d2da6b7c939166be21efd9a">DisplayMode::NoDisplay</a>);</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="comment">// If this WGuiInfoAdder instance is placed before the WImageSaver or WVideoSaver, then the resulting</span></div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">// recorded frames will look exactly as the final displayed image by the GUI</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="keywordflow">if</span> (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a9dbb0bfce2593b0a560ed738e11708ce">guiVerbose</a> &amp;&amp; (guiEnabled || !userOutputWs.empty()</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; || threadManagerMode == <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; || threadManagerMode == <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36ac68f8680ccf3a65dfcfc63356112c9f9">ThreadManagerMode::AsynchronousOut</a>))</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; {</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> guiInfoAdder = std::make_shared&lt;GuiInfoAdder&gt;(numberThreads, guiEnabled);</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; outputWs.emplace_back(std::make_shared&lt;<a class="code" href="classop_1_1_w_gui_info_adder.html">WGuiInfoAdder&lt;TDatumsSP&gt;</a>&gt;(guiInfoAdder));</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// Minimal graphical user interface (GUI)</span></div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; TWorker guiW;</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">if</span> (guiEnabled)</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; {</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// PoseRenderers to Renderers</span></div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; std::vector&lt;std::shared_ptr&lt;Renderer&gt;&gt; renderers;</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (wrapperStructPose.renderMode == <a class="code" href="namespaceop.html#afce557f02e337e16150d00bdf72ec033a54c82ef76ecbbd4c2293e09bae01b54e">RenderMode::Cpu</a>)</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; renderers.emplace_back(std::static_pointer_cast&lt;Renderer&gt;(poseCpuRenderer));</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; poseGpuRenderer : poseGpuRenderers)</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; renderers.emplace_back(std::static_pointer_cast&lt;Renderer&gt;(poseGpuRenderer));</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="comment">// Display</span></div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> numberViews = (<a class="code" href="namespaceop.html#adcfd0bf5ba782278488c157667a80c54">intRound</a>(producerSharedPtr-&gt;get(<a class="code" href="namespaceop.html#abc501c56c6cf6cf1989c84b1692cb774a3b6cff57206f4ce645622b2e55f784a6">ProducerProperty::NumberViews</a>)));</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keyword">auto</span> finalOutputSizeGui = finalOutputSize;</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">if</span> (numberViews &gt; 1 &amp;&amp; finalOutputSizeGui.x &gt; 0)</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; finalOutputSizeGui.x *= numberViews;</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="comment">// Adam (+3-D/2-D) display</span></div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">if</span> (displayAdam)</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; {</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="preprocessor">#ifdef USE_3D_ADAM_MODEL</span></div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="preprocessor"></span> <span class="comment">// Gui</span></div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> gui = std::make_shared&lt;GuiAdam&gt;(</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; finalOutputSizeGui, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#ac1d393d3ce6be9304017c1aa3afd8f13">fullScreen</a>, threadManager.<a class="code" href="classop_1_1_thread_manager.html#a48ea53b3de4d09c84db18e2c31ce1be1">getIsRunningSharedPtr</a>(),</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; spVideoSeek, poseExtractorNets, faceExtractorNets, handExtractorNets, renderers,</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a>, JointAngleEstimation::getTotalModel(),</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; wrapperStructOutput.<a class="code" href="structop_1_1_wrapper_struct_output.html#a94538578a465c78788760cadb8ea86f6">writeVideoAdam</a></div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; );</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="comment">// WGui</span></div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; guiW = {std::make_shared&lt;WGuiAdam&lt;TDatumsSP&gt;&gt;(gui)};</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="preprocessor"></span> }</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">// 3-D (+2-D) display</span></div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> == <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6ae18221460ca8434295f980225fd6a91b">DisplayMode::Display3D</a></div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; || wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> == <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a105036ef087117869f656cd72bfd8dd6">DisplayMode::DisplayAll</a>)</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="comment">// Gui</span></div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> gui = std::make_shared&lt;Gui3D&gt;(</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; finalOutputSizeGui, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#ac1d393d3ce6be9304017c1aa3afd8f13">fullScreen</a>, threadManager.<a class="code" href="classop_1_1_thread_manager.html#a48ea53b3de4d09c84db18e2c31ce1be1">getIsRunningSharedPtr</a>(),</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; spVideoSeek, poseExtractorNets, faceExtractorNets, handExtractorNets, renderers,</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; wrapperStructPose.poseModel, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a></div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; );</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="comment">// WGui</span></div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; guiW = {std::make_shared&lt;WGui3D&lt;TDatumsSP&gt;&gt;(gui)};</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="comment">// 2-D display</span></div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#a2a979a7daa368cc847ae6d9a168ff556">displayMode</a> == <a class="code" href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a3bd9369403112127ae7db2f866002be2">DisplayMode::Display2D</a>)</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="comment">// Gui</span></div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> gui = std::make_shared&lt;Gui&gt;(</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; finalOutputSizeGui, wrapperStructGui.<a class="code" href="structop_1_1_wrapper_struct_gui.html#ac1d393d3ce6be9304017c1aa3afd8f13">fullScreen</a>, threadManager.<a class="code" href="classop_1_1_thread_manager.html#a48ea53b3de4d09c84db18e2c31ce1be1">getIsRunningSharedPtr</a>(),</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; spVideoSeek, poseExtractorNets, faceExtractorNets, handExtractorNets, renderers</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; );</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="comment">// WGui</span></div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; guiW = {std::make_shared&lt;WGui&lt;TDatumsSP&gt;&gt;(gui)};</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;Unknown DisplayMode.&quot;</span>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; }</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// Set FpsMax</span></div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; TWorker wFpsMax;</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">if</span> (wrapperStructPose.fpsMax &gt; 0.)</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; wFpsMax = std::make_shared&lt;WFpsMax&lt;TDatumsSP&gt;&gt;(wrapperStructPose.fpsMax);</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// Set wrapper as configured</span></div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">// The less number of queues -&gt; the less threads opened, and potentially the less lag</span></div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// Sanity checks</span></div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">if</span> ((datumProducerW == <span class="keyword">nullptr</span>) == (userInputWs.empty())</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a435b3ab344c03bfc0e4530a2e75f5e44">ThreadManagerMode::AsynchronousIn</a>)</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> message = <span class="stringliteral">&quot;You need to have 1 and only 1 producer selected. You can introduce your own&quot;</span></div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="stringliteral">&quot; producer by using setWorker(WorkerType::Input, ...) or use the OpenPose&quot;</span></div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="stringliteral">&quot; default producer by configuring it in the configure function) or use the&quot;</span></div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="stringliteral">&quot; ThreadManagerMode::Asynchronous(In) mode.&quot;</span>;</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(message, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">if</span> (outputWs.empty() &amp;&amp; userOutputWs.empty() &amp;&amp; guiW == <span class="keyword">nullptr</span></div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36ac68f8680ccf3a65dfcfc63356112c9f9">ThreadManagerMode::AsynchronousOut</a>)</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; {</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;No output selected.&quot;</span>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; }</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="comment">// Thread Manager</span></div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="comment">// Clean previous thread manager (avoid configure to crash the program if used more than once)</span></div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a5b7c5ea46c360496e261094c5e1397a7">reset</a>();</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> threadId = 0ull;</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keyword">auto</span> queueIn = 0ull;</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keyword">auto</span> queueOut = 1ull;</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">// After producer</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">// ID generator (before any multi-threading or any function that requires the ID)</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wIdGenerator = std::make_shared&lt;WIdGenerator&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; std::vector&lt;TWorker&gt; workersAux{wIdGenerator};</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="comment">// Scale &amp; cv::Mat to OP format</span></div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">if</span> (scaleAndSizeExtractorW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(workersAux, {scaleAndSizeExtractorW});</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">if</span> (cvMatToOpInputW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(workersAux, {cvMatToOpInputW});</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="comment">// cv::Mat to output format</span></div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">if</span> (cvMatToOpOutputW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(workersAux, {cvMatToOpOutputW});</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="comment">// Producer</span></div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="comment">// If custom user Worker and uses its own thread</span></div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">if</span> (!userInputWs.empty() &amp;&amp; userInputWsOnNewThread)</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; {</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="comment">// Thread 0, queues 0 -&gt; 1</span></div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, userInputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; }</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="comment">// If custom user Worker in same thread</span></div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!userInputWs.empty())</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(userInputWs, workersAux);</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="comment">// If OpenPose producer (same thread)</span></div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (datumProducerW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>({datumProducerW}, workersAux);</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="comment">// Otherwise</span></div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a435b3ab344c03bfc0e4530a2e75f5e44">ThreadManagerMode::AsynchronousIn</a>)</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;No input selected.&quot;</span>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="comment">// Thread 0 or 1, queues 0 -&gt; 1</span></div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, workersAux, queueIn++, queueOut++);</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="comment">// Increase thread</span></div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// Pose estimation &amp; rendering</span></div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// Thread 1 or 2...X, queues 1 -&gt; 2, X = 2 + #GPUs</span></div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">if</span> (!poseExtractorsWs.empty())</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; {</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keywordflow">if</span> (multiThreadEnabled)</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; {</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; wPose : poseExtractorsWs)</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; {</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wPose, queueIn, queueOut);</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; queueIn++;</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; queueOut++;</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="comment">// Sort frames - Required own thread</span></div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordflow">if</span> (poseExtractorsWs.size() &gt; 1u)</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; {</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueOrderer = std::make_shared&lt;WQueueOrderer&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueOrderer, queueIn++, queueOut++);</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; }</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordflow">if</span> (poseExtractorsWs.size() &gt; 1)</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;Multi-threading disabled, only 1 thread running. All GPUs have been disabled but the&quot;</span></div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="stringliteral">&quot; first one, which is defined by gpuNumberStart (e.g., in the OpenPose demo, it is set&quot;</span></div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="stringliteral">&quot; with the `--num_gpu_start` flag).&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a655d20c1ca69519ca647684edbb2db35">Priority::High</a>);</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, poseExtractorsWs.at(0), queueIn++, queueOut++);</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; }</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <span class="comment">// Assemble all frames from same time instant (3-D module)</span></div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueAssembler = std::make_shared&lt;WQueueAssembler&lt;TDatumsSP, TDatums&gt;&gt;();</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="comment">// 3-D reconstruction</span></div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordflow">if</span> (!poseTriangulationsWs.empty())</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; {</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="comment">// Assemble frames</span></div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueAssembler, queueIn++, queueOut++);</div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="comment">// 3-D reconstruction</span></div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordflow">if</span> (multiThreadEnabled)</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; {</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; wPoseTriangulations : poseTriangulationsWs)</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; {</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wPoseTriangulations, queueIn, queueOut);</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; }</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; queueIn++;</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; queueOut++;</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="comment">// Sort frames</span></div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">if</span> (poseTriangulationsWs.size() &gt; 1u)</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; {</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueOrderer = std::make_shared&lt;WQueueOrderer&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueOrderer, queueIn++, queueOut++);</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; }</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; }</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; {</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">if</span> (poseTriangulationsWs.size() &gt; 1)</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;Multi-threading disabled, only 1 thread running for 3-D triangulation.&quot;</span>,</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a655d20c1ca69519ca647684edbb2db35">Priority::High</a>);</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, poseTriangulationsWs.at(0), queueIn++, queueOut++);</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; }</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; }</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; postProcessingWs = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>({wQueueAssembler}, postProcessingWs);</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="comment">// Adam/IK step</span></div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">if</span> (!jointAngleEstimationsWs.empty())</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; {</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="keywordflow">if</span> (multiThreadEnabled)</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; wJointAngleEstimator : jointAngleEstimationsWs)</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; {</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wJointAngleEstimator, queueIn, queueOut);</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; }</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; queueIn++;</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; queueOut++;</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">// Sort frames</span></div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">if</span> (jointAngleEstimationsWs.size() &gt; 1)</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; {</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueOrderer = std::make_shared&lt;WQueueOrderer&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueOrderer, queueIn++, queueOut++);</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; }</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; }</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; {</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">if</span> (jointAngleEstimationsWs.size() &gt; 1)</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;Multi-threading disabled, only 1 thread running for joint angle estimation.&quot;</span>,</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a655d20c1ca69519ca647684edbb2db35">Priority::High</a>);</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, jointAngleEstimationsWs.at(0), queueIn++, queueOut++);</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; }</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; }</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="comment">// Post processing workers</span></div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">if</span> (!postProcessingWs.empty())</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="comment">// Combining postProcessingWs and outputWs</span></div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; outputWs = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(postProcessingWs, outputWs);</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="comment">// // If I wanna split them</span></div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="comment">// log(&quot;&quot;, Priority::Low, __LINE__, __FUNCTION__, __FILE__);</span></div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="comment">// threadManager.add(threadId, postProcessingWs, queueIn++, queueOut++);</span></div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="comment">// threadIdPP(threadId, multiThreadEnabled);</span></div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="comment">// If custom user Worker and uses its own thread</span></div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordflow">if</span> (!userPostProcessingWs.empty())</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; {</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="comment">// If custom user Worker in its own thread</span></div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="keywordflow">if</span> (userPostProcessingWsOnNewThread)</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; {</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, userPostProcessingWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; }</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="comment">// If custom user Worker in same thread</span></div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// Merge with outputWs</span></div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; outputWs = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(outputWs, userPostProcessingWs);</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; }</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="comment">// Output workers</span></div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">if</span> (!outputWs.empty())</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; {</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="comment">// Thread 4 or 5, queues 4 -&gt; 5</span></div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, outputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; }</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="comment">// User output worker</span></div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="comment">// Thread Y, queues Q -&gt; Q+1</span></div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">if</span> (!userOutputWs.empty())</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span> (userOutputWsOnNewThread)</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, userOutputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; }</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; {</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId-1, userOutputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; }</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; }</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="comment">// OpenPose GUI</span></div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">if</span> (guiW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; {</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="comment">// Thread Y+1, queues Q+1 -&gt; Q+2</span></div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, guiW, queueIn++, queueOut++);</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <span class="comment">// Setting maximum speed</span></div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordflow">if</span> (wFpsMax != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; {</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wFpsMax, queueIn++, queueOut++);</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; }</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; }</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; {</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(e.what(), __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;}</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="preprocessor">#endif // OPENPOSE_WRAPPER_WRAPPER_AUXILIARY_HPP</span></div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="comment">// The less number of queues -&gt; the less threads opened, and potentially the less lag</span></div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="comment">// Sanity checks</span></div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">if</span> ((datumProducerW == <span class="keyword">nullptr</span>) == (userInputWs.empty())</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a435b3ab344c03bfc0e4530a2e75f5e44">ThreadManagerMode::AsynchronousIn</a>)</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; {</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> message = <span class="stringliteral">&quot;You need to have 1 and only 1 producer selected. You can introduce your own&quot;</span></div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="stringliteral">&quot; producer by using setWorker(WorkerType::Input, ...) or use the OpenPose&quot;</span></div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="stringliteral">&quot; default producer by configuring it in the configure function) or use the&quot;</span></div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="stringliteral">&quot; ThreadManagerMode::Asynchronous(In) mode.&quot;</span>;</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(message, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; }</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">if</span> (outputWs.empty() &amp;&amp; userOutputWs.empty() &amp;&amp; guiW == <span class="keyword">nullptr</span></div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36ac68f8680ccf3a65dfcfc63356112c9f9">ThreadManagerMode::AsynchronousOut</a>)</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; {</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;No output selected.&quot;</span>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="comment">// Thread Manager</span></div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="comment">// Clean previous thread manager (avoid configure to crash the program if used more than once)</span></div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a5b7c5ea46c360496e261094c5e1397a7">reset</a>();</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> threadId = 0ull;</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keyword">auto</span> queueIn = 0ull;</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keyword">auto</span> queueOut = 1ull;</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="comment">// After producer</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="comment">// ID generator (before any multi-threading or any function that requires the ID)</span></div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wIdGenerator = std::make_shared&lt;WIdGenerator&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; std::vector&lt;TWorker&gt; workersAux{wIdGenerator};</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="comment">// Scale &amp; cv::Mat to OP format</span></div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">if</span> (scaleAndSizeExtractorW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(workersAux, {scaleAndSizeExtractorW});</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">if</span> (cvMatToOpInputW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(workersAux, {cvMatToOpInputW});</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="comment">// cv::Mat to output format</span></div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <span class="keywordflow">if</span> (cvMatToOpOutputW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(workersAux, {cvMatToOpOutputW});</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="comment">// Producer</span></div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="comment">// If custom user Worker and uses its own thread</span></div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">if</span> (!userInputWs.empty() &amp;&amp; userInputWsOnNewThread)</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; {</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="comment">// Thread 0, queues 0 -&gt; 1</span></div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, userInputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="comment">// If custom user Worker in same thread</span></div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!userInputWs.empty())</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(userInputWs, workersAux);</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="comment">// If OpenPose producer (same thread)</span></div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (datumProducerW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; workersAux = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>({datumProducerW}, workersAux);</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="comment">// Otherwise</span></div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a288aae25bc408055f50c21c991903a44">ThreadManagerMode::Asynchronous</a></div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; &amp;&amp; threadManagerMode != <a class="code" href="namespaceop.html#a3593e2d53bec533f0048ef3973eebd36a435b3ab344c03bfc0e4530a2e75f5e44">ThreadManagerMode::AsynchronousIn</a>)</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(<span class="stringliteral">&quot;No input selected.&quot;</span>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="comment">// Thread 0 or 1, queues 0 -&gt; 1</span></div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, workersAux, queueIn++, queueOut++);</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="comment">// Increase thread</span></div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// Pose estimation &amp; rendering</span></div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="comment">// Thread 1 or 2...X, queues 1 -&gt; 2, X = 2 + #GPUs</span></div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">if</span> (!poseExtractorsWs.empty())</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; {</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">if</span> (multiThreadEnabled)</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; {</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; wPose : poseExtractorsWs)</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wPose, queueIn, queueOut);</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; }</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; queueIn++;</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; queueOut++;</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="comment">// Sort frames - Required own thread</span></div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">if</span> (poseExtractorsWs.size() &gt; 1u)</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueOrderer = std::make_shared&lt;WQueueOrderer&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueOrderer, queueIn++, queueOut++);</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; }</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; }</div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; {</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keywordflow">if</span> (poseExtractorsWs.size() &gt; 1)</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;Multi-threading disabled, only 1 thread running. All GPUs have been disabled but the&quot;</span></div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="stringliteral">&quot; first one, which is defined by gpuNumberStart (e.g., in the OpenPose demo, it is set&quot;</span></div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="stringliteral">&quot; with the `--num_gpu_start` flag).&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a655d20c1ca69519ca647684edbb2db35">Priority::High</a>);</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, poseExtractorsWs.at(0), queueIn++, queueOut++);</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; }</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="comment">// Assemble all frames from same time instant (3-D module)</span></div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueAssembler = std::make_shared&lt;WQueueAssembler&lt;TDatumsSP, TDatums&gt;&gt;();</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="comment">// 3-D reconstruction</span></div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; <span class="keywordflow">if</span> (!poseTriangulationsWs.empty())</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; {</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="comment">// Assemble frames</span></div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueAssembler, queueIn++, queueOut++);</div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="comment">// 3-D reconstruction</span></div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="keywordflow">if</span> (multiThreadEnabled)</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; {</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; wPoseTriangulations : poseTriangulationsWs)</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; {</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wPoseTriangulations, queueIn, queueOut);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; }</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; queueIn++;</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; queueOut++;</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="comment">// Sort frames</span></div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">if</span> (poseTriangulationsWs.size() &gt; 1u)</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; {</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueOrderer = std::make_shared&lt;WQueueOrderer&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueOrderer, queueIn++, queueOut++);</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; }</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; }</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; {</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordflow">if</span> (poseTriangulationsWs.size() &gt; 1)</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;Multi-threading disabled, only 1 thread running for 3-D triangulation.&quot;</span>,</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a655d20c1ca69519ca647684edbb2db35">Priority::High</a>);</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, poseTriangulationsWs.at(0), queueIn++, queueOut++);</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; }</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; }</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; postProcessingWs = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>({wQueueAssembler}, postProcessingWs);</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="comment">// Adam/IK step</span></div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordflow">if</span> (!jointAngleEstimationsWs.empty())</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; {</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">if</span> (multiThreadEnabled)</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; {</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; wJointAngleEstimator : jointAngleEstimationsWs)</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; {</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wJointAngleEstimator, queueIn, queueOut);</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; queueIn++;</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; queueOut++;</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">// Sort frames</span></div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <span class="keywordflow">if</span> (jointAngleEstimationsWs.size() &gt; 1)</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; {</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> wQueueOrderer = std::make_shared&lt;WQueueOrderer&lt;TDatumsSP&gt;&gt;();</div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wQueueOrderer, queueIn++, queueOut++);</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; }</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; }</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; {</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">if</span> (jointAngleEstimationsWs.size() &gt; 1)</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;Multi-threading disabled, only 1 thread running for joint angle estimation.&quot;</span>,</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a655d20c1ca69519ca647684edbb2db35">Priority::High</a>);</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, jointAngleEstimationsWs.at(0), queueIn++, queueOut++);</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; }</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; }</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="comment">// Post processing workers</span></div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">if</span> (!postProcessingWs.empty())</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; {</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="comment">// Combining postProcessingWs and outputWs</span></div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; outputWs = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(postProcessingWs, outputWs);</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="comment">// // If I wanna split them</span></div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="comment">// log(&quot;&quot;, Priority::Low, __LINE__, __FUNCTION__, __FILE__);</span></div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="comment">// threadManager.add(threadId, postProcessingWs, queueIn++, queueOut++);</span></div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="comment">// threadIdPP(threadId, multiThreadEnabled);</span></div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="comment">// If custom user Worker and uses its own thread</span></div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">if</span> (!userPostProcessingWs.empty())</div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; {</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="comment">// If custom user Worker in its own thread</span></div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">if</span> (userPostProcessingWsOnNewThread)</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; {</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, userPostProcessingWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; }</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="comment">// If custom user Worker in same thread</span></div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="comment">// Merge with outputWs</span></div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; outputWs = <a class="code" href="namespaceop.html#aa3a3e2acfb27ecbd187d01c8dcd41899">mergeVectors</a>(outputWs, userPostProcessingWs);</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; }</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="comment">// Output workers</span></div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">if</span> (!outputWs.empty())</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; {</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="comment">// Thread 4 or 5, queues 4 -&gt; 5</span></div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, outputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; }</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="comment">// User output worker</span></div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="comment">// Thread Y, queues Q -&gt; Q+1</span></div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="keywordflow">if</span> (!userOutputWs.empty())</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; {</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">if</span> (userOutputWsOnNewThread)</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; {</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, userOutputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; }</div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; {</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId-1, userOutputWs, queueIn++, queueOut++);</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; }</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; }</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="comment">// OpenPose GUI</span></div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">if</span> (guiW != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; {</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="comment">// Thread Y+1, queues Q+1 -&gt; Q+2</span></div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, guiW, queueIn++, queueOut++);</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; }</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="comment">// Setting maximum speed</span></div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keywordflow">if</span> (wFpsMax != <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; {</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <a class="code" href="namespaceop.html#a9912b2bfa3dbe427b4e72dd34c605df2">log</a>(<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="namespaceop.html#adc43fb9031418e7f8112816a3b535d14a28d0edd045e05cf5af64e35ae0c4c6ef">Priority::Low</a>, __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; threadManager.<a class="code" href="classop_1_1_thread_manager.html#a8134abeaec65b5647ae92e34f3ad420b">add</a>(threadId, wFpsMax, queueIn++, queueOut++);</div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <a class="code" href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">threadIdPP</a>(threadId, multiThreadEnabled);</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; }</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; }</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; {</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="namespaceop.html#a5f092bd36c716a894cb035e1ead2aca3">error</a>(e.what(), __LINE__, __FUNCTION__, __FILE__);</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; }</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;}</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="preprocessor">#endif // OPENPOSE_WRAPPER_WRAPPER_AUXILIARY_HPP</span></div>
<div class="ttc" id="namespaceop_html_ae52707752b1872b39f0306cc4f6c6ae6a28b652e57d2da6b7c939166be21efd9a"><div class="ttname"><a href="namespaceop.html#ae52707752b1872b39f0306cc4f6c6ae6a28b652e57d2da6b7c939166be21efd9a">op::DisplayMode::NoDisplay</a></div></div>
<div class="ttc" id="core_2headers_8hpp_html"><div class="ttname"><a href="core_2headers_8hpp.html">headers.hpp</a></div></div>
<div class="ttc" id="namespaceop_html_af65a4564afcad06b72468679f6bee52b"><div class="ttname"><a href="namespaceop.html#af65a4564afcad06b72468679f6bee52b">op::threadIdPP</a></div><div class="ttdeci">OP_API void threadIdPP(unsigned long long &amp;threadId, const bool multiThreadEnabled)</div></div>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册