Project import generated by Copybara.
GitOrigin-RevId: 1610e588e497817fae2d9a458093ab6a370e2972
This commit is contained in:
@@ -34,6 +34,13 @@ typedef int DimensionsPacketType[2];
|
||||
|
||||
namespace mediapipe {
|
||||
|
||||
constexpr char kLeftRightPaddingTag[] = "LEFT_RIGHT_PADDING";
|
||||
constexpr char kTopBottomPaddingTag[] = "TOP_BOTTOM_PADDING";
|
||||
constexpr char kOptionsTag[] = "OPTIONS";
|
||||
constexpr char kOutputDimensionsTag[] = "OUTPUT_DIMENSIONS";
|
||||
constexpr char kRotationTag[] = "ROTATION";
|
||||
constexpr char kImageTag[] = "IMAGE";
|
||||
|
||||
using Image = mediapipe::Image;
|
||||
|
||||
// Scales, rotates, horizontal or vertical flips the image.
|
||||
@@ -102,41 +109,41 @@ REGISTER_CALCULATOR(GlScalerCalculator);
|
||||
|
||||
// static
|
||||
absl::Status GlScalerCalculator::GetContract(CalculatorContract* cc) {
|
||||
if (cc->Inputs().HasTag("IMAGE")) {
|
||||
cc->Inputs().Tag("IMAGE").Set<Image>();
|
||||
if (cc->Inputs().HasTag(kImageTag)) {
|
||||
cc->Inputs().Tag(kImageTag).Set<Image>();
|
||||
} else {
|
||||
TagOrIndex(&cc->Inputs(), "VIDEO", 0).Set<GpuBuffer>();
|
||||
}
|
||||
if (cc->Outputs().HasTag("IMAGE")) {
|
||||
cc->Outputs().Tag("IMAGE").Set<Image>();
|
||||
if (cc->Outputs().HasTag(kImageTag)) {
|
||||
cc->Outputs().Tag(kImageTag).Set<Image>();
|
||||
} else {
|
||||
TagOrIndex(&cc->Outputs(), "VIDEO", 0).Set<GpuBuffer>();
|
||||
}
|
||||
|
||||
if (cc->Inputs().HasTag("ROTATION")) {
|
||||
cc->Inputs().Tag("ROTATION").Set<int>();
|
||||
if (cc->Inputs().HasTag(kRotationTag)) {
|
||||
cc->Inputs().Tag(kRotationTag).Set<int>();
|
||||
}
|
||||
if (cc->Inputs().HasTag("OUTPUT_DIMENSIONS")) {
|
||||
cc->Inputs().Tag("OUTPUT_DIMENSIONS").Set<DimensionsPacketType>();
|
||||
if (cc->Inputs().HasTag(kOutputDimensionsTag)) {
|
||||
cc->Inputs().Tag(kOutputDimensionsTag).Set<DimensionsPacketType>();
|
||||
}
|
||||
MP_RETURN_IF_ERROR(GlCalculatorHelper::UpdateContract(cc));
|
||||
|
||||
if (cc->InputSidePackets().HasTag("OPTIONS")) {
|
||||
cc->InputSidePackets().Tag("OPTIONS").Set<GlScalerCalculatorOptions>();
|
||||
if (cc->InputSidePackets().HasTag(kOptionsTag)) {
|
||||
cc->InputSidePackets().Tag(kOptionsTag).Set<GlScalerCalculatorOptions>();
|
||||
}
|
||||
if (HasTagOrIndex(&cc->InputSidePackets(), "OUTPUT_DIMENSIONS", 1)) {
|
||||
TagOrIndex(&cc->InputSidePackets(), "OUTPUT_DIMENSIONS", 1)
|
||||
.Set<DimensionsPacketType>();
|
||||
}
|
||||
if (cc->InputSidePackets().HasTag("ROTATION")) {
|
||||
if (cc->InputSidePackets().HasTag(kRotationTag)) {
|
||||
// Counterclockwise rotation.
|
||||
cc->InputSidePackets().Tag("ROTATION").Set<int>();
|
||||
cc->InputSidePackets().Tag(kRotationTag).Set<int>();
|
||||
}
|
||||
|
||||
if (cc->Outputs().HasTag("TOP_BOTTOM_PADDING") &&
|
||||
cc->Outputs().HasTag("LEFT_RIGHT_PADDING")) {
|
||||
cc->Outputs().Tag("TOP_BOTTOM_PADDING").Set<float>();
|
||||
cc->Outputs().Tag("LEFT_RIGHT_PADDING").Set<float>();
|
||||
if (cc->Outputs().HasTag(kTopBottomPaddingTag) &&
|
||||
cc->Outputs().HasTag(kLeftRightPaddingTag)) {
|
||||
cc->Outputs().Tag(kTopBottomPaddingTag).Set<float>();
|
||||
cc->Outputs().Tag(kLeftRightPaddingTag).Set<float>();
|
||||
}
|
||||
return absl::OkStatus();
|
||||
}
|
||||
@@ -187,8 +194,8 @@ absl::Status GlScalerCalculator::Open(CalculatorContext* cc) {
|
||||
dst_width_ = dimensions[0];
|
||||
dst_height_ = dimensions[1];
|
||||
}
|
||||
if (cc->InputSidePackets().HasTag("ROTATION")) {
|
||||
rotation_ccw = cc->InputSidePackets().Tag("ROTATION").Get<int>();
|
||||
if (cc->InputSidePackets().HasTag(kRotationTag)) {
|
||||
rotation_ccw = cc->InputSidePackets().Tag(kRotationTag).Get<int>();
|
||||
}
|
||||
|
||||
MP_RETURN_IF_ERROR(FrameRotationFromInt(&rotation_, rotation_ccw));
|
||||
@@ -197,22 +204,22 @@ absl::Status GlScalerCalculator::Open(CalculatorContext* cc) {
|
||||
}
|
||||
|
||||
absl::Status GlScalerCalculator::Process(CalculatorContext* cc) {
|
||||
if (cc->Inputs().HasTag("OUTPUT_DIMENSIONS")) {
|
||||
if (cc->Inputs().Tag("OUTPUT_DIMENSIONS").IsEmpty()) {
|
||||
if (cc->Inputs().HasTag(kOutputDimensionsTag)) {
|
||||
if (cc->Inputs().Tag(kOutputDimensionsTag).IsEmpty()) {
|
||||
// OUTPUT_DIMENSIONS input stream is specified, but value is missing.
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
const auto& dimensions =
|
||||
cc->Inputs().Tag("OUTPUT_DIMENSIONS").Get<DimensionsPacketType>();
|
||||
cc->Inputs().Tag(kOutputDimensionsTag).Get<DimensionsPacketType>();
|
||||
dst_width_ = dimensions[0];
|
||||
dst_height_ = dimensions[1];
|
||||
}
|
||||
|
||||
return helper_.RunInGlContext([this, cc]() -> absl::Status {
|
||||
const auto& input =
|
||||
cc->Inputs().HasTag("IMAGE")
|
||||
? cc->Inputs().Tag("IMAGE").Get<Image>().GetGpuBuffer()
|
||||
cc->Inputs().HasTag(kImageTag)
|
||||
? cc->Inputs().Tag(kImageTag).Get<Image>().GetGpuBuffer()
|
||||
: TagOrIndex(cc->Inputs(), "VIDEO", 0).Get<GpuBuffer>();
|
||||
QuadRenderer* renderer = nullptr;
|
||||
GlTexture src1;
|
||||
@@ -254,8 +261,8 @@ absl::Status GlScalerCalculator::Process(CalculatorContext* cc) {
|
||||
RET_CHECK(renderer) << "Unsupported input texture type";
|
||||
|
||||
// Override input side packet if ROTATION input packet is provided.
|
||||
if (cc->Inputs().HasTag("ROTATION")) {
|
||||
int rotation_ccw = cc->Inputs().Tag("ROTATION").Get<int>();
|
||||
if (cc->Inputs().HasTag(kRotationTag)) {
|
||||
int rotation_ccw = cc->Inputs().Tag(kRotationTag).Get<int>();
|
||||
MP_RETURN_IF_ERROR(FrameRotationFromInt(&rotation_, rotation_ccw));
|
||||
}
|
||||
|
||||
@@ -263,18 +270,18 @@ absl::Status GlScalerCalculator::Process(CalculatorContext* cc) {
|
||||
int dst_height;
|
||||
GetOutputDimensions(src1.width(), src1.height(), &dst_width, &dst_height);
|
||||
|
||||
if (cc->Outputs().HasTag("TOP_BOTTOM_PADDING") &&
|
||||
cc->Outputs().HasTag("LEFT_RIGHT_PADDING")) {
|
||||
if (cc->Outputs().HasTag(kTopBottomPaddingTag) &&
|
||||
cc->Outputs().HasTag(kLeftRightPaddingTag)) {
|
||||
float top_bottom_padding;
|
||||
float left_right_padding;
|
||||
GetOutputPadding(src1.width(), src1.height(), dst_width, dst_height,
|
||||
&top_bottom_padding, &left_right_padding);
|
||||
cc->Outputs()
|
||||
.Tag("TOP_BOTTOM_PADDING")
|
||||
.Tag(kTopBottomPaddingTag)
|
||||
.AddPacket(
|
||||
MakePacket<float>(top_bottom_padding).At(cc->InputTimestamp()));
|
||||
cc->Outputs()
|
||||
.Tag("LEFT_RIGHT_PADDING")
|
||||
.Tag(kLeftRightPaddingTag)
|
||||
.AddPacket(
|
||||
MakePacket<float>(left_right_padding).At(cc->InputTimestamp()));
|
||||
}
|
||||
@@ -304,9 +311,9 @@ absl::Status GlScalerCalculator::Process(CalculatorContext* cc) {
|
||||
|
||||
glFlush();
|
||||
|
||||
if (cc->Outputs().HasTag("IMAGE")) {
|
||||
if (cc->Outputs().HasTag(kImageTag)) {
|
||||
auto output = dst.GetFrame<Image>();
|
||||
cc->Outputs().Tag("IMAGE").Add(output.release(), cc->InputTimestamp());
|
||||
cc->Outputs().Tag(kImageTag).Add(output.release(), cc->InputTimestamp());
|
||||
} else {
|
||||
auto output = dst.GetFrame<GpuBuffer>();
|
||||
TagOrIndex(&cc->Outputs(), "VIDEO", 0)
|
||||
|
||||
Reference in New Issue
Block a user