OpenShot Library | libopenshot  0.7.0
ClipProcessingJobs.cpp
Go to the documentation of this file.
1 
10 // Copyright (c) 2008-2019 OpenShot Studios, LLC
11 //
12 // SPDX-License-Identifier: LGPL-3.0-or-later
13 
14 #include "ClipProcessingJobs.h"
15 
16 namespace openshot {
17 
18 // Constructor responsible to choose processing type and apply to clip
19 ClipProcessingJobs::ClipProcessingJobs(std::string processingType, std::string processInfoJson) :
20 processingType(processingType), processInfoJson(processInfoJson){
21 }
22 
23 std::string ClipProcessingJobs::ValidateONNXModel(std::string modelPath){
24 #ifdef USE_OPENCV
25  return CVObjectDetection::ValidateONNXModel(modelPath);
26 #else
27  return "OpenShot was not compiled with OpenCV support.";
28 #endif
29 }
30 
31 void ClipProcessingJobs::processClip(Clip& clip, std::string json){
32  processInfoJson = json;
33 
34  // Process clip and save processed data
35  if(processingType == "Stabilizer"){
36  t = std::thread(&ClipProcessingJobs::stabilizeClip, this, std::ref(clip), std::ref(this->processingController));
37  }
38  if(processingType == "Tracker"){
39  t = std::thread(&ClipProcessingJobs::trackClip, this, std::ref(clip), std::ref(this->processingController));
40  }
41  if(processingType == "ObjectDetection"){
42  t = std::thread(&ClipProcessingJobs::detectObjectsClip, this, std::ref(clip), std::ref(this->processingController));
43  }
44 }
45 
46 // Apply object tracking to clip
47 void ClipProcessingJobs::trackClip(Clip& clip, ProcessingController& controller){
48 
49  // Create CVTracker object
50  CVTracker tracker(processInfoJson, controller);
51  // Start tracking
52  tracker.trackClip(clip);
53 
54  // Thread controller. If effect processing is done, save data
55  // Else, kill thread
56  if(controller.ShouldStop()){
57  controller.SetFinished(true);
58  return;
59  }
60  else{
61  // Save stabilization data
62  tracker.SaveTrackedData();
63  // tells to UI that the processing finished
64  controller.SetFinished(true);
65  }
66 
67 }
68 
69 // Apply object detection to clip
70 void ClipProcessingJobs::detectObjectsClip(Clip& clip, ProcessingController& controller){
71  // create CVObjectDetection object
72  CVObjectDetection objDetector(processInfoJson, controller);
73  // Start object detection process
74  objDetector.detectObjectsClip(clip);
75 
76  // Thread controller. If effect processing is done, save data
77  // Else, kill thread
78  if(controller.ShouldStop()){
79  controller.SetFinished(true);
80  return;
81  }
82  else{
83  // Save object detection data
84  objDetector.SaveObjDetectedData();
85  // tells to UI that the processing finished
86  controller.SetFinished(true);
87  }
88 }
89 
90 void ClipProcessingJobs::stabilizeClip(Clip& clip, ProcessingController& controller){
91  // create CVStabilization object
92  CVStabilization stabilizer(processInfoJson, controller);
93  // Start stabilization process
94  stabilizer.stabilizeClip(clip);
95 
96  // Thread controller. If effect processing is done, save data
97  // Else, kill thread
98  if(controller.ShouldStop()){
99  controller.SetFinished(true);
100  return;
101  }
102  else{
103  // Save stabilization data
104  stabilizer.SaveStabilizedData();
105  // tells to UI that the processing finished
106  controller.SetFinished(true);
107  }
108 }
109 
110 // Get processing progress while iterating on the clip
112 
113  return (int)processingController.GetProgress();
114 }
115 
116 // Check if processing finished
118 
119  if(processingController.GetFinished()){
120  t.join();
121  }
122  return processingController.GetFinished();
123 }
124 
125 // stop preprocessing before finishing it
127  processingController.CancelProcessing();
128 }
129 
130 // check if there is an error with the config
132  return processingController.GetError();
133 }
134 
135 // get the error message
137  return processingController.GetErrorMessage();
138 }
139 
140 } // namespace openshot
openshot::ClipProcessingJobs::processClip
void processClip(Clip &clip, std::string json)
Definition: ClipProcessingJobs.cpp:31
openshot::ClipProcessingJobs::ValidateONNXModel
static std::string ValidateONNXModel(std::string modelPath)
Definition: ClipProcessingJobs.cpp:23
ProcessingController::ShouldStop
bool ShouldStop()
Definition: ProcessingController.h:68
ProcessingController::SetFinished
void SetFinished(bool f)
Definition: ProcessingController.h:47
openshot
This namespace is the default namespace for all code in the openshot library.
Definition: AnimatedCurve.h:24
ProcessingController::GetProgress
int GetProgress()
Definition: ProcessingController.h:57
openshot::Clip
This class represents a clip (used to arrange readers on the timeline)
Definition: Clip.h:89
ProcessingController::GetFinished
int GetFinished()
Definition: ProcessingController.h:41
openshot::ClipProcessingJobs::IsDone
bool IsDone()
Definition: ClipProcessingJobs.cpp:117
openshot::ClipProcessingJobs::ClipProcessingJobs
ClipProcessingJobs(std::string processingType, std::string processInfoJson)
Definition: ClipProcessingJobs.cpp:19
ClipProcessingJobs.h
Header for ClipProcessingJobs class.
openshot::ClipProcessingJobs::GetError
bool GetError()
Definition: ClipProcessingJobs.cpp:131
openshot::ClipProcessingJobs::GetProgress
int GetProgress()
Definition: ClipProcessingJobs.cpp:111
openshot::ClipProcessingJobs::CancelProcessing
void CancelProcessing()
Definition: ClipProcessingJobs.cpp:126
openshot::ClipProcessingJobs::GetErrorMessage
std::string GetErrorMessage()
Definition: ClipProcessingJobs.cpp:136
openshot::CVTracker
The tracker class will receive one bounding box provided by the user and then iterate over the clip f...
Definition: CVTracker.h:75
ProcessingController
Definition: ProcessingController.h:20
ProcessingController::GetErrorMessage
std::string GetErrorMessage()
Definition: ProcessingController.h:86
openshot::CVObjectDetection::ValidateONNXModel
static std::string ValidateONNXModel(std::string modelPath)
Definition: CVObjectDetection.cpp:253
ProcessingController::GetError
bool GetError()
Definition: ProcessingController.h:80
CVStabilization
This class stabilizes a video frame using optical flow.
Definition: CVStabilization.h:75
ProcessingController::CancelProcessing
void CancelProcessing()
Definition: ProcessingController.h:63