blob: 45bc3c000a91c8ec42b7218a88271131e0c5137d [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <vector>
#include "build/buildflag.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/mediapipe/buildflags.h"
#include "third_party/mediapipe/src/mediapipe/framework/calculator.pb.h"
#include "third_party/mediapipe/src/mediapipe/framework/calculator_graph.h"
namespace {
TEST(MediaEffectsMediaPipe, OnCpu) {
// Configures a simple graph, which concatenates 2 PassThroughCalculators.
mediapipe::CalculatorGraphConfig config;
config.add_input_stream("in");
config.add_output_stream("out");
auto* node1 = config.add_node();
*node1->mutable_calculator() = "PassThroughCalculator";
node1->add_input_stream("in");
node1->add_output_stream("out1");
auto* node2 = config.add_node();
*node2->mutable_calculator() = "PassThroughCalculator";
node2->add_input_stream("out1");
node2->add_output_stream("out");
mediapipe::CalculatorGraph graph;
absl::Status status = graph.Initialize(config);
ASSERT_TRUE(status.ok()) << "Failed to initialize calculator graph, error: "
<< status;
absl::StatusOr<mediapipe::OutputStreamPoller> maybe_poller =
graph.AddOutputStreamPoller("out");
ASSERT_TRUE(maybe_poller.ok())
<< "Failed to obtain poller, error: " << maybe_poller.status();
mediapipe::OutputStreamPoller poller = std::move(maybe_poller.value());
status = graph.StartRun({});
ASSERT_TRUE(status.ok()) << "Failed to start run on the graph, error: "
<< status;
// Give 10 input packets that contains the same string "Hello World!".
for (int i = 0; i < 10; ++i) {
status = graph.AddPacketToInputStream(
"in", mediapipe::MakePacket<std::string>("Hello World!")
.At(mediapipe::Timestamp(i)));
ASSERT_TRUE(status.ok())
<< "Failed to add packet to input stream, error: " << status;
}
// Close the input stream "in".
status = graph.CloseInputStream("in");
ASSERT_TRUE(status.ok()) << "Failed to close the input stream, error: "
<< status;
int iteration = 0;
mediapipe::Packet packet;
// Get the output packets string.
while (poller.Next(&packet)) {
LOG(INFO) << packet.Get<std::string>();
++iteration;
}
EXPECT_EQ(iteration, 10)
<< "insufficient number of packets read from the graph!";
status = graph.WaitUntilDone();
ASSERT_TRUE(status.ok()) << "WaitUntilDone() failed, error: " << status;
}
} // namespace