in Transform360/Library/VideoFrameTransform.cpp [652:739]
Mat VideoFrameTransform::filterPlane(
const Mat& inputMat,
int transformMatPlaneIndex,
int imagePlaneIndex) {
Mat blurredPlane = Mat::zeros(inputMat.size(), inputMat.type());
try {
// Vector of threads to filter segments in parallel
vector<thread> segmentFilteringThreads;
switch (ctx_.input_stereo_format) {
case STEREO_FORMAT_LR:
{
// Fiter left half plane
runFiltering(
inputMat,
blurredPlane,
transformMatPlaneIndex,
imagePlaneIndex,
0,
0,
segmentFilteringThreads);
// Filter right half plane
runFiltering(
inputMat,
blurredPlane,
transformMatPlaneIndex,
imagePlaneIndex,
0.5 * inputMat.cols,
0,
segmentFilteringThreads);
break;
}
case STEREO_FORMAT_TB:
{
// Fiter top half plane
runFiltering(
inputMat,
blurredPlane,
transformMatPlaneIndex,
imagePlaneIndex,
0,
0,
segmentFilteringThreads);
// Filter bottom half plane
runFiltering(
inputMat,
blurredPlane,
transformMatPlaneIndex,
imagePlaneIndex,
0,
0.5 * inputMat.rows,
segmentFilteringThreads);
break;
}
case STEREO_FORMAT_MONO:
case STEREO_FORMAT_GUESS:
case STEREO_FORMAT_N:
// Fiter entire frame plane
runFiltering(
inputMat,
blurredPlane,
transformMatPlaneIndex,
imagePlaneIndex,
0,
0,
segmentFilteringThreads);
break;
}
if (ctx_.enable_multi_threading) {
for (int i = 0; i < segmentFilteringThreads.size(); ++i) {
segmentFilteringThreads[i].join();
}
}
} catch (const exception& ex) {
printf(
"Could not filter plane %d. Error: %s\n",
imagePlaneIndex,
ex.what());
}
return blurredPlane;
}