public StdSharedPtr <StdVector <UserDatum> > CreateDatum() { // Close program when empty frame if (this._Closed || this._ImageFiles.Length <= this._Counter) { OpenPose.Log("Last frame read and added to queue. Closing program after it is processed.", Priority.High); // This funtion stops this worker, which will eventually stop the whole thread system once all the // frames have been processed this._Closed = true; return(null); } else { // Create new datum var tmp = new StdVector <UserDatum>(); tmp.EmplaceBack(); var datumsPtr = new StdSharedPtr <StdVector <UserDatum> >(tmp); var datum = tmp.ToArray()[0]; // Fill datum using (var mat = Cv.ImRead(this._ImageFiles[this._Counter++])) datum.CvInputData = mat; // If empty frame -> return nullptr if (datum.CvInputData.Empty) { OpenPose.Log($"Empty frame detected on path: {this._ImageFiles[this._Counter - 1]}. Closing program.", Priority.High); this._Closed = true; datumsPtr = null; } return(datumsPtr); } }
protected override StdSharedPtr <StdVector <UserDatum> > WorkProducer() { try { // Close program when empty frame if (this._ImageFiles.Length <= this._Counter) { OpenPose.Log("Last frame read and added to queue. Closing program after it is processed.", Priority.High); // This funtion stops this worker, which will eventually stop the whole thread system once all the // frames have been processed this.Stop(); return(null); } else { // Create new datum var tmp = new StdVector <UserDatum>(); tmp.EmplaceBack(); var datumsPtr = new StdSharedPtr <StdVector <UserDatum> >(tmp); var datum = tmp.ToArray()[0]; // Fill datum using (var mat = Cv.ImRead(this._ImageFiles[this._Counter++])) datum.CvInputData = mat; // If empty frame -> return nullptr if (datum.CvInputData.Empty) { OpenPose.Log($"Empty frame detected on path: {this._ImageFiles[this._Counter - 1]}. Closing program.", Priority.High); this.Stop(); datumsPtr = null; } return(datumsPtr); } } catch (Exception e) { OpenPose.Log("Some kind of unexpected error happened."); this.Stop(); OpenPose.Error(e.Message, -1, nameof(this.WorkProducer)); return(null); } }