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__ */
|