fix(api): Remove duplicate frames,change samples after disparity with enum BM

This commit is contained in:
TinyOh 2019-03-11 16:28:31 +08:00
parent e85321130e
commit f08dda33b5
8 changed files with 33 additions and 11 deletions

View File

@ -11,7 +11,9 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
#include <string>
#include <opencv2/highgui/highgui.hpp> #include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "mynteye/api/api.h" #include "mynteye/api/api.h"
@ -26,13 +28,15 @@ int main(int argc, char *argv[]) {
if (!ok) return 1; if (!ok) return 1;
api->ConfigStreamRequest(request); api->ConfigStreamRequest(request);
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
api->EnableStreamData(Stream::DEPTH); api->EnableStreamData(Stream::DEPTH);
api->Start(Source::VIDEO_STREAMING); api->Start(Source::VIDEO_STREAMING);
cv::namedWindow("frame"); cv::namedWindow("frame");
cv::namedWindow("depth"); cv::namedWindow("depth");
double t = 0;
double fps;
while (true) { while (true) {
api->WaitForStreams(); api->WaitForStreams();

View File

@ -27,6 +27,7 @@ int main(int argc, char *argv[]) {
auto &&request = api->SelectStreamRequest(&ok); auto &&request = api->SelectStreamRequest(&ok);
if (!ok) return 1; if (!ok) return 1;
api->ConfigStreamRequest(request); api->ConfigStreamRequest(request);
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
api->EnableStreamData(Stream::POINTS); api->EnableStreamData(Stream::POINTS);

View File

@ -25,7 +25,7 @@ int main(int argc, char *argv[]) {
auto &&request = api->SelectStreamRequest(&ok); auto &&request = api->SelectStreamRequest(&ok);
if (!ok) return 1; if (!ok) return 1;
api->ConfigStreamRequest(request); api->ConfigStreamRequest(request);
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
api->Start(Source::VIDEO_STREAMING); api->Start(Source::VIDEO_STREAMING);
cv::namedWindow("frame"); cv::namedWindow("frame");

View File

@ -25,6 +25,7 @@ int main(int argc, char *argv[]) {
auto &&request = api->SelectStreamRequest(&ok); auto &&request = api->SelectStreamRequest(&ok);
if (!ok) return 1; if (!ok) return 1;
api->ConfigStreamRequest(request); api->ConfigStreamRequest(request);
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
api->EnableStreamData(Stream::LEFT_RECTIFIED); api->EnableStreamData(Stream::LEFT_RECTIFIED);
api->EnableStreamData(Stream::RIGHT_RECTIFIED); api->EnableStreamData(Stream::RIGHT_RECTIFIED);

View File

@ -154,6 +154,7 @@ int main(int argc, char *argv[]) {
auto &&request = api->SelectStreamRequest(&ok); auto &&request = api->SelectStreamRequest(&ok);
if (!ok) return 1; if (!ok) return 1;
api->ConfigStreamRequest(request); api->ConfigStreamRequest(request);
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
api->SetOptionValue(Option::IR_CONTROL, 80); api->SetOptionValue(Option::IR_CONTROL, 80);

View File

@ -24,7 +24,9 @@
MYNTEYE_BEGIN_NAMESPACE MYNTEYE_BEGIN_NAMESPACE
Processor::Processor(std::int32_t proc_period) Processor::Processor(std::int32_t proc_period)
: proc_period_(std::move(proc_period)), : last_frame_id_cd(0),
last_frame_id_cd_vice(0),
proc_period_(std::move(proc_period)),
activated_(false), activated_(false),
input_ready_(false), input_ready_(false),
idle_(true), idle_(true),
@ -278,11 +280,16 @@ api::StreamData Processor::GetStreamData(const Stream &stream) {
if (enable_mode == Synthetic::MODE_ON) { if (enable_mode == Synthetic::MODE_ON) {
if (sum == 1) { if (sum == 1) {
if (out != nullptr) { if (out != nullptr) {
auto &&output = Object::Cast<ObjMat>(out); auto output = Object::Cast<ObjMat>(out);
if (output != nullptr) { if (output != nullptr) {
if (last_frame_id_cd == output->data->frame_id) {
// cut the duplicate frame.
return {};
}
last_frame_id_cd = output->data->frame_id;
return obj_data(output); return obj_data(output);
} }
VLOG(2) << "Rectify not ready now"; VLOG(2) << "Frame not ready now";
} }
} else if (sum == 2) { } else if (sum == 2) {
static std::shared_ptr<ObjMat2> output = nullptr; static std::shared_ptr<ObjMat2> output = nullptr;
@ -295,15 +302,26 @@ api::StreamData Processor::GetStreamData(const Stream &stream) {
for (auto it : streams) { for (auto it : streams) {
if (it.stream == stream) { if (it.stream == stream) {
if (num == 1) { if (num == 1) {
if (last_frame_id_cd == output->first_data->frame_id) {
// cut the duplicate frame.
return {};
}
last_frame_id_cd = output->first_data->frame_id;
return obj_data_first(output); return obj_data_first(output);
} else { } else {
// last_frame_id_cd = output->second_data->frame_id;
if (last_frame_id_cd_vice == output->second_data->frame_id) {
// cut the duplicate frame.
return {};
}
last_frame_id_cd_vice = output->second_data->frame_id;
return obj_data_second(output); return obj_data_second(output);
} }
} }
num++; num++;
} }
} }
VLOG(2) << "Rectify not ready now"; VLOG(2) << "Frame not ready now";
} else { } else {
LOG(ERROR) << "error: invalid sum!"; LOG(ERROR) << "error: invalid sum!";
} }

View File

@ -90,7 +90,8 @@ class Processor :
virtual process_type ProcessOutputConnection(); virtual process_type ProcessOutputConnection();
virtual process_type ProcessInputConnection(); virtual process_type ProcessInputConnection();
std::uint16_t last_frame_id_cd;
std::uint16_t last_frame_id_cd_vice;
private: private:
/** Run in standalone thread. */ /** Run in standalone thread. */
void Run(); void Run();

View File

@ -90,10 +90,6 @@ void s1s2Processor::StartVideoStreaming() {
[this, stream, callback](const device::StreamData &data) { [this, stream, callback](const device::StreamData &data) {
auto &&stream_data = data2api(data); auto &&stream_data = data2api(data);
ProcessNativeStream(stream, stream_data); ProcessNativeStream(stream, stream_data);
// Need mutex if set callback after start
// if (callback) {
// callback(stream_data);
// }
}, },
true); true);
} }