Mat VideoFrameTransform::filterPlane()

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;
}