Project import generated by Copybara.
GitOrigin-RevId: d8caa66de45839696f5bd0786ad3bfbcb9cff632
This commit is contained in:
@@ -82,18 +82,18 @@ class BilateralFilterCalculator : public CalculatorBase {
|
||||
BilateralFilterCalculator() = default;
|
||||
~BilateralFilterCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
// From Calculator.
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
|
||||
::mediapipe::Status GlSetup(CalculatorContext* cc);
|
||||
mediapipe::Status GlSetup(CalculatorContext* cc);
|
||||
void GlRender(CalculatorContext* cc);
|
||||
|
||||
mediapipe::BilateralFilterCalculatorOptions options_;
|
||||
@@ -111,17 +111,17 @@ class BilateralFilterCalculator : public CalculatorBase {
|
||||
};
|
||||
REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::GetContract(
|
||||
mediapipe::Status BilateralFilterCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
CHECK_GE(cc->Inputs().NumEntries(), 1);
|
||||
|
||||
if (cc->Inputs().HasTag(kInputFrameTag) &&
|
||||
cc->Inputs().HasTag(kInputFrameTagGpu)) {
|
||||
return ::mediapipe::InternalError("Cannot have multiple input images.");
|
||||
return mediapipe::InternalError("Cannot have multiple input images.");
|
||||
}
|
||||
if (cc->Inputs().HasTag(kInputFrameTagGpu) !=
|
||||
cc->Outputs().HasTag(kOutputFrameTagGpu)) {
|
||||
return ::mediapipe::InternalError("GPU output must have GPU input.");
|
||||
return mediapipe::InternalError("GPU output must have GPU input.");
|
||||
}
|
||||
|
||||
bool use_gpu = false;
|
||||
@@ -165,10 +165,10 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status BilateralFilterCalculator::Open(CalculatorContext* cc) {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
|
||||
options_ = cc->Options<mediapipe::BilateralFilterCalculatorOptions>();
|
||||
@@ -194,30 +194,30 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status BilateralFilterCalculator::Process(CalculatorContext* cc) {
|
||||
if (use_gpu_) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
MP_RETURN_IF_ERROR(
|
||||
gpu_helper_.RunInGlContext([this, cc]() -> ::mediapipe::Status {
|
||||
gpu_helper_.RunInGlContext([this, cc]() -> mediapipe::Status {
|
||||
if (!gpu_initialized_) {
|
||||
MP_RETURN_IF_ERROR(GlSetup(cc));
|
||||
gpu_initialized_ = true;
|
||||
}
|
||||
MP_RETURN_IF_ERROR(RenderGpu(cc));
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}));
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
} else {
|
||||
MP_RETURN_IF_ERROR(RenderCpu(cc));
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status BilateralFilterCalculator::Close(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
gpu_helper_.RunInGlContext([this] {
|
||||
if (program_) glDeleteProgram(program_);
|
||||
@@ -230,13 +230,12 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
});
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::RenderCpu(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::Status BilateralFilterCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kInputFrameTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
const auto& input_frame = cc->Inputs().Tag(kInputFrameTag).Get<ImageFrame>();
|
||||
@@ -244,7 +243,7 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
|
||||
// Only 1 or 3 channel images supported by OpenCV.
|
||||
if ((input_mat.channels() == 1 || input_mat.channels() == 3)) {
|
||||
return ::mediapipe::InternalError(
|
||||
return mediapipe::InternalError(
|
||||
"CPU filtering supports only 1 or 3 channel input images.");
|
||||
}
|
||||
|
||||
@@ -255,7 +254,7 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
|
||||
if (has_guide_image) {
|
||||
// cv::jointBilateralFilter() is in contrib module 'ximgproc'.
|
||||
return ::mediapipe::UnimplementedError(
|
||||
return mediapipe::UnimplementedError(
|
||||
"CPU joint filtering support is not implemented yet.");
|
||||
} else {
|
||||
auto output_mat = mediapipe::formats::MatView(output_frame.get());
|
||||
@@ -267,13 +266,12 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
cc->Outputs()
|
||||
.Tag(kOutputFrameTag)
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::RenderGpu(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::Status BilateralFilterCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kInputFrameTagGpu).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const auto& input_frame =
|
||||
@@ -334,7 +332,7 @@ REGISTER_CALCULATOR(BilateralFilterCalculator);
|
||||
output_texture.Release();
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void BilateralFilterCalculator::GlRender(CalculatorContext* cc) {
|
||||
@@ -350,7 +348,7 @@ void BilateralFilterCalculator::GlRender(CalculatorContext* cc) {
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
::mediapipe::Status BilateralFilterCalculator::GlSetup(CalculatorContext* cc) {
|
||||
mediapipe::Status BilateralFilterCalculator::GlSetup(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
ATTRIB_VERTEX,
|
||||
@@ -517,7 +515,7 @@ void BilateralFilterCalculator::GlRender(CalculatorContext* cc) {
|
||||
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -78,12 +78,12 @@ constexpr char kGrayOutTag[] = "GRAY_OUT";
|
||||
class ColorConvertCalculator : public CalculatorBase {
|
||||
public:
|
||||
~ColorConvertCalculator() override = default;
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -91,17 +91,16 @@ class ColorConvertCalculator : public CalculatorBase {
|
||||
// conversion. The ImageFrame on input_tag is converted using the
|
||||
// open_cv_convert_code provided and then output on the output_tag stream.
|
||||
// Note that the output_format must match the destination conversion code.
|
||||
::mediapipe::Status ConvertAndOutput(const std::string& input_tag,
|
||||
const std::string& output_tag,
|
||||
ImageFormat::Format output_format,
|
||||
int open_cv_convert_code,
|
||||
CalculatorContext* cc);
|
||||
mediapipe::Status ConvertAndOutput(const std::string& input_tag,
|
||||
const std::string& output_tag,
|
||||
ImageFormat::Format output_format,
|
||||
int open_cv_convert_code,
|
||||
CalculatorContext* cc);
|
||||
};
|
||||
|
||||
REGISTER_CALCULATOR(ColorConvertCalculator);
|
||||
|
||||
::mediapipe::Status ColorConvertCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
mediapipe::Status ColorConvertCalculator::GetContract(CalculatorContract* cc) {
|
||||
RET_CHECK_EQ(cc->Inputs().NumEntries(), 1)
|
||||
<< "Only one input stream is allowed.";
|
||||
RET_CHECK_EQ(cc->Outputs().NumEntries(), 1)
|
||||
@@ -139,10 +138,10 @@ REGISTER_CALCULATOR(ColorConvertCalculator);
|
||||
cc->Outputs().Tag(kBgraOutTag).Set<ImageFrame>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ColorConvertCalculator::ConvertAndOutput(
|
||||
mediapipe::Status ColorConvertCalculator::ConvertAndOutput(
|
||||
const std::string& input_tag, const std::string& output_tag,
|
||||
ImageFormat::Format output_format, int open_cv_convert_code,
|
||||
CalculatorContext* cc) {
|
||||
@@ -161,10 +160,10 @@ REGISTER_CALCULATOR(ColorConvertCalculator);
|
||||
cc->Outputs()
|
||||
.Tag(output_tag)
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ColorConvertCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status ColorConvertCalculator::Process(CalculatorContext* cc) {
|
||||
// RGBA -> RGB
|
||||
if (cc->Inputs().HasTag(kRgbaInTag) && cc->Outputs().HasTag(kRgbOutTag)) {
|
||||
return ConvertAndOutput(kRgbaInTag, kRgbOutTag, ImageFormat::SRGB,
|
||||
@@ -196,7 +195,7 @@ REGISTER_CALCULATOR(ColorConvertCalculator);
|
||||
cv::COLOR_RGBA2BGRA, cc);
|
||||
}
|
||||
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Unsupported image format conversion.";
|
||||
}
|
||||
|
||||
|
||||
@@ -50,15 +50,15 @@ class FeatureDetectorCalculator : public CalculatorBase {
|
||||
public:
|
||||
~FeatureDetectorCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
FeatureDetectorCalculatorOptions options_;
|
||||
cv::Ptr<cv::Feature2D> feature_detector_;
|
||||
std::unique_ptr<::mediapipe::ThreadPool> pool_;
|
||||
std::unique_ptr<mediapipe::ThreadPool> pool_;
|
||||
|
||||
// Create image pyramid based on input image.
|
||||
void ComputeImagePyramid(const cv::Mat& input_image,
|
||||
@@ -71,7 +71,7 @@ class FeatureDetectorCalculator : public CalculatorBase {
|
||||
|
||||
REGISTER_CALCULATOR(FeatureDetectorCalculator);
|
||||
|
||||
::mediapipe::Status FeatureDetectorCalculator::GetContract(
|
||||
mediapipe::Status FeatureDetectorCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
if (cc->Inputs().HasTag("IMAGE")) {
|
||||
cc->Inputs().Tag("IMAGE").Set<ImageFrame>();
|
||||
@@ -85,26 +85,26 @@ REGISTER_CALCULATOR(FeatureDetectorCalculator);
|
||||
if (cc->Outputs().HasTag("PATCHES")) {
|
||||
cc->Outputs().Tag("PATCHES").Set<std::vector<TfLiteTensor>>();
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FeatureDetectorCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status FeatureDetectorCalculator::Open(CalculatorContext* cc) {
|
||||
options_ =
|
||||
tool::RetrieveOptions(cc->Options(), cc->InputSidePackets(), kOptionsTag)
|
||||
.GetExtension(FeatureDetectorCalculatorOptions::ext);
|
||||
feature_detector_ = cv::ORB::create(
|
||||
options_.max_features(), options_.scale_factor(),
|
||||
options_.pyramid_level(), kPatchSize - 1, 0, 2, cv::ORB::FAST_SCORE);
|
||||
pool_ = absl::make_unique<::mediapipe::ThreadPool>("ThreadPool", kNumThreads);
|
||||
pool_ = absl::make_unique<mediapipe::ThreadPool>("ThreadPool", kNumThreads);
|
||||
pool_->StartWorkers();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FeatureDetectorCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status FeatureDetectorCalculator::Process(CalculatorContext* cc) {
|
||||
const Timestamp& timestamp = cc->InputTimestamp();
|
||||
if (timestamp == Timestamp::PreStream()) {
|
||||
// Indicator packet.
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
InputStream* input_frame = &(cc->Inputs().Tag("IMAGE"));
|
||||
cv::Mat input_view = formats::MatView(&input_frame->Get<ImageFrame>());
|
||||
@@ -176,7 +176,7 @@ REGISTER_CALCULATOR(FeatureDetectorCalculator);
|
||||
cc->Outputs().Tag("PATCHES").Add(patches.release(), timestamp);
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void FeatureDetectorCalculator::ComputeImagePyramid(
|
||||
|
||||
@@ -53,8 +53,7 @@ constexpr char kWidthTag[] = "WIDTH";
|
||||
|
||||
REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::GetContract(CalculatorContract* cc) {
|
||||
RET_CHECK(cc->Inputs().HasTag(kImageTag) ^ cc->Inputs().HasTag(kImageGpuTag));
|
||||
RET_CHECK(cc->Outputs().HasTag(kImageTag) ^
|
||||
cc->Outputs().HasTag(kImageGpuTag));
|
||||
@@ -116,10 +115,10 @@ REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::Open(CalculatorContext* cc) {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
|
||||
if (cc->Inputs().HasTag(kImageGpuTag)) {
|
||||
@@ -147,38 +146,38 @@ REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
MP_RETURN_IF_ERROR(ValidateBorderModeForCPU(cc));
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::Process(CalculatorContext* cc) {
|
||||
if (cc->Inputs().HasTag(kRectTag) && cc->Inputs().Tag(kRectTag).IsEmpty()) {
|
||||
VLOG(1) << "RECT is empty for timestamp: " << cc->InputTimestamp();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
if (cc->Inputs().HasTag(kNormRectTag) &&
|
||||
cc->Inputs().Tag(kNormRectTag).IsEmpty()) {
|
||||
VLOG(1) << "NORM_RECT is empty for timestamp: " << cc->InputTimestamp();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
if (use_gpu_) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
MP_RETURN_IF_ERROR(
|
||||
gpu_helper_.RunInGlContext([this, cc]() -> ::mediapipe::Status {
|
||||
gpu_helper_.RunInGlContext([this, cc]() -> mediapipe::Status {
|
||||
if (!gpu_initialized_) {
|
||||
MP_RETURN_IF_ERROR(InitGpu(cc));
|
||||
gpu_initialized_ = true;
|
||||
}
|
||||
MP_RETURN_IF_ERROR(RenderGpu(cc));
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}));
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
} else {
|
||||
MP_RETURN_IF_ERROR(RenderCpu(cc));
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::Close(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
gpu_helper_.RunInGlContext([this] {
|
||||
if (program_) glDeleteProgram(program_);
|
||||
@@ -187,16 +186,16 @@ REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
gpu_initialized_ = false;
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::ValidateBorderModeForCPU(
|
||||
mediapipe::Status ImageCroppingCalculator::ValidateBorderModeForCPU(
|
||||
CalculatorContext* cc) {
|
||||
int border_mode;
|
||||
return GetBorderModeForOpenCV(cc, &border_mode);
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::ValidateBorderModeForGPU(
|
||||
mediapipe::Status ImageCroppingCalculator::ValidateBorderModeForGPU(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::ImageCroppingCalculatorOptions options =
|
||||
cc->Options<mediapipe::ImageCroppingCalculatorOptions>();
|
||||
@@ -213,12 +212,12 @@ REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
<< options.border_mode();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kImageTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
const auto& input_img = cc->Inputs().Tag(kImageTag).Get<ImageFrame>();
|
||||
cv::Mat input_mat = formats::MatView(&input_img);
|
||||
@@ -268,12 +267,12 @@ REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
cropped_image.copyTo(output_mat);
|
||||
cc->Outputs().Tag(kImageTag).Add(output_frame.release(),
|
||||
cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kImageGpuTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const Packet& input_packet = cc->Inputs().Tag(kImageGpuTag).Value();
|
||||
@@ -308,7 +307,7 @@ REGISTER_CALCULATOR(ImageCroppingCalculator);
|
||||
dst_tex.Release();
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void ImageCroppingCalculator::GlRender() {
|
||||
@@ -359,7 +358,7 @@ void ImageCroppingCalculator::GlRender() {
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::InitGpu(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageCroppingCalculator::InitGpu(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
ATTRIB_VERTEX,
|
||||
@@ -408,7 +407,7 @@ void ImageCroppingCalculator::GlRender() {
|
||||
glUniform1i(glGetUniformLocation(program_, "input_frame"), 1);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
// For GPU only.
|
||||
@@ -534,7 +533,7 @@ RectSpec ImageCroppingCalculator::GetCropSpecs(const CalculatorContext* cc,
|
||||
return {crop_width, crop_height, x_center, y_center, rotation};
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageCroppingCalculator::GetBorderModeForOpenCV(
|
||||
mediapipe::Status ImageCroppingCalculator::GetBorderModeForOpenCV(
|
||||
CalculatorContext* cc, int* border_mode) {
|
||||
mediapipe::ImageCroppingCalculatorOptions options =
|
||||
cc->Options<mediapipe::ImageCroppingCalculatorOptions>();
|
||||
@@ -551,7 +550,7 @@ RectSpec ImageCroppingCalculator::GetCropSpecs(const CalculatorContext* cc,
|
||||
<< options.border_mode();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -58,24 +58,24 @@ class ImageCroppingCalculator : public CalculatorBase {
|
||||
ImageCroppingCalculator() = default;
|
||||
~ImageCroppingCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
static RectSpec GetCropSpecs(const CalculatorContext* cc, int src_width,
|
||||
int src_height);
|
||||
|
||||
private:
|
||||
::mediapipe::Status ValidateBorderModeForCPU(CalculatorContext* cc);
|
||||
::mediapipe::Status ValidateBorderModeForGPU(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
::mediapipe::Status InitGpu(CalculatorContext* cc);
|
||||
mediapipe::Status ValidateBorderModeForCPU(CalculatorContext* cc);
|
||||
mediapipe::Status ValidateBorderModeForGPU(CalculatorContext* cc);
|
||||
mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
mediapipe::Status InitGpu(CalculatorContext* cc);
|
||||
void GlRender();
|
||||
void GetOutputDimensions(CalculatorContext* cc, int src_width, int src_height,
|
||||
int* dst_width, int* dst_height);
|
||||
::mediapipe::Status GetBorderModeForOpenCV(CalculatorContext* cc,
|
||||
int* border_mode);
|
||||
mediapipe::Status GetBorderModeForOpenCV(CalculatorContext* cc,
|
||||
int* border_mode);
|
||||
|
||||
mediapipe::ImageCroppingCalculatorOptions options_;
|
||||
|
||||
|
||||
@@ -28,23 +28,24 @@ namespace {
|
||||
// sqrt(36^2 + 24^2).
|
||||
static const double SENSOR_DIAGONAL_35MM = std::sqrt(1872.0);
|
||||
|
||||
::mediapipe::StatusOr<double> ComputeFocalLengthInPixels(
|
||||
int image_width, int image_height, double focal_length_35mm,
|
||||
double focal_length_mm) {
|
||||
mediapipe::StatusOr<double> ComputeFocalLengthInPixels(int image_width,
|
||||
int image_height,
|
||||
double focal_length_35mm,
|
||||
double focal_length_mm) {
|
||||
// TODO: Allow returning image file properties even when focal length
|
||||
// computation is not possible.
|
||||
if (image_width == 0 || image_height == 0) {
|
||||
return ::mediapipe::InternalError(
|
||||
return mediapipe::InternalError(
|
||||
"Image dimensions should be non-zero to compute focal length in "
|
||||
"pixels.");
|
||||
}
|
||||
if (focal_length_mm == 0) {
|
||||
return ::mediapipe::InternalError(
|
||||
return mediapipe::InternalError(
|
||||
"Focal length in mm should be non-zero to compute focal length in "
|
||||
"pixels.");
|
||||
}
|
||||
if (focal_length_35mm == 0) {
|
||||
return ::mediapipe::InternalError(
|
||||
return mediapipe::InternalError(
|
||||
"Focal length in 35 mm should be non-zero to compute focal length in "
|
||||
"pixels.");
|
||||
}
|
||||
@@ -76,13 +77,13 @@ static const double SENSOR_DIAGONAL_35MM = std::sqrt(1872.0);
|
||||
return focal_length_pixels;
|
||||
}
|
||||
|
||||
::mediapipe::StatusOr<ImageFileProperties> GetImageFileProperites(
|
||||
mediapipe::StatusOr<ImageFileProperties> GetImageFileProperites(
|
||||
const std::string& image_bytes) {
|
||||
easyexif::EXIFInfo result;
|
||||
int code = result.parseFrom(image_bytes);
|
||||
if (code) {
|
||||
return ::mediapipe::InternalError("Error parsing EXIF, code: " +
|
||||
std::to_string(code));
|
||||
return mediapipe::InternalError("Error parsing EXIF, code: " +
|
||||
std::to_string(code));
|
||||
}
|
||||
|
||||
ImageFileProperties properties;
|
||||
@@ -125,7 +126,7 @@ static const double SENSOR_DIAGONAL_35MM = std::sqrt(1872.0);
|
||||
// }
|
||||
class ImageFilePropertiesCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
if (cc->Inputs().NumEntries() != 0) {
|
||||
RET_CHECK(cc->Inputs().NumEntries() == 1);
|
||||
cc->Inputs().Index(0).Set<std::string>();
|
||||
@@ -141,10 +142,10 @@ class ImageFilePropertiesCalculator : public CalculatorBase {
|
||||
cc->OutputSidePackets().Index(0).Set<::mediapipe::ImageFileProperties>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
|
||||
if (cc->InputSidePackets().NumEntries() == 1) {
|
||||
@@ -159,13 +160,13 @@ class ImageFilePropertiesCalculator : public CalculatorBase {
|
||||
MakePacket<ImageFileProperties>(properties_));
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override {
|
||||
mediapipe::Status Process(CalculatorContext* cc) override {
|
||||
if (cc->Inputs().NumEntries() == 1) {
|
||||
if (cc->Inputs().Index(0).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
const std::string& image_bytes = cc->Inputs().Index(0).Get<std::string>();
|
||||
ASSIGN_OR_RETURN(properties_, GetImageFileProperites(image_bytes));
|
||||
@@ -179,11 +180,11 @@ class ImageFilePropertiesCalculator : public CalculatorBase {
|
||||
} else {
|
||||
cc->OutputSidePackets().Index(0).Set(
|
||||
MakePacket<ImageFileProperties>(properties_)
|
||||
.At(::mediapipe::Timestamp::Unset()));
|
||||
.At(mediapipe::Timestamp::Unset()));
|
||||
}
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace mediapipe {
|
||||
// }
|
||||
class ImagePropertiesCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
RET_CHECK(cc->Inputs().HasTag(kImageFrameTag) ^
|
||||
cc->Inputs().HasTag(kGpuBufferTag));
|
||||
if (cc->Inputs().HasTag(kImageFrameTag)) {
|
||||
@@ -60,15 +60,15 @@ class ImagePropertiesCalculator : public CalculatorBase {
|
||||
cc->Outputs().Tag("SIZE").Set<std::pair<int, int>>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override {
|
||||
mediapipe::Status Process(CalculatorContext* cc) override {
|
||||
int width;
|
||||
int height;
|
||||
|
||||
@@ -92,7 +92,7 @@ class ImagePropertiesCalculator : public CalculatorBase {
|
||||
MakePacket<std::pair<int, int>>(width, height)
|
||||
.At(cc->InputTimestamp()));
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
};
|
||||
REGISTER_CALCULATOR(ImagePropertiesCalculator);
|
||||
|
||||
@@ -163,16 +163,16 @@ class ImageTransformationCalculator : public CalculatorBase {
|
||||
ImageTransformationCalculator() = default;
|
||||
~ImageTransformationCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
::mediapipe::Status GlSetup();
|
||||
mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
mediapipe::Status GlSetup();
|
||||
|
||||
void ComputeOutputDimensions(int input_width, int input_height,
|
||||
int* output_width, int* output_height);
|
||||
@@ -199,7 +199,7 @@ class ImageTransformationCalculator : public CalculatorBase {
|
||||
REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
|
||||
// static
|
||||
::mediapipe::Status ImageTransformationCalculator::GetContract(
|
||||
mediapipe::Status ImageTransformationCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
// Only one input can be set, and the output type must match.
|
||||
RET_CHECK(cc->Inputs().HasTag(kImageFrameTag) ^
|
||||
@@ -254,10 +254,10 @@ REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageTransformationCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status ImageTransformationCalculator::Open(CalculatorContext* cc) {
|
||||
// Inform the framework that we always output at the same timestamp
|
||||
// as we receive a packet at.
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
@@ -311,10 +311,10 @@ REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageTransformationCalculator::Process(
|
||||
mediapipe::Status ImageTransformationCalculator::Process(
|
||||
CalculatorContext* cc) {
|
||||
// Override values if specified so.
|
||||
if (cc->Inputs().HasTag("ROTATION_DEGREES") &&
|
||||
@@ -334,22 +334,21 @@ REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
if (use_gpu_) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
if (cc->Inputs().Tag(kGpuBufferTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
return gpu_helper_.RunInGlContext(
|
||||
[this, cc]() -> ::mediapipe::Status { return RenderGpu(cc); });
|
||||
[this, cc]() -> mediapipe::Status { return RenderGpu(cc); });
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
} else {
|
||||
if (cc->Inputs().Tag(kImageFrameTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
return RenderCpu(cc);
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageTransformationCalculator::Close(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::Status ImageTransformationCalculator::Close(CalculatorContext* cc) {
|
||||
if (use_gpu_) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
QuadRenderer* rgb_renderer = rgb_renderer_.release();
|
||||
@@ -372,10 +371,10 @@ REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageTransformationCalculator::RenderCpu(
|
||||
mediapipe::Status ImageTransformationCalculator::RenderCpu(
|
||||
CalculatorContext* cc) {
|
||||
cv::Mat input_mat;
|
||||
mediapipe::ImageFormat::Format format;
|
||||
@@ -480,10 +479,10 @@ REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
.Tag(kImageFrameTag)
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ImageTransformationCalculator::RenderGpu(
|
||||
mediapipe::Status ImageTransformationCalculator::RenderGpu(
|
||||
CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const auto& input = cc->Inputs().Tag(kGpuBufferTag).Get<GpuBuffer>();
|
||||
@@ -570,7 +569,7 @@ REGISTER_CALCULATOR(ImageTransformationCalculator);
|
||||
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void ImageTransformationCalculator::ComputeOutputDimensions(
|
||||
|
||||
@@ -26,10 +26,10 @@ namespace mediapipe {
|
||||
// See GlSimpleCalculatorBase for inputs, outputs and input side packets.
|
||||
class LuminanceCalculator : public GlSimpleCalculator {
|
||||
public:
|
||||
::mediapipe::Status GlSetup() override;
|
||||
::mediapipe::Status GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) override;
|
||||
::mediapipe::Status GlTeardown() override;
|
||||
mediapipe::Status GlSetup() override;
|
||||
mediapipe::Status GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) override;
|
||||
mediapipe::Status GlTeardown() override;
|
||||
|
||||
private:
|
||||
GLuint program_ = 0;
|
||||
@@ -37,7 +37,7 @@ class LuminanceCalculator : public GlSimpleCalculator {
|
||||
};
|
||||
REGISTER_CALCULATOR(LuminanceCalculator);
|
||||
|
||||
::mediapipe::Status LuminanceCalculator::GlSetup() {
|
||||
mediapipe::Status LuminanceCalculator::GlSetup() {
|
||||
// Load vertex and fragment shaders
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
ATTRIB_VERTEX,
|
||||
@@ -83,11 +83,11 @@ REGISTER_CALCULATOR(LuminanceCalculator);
|
||||
(const GLchar**)&attr_name[0], attr_location, &program_);
|
||||
RET_CHECK(program_) << "Problem initializing the program.";
|
||||
frame_ = glGetUniformLocation(program_, "video_frame");
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status LuminanceCalculator::GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) {
|
||||
mediapipe::Status LuminanceCalculator::GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) {
|
||||
static const GLfloat square_vertices[] = {
|
||||
-1.0f, -1.0f, // bottom left
|
||||
1.0f, -1.0f, // bottom right
|
||||
@@ -137,15 +137,15 @@ REGISTER_CALCULATOR(LuminanceCalculator);
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
glDeleteBuffers(2, vbo);
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status LuminanceCalculator::GlTeardown() {
|
||||
mediapipe::Status LuminanceCalculator::GlTeardown() {
|
||||
if (program_) {
|
||||
glDeleteProgram(program_);
|
||||
program_ = 0;
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -52,14 +52,14 @@ class MaskOverlayCalculator : public CalculatorBase {
|
||||
MaskOverlayCalculator() {}
|
||||
~MaskOverlayCalculator();
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
::mediapipe::Status GlSetup(
|
||||
mediapipe::Status GlSetup(
|
||||
const MaskOverlayCalculatorOptions::MaskChannel mask_channel);
|
||||
::mediapipe::Status GlRender(const float mask_const);
|
||||
mediapipe::Status GlRender(const float mask_const);
|
||||
|
||||
private:
|
||||
GlCalculatorHelper helper_;
|
||||
@@ -73,7 +73,7 @@ class MaskOverlayCalculator : public CalculatorBase {
|
||||
REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
|
||||
// static
|
||||
::mediapipe::Status MaskOverlayCalculator::GetContract(CalculatorContract* cc) {
|
||||
mediapipe::Status MaskOverlayCalculator::GetContract(CalculatorContract* cc) {
|
||||
MP_RETURN_IF_ERROR(GlCalculatorHelper::UpdateContract(cc));
|
||||
cc->Inputs().Get("VIDEO", 0).Set<GpuBuffer>();
|
||||
cc->Inputs().Get("VIDEO", 1).Set<GpuBuffer>();
|
||||
@@ -82,14 +82,13 @@ REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
else if (cc->Inputs().HasTag("CONST_MASK"))
|
||||
cc->Inputs().Tag("CONST_MASK").Set<float>();
|
||||
else
|
||||
return ::mediapipe::Status(
|
||||
::mediapipe::StatusCode::kNotFound,
|
||||
"At least one mask input stream must be present.");
|
||||
return mediapipe::Status(mediapipe::StatusCode::kNotFound,
|
||||
"At least one mask input stream must be present.");
|
||||
cc->Outputs().Tag("OUTPUT").Set<GpuBuffer>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status MaskOverlayCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status MaskOverlayCalculator::Open(CalculatorContext* cc) {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
if (cc->Inputs().HasTag("MASK")) {
|
||||
use_mask_tex_ = true;
|
||||
@@ -97,8 +96,8 @@ REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
return helper_.Open(cc);
|
||||
}
|
||||
|
||||
::mediapipe::Status MaskOverlayCalculator::Process(CalculatorContext* cc) {
|
||||
return helper_.RunInGlContext([this, &cc]() -> ::mediapipe::Status {
|
||||
mediapipe::Status MaskOverlayCalculator::Process(CalculatorContext* cc) {
|
||||
return helper_.RunInGlContext([this, &cc]() -> mediapipe::Status {
|
||||
if (!initialized_) {
|
||||
const auto& options = cc->Options<MaskOverlayCalculatorOptions>();
|
||||
const auto mask_channel = options.mask_channel();
|
||||
@@ -116,7 +115,7 @@ REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
|
||||
if (mask_packet.IsEmpty()) {
|
||||
cc->Outputs().Tag("OUTPUT").AddPacket(input1_packet);
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
const auto& input0_buffer = cc->Inputs().Get("VIDEO", 0).Get<GpuBuffer>();
|
||||
@@ -173,11 +172,11 @@ REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
dst.Release();
|
||||
|
||||
cc->Outputs().Tag("OUTPUT").Add(output.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
});
|
||||
}
|
||||
|
||||
::mediapipe::Status MaskOverlayCalculator::GlSetup(
|
||||
mediapipe::Status MaskOverlayCalculator::GlSetup(
|
||||
const MaskOverlayCalculatorOptions::MaskChannel mask_channel) {
|
||||
// Load vertex and fragment shaders
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
@@ -248,10 +247,10 @@ REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
unif_frame1_ = glGetUniformLocation(program_, "frame1");
|
||||
unif_frame2_ = glGetUniformLocation(program_, "frame2");
|
||||
unif_mask_ = glGetUniformLocation(program_, "mask");
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status MaskOverlayCalculator::GlRender(const float mask_const) {
|
||||
mediapipe::Status MaskOverlayCalculator::GlRender(const float mask_const) {
|
||||
glUseProgram(program_);
|
||||
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, kBasicSquareVertices);
|
||||
glEnableVertexAttribArray(ATTRIB_VERTEX);
|
||||
@@ -267,7 +266,7 @@ REGISTER_CALCULATOR(MaskOverlayCalculator);
|
||||
glUniform1f(unif_mask_, mask_const);
|
||||
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
MaskOverlayCalculator::~MaskOverlayCalculator() {
|
||||
|
||||
@@ -34,29 +34,29 @@ namespace mediapipe {
|
||||
// }
|
||||
class OpenCvEncodedImageToImageFrameCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
mediapipe::OpenCvEncodedImageToImageFrameCalculatorOptions options_;
|
||||
};
|
||||
|
||||
::mediapipe::Status OpenCvEncodedImageToImageFrameCalculator::GetContract(
|
||||
mediapipe::Status OpenCvEncodedImageToImageFrameCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
cc->Inputs().Index(0).Set<std::string>();
|
||||
cc->Outputs().Index(0).Set<ImageFrame>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvEncodedImageToImageFrameCalculator::Open(
|
||||
mediapipe::Status OpenCvEncodedImageToImageFrameCalculator::Open(
|
||||
CalculatorContext* cc) {
|
||||
options_ =
|
||||
cc->Options<mediapipe::OpenCvEncodedImageToImageFrameCalculatorOptions>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvEncodedImageToImageFrameCalculator::Process(
|
||||
mediapipe::Status OpenCvEncodedImageToImageFrameCalculator::Process(
|
||||
CalculatorContext* cc) {
|
||||
const std::string& contents = cc->Inputs().Index(0).Get<std::string>();
|
||||
const std::vector<char> contents_vector(contents.begin(), contents.end());
|
||||
@@ -84,10 +84,10 @@ class OpenCvEncodedImageToImageFrameCalculator : public CalculatorBase {
|
||||
cv::cvtColor(decoded_mat, output_mat, cv::COLOR_BGR2RGB);
|
||||
break;
|
||||
case 4:
|
||||
return ::mediapipe::UnimplementedErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::UnimplementedErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "4-channel image isn't supported yet";
|
||||
default:
|
||||
return ::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Unsupported number of channels: " << decoded_mat.channels();
|
||||
}
|
||||
std::unique_ptr<ImageFrame> output_frame = absl::make_unique<ImageFrame>(
|
||||
@@ -95,7 +95,7 @@ class OpenCvEncodedImageToImageFrameCalculator : public CalculatorBase {
|
||||
ImageFrame::kGlDefaultAlignmentBoundary);
|
||||
output_mat.copyTo(formats::MatView(output_frame.get()));
|
||||
cc->Outputs().Index(0).Add(output_frame.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(OpenCvEncodedImageToImageFrameCalculator);
|
||||
|
||||
@@ -38,30 +38,29 @@ namespace mediapipe {
|
||||
// }
|
||||
class OpenCvImageEncoderCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
int encoding_quality_;
|
||||
};
|
||||
|
||||
::mediapipe::Status OpenCvImageEncoderCalculator::GetContract(
|
||||
mediapipe::Status OpenCvImageEncoderCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
cc->Inputs().Index(0).Set<ImageFrame>();
|
||||
cc->Outputs().Index(0).Set<OpenCvImageEncoderCalculatorResults>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvImageEncoderCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status OpenCvImageEncoderCalculator::Open(CalculatorContext* cc) {
|
||||
auto options = cc->Options<OpenCvImageEncoderCalculatorOptions>();
|
||||
encoding_quality_ = options.quality();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvImageEncoderCalculator::Process(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::Status OpenCvImageEncoderCalculator::Process(CalculatorContext* cc) {
|
||||
const ImageFrame& image_frame = cc->Inputs().Index(0).Get<ImageFrame>();
|
||||
CHECK_EQ(1, image_frame.ByteDepth());
|
||||
|
||||
@@ -85,10 +84,10 @@ class OpenCvImageEncoderCalculator : public CalculatorBase {
|
||||
encoded_result->set_colorspace(OpenCvImageEncoderCalculatorResults::RGB);
|
||||
break;
|
||||
case 4:
|
||||
return ::mediapipe::UnimplementedErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::UnimplementedErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "4-channel image isn't supported yet";
|
||||
default:
|
||||
return ::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Unsupported number of channels: " << original_mat.channels();
|
||||
}
|
||||
|
||||
@@ -101,7 +100,7 @@ class OpenCvImageEncoderCalculator : public CalculatorBase {
|
||||
// Check its JpegEncoder::write() in "imgcodecs/src/grfmt_jpeg.cpp" for more
|
||||
// info.
|
||||
if (!cv::imencode(".jpg", input_mat, encode_buffer, parameters)) {
|
||||
return ::mediapipe::InternalErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InternalErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Fail to encode the image to be jpeg format.";
|
||||
}
|
||||
|
||||
@@ -109,11 +108,11 @@ class OpenCvImageEncoderCalculator : public CalculatorBase {
|
||||
reinterpret_cast<const char*>(&encode_buffer[0]), encode_buffer.size())));
|
||||
|
||||
cc->Outputs().Index(0).Add(encoded_result.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvImageEncoderCalculator::Close(CalculatorContext* cc) {
|
||||
return ::mediapipe::OkStatus();
|
||||
mediapipe::Status OpenCvImageEncoderCalculator::Close(CalculatorContext* cc) {
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(OpenCvImageEncoderCalculator);
|
||||
|
||||
@@ -32,18 +32,17 @@ namespace mediapipe {
|
||||
// TODO: Generalize the calculator for other text use cases.
|
||||
class OpenCvPutTextCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
};
|
||||
|
||||
::mediapipe::Status OpenCvPutTextCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
mediapipe::Status OpenCvPutTextCalculator::GetContract(CalculatorContract* cc) {
|
||||
cc->Inputs().Index(0).Set<std::string>();
|
||||
cc->Outputs().Index(0).Set<ImageFrame>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvPutTextCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status OpenCvPutTextCalculator::Process(CalculatorContext* cc) {
|
||||
const std::string& text_content = cc->Inputs().Index(0).Get<std::string>();
|
||||
cv::Mat mat = cv::Mat::zeros(640, 640, CV_8UC4);
|
||||
cv::putText(mat, text_content, cv::Point(15, 70), cv::FONT_HERSHEY_PLAIN, 3,
|
||||
@@ -52,7 +51,7 @@ class OpenCvPutTextCalculator : public CalculatorBase {
|
||||
ImageFormat::SRGBA, mat.size().width, mat.size().height);
|
||||
mat.copyTo(formats::MatView(output_frame.get()));
|
||||
cc->Outputs().Index(0).Add(output_frame.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(OpenCvPutTextCalculator);
|
||||
|
||||
@@ -84,17 +84,17 @@ class RecolorCalculator : public CalculatorBase {
|
||||
RecolorCalculator() = default;
|
||||
~RecolorCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status LoadOptions(CalculatorContext* cc);
|
||||
::mediapipe::Status InitGpu(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
mediapipe::Status LoadOptions(CalculatorContext* cc);
|
||||
mediapipe::Status InitGpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
void GlRender();
|
||||
|
||||
bool initialized_ = false;
|
||||
@@ -110,7 +110,7 @@ class RecolorCalculator : public CalculatorBase {
|
||||
REGISTER_CALCULATOR(RecolorCalculator);
|
||||
|
||||
// static
|
||||
::mediapipe::Status RecolorCalculator::GetContract(CalculatorContract* cc) {
|
||||
mediapipe::Status RecolorCalculator::GetContract(CalculatorContract* cc) {
|
||||
RET_CHECK(!cc->Inputs().GetTags().empty());
|
||||
RET_CHECK(!cc->Outputs().GetTags().empty());
|
||||
|
||||
@@ -159,10 +159,10 @@ REGISTER_CALCULATOR(RecolorCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::Open(CalculatorContext* cc) {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
|
||||
if (cc->Inputs().HasTag(kGpuBufferTag)) {
|
||||
@@ -174,29 +174,29 @@ REGISTER_CALCULATOR(RecolorCalculator);
|
||||
|
||||
MP_RETURN_IF_ERROR(LoadOptions(cc));
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::Process(CalculatorContext* cc) {
|
||||
if (use_gpu_) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
MP_RETURN_IF_ERROR(
|
||||
gpu_helper_.RunInGlContext([this, &cc]() -> ::mediapipe::Status {
|
||||
gpu_helper_.RunInGlContext([this, &cc]() -> mediapipe::Status {
|
||||
if (!initialized_) {
|
||||
MP_RETURN_IF_ERROR(InitGpu(cc));
|
||||
initialized_ = true;
|
||||
}
|
||||
MP_RETURN_IF_ERROR(RenderGpu(cc));
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}));
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
} else {
|
||||
MP_RETURN_IF_ERROR(RenderCpu(cc));
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::Close(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
gpu_helper_.RunInGlContext([this] {
|
||||
if (program_) glDeleteProgram(program_);
|
||||
@@ -204,12 +204,12 @@ REGISTER_CALCULATOR(RecolorCalculator);
|
||||
});
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kMaskCpuTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
// Get inputs and setup output.
|
||||
const auto& input_img = cc->Inputs().Tag(kImageFrameTag).Get<ImageFrame>();
|
||||
@@ -265,12 +265,12 @@ REGISTER_CALCULATOR(RecolorCalculator);
|
||||
.Tag(kImageFrameTag)
|
||||
.Add(output_img.release(), cc->InputTimestamp());
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kMaskGpuTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
// Get inputs and setup output.
|
||||
@@ -313,7 +313,7 @@ REGISTER_CALCULATOR(RecolorCalculator);
|
||||
dst_tex.Release();
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void RecolorCalculator::GlRender() {
|
||||
@@ -368,7 +368,7 @@ void RecolorCalculator::GlRender() {
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::LoadOptions(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::LoadOptions(CalculatorContext* cc) {
|
||||
const auto& options = cc->Options<mediapipe::RecolorCalculatorOptions>();
|
||||
|
||||
mask_channel_ = options.mask_channel();
|
||||
@@ -379,10 +379,10 @@ void RecolorCalculator::GlRender() {
|
||||
color_.push_back(options.color().g());
|
||||
color_.push_back(options.color().b());
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status RecolorCalculator::InitGpu(CalculatorContext* cc) {
|
||||
mediapipe::Status RecolorCalculator::InitGpu(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
ATTRIB_VERTEX,
|
||||
@@ -454,7 +454,7 @@ void RecolorCalculator::GlRender() {
|
||||
color_[1] / 255.0, color_[2] / 255.0);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace {
|
||||
|
||||
// Given an upscaling algorithm, determine which OpenCV interpolation algorithm
|
||||
// to use.
|
||||
::mediapipe::Status FindInterpolationAlgorithm(
|
||||
mediapipe::Status FindInterpolationAlgorithm(
|
||||
ScaleImageCalculatorOptions::ScaleAlgorithm upscaling_algorithm,
|
||||
int* interpolation_algorithm) {
|
||||
switch (upscaling_algorithm) {
|
||||
@@ -70,7 +70,7 @@ namespace {
|
||||
RET_CHECK_FAIL() << absl::Substitute("Unknown upscaling algorithm: $0",
|
||||
upscaling_algorithm);
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void CropImageFrame(const ImageFrame& original, int col_start, int row_start,
|
||||
@@ -147,7 +147,7 @@ class ScaleImageCalculator : public CalculatorBase {
|
||||
ScaleImageCalculator();
|
||||
~ScaleImageCalculator() override;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
ScaleImageCalculatorOptions options =
|
||||
cc->Options<ScaleImageCalculatorOptions>();
|
||||
|
||||
@@ -184,35 +184,35 @@ class ScaleImageCalculator : public CalculatorBase {
|
||||
if (cc->Inputs().HasTag("OVERRIDE_OPTIONS")) {
|
||||
cc->Inputs().Tag("OVERRIDE_OPTIONS").Set<ScaleImageCalculatorOptions>();
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
// From Calculator.
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
// Initialize some data members from options_. This can be called either from
|
||||
// Open or Process depending on whether OVERRIDE_OPTIONS is used.
|
||||
::mediapipe::Status InitializeFromOptions();
|
||||
mediapipe::Status InitializeFromOptions();
|
||||
// Initialize crop and output parameters based on set member variable
|
||||
// values. This function will also send the header information on
|
||||
// the VIDEO_HEADER stream if it hasn't been done yet.
|
||||
::mediapipe::Status InitializeFrameInfo(CalculatorContext* cc);
|
||||
mediapipe::Status InitializeFrameInfo(CalculatorContext* cc);
|
||||
// Validate that input_format_ and output_format_ are supported image
|
||||
// formats.
|
||||
::mediapipe::Status ValidateImageFormats() const;
|
||||
mediapipe::Status ValidateImageFormats() const;
|
||||
// Validate that the image frame has the proper format and dimensions.
|
||||
// If the dimensions and format weren't initialized by the header,
|
||||
// then the first frame on which this function is called is used
|
||||
// to initialize.
|
||||
::mediapipe::Status ValidateImageFrame(CalculatorContext* cc,
|
||||
const ImageFrame& image_frame);
|
||||
mediapipe::Status ValidateImageFrame(CalculatorContext* cc,
|
||||
const ImageFrame& image_frame);
|
||||
// Validate that the YUV image has the proper dimensions. If the
|
||||
// dimensions weren't initialized by the header, then the first image
|
||||
// on which this function is called is used to initialize.
|
||||
::mediapipe::Status ValidateYUVImage(CalculatorContext* cc,
|
||||
const YUVImage& yuv_image);
|
||||
mediapipe::Status ValidateYUVImage(CalculatorContext* cc,
|
||||
const YUVImage& yuv_image);
|
||||
|
||||
bool has_header_; // True if the input stream has a header.
|
||||
int input_width_;
|
||||
@@ -251,7 +251,7 @@ ScaleImageCalculator::ScaleImageCalculator() {}
|
||||
|
||||
ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::InitializeFrameInfo(
|
||||
mediapipe::Status ScaleImageCalculator::InitializeFrameInfo(
|
||||
CalculatorContext* cc) {
|
||||
MP_RETURN_IF_ERROR(
|
||||
scale_image::FindCropDimensions(input_width_, input_height_, //
|
||||
@@ -299,10 +299,10 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
.Add(header.release(), Timestamp::PreStream());
|
||||
cc->Outputs().Tag("VIDEO_HEADER").Close();
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status ScaleImageCalculator::Open(CalculatorContext* cc) {
|
||||
options_ = cc->Options<ScaleImageCalculatorOptions>();
|
||||
|
||||
input_data_id_ = cc->Inputs().GetId("FRAMES", 0);
|
||||
@@ -339,7 +339,7 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
// has a header. At this point in the code, the ScaleImageCalculator
|
||||
// config may be changed by the new options at PreStream, so the output
|
||||
// header can't be determined.
|
||||
return ::mediapipe::InvalidArgumentError(
|
||||
return mediapipe::InvalidArgumentError(
|
||||
"OVERRIDE_OPTIONS stream can't be used when the main input stream "
|
||||
"has a header.");
|
||||
}
|
||||
@@ -406,10 +406,10 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
}
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::InitializeFromOptions() {
|
||||
mediapipe::Status ScaleImageCalculator::InitializeFromOptions() {
|
||||
if (options_.has_input_format()) {
|
||||
input_format_ = options_.input_format();
|
||||
} else {
|
||||
@@ -423,10 +423,10 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
|
||||
downscaler_.reset(new ImageResizer(options_.post_sharpening_coefficient()));
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::ValidateImageFormats() const {
|
||||
mediapipe::Status ScaleImageCalculator::ValidateImageFormats() const {
|
||||
RET_CHECK_NE(input_format_, ImageFormat::UNKNOWN)
|
||||
<< "The input image format was UNKNOWN.";
|
||||
RET_CHECK_NE(output_format_, ImageFormat::UNKNOWN)
|
||||
@@ -440,10 +440,10 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
input_format_ == ImageFormat::YCBCR420P)
|
||||
<< "Conversion of the color space (except from "
|
||||
"YCbCr420P to SRGB) is not yet supported.";
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::ValidateImageFrame(
|
||||
mediapipe::Status ScaleImageCalculator::ValidateImageFrame(
|
||||
CalculatorContext* cc, const ImageFrame& image_frame) {
|
||||
if (!has_header_) {
|
||||
if (input_width_ != image_frame.Width() ||
|
||||
@@ -494,10 +494,10 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
image_frame_format_desc, " but expected ", input_format_desc));
|
||||
}
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::ValidateYUVImage(
|
||||
mediapipe::Status ScaleImageCalculator::ValidateYUVImage(
|
||||
CalculatorContext* cc, const YUVImage& yuv_image) {
|
||||
CHECK_EQ(input_format_, ImageFormat::YCBCR420P);
|
||||
if (!has_header_) {
|
||||
@@ -528,14 +528,14 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
input_width_, "x", input_height_));
|
||||
}
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status ScaleImageCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status ScaleImageCalculator::Process(CalculatorContext* cc) {
|
||||
if (cc->InputTimestamp() == Timestamp::PreStream()) {
|
||||
if (cc->Inputs().HasTag("OVERRIDE_OPTIONS")) {
|
||||
if (cc->Inputs().Tag("OVERRIDE_OPTIONS").IsEmpty()) {
|
||||
return ::mediapipe::InvalidArgumentError(
|
||||
return mediapipe::InvalidArgumentError(
|
||||
"The OVERRIDE_OPTIONS input stream must be non-empty at PreStream "
|
||||
"time if used.");
|
||||
}
|
||||
@@ -549,7 +549,7 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
input_video_header_ = cc->Inputs().Tag("VIDEO_HEADER").Get<VideoHeader>();
|
||||
}
|
||||
if (cc->Inputs().Get(input_data_id_).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -603,7 +603,7 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
cc->Outputs()
|
||||
.Get(output_data_id_)
|
||||
.Add(output_image.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
} else {
|
||||
image_frame = &cc->Inputs().Get(input_data_id_).Get<ImageFrame>();
|
||||
@@ -664,7 +664,7 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
}
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
// Rescale the image frame.
|
||||
@@ -698,7 +698,7 @@ ScaleImageCalculator::~ScaleImageCalculator() {}
|
||||
cc->Outputs()
|
||||
.Get(output_data_id_)
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -35,11 +35,11 @@ double ParseRational(const std::string& rational) {
|
||||
}
|
||||
} // namespace
|
||||
|
||||
::mediapipe::Status FindCropDimensions(int input_width, int input_height, //
|
||||
const std::string& min_aspect_ratio, //
|
||||
const std::string& max_aspect_ratio, //
|
||||
int* crop_width, int* crop_height, //
|
||||
int* col_start, int* row_start) {
|
||||
mediapipe::Status FindCropDimensions(int input_width, int input_height, //
|
||||
const std::string& min_aspect_ratio, //
|
||||
const std::string& max_aspect_ratio, //
|
||||
int* crop_width, int* crop_height, //
|
||||
int* col_start, int* row_start) {
|
||||
CHECK(crop_width);
|
||||
CHECK(crop_height);
|
||||
CHECK(col_start);
|
||||
@@ -85,17 +85,16 @@ double ParseRational(const std::string& rational) {
|
||||
|
||||
CHECK_LE(*crop_width, input_width);
|
||||
CHECK_LE(*crop_height, input_height);
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FindOutputDimensions(int input_width, //
|
||||
int input_height, //
|
||||
int target_width, //
|
||||
int target_height, //
|
||||
bool preserve_aspect_ratio, //
|
||||
int scale_to_multiple_of, //
|
||||
int* output_width,
|
||||
int* output_height) {
|
||||
mediapipe::Status FindOutputDimensions(int input_width, //
|
||||
int input_height, //
|
||||
int target_width, //
|
||||
int target_height, //
|
||||
bool preserve_aspect_ratio, //
|
||||
int scale_to_multiple_of, //
|
||||
int* output_width, int* output_height) {
|
||||
CHECK(output_width);
|
||||
CHECK(output_height);
|
||||
|
||||
@@ -123,7 +122,7 @@ double ParseRational(const std::string& rational) {
|
||||
*output_width = target_width;
|
||||
*output_height = target_height;
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
if (target_width > 0) {
|
||||
@@ -140,7 +139,7 @@ double ParseRational(const std::string& rational) {
|
||||
// was within the image, so use these dimensions.
|
||||
*output_width = try_width;
|
||||
*output_height = try_height;
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,7 +157,7 @@ double ParseRational(const std::string& rational) {
|
||||
// was within the image, so use these dimensions.
|
||||
*output_width = try_width;
|
||||
*output_height = try_height;
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
}
|
||||
RET_CHECK_FAIL()
|
||||
|
||||
@@ -28,11 +28,11 @@ namespace scale_image {
|
||||
// is a centered, cropped portion of the image that falls within the min
|
||||
// and max aspect ratio. If either the min or max aspect ratio argument
|
||||
// is empty or has a 0 in the numerator or denominator then it is ignored.
|
||||
::mediapipe::Status FindCropDimensions(int input_width, int input_height, //
|
||||
const std::string& min_aspect_ratio, //
|
||||
const std::string& max_aspect_ratio, //
|
||||
int* crop_width, int* crop_height, //
|
||||
int* col_start, int* row_start);
|
||||
mediapipe::Status FindCropDimensions(int input_width, int input_height, //
|
||||
const std::string& min_aspect_ratio, //
|
||||
const std::string& max_aspect_ratio, //
|
||||
int* crop_width, int* crop_height, //
|
||||
int* col_start, int* row_start);
|
||||
|
||||
// Given an input width and height, a target width and height, whether to
|
||||
// preserve the aspect ratio, and whether to round-down to the multiple of a
|
||||
@@ -43,12 +43,12 @@ namespace scale_image {
|
||||
// output_height will be reduced as necessary to preserve_aspect_ratio if the
|
||||
// option is specified. If preserving the aspect ratio is desired, you must set
|
||||
// scale_to_multiple_of to 2.
|
||||
::mediapipe::Status FindOutputDimensions(int input_width, int input_height, //
|
||||
int target_width,
|
||||
int target_height, //
|
||||
bool preserve_aspect_ratio, //
|
||||
int scale_to_multiple_of, //
|
||||
int* output_width, int* output_height);
|
||||
mediapipe::Status FindOutputDimensions(int input_width, int input_height, //
|
||||
int target_width,
|
||||
int target_height, //
|
||||
bool preserve_aspect_ratio, //
|
||||
int scale_to_multiple_of, //
|
||||
int* output_width, int* output_height);
|
||||
|
||||
} // namespace scale_image
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -87,18 +87,18 @@ class SetAlphaCalculator : public CalculatorBase {
|
||||
SetAlphaCalculator() = default;
|
||||
~SetAlphaCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
// From Calculator.
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
::mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderGpu(CalculatorContext* cc);
|
||||
mediapipe::Status RenderCpu(CalculatorContext* cc);
|
||||
|
||||
::mediapipe::Status GlSetup(CalculatorContext* cc);
|
||||
mediapipe::Status GlSetup(CalculatorContext* cc);
|
||||
void GlRender(CalculatorContext* cc);
|
||||
|
||||
mediapipe::SetAlphaCalculatorOptions options_;
|
||||
@@ -113,18 +113,18 @@ class SetAlphaCalculator : public CalculatorBase {
|
||||
};
|
||||
REGISTER_CALCULATOR(SetAlphaCalculator);
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::GetContract(CalculatorContract* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::GetContract(CalculatorContract* cc) {
|
||||
CHECK_GE(cc->Inputs().NumEntries(), 1);
|
||||
|
||||
bool use_gpu = false;
|
||||
|
||||
if (cc->Inputs().HasTag(kInputFrameTag) &&
|
||||
cc->Inputs().HasTag(kInputFrameTagGpu)) {
|
||||
return ::mediapipe::InternalError("Cannot have multiple input images.");
|
||||
return mediapipe::InternalError("Cannot have multiple input images.");
|
||||
}
|
||||
if (cc->Inputs().HasTag(kInputFrameTagGpu) !=
|
||||
cc->Outputs().HasTag(kOutputFrameTagGpu)) {
|
||||
return ::mediapipe::InternalError("GPU output must have GPU input.");
|
||||
return mediapipe::InternalError("GPU output must have GPU input.");
|
||||
}
|
||||
|
||||
// Input image to add/edit alpha channel.
|
||||
@@ -166,10 +166,10 @@ REGISTER_CALCULATOR(SetAlphaCalculator);
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::Open(CalculatorContext* cc) {
|
||||
cc->SetOffset(TimestampDiff(0));
|
||||
|
||||
options_ = cc->Options<mediapipe::SetAlphaCalculatorOptions>();
|
||||
@@ -198,30 +198,30 @@ REGISTER_CALCULATOR(SetAlphaCalculator);
|
||||
#endif
|
||||
} // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::Process(CalculatorContext* cc) {
|
||||
if (use_gpu_) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
MP_RETURN_IF_ERROR(
|
||||
gpu_helper_.RunInGlContext([this, cc]() -> ::mediapipe::Status {
|
||||
gpu_helper_.RunInGlContext([this, cc]() -> mediapipe::Status {
|
||||
if (!gpu_initialized_) {
|
||||
MP_RETURN_IF_ERROR(GlSetup(cc));
|
||||
gpu_initialized_ = true;
|
||||
}
|
||||
MP_RETURN_IF_ERROR(RenderGpu(cc));
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}));
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
} else {
|
||||
MP_RETURN_IF_ERROR(RenderCpu(cc));
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::Close(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
gpu_helper_.RunInGlContext([this] {
|
||||
if (program_) glDeleteProgram(program_);
|
||||
@@ -229,12 +229,12 @@ REGISTER_CALCULATOR(SetAlphaCalculator);
|
||||
});
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::RenderCpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kInputFrameTag).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
// Setup source image
|
||||
@@ -294,12 +294,12 @@ REGISTER_CALCULATOR(SetAlphaCalculator);
|
||||
.Tag(kOutputFrameTag)
|
||||
.Add(output_frame.release(), cc->InputTimestamp());
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::RenderGpu(CalculatorContext* cc) {
|
||||
if (cc->Inputs().Tag(kInputFrameTagGpu).IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
// Setup source texture.
|
||||
@@ -356,7 +356,7 @@ REGISTER_CALCULATOR(SetAlphaCalculator);
|
||||
output_texture.Release();
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void SetAlphaCalculator::GlRender(CalculatorContext* cc) {
|
||||
@@ -412,7 +412,7 @@ void SetAlphaCalculator::GlRender(CalculatorContext* cc) {
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
}
|
||||
|
||||
::mediapipe::Status SetAlphaCalculator::GlSetup(CalculatorContext* cc) {
|
||||
mediapipe::Status SetAlphaCalculator::GlSetup(CalculatorContext* cc) {
|
||||
#if !defined(MEDIAPIPE_DISABLE_GPU)
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
ATTRIB_VERTEX,
|
||||
@@ -468,7 +468,7 @@ void SetAlphaCalculator::GlRender(CalculatorContext* cc) {
|
||||
|
||||
#endif // !MEDIAPIPE_DISABLE_GPU
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -27,10 +27,10 @@ namespace mediapipe {
|
||||
// See GlSimpleCalculatorBase for inputs, outputs and input side packets.
|
||||
class SobelEdgesCalculator : public GlSimpleCalculator {
|
||||
public:
|
||||
::mediapipe::Status GlSetup() override;
|
||||
::mediapipe::Status GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) override;
|
||||
::mediapipe::Status GlTeardown() override;
|
||||
mediapipe::Status GlSetup() override;
|
||||
mediapipe::Status GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) override;
|
||||
mediapipe::Status GlTeardown() override;
|
||||
|
||||
private:
|
||||
GLuint program_ = 0;
|
||||
@@ -40,7 +40,7 @@ class SobelEdgesCalculator : public GlSimpleCalculator {
|
||||
};
|
||||
REGISTER_CALCULATOR(SobelEdgesCalculator);
|
||||
|
||||
::mediapipe::Status SobelEdgesCalculator::GlSetup() {
|
||||
mediapipe::Status SobelEdgesCalculator::GlSetup() {
|
||||
// Load vertex and fragment shaders
|
||||
const GLint attr_location[NUM_ATTRIBUTES] = {
|
||||
ATTRIB_VERTEX,
|
||||
@@ -166,11 +166,11 @@ REGISTER_CALCULATOR(SobelEdgesCalculator);
|
||||
frame_ = glGetUniformLocation(program_, "inputImage");
|
||||
pixel_w_ = glGetUniformLocation(program_, "pixelW");
|
||||
pixel_h_ = glGetUniformLocation(program_, "pixelH");
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SobelEdgesCalculator::GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) {
|
||||
mediapipe::Status SobelEdgesCalculator::GlRender(const GlTexture& src,
|
||||
const GlTexture& dst) {
|
||||
static const GLfloat square_vertices[] = {
|
||||
-1.0f, -1.0f, // bottom left
|
||||
1.0f, -1.0f, // bottom right
|
||||
@@ -225,15 +225,15 @@ REGISTER_CALCULATOR(SobelEdgesCalculator);
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
glDeleteBuffers(2, vbo);
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status SobelEdgesCalculator::GlTeardown() {
|
||||
mediapipe::Status SobelEdgesCalculator::GlTeardown() {
|
||||
if (program_) {
|
||||
glDeleteProgram(program_);
|
||||
program_ = 0;
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
Reference in New Issue
Block a user