summaryrefslogtreecommitdiff
path: root/mv_3d/3d/include/Mv3d.h
blob: ed475e6684b02a651d56b0e5c6607ec19620cdf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
 * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef __MEDIA_VISION_3D_H__
#define __MEDIA_VISION_3D_H__

#include "dfs_adaptation_impl.h"
#include "dfs_parameter.h"
#include "mv_3d.h"
#include "mv_3d_private.h"
#include "mv_3d_type.h"
#include <cstddef>
#include <glib.h>

/**
 * @file Depth.h
 * @brief This file contains the depth class definition
 *        which supports depth-from-stereo (DFS).
 */
using namespace DfsAdaptation;
using DepthType = uint16_t;
using DepthTypePtr = DepthType *;
namespace mediavision
{
namespace mv3d
{
class Mv3d
{
private:
	DfsParameter mDfsParameter;
	DfsAdaptor *mDfsAdaptor;
	int mMode;

	size_t mWidth;
	size_t mHeight;
	int mMinDisp;
	int mMaxDisp;
	double mSamplingRatio;
	int mOutlierRemovalPoints;
	double mOutlierRemovalRadius;
	std::string mStereoConfigPath;
	std::string mIntrinsicPath;
	std::string mPointcloudOutputPath;

	GThread *mDfsThread;
	void *mDepthUserData;
	void *mPointcloudUserData;
	mv_3d_depth_cb mDepthCallback;
	mv_3d_pointcloud_cb mPointcloudCallback;
	bool mDfsIsLive;

	GAsyncQueue *mDfsAsyncQueue;

	mv_source_h mInternalSource;

	void GetBufferFromSource(mv_source_h source, unsigned char *&buffer, unsigned int &width, unsigned int &height,
							 int &type, size_t &stride);

	void GetDfsDataFromSources(mv_source_h baseSource, mv_source_h extraSource, DfsInputData &input);

	static gpointer DfsThreadLoop(gpointer data);

#ifdef MV_3D_POINTCLOUD_IS_AVAILABLE
	PointCloudPtr GetPointcloudFromSource(DfsInputData &input, DfsOutputData &depthData);
#endif
public:
	Mv3d();
	~Mv3d();
	void SetParameters(double threshold, size_t windowWidth, size_t windowHeight, size_t speckleSize);

	int Configure(int mode, unsigned int width, unsigned int height, int minDisp, int maxDisp, double samplingRatio,
				  int outlierRemovalPoints, double outlierRemovalRadius, std::string stereoConfigPath,
				  std::string pointcloudOutputPath);

	void SetDepthCallback(mv_3d_depth_cb depthCallback, void *depthUserData);

	int SetPointcloudCallback(mv_3d_pointcloud_cb pointcloudCallback, void *pointcloudUserData);

	int WritePointcloudFile(mv_3d_pointcloud_h pointcloud, mv_3d_pointcloud_type_e type, char *fileName);

	int Prepare();

	int Run(mv_source_h baseSource, mv_source_h extraSource);

	int RunAsync(mv_source_h baseSource, mv_source_h extraSource);
};
}
}
#endif /* __MEDIA_VISION_3D_H__ */