Project import generated by Copybara.

GitOrigin-RevId: d8caa66de45839696f5bd0786ad3bfbcb9cff632
This commit is contained in:
MediaPipe Team
2020-12-09 22:43:33 -05:00
committed by chuoling
parent f15da632de
commit 2b58cceec9
750 changed files with 22901 additions and 9478 deletions
@@ -4,9 +4,9 @@
#include "mediapipe/framework/port/integral_types.h"
#include "mediapipe/framework/type_map.h"
#define MEDIAPIPE_REGISTER_GENERIC_TYPE(type) \
MEDIAPIPE_REGISTER_TYPE( \
::mediapipe::type_map_internal::ReflectType<void(type*)>::Type, #type, \
#define MEDIAPIPE_REGISTER_GENERIC_TYPE(type) \
MEDIAPIPE_REGISTER_TYPE( \
mediapipe::type_map_internal::ReflectType<void(type*)>::Type, #type, \
nullptr, nullptr)
// Note: we cannot define a type which type hash id is already in the map.
+18 -18
View File
@@ -81,7 +81,7 @@ class CalculatorBase {
// this function is static the registration macro provides access to
// each subclass' GetContract function.
//
// static ::mediapipe::Status GetContract(CalculatorContract* cc);
// static mediapipe::Status GetContract(CalculatorContract* cc);
//
// GetContract fills in the calculator's contract with the framework, such
// as its expectations of what packets it will receive. When this function
@@ -115,23 +115,23 @@ class CalculatorBase {
// Open is called before any Process() calls, on a freshly constructed
// calculator. Subclasses may override this method to perform necessary
// setup, and possibly output Packets and/or set output streams' headers.
// Must return ::mediapipe::OkStatus() to indicate success. On failure any
// Must return mediapipe::OkStatus() to indicate success. On failure any
// other status code can be returned. If failure is returned then the
// framework will call neither Process() nor Close() on the calculator (so any
// necessary cleanup should be done before returning failure or in the
// destructor).
virtual ::mediapipe::Status Open(CalculatorContext* cc) {
return ::mediapipe::OkStatus();
virtual mediapipe::Status Open(CalculatorContext* cc) {
return mediapipe::OkStatus();
}
// Processes the incoming inputs. May call the methods on cc to access
// inputs and produce outputs.
//
// Process() called on a non-source node must return
// ::mediapipe::OkStatus() to indicate that all went well, or any other
// mediapipe::OkStatus() to indicate that all went well, or any other
// status code to signal an error.
// For example:
// ::mediapipe::UnknownError("Failure Message");
// mediapipe::UnknownError("Failure Message");
// Notice the convenience functions in util/task/canonical_errors.h .
// If a non-source Calculator returns tool::StatusStop(), then this
// signals the graph is being cancelled early. In this case, all
@@ -139,22 +139,22 @@ class CalculatorBase {
// remaining Packets will propagate through the graph).
//
// A source node will continue to have Process() called on it as long
// as it returns ::mediapipe::OkStatus(). To indicate that there is
// as it returns mediapipe::OkStatus(). To indicate that there is
// no more data to be generated return tool::StatusStop(). Any other
// status indicates an error has occurred.
virtual ::mediapipe::Status Process(CalculatorContext* cc) = 0;
virtual mediapipe::Status Process(CalculatorContext* cc) = 0;
// Is called if Open() was called and succeeded. Is called either
// immediately after processing is complete or after a graph run has ended
// (if an error occurred in the graph). Must return ::mediapipe::OkStatus()
// (if an error occurred in the graph). Must return mediapipe::OkStatus()
// to indicate success. On failure any other status code can be returned.
// Packets may be output during a call to Close(). However, output packets
// are silently discarded if Close() is called after a graph run has ended.
//
// NOTE: If Close() needs to perform an action only when processing is
// complete, Close() must check if cc->GraphStatus() is OK.
virtual ::mediapipe::Status Close(CalculatorContext* cc) {
return ::mediapipe::OkStatus();
virtual mediapipe::Status Close(CalculatorContext* cc) {
return mediapipe::OkStatus();
}
// Returns a value according to which the framework selects
@@ -178,7 +178,7 @@ namespace internal {
class StaticAccessToCalculatorBase {
public:
virtual ~StaticAccessToCalculatorBase() {}
virtual ::mediapipe::Status GetContract(CalculatorContract* cc) = 0;
virtual mediapipe::Status GetContract(CalculatorContract* cc) = 0;
};
using StaticAccessToCalculatorBaseRegistry =
@@ -187,7 +187,7 @@ using StaticAccessToCalculatorBaseRegistry =
// Functions for checking that the calculator has the required GetContract.
template <class T>
constexpr bool CalculatorHasGetContract(decltype(&T::GetContract) /*unused*/) {
typedef ::mediapipe::Status (*GetContractType)(CalculatorContract * cc);
typedef mediapipe::Status (*GetContractType)(CalculatorContract * cc);
return std::is_same<decltype(&T::GetContract), GetContractType>::value;
}
template <class T>
@@ -200,17 +200,17 @@ constexpr bool CalculatorHasGetContract(...) {
template <typename CalculatorBaseSubclass>
class StaticAccessToCalculatorBaseTyped : public StaticAccessToCalculatorBase {
public:
static_assert(std::is_base_of<::mediapipe::CalculatorBase,
CalculatorBaseSubclass>::value,
"Classes registered with REGISTER_CALCULATOR must be "
"subclasses of ::mediapipe::CalculatorBase.");
static_assert(
std::is_base_of<mediapipe::CalculatorBase, CalculatorBaseSubclass>::value,
"Classes registered with REGISTER_CALCULATOR must be "
"subclasses of mediapipe::CalculatorBase.");
static_assert(CalculatorHasGetContract<CalculatorBaseSubclass>(nullptr),
"GetContract() must be defined with the correct signature in "
"every calculator.");
// Provides access to the static function GetContract within a specific
// subclass of CalculatorBase.
::mediapipe::Status GetContract(CalculatorContract* cc) final {
mediapipe::Status GetContract(CalculatorContract* cc) final {
// CalculatorBaseSubclass must implement this function, since it is not
// implemented in the parent class.
return CalculatorBaseSubclass::GetContract(cc);
+21 -21
View File
@@ -41,7 +41,7 @@ namespace test_ns {
// streams and input side packets.
class DeadEndCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
cc->Inputs().Index(i).SetAny();
}
@@ -51,16 +51,16 @@ class DeadEndCalculator : public CalculatorBase {
for (int i = 0; i < cc->InputSidePackets().NumEntries(); ++i) {
cc->InputSidePackets().Index(i).SetAny();
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) override {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
if (cc->Inputs().NumEntries() > 0) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
} else {
// This is a source calculator, but we don't produce any outputs.
return tool::StatusStop();
@@ -73,14 +73,14 @@ namespace whitelisted_ns {
class DeadCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
return ::mediapipe::OkStatus();
static mediapipe::Status GetContract(CalculatorContract* cc) {
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) override {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
return ::mediapipe::OkStatus();
mediapipe::Status Process(CalculatorContext* cc) override {
return mediapipe::OkStatus();
}
};
@@ -89,14 +89,14 @@ class DeadCalculator : public CalculatorBase {
class EndCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
return ::mediapipe::OkStatus();
static mediapipe::Status GetContract(CalculatorContract* cc) {
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) override {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
return ::mediapipe::OkStatus();
mediapipe::Status Process(CalculatorContext* cc) override {
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(::mediapipe::EndCalculator);
@@ -181,13 +181,13 @@ TEST(CalculatorTest, CreateByName) {
"mediapipe", "DeadEndCalculator")
.status()
.code(),
::mediapipe::StatusCode::kNotFound);
mediapipe::StatusCode::kNotFound);
EXPECT_EQ(CalculatorBaseRegistry::CreateByName( //
"DeadEndCalculator")
.status()
.code(),
::mediapipe::StatusCode::kNotFound);
mediapipe::StatusCode::kNotFound);
}
// Tests registration of a calculator within a whitelisted namespace.
@@ -202,7 +202,7 @@ TEST(CalculatorTest, CreateByNameWhitelisted) {
// Register a whitelisted calculator.
CalculatorBaseRegistry::Register(
"::mediapipe::test_ns::whitelisted_ns::DeadCalculator",
absl::make_unique< ::mediapipe::test_ns::whitelisted_ns::DeadCalculator>);
absl::make_unique<mediapipe::test_ns::whitelisted_ns::DeadCalculator>);
// A whitelisted calculator can be found in its own namespace.
MP_EXPECT_OK(CalculatorBaseRegistry::CreateByNameInNamespace( //
+3 -3
View File
@@ -103,7 +103,7 @@ class CalculatorContext {
// Returns the status of the graph run.
//
// NOTE: This method should only be called during CalculatorBase::Close().
::mediapipe::Status GraphStatus() const { return graph_status_; }
mediapipe::Status GraphStatus() const { return graph_status_; }
ProfilingContext* GetProfilingContext() const {
return calculator_state_->GetSharedProfilingContext().get();
@@ -148,7 +148,7 @@ class CalculatorContext {
input_timestamps_.pop();
}
void SetGraphStatus(const ::mediapipe::Status& status) {
void SetGraphStatus(const mediapipe::Status& status) {
graph_status_ = status;
}
@@ -167,7 +167,7 @@ class CalculatorContext {
std::queue<Timestamp> input_timestamps_;
// The status of the graph run. Only used when Close() is called.
::mediapipe::Status graph_status_;
mediapipe::Status graph_status_;
// Accesses CalculatorContext for setting input timestamp.
friend class CalculatorContextManager;
@@ -34,8 +34,8 @@ void CalculatorContextManager::Initialize(
calculator_run_in_parallel_ = calculator_run_in_parallel;
}
::mediapipe::Status CalculatorContextManager::PrepareForRun(
std::function<::mediapipe::Status(CalculatorContext*)>
mediapipe::Status CalculatorContextManager::PrepareForRun(
std::function<mediapipe::Status(CalculatorContext*)>
setup_shards_callback) {
setup_shards_callback_ = std::move(setup_shards_callback);
default_context_ = absl::make_unique<CalculatorContext>(
@@ -71,7 +71,7 @@ CalculatorContext* CalculatorContextManager::PrepareCalculatorContext(
return GetDefaultCalculatorContext();
}
absl::MutexLock lock(&contexts_mutex_);
CHECK(!::mediapipe::ContainsKey(active_contexts_, input_timestamp))
CHECK(!mediapipe::ContainsKey(active_contexts_, input_timestamp))
<< "Multiple invocations with the same timestamps are not allowed with "
"parallel execution, input_timestamp = "
<< input_timestamp;
@@ -45,8 +45,8 @@ class CalculatorContextManager {
// Sets the callback that can setup the input and output stream shards in a
// newly constructed calculator context. Then, initializes the default
// calculator context.
::mediapipe::Status PrepareForRun(
std::function<::mediapipe::Status(CalculatorContext*)>
mediapipe::Status PrepareForRun(
std::function<mediapipe::Status(CalculatorContext*)>
setup_shards_callback);
// Invoked by CalculatorNode::CleanupAfterRun().
@@ -108,7 +108,7 @@ class CalculatorContextManager {
}
void SetGraphStatusInContext(CalculatorContext* calculator_context,
const ::mediapipe::Status& status) {
const mediapipe::Status& status) {
CHECK(calculator_context);
calculator_context->SetGraphStatus(status);
}
@@ -124,7 +124,7 @@ class CalculatorContextManager {
// NOTE: This callback invokes input/output stream handler methods.
// The callback is used to break the circular dependency between
// calculator context manager and input/output stream handlers.
std::function<::mediapipe::Status(CalculatorContext*)> setup_shards_callback_;
std::function<mediapipe::Status(CalculatorContext*)> setup_shards_callback_;
// The default calculator context that is always reused for sequential
// execution. It is also used by Open() and Close() method of a parallel
+11 -11
View File
@@ -24,9 +24,9 @@
namespace mediapipe {
::mediapipe::Status CalculatorContract::Initialize(
mediapipe::Status CalculatorContract::Initialize(
const CalculatorGraphConfig::Node& node) {
std::vector<::mediapipe::Status> statuses;
std::vector<mediapipe::Status> statuses;
auto input_stream_statusor = tool::TagMap::Create(node.input_stream());
if (!input_stream_statusor.ok()) {
@@ -48,7 +48,7 @@ namespace mediapipe {
}
if (!statuses.empty()) {
auto builder = ::mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
auto builder = mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
<< "Unable to initialize TagMaps for node.";
for (const auto& status : statuses) {
builder << "\n" << status.message();
@@ -71,12 +71,12 @@ namespace mediapipe {
std::move(input_side_packet_statusor).ValueOrDie());
output_side_packets_ = absl::make_unique<PacketTypeSet>(
std::move(output_side_packet_statusor).ValueOrDie());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorContract::Initialize(
mediapipe::Status CalculatorContract::Initialize(
const PacketGeneratorConfig& node) {
std::vector<::mediapipe::Status> statuses;
std::vector<mediapipe::Status> statuses;
auto input_side_packet_statusor =
tool::TagMap::Create(node.input_side_packet());
@@ -106,12 +106,12 @@ namespace mediapipe {
std::move(input_side_packet_statusor).ValueOrDie());
output_side_packets_ = absl::make_unique<PacketTypeSet>(
std::move(output_side_packet_statusor).ValueOrDie());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorContract::Initialize(
mediapipe::Status CalculatorContract::Initialize(
const StatusHandlerConfig& node) {
std::vector<::mediapipe::Status> statuses;
std::vector<mediapipe::Status> statuses;
auto input_side_packet_statusor =
tool::TagMap::Create(node.input_side_packet());
@@ -120,7 +120,7 @@ namespace mediapipe {
}
if (!statuses.empty()) {
auto builder = ::mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
auto builder = mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
<< "NodeTypeInfo Initialization failed.";
for (const auto& status : statuses) {
builder << "\n" << status.message();
@@ -134,7 +134,7 @@ namespace mediapipe {
input_side_packets_ = absl::make_unique<PacketTypeSet>(
std::move(input_side_packet_statusor).ValueOrDie());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
} // namespace mediapipe
+3 -3
View File
@@ -47,9 +47,9 @@ namespace mediapipe {
//
class CalculatorContract {
public:
::mediapipe::Status Initialize(const CalculatorGraphConfig::Node& node);
::mediapipe::Status Initialize(const PacketGeneratorConfig& node);
::mediapipe::Status Initialize(const StatusHandlerConfig& node);
mediapipe::Status Initialize(const CalculatorGraphConfig::Node& node);
mediapipe::Status Initialize(const PacketGeneratorConfig& node);
mediapipe::Status Initialize(const StatusHandlerConfig& node);
void SetNodeName(const std::string& node_name) { node_name_ = node_name; }
// Returns the options given to this node.
@@ -30,7 +30,7 @@ namespace {
TEST(CalculatorContractTest, Calculator) {
const CalculatorGraphConfig::Node node =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig::Node>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig::Node>(R"(
calculator: "MixtureOfExpertsFusionCalculator"
input_stream: "FRAME:fdense_pca_moe_aggregated_detection"
input_stream: "FNET:fnet_logreg_aggregated_detection"
@@ -49,7 +49,7 @@ TEST(CalculatorContractTest, Calculator) {
TEST(CalculatorContractTest, CalculatorOptions) {
const CalculatorGraphConfig::Node node =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig::Node>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig::Node>(R"(
calculator: "CalculatorTestCalculator"
input_stream: "DATA:ycbcr_frames"
input_stream: "VIDEO_HEADER:ycbcr_frames_prestream"
@@ -71,7 +71,7 @@ TEST(CalculatorContractTest, CalculatorOptions) {
TEST(CalculatorContractTest, PacketGenerator) {
const PacketGeneratorConfig node =
::mediapipe::ParseTextProtoOrDie<PacketGeneratorConfig>(R"(
mediapipe::ParseTextProtoOrDie<PacketGeneratorConfig>(R"(
packet_generator: "DaredevilLabeledTimeSeriesGenerator"
input_side_packet: "labeled_time_series"
output_side_packet: "time_series_header"
@@ -87,7 +87,7 @@ TEST(CalculatorContractTest, PacketGenerator) {
TEST(CalculatorContractTest, StatusHandler) {
const StatusHandlerConfig node =
::mediapipe::ParseTextProtoOrDie<StatusHandlerConfig>(R"(
mediapipe::ParseTextProtoOrDie<StatusHandlerConfig>(R"(
status_handler: "TaskInjectorStatusHandler"
input_side_packet: "ROW:cid"
input_side_packet: "SPEC:task_specification"
+104 -107
View File
@@ -129,13 +129,13 @@ CalculatorGraph::CalculatorGraph(const CalculatorGraphConfig& config)
// instantiated.
CalculatorGraph::~CalculatorGraph() {
// Stop periodic profiler output to ublock Executor destructors.
::mediapipe::Status status = profiler()->Stop();
mediapipe::Status status = profiler()->Stop();
if (!status.ok()) {
LOG(ERROR) << "During graph destruction: " << status;
}
}
::mediapipe::Status CalculatorGraph::InitializePacketGeneratorGraph(
mediapipe::Status CalculatorGraph::InitializePacketGeneratorGraph(
const std::map<std::string, Packet>& side_packets) {
// Create and initialize the output side packets.
if (!validated_graph_->OutputSidePacketInfos().empty()) {
@@ -164,7 +164,7 @@ CalculatorGraph::~CalculatorGraph() {
default_executor, side_packets);
}
::mediapipe::Status CalculatorGraph::InitializeStreams() {
mediapipe::Status CalculatorGraph::InitializeStreams() {
any_packet_type_.SetAny();
// Create and initialize the input streams.
@@ -193,7 +193,7 @@ CalculatorGraph::~CalculatorGraph() {
auto input_tag_map,
tool::TagMap::Create(validated_graph_->Config().input_stream()));
for (const auto& stream_name : input_tag_map->Names()) {
RET_CHECK(!::mediapipe::ContainsKey(graph_input_streams_, stream_name))
RET_CHECK(!mediapipe::ContainsKey(graph_input_streams_, stream_name))
.SetNoLogging()
<< "CalculatorGraph Initialization failed, graph input stream \""
<< stream_name << "\" was specified twice.";
@@ -221,16 +221,16 @@ CalculatorGraph::~CalculatorGraph() {
graph_input_stream_add_mode_ = GraphInputStreamAddMode::WAIT_TILL_NOT_FULL;
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::InitializeCalculatorNodes() {
mediapipe::Status CalculatorGraph::InitializeCalculatorNodes() {
// Check if the user has specified a maximum queue size for an input stream.
max_queue_size_ = validated_graph_->Config().max_queue_size();
max_queue_size_ = max_queue_size_ ? max_queue_size_ : 100;
// Use a local variable to avoid needing to lock errors_.
std::vector<::mediapipe::Status> errors;
std::vector<mediapipe::Status> errors;
// Create and initialize all the nodes in the graph.
nodes_ = absl::make_unique<absl::FixedArray<CalculatorNode>>(
@@ -240,7 +240,7 @@ CalculatorGraph::~CalculatorGraph() {
// buffer_size_hint will be positive if one was specified in
// the graph proto.
int buffer_size_hint = 0;
const ::mediapipe::Status result = (*nodes_)[node_id].Initialize(
const mediapipe::Status result = (*nodes_)[node_id].Initialize(
validated_graph_.get(), node_id, input_stream_managers_.get(),
output_stream_managers_.get(), output_side_packets_.get(),
&buffer_size_hint, profiler_);
@@ -259,15 +259,15 @@ CalculatorGraph::~CalculatorGraph() {
VLOG(2) << "Maximum input stream queue size based on graph config: "
<< max_queue_size_;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::InitializeProfiler() {
mediapipe::Status CalculatorGraph::InitializeProfiler() {
profiler_->Initialize(*validated_graph_);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::InitializeExecutors() {
mediapipe::Status CalculatorGraph::InitializeExecutors() {
// If the ExecutorConfig for the default executor leaves the executor type
// unspecified, default_executor_options points to the
// ThreadPoolExecutorOptions in that ExecutorConfig. Otherwise,
@@ -276,9 +276,9 @@ CalculatorGraph::~CalculatorGraph() {
bool use_application_thread = false;
for (const ExecutorConfig& executor_config :
validated_graph_->Config().executor()) {
if (::mediapipe::ContainsKey(executors_, executor_config.name())) {
if (mediapipe::ContainsKey(executors_, executor_config.name())) {
if (!executor_config.type().empty()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "ExecutorConfig for \"" << executor_config.name()
<< "\" has a \"type\" field but is also provided to the graph "
"with a CalculatorGraph::SetExecutor() call.";
@@ -302,7 +302,7 @@ CalculatorGraph::~CalculatorGraph() {
}
}
if (executor_config.type().empty()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "ExecutorConfig for \"" << executor_config.name()
<< "\" does not have a \"type\" field. The executor \""
<< executor_config.name()
@@ -319,15 +319,15 @@ CalculatorGraph::~CalculatorGraph() {
executor_config.name(), std::shared_ptr<Executor>(executor)));
}
if (!::mediapipe::ContainsKey(executors_, "")) {
if (!mediapipe::ContainsKey(executors_, "")) {
MP_RETURN_IF_ERROR(InitializeDefaultExecutor(default_executor_options,
use_application_thread));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::InitializeDefaultExecutor(
mediapipe::Status CalculatorGraph::InitializeDefaultExecutor(
const ThreadPoolExecutorOptions* default_executor_options,
bool use_application_thread) {
#ifdef __EMSCRIPTEN__
@@ -340,7 +340,7 @@ CalculatorGraph::~CalculatorGraph() {
"", std::make_shared<internal::DelegatingExecutor>(
std::bind(&internal::Scheduler::AddApplicationThreadTask,
&scheduler_, std::placeholders::_1))));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
// Check the number of threads specified in the proto.
@@ -359,10 +359,10 @@ CalculatorGraph::~CalculatorGraph() {
}
MP_RETURN_IF_ERROR(
CreateDefaultThreadPool(default_executor_options, num_threads));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::Initialize(
mediapipe::Status CalculatorGraph::Initialize(
std::unique_ptr<ValidatedGraphConfig> validated_graph,
const std::map<std::string, Packet>& side_packets) {
RET_CHECK(!initialized_).SetNoLogging()
@@ -380,15 +380,15 @@ CalculatorGraph::~CalculatorGraph() {
#endif
initialized_ = true;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::Initialize(
mediapipe::Status CalculatorGraph::Initialize(
const CalculatorGraphConfig& input_config) {
return Initialize(input_config, {});
}
::mediapipe::Status CalculatorGraph::Initialize(
mediapipe::Status CalculatorGraph::Initialize(
const CalculatorGraphConfig& input_config,
const std::map<std::string, Packet>& side_packets) {
auto validated_graph = absl::make_unique<ValidatedGraphConfig>();
@@ -396,7 +396,7 @@ CalculatorGraph::~CalculatorGraph() {
return Initialize(std::move(validated_graph), side_packets);
}
::mediapipe::Status CalculatorGraph::Initialize(
mediapipe::Status CalculatorGraph::Initialize(
const std::vector<CalculatorGraphConfig>& input_configs,
const std::vector<CalculatorGraphTemplate>& input_templates,
const std::map<std::string, Packet>& side_packets,
@@ -407,16 +407,16 @@ CalculatorGraph::~CalculatorGraph() {
return Initialize(std::move(validated_graph), side_packets);
}
::mediapipe::Status CalculatorGraph::ObserveOutputStream(
mediapipe::Status CalculatorGraph::ObserveOutputStream(
const std::string& stream_name,
std::function<::mediapipe::Status(const Packet&)> packet_callback) {
std::function<mediapipe::Status(const Packet&)> packet_callback) {
RET_CHECK(initialized_).SetNoLogging()
<< "CalculatorGraph is not initialized.";
// TODO Allow output observers to be attached by graph level
// tag/index.
int output_stream_index = validated_graph_->OutputStreamIndex(stream_name);
if (output_stream_index < 0) {
return ::mediapipe::NotFoundErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::NotFoundErrorBuilder(MEDIAPIPE_LOC)
<< "Unable to attach observer to output stream \"" << stream_name
<< "\" because it doesn't exist.";
}
@@ -425,16 +425,16 @@ CalculatorGraph::~CalculatorGraph() {
stream_name, &any_packet_type_, std::move(packet_callback),
&output_stream_managers_[output_stream_index]));
graph_output_streams_.push_back(std::move(observer));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::StatusOr<OutputStreamPoller>
CalculatorGraph::AddOutputStreamPoller(const std::string& stream_name) {
mediapipe::StatusOr<OutputStreamPoller> CalculatorGraph::AddOutputStreamPoller(
const std::string& stream_name) {
RET_CHECK(initialized_).SetNoLogging()
<< "CalculatorGraph is not initialized.";
int output_stream_index = validated_graph_->OutputStreamIndex(stream_name);
if (output_stream_index < 0) {
return ::mediapipe::NotFoundErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::NotFoundErrorBuilder(MEDIAPIPE_LOC)
<< "Unable to attach observer to output stream \"" << stream_name
<< "\" because it doesn't exist.";
}
@@ -449,11 +449,11 @@ CalculatorGraph::AddOutputStreamPoller(const std::string& stream_name) {
return std::move(poller);
}
::mediapipe::StatusOr<Packet> CalculatorGraph::GetOutputSidePacket(
mediapipe::StatusOr<Packet> CalculatorGraph::GetOutputSidePacket(
const std::string& packet_name) {
int side_packet_index = validated_graph_->OutputSidePacketIndex(packet_name);
if (side_packet_index < 0) {
return ::mediapipe::NotFoundErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::NotFoundErrorBuilder(MEDIAPIPE_LOC)
<< "Unable to get the output side packet \"" << packet_name
<< "\" because it doesn't exist.";
}
@@ -478,7 +478,7 @@ CalculatorGraph::AddOutputStreamPoller(const std::string& stream_name) {
!current_run_side_packet_iter->second.IsEmpty()) {
output_packet = current_run_side_packet_iter->second;
} else {
return ::mediapipe::UnavailableErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::UnavailableErrorBuilder(MEDIAPIPE_LOC)
<< "The output side packet \"" << packet_name
<< "\" is unavailable.";
}
@@ -486,7 +486,7 @@ CalculatorGraph::AddOutputStreamPoller(const std::string& stream_name) {
return output_packet;
}
::mediapipe::Status CalculatorGraph::Run(
mediapipe::Status CalculatorGraph::Run(
const std::map<std::string, Packet>& extra_side_packets) {
RET_CHECK(graph_input_streams_.empty()).SetNoLogging()
<< "When using graph input streams, call StartRun() instead of Run() so "
@@ -495,7 +495,7 @@ CalculatorGraph::AddOutputStreamPoller(const std::string& stream_name) {
return WaitUntilDone();
}
::mediapipe::Status CalculatorGraph::StartRun(
mediapipe::Status CalculatorGraph::StartRun(
const std::map<std::string, Packet>& extra_side_packets,
const std::map<std::string, Packet>& stream_headers) {
RET_CHECK(initialized_).SetNoLogging()
@@ -503,18 +503,18 @@ CalculatorGraph::AddOutputStreamPoller(const std::string& stream_name) {
MP_RETURN_IF_ERROR(PrepareForRun(extra_side_packets, stream_headers));
MP_RETURN_IF_ERROR(profiler_->Start(executors_[""].get()));
scheduler_.Start();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
#ifndef MEDIAPIPE_DISABLE_GPU
::mediapipe::Status CalculatorGraph::SetGpuResources(
mediapipe::Status CalculatorGraph::SetGpuResources(
std::shared_ptr<::mediapipe::GpuResources> resources) {
RET_CHECK(!ContainsKey(service_packets_, kGpuService.key))
<< "The GPU resources have already been configured.";
service_packets_[kGpuService.key] =
MakePacket<std::shared_ptr<::mediapipe::GpuResources>>(
std::move(resources));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
std::shared_ptr<::mediapipe::GpuResources> CalculatorGraph::GetGpuResources()
@@ -524,8 +524,8 @@ std::shared_ptr<::mediapipe::GpuResources> CalculatorGraph::GetGpuResources()
return service_iter->second.Get<std::shared_ptr<::mediapipe::GpuResources>>();
}
::mediapipe::StatusOr<std::map<std::string, Packet>>
CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
mediapipe::StatusOr<std::map<std::string, Packet>> CalculatorGraph::PrepareGpu(
const std::map<std::string, Packet>& side_packets) {
std::map<std::string, Packet> additional_side_packets;
bool update_sp = false;
bool uses_gpu = false;
@@ -590,7 +590,7 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
}
#endif // !defined(MEDIAPIPE_DISABLE_GPU)
::mediapipe::Status CalculatorGraph::PrepareForRun(
mediapipe::Status CalculatorGraph::PrepareForRun(
const std::map<std::string, Packet>& extra_side_packets,
const std::map<std::string, Packet>& stream_headers) {
if (VLOG_IS_ON(1)) {
@@ -621,7 +621,7 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
}
current_run_side_packets_.clear();
::mediapipe::Status generator_status = packet_generator_graph_.RunGraphSetup(
mediapipe::Status generator_status = packet_generator_graph_.RunGraphSetup(
*input_side_packets, &current_run_side_packets_);
CallStatusHandlers(GraphRunState::PRE_RUN, generator_status);
@@ -632,7 +632,7 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
// If there was an error on the CallStatusHandlers (PRE_RUN), it was stored
// in the error list. We return immediately notifying this to the caller.
::mediapipe::Status error_status;
mediapipe::Status error_status;
if (has_error_) {
GetCombinedErrors(&error_status);
LOG(ERROR) << error_status;
@@ -682,7 +682,7 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
std::placeholders::_1, std::placeholders::_2);
node.SetQueueSizeCallbacks(queue_size_callback, queue_size_callback);
scheduler_.AssignNodeToSchedulerQueue(&node);
const ::mediapipe::Status result = node.PrepareForRun(
const mediapipe::Status result = node.PrepareForRun(
current_run_side_packets_, service_packets_,
std::bind(&internal::Scheduler::ScheduleNodeForOpen, &scheduler_,
&node),
@@ -700,13 +700,13 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
for (auto& graph_output_stream : graph_output_streams_) {
graph_output_stream->PrepareForRun(
[&graph_output_stream, this] {
::mediapipe::Status status = graph_output_stream->Notify();
mediapipe::Status status = graph_output_stream->Notify();
if (!status.ok()) {
RecordError(status);
}
scheduler_.EmittedObservedOutput();
},
[this](::mediapipe::Status status) { RecordError(status); });
[this](mediapipe::Status status) { RecordError(status); });
}
if (GetCombinedErrors(&error_status)) {
@@ -724,7 +724,7 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
// Allow graph input streams to override the global max queue size.
for (const auto& name_max : graph_input_stream_max_queue_size_) {
std::unique_ptr<GraphInputStream>* stream =
::mediapipe::FindOrNull(graph_input_streams_, name_max.first);
mediapipe::FindOrNull(graph_input_streams_, name_max.first);
RET_CHECK(stream).SetNoLogging() << absl::Substitute(
"SetInputStreamMaxQueueSize called on \"$0\" which is not a "
"graph input stream.",
@@ -759,20 +759,20 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::WaitUntilIdle() {
mediapipe::Status CalculatorGraph::WaitUntilIdle() {
MP_RETURN_IF_ERROR(scheduler_.WaitUntilIdle());
VLOG(2) << "Scheduler idle.";
::mediapipe::Status status = ::mediapipe::OkStatus();
mediapipe::Status status = mediapipe::OkStatus();
if (GetCombinedErrors(&status)) {
LOG(ERROR) << status;
}
return status;
}
::mediapipe::Status CalculatorGraph::WaitUntilDone() {
mediapipe::Status CalculatorGraph::WaitUntilDone() {
VLOG(2) << "Waiting for scheduler to terminate...";
MP_RETURN_IF_ERROR(scheduler_.WaitUntilDone());
VLOG(2) << "Scheduler terminated.";
@@ -780,16 +780,16 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
return FinishRun();
}
::mediapipe::Status CalculatorGraph::WaitForObservedOutput() {
mediapipe::Status CalculatorGraph::WaitForObservedOutput() {
return scheduler_.WaitForObservedOutput();
}
::mediapipe::Status CalculatorGraph::AddPacketToInputStream(
mediapipe::Status CalculatorGraph::AddPacketToInputStream(
const std::string& stream_name, const Packet& packet) {
return AddPacketToInputStreamInternal(stream_name, packet);
}
::mediapipe::Status CalculatorGraph::AddPacketToInputStream(
mediapipe::Status CalculatorGraph::AddPacketToInputStream(
const std::string& stream_name, Packet&& packet) {
return AddPacketToInputStreamInternal(stream_name, std::move(packet));
}
@@ -799,29 +799,28 @@ CalculatorGraph::PrepareGpu(const std::map<std::string, Packet>& side_packets) {
// internal-only templated version. T&& is a forwarding reference here, so
// std::forward will deduce the correct type as we pass along packet.
template <typename T>
::mediapipe::Status CalculatorGraph::AddPacketToInputStreamInternal(
mediapipe::Status CalculatorGraph::AddPacketToInputStreamInternal(
const std::string& stream_name, T&& packet) {
std::unique_ptr<GraphInputStream>* stream =
::mediapipe::FindOrNull(graph_input_streams_, stream_name);
mediapipe::FindOrNull(graph_input_streams_, stream_name);
RET_CHECK(stream).SetNoLogging() << absl::Substitute(
"AddPacketToInputStream called on input stream \"$0\" which is not a "
"graph input stream.",
stream_name);
int node_id =
::mediapipe::FindOrDie(graph_input_stream_node_ids_, stream_name);
int node_id = mediapipe::FindOrDie(graph_input_stream_node_ids_, stream_name);
CHECK_GE(node_id, validated_graph_->CalculatorInfos().size());
{
absl::MutexLock lock(&full_input_streams_mutex_);
if (graph_input_stream_add_mode_ ==
GraphInputStreamAddMode::ADD_IF_NOT_FULL) {
if (has_error_) {
::mediapipe::Status error_status;
mediapipe::Status error_status;
GetCombinedErrors("Graph has errors: ", &error_status);
return error_status;
}
// Return with StatusUnavailable if this stream is being throttled.
if (!full_input_streams_[node_id].empty()) {
return ::mediapipe::UnavailableErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::UnavailableErrorBuilder(MEDIAPIPE_LOC)
<< "Graph is throttled.";
}
} else if (graph_input_stream_add_mode_ ==
@@ -836,7 +835,7 @@ template <typename T>
&full_input_streams_mutex_);
}
if (has_error_) {
::mediapipe::Status error_status;
mediapipe::Status error_status;
GetCombinedErrors("Graph has errors: ", &error_status);
return error_status;
}
@@ -858,7 +857,7 @@ template <typename T>
// because we don't have the lock over the input stream.
(*stream)->AddPacket(std::forward<T>(packet));
if (has_error_) {
::mediapipe::Status error_status;
mediapipe::Status error_status;
GetCombinedErrors("Graph has errors: ", &error_status);
return error_status;
}
@@ -870,25 +869,25 @@ template <typename T>
// again if the graph is still idle. Unthrottling basically only lets in one
// packet at a time. TODO: add test.
scheduler_.AddedPacketToGraphInputStream();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::SetInputStreamMaxQueueSize(
mediapipe::Status CalculatorGraph::SetInputStreamMaxQueueSize(
const std::string& stream_name, int max_queue_size) {
// graph_input_streams_ has not been filled in yet, so we'll check this when
// it is applied when the graph is started.
graph_input_stream_max_queue_size_[stream_name] = max_queue_size;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
bool CalculatorGraph::HasInputStream(const std::string& stream_name) {
return ::mediapipe::FindOrNull(graph_input_streams_, stream_name) != nullptr;
return mediapipe::FindOrNull(graph_input_streams_, stream_name) != nullptr;
}
::mediapipe::Status CalculatorGraph::CloseInputStream(
mediapipe::Status CalculatorGraph::CloseInputStream(
const std::string& stream_name) {
std::unique_ptr<GraphInputStream>* stream =
::mediapipe::FindOrNull(graph_input_streams_, stream_name);
mediapipe::FindOrNull(graph_input_streams_, stream_name);
RET_CHECK(stream).SetNoLogging() << absl::Substitute(
"CloseInputStream called on input stream \"$0\" which is not a graph "
"input stream.",
@@ -897,7 +896,7 @@ bool CalculatorGraph::HasInputStream(const std::string& stream_name) {
// threads cannot call CloseInputStream() on the same stream_name at the same
// time.
if ((*stream)->IsClosed()) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
(*stream)->Close();
@@ -906,10 +905,10 @@ bool CalculatorGraph::HasInputStream(const std::string& stream_name) {
scheduler_.ClosedAllGraphInputStreams();
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::CloseAllInputStreams() {
mediapipe::Status CalculatorGraph::CloseAllInputStreams() {
for (auto& item : graph_input_streams_) {
item.second->Close();
}
@@ -917,10 +916,10 @@ bool CalculatorGraph::HasInputStream(const std::string& stream_name) {
num_closed_graph_input_streams_ = graph_input_streams_.size();
scheduler_.ClosedAllGraphInputStreams();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::CloseAllPacketSources() {
mediapipe::Status CalculatorGraph::CloseAllPacketSources() {
for (auto& item : graph_input_streams_) {
item.second->Close();
}
@@ -929,10 +928,10 @@ bool CalculatorGraph::HasInputStream(const std::string& stream_name) {
scheduler_.ClosedAllGraphInputStreams();
scheduler_.CloseAllSourceNodes();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void CalculatorGraph::RecordError(const ::mediapipe::Status& error) {
void CalculatorGraph::RecordError(const mediapipe::Status& error) {
VLOG(2) << "RecordError called with " << error;
{
absl::MutexLock lock(&error_mutex_);
@@ -943,7 +942,7 @@ void CalculatorGraph::RecordError(const ::mediapipe::Status& error) {
stream->NotifyError();
}
if (errors_.size() > kMaxNumAccumulatedErrors) {
for (const ::mediapipe::Status& error : errors_) {
for (const mediapipe::Status& error : errors_) {
LOG(ERROR) << error;
}
LOG(FATAL) << "Forcefully aborting to prevent the framework running out "
@@ -952,13 +951,13 @@ void CalculatorGraph::RecordError(const ::mediapipe::Status& error) {
}
}
bool CalculatorGraph::GetCombinedErrors(::mediapipe::Status* error_status) {
bool CalculatorGraph::GetCombinedErrors(mediapipe::Status* error_status) {
return GetCombinedErrors("CalculatorGraph::Run() failed in Run: ",
error_status);
}
bool CalculatorGraph::GetCombinedErrors(const std::string& error_prefix,
::mediapipe::Status* error_status) {
mediapipe::Status* error_status) {
absl::MutexLock lock(&error_mutex_);
if (!errors_.empty()) {
*error_status = tool::CombinedStatus(error_prefix, errors_);
@@ -968,7 +967,7 @@ bool CalculatorGraph::GetCombinedErrors(const std::string& error_prefix,
}
void CalculatorGraph::CallStatusHandlers(GraphRunState graph_run_state,
const ::mediapipe::Status& status) {
const mediapipe::Status& status) {
for (int status_handler_index = 0;
status_handler_index < validated_graph_->Config().status_handler_size();
++status_handler_index) {
@@ -980,23 +979,22 @@ void CalculatorGraph::CallStatusHandlers(GraphRunState graph_run_state,
validated_graph_->StatusHandlerInfos()[status_handler_index];
const PacketTypeSet& packet_type_set =
status_handler_info.InputSidePacketTypes();
::mediapipe::StatusOr<std::unique_ptr<PacketSet>> packet_set_statusor =
mediapipe::StatusOr<std::unique_ptr<PacketSet>> packet_set_statusor =
tool::FillPacketSet(packet_type_set, current_run_side_packets_,
nullptr);
if (!packet_set_statusor.ok()) {
RecordError(::mediapipe::StatusBuilder(
RecordError(mediapipe::StatusBuilder(
std::move(packet_set_statusor).status(), MEDIAPIPE_LOC)
.SetPrepend()
<< "Skipping run of " << handler_type << ": ");
continue;
}
::mediapipe::StatusOr<
std::unique_ptr<internal::StaticAccessToStatusHandler>>
mediapipe::StatusOr<std::unique_ptr<internal::StaticAccessToStatusHandler>>
static_access_statusor = internal::StaticAccessToStatusHandlerRegistry::
CreateByNameInNamespace(validated_graph_->Package(), handler_type);
CHECK(static_access_statusor.ok()) << handler_type << " is not registered.";
auto static_access = std::move(static_access_statusor).ValueOrDie();
::mediapipe::Status handler_result;
mediapipe::Status handler_result;
if (graph_run_state == GraphRunState::PRE_RUN) {
handler_result = static_access->HandlePreRunStatus(
handler_config.options(), *packet_set_statusor.ValueOrDie(), status);
@@ -1005,8 +1003,8 @@ void CalculatorGraph::CallStatusHandlers(GraphRunState graph_run_state,
handler_config.options(), *packet_set_statusor.ValueOrDie(), status);
}
if (!handler_result.ok()) {
::mediapipe::StatusBuilder builder(std::move(handler_result),
MEDIAPIPE_LOC);
mediapipe::StatusBuilder builder(std::move(handler_result),
MEDIAPIPE_LOC);
builder.SetPrepend() << handler_type;
if (graph_run_state == GraphRunState::PRE_RUN) {
builder << "::HandlePreRunStatus failed: ";
@@ -1051,11 +1049,10 @@ void CalculatorGraph::UpdateThrottledNodes(InputStreamManager* stream,
VLOG(2) << "Stream \"" << stream->Name() << "\" is "
<< (stream_is_full ? "throttling" : "no longer throttling")
<< " node with node ID " << node_id;
::mediapipe::LogEvent(
profiler_.get(),
TraceEvent(stream_is_full ? TraceEvent::THROTTLED
: TraceEvent::UNTHROTTLED)
.set_stream_id(&stream->Name()));
mediapipe::LogEvent(profiler_.get(),
TraceEvent(stream_is_full ? TraceEvent::THROTTLED
: TraceEvent::UNTHROTTLED)
.set_stream_id(&stream->Name()));
bool was_throttled = !full_input_streams_[node_id].empty();
if (stream_is_full) {
DCHECK_EQ(full_input_streams_[node_id].count(stream), 0);
@@ -1137,7 +1134,7 @@ bool CalculatorGraph::UnthrottleSources() {
}
for (InputStreamManager* stream : full_streams) {
if (Config().report_deadlock()) {
RecordError(::mediapipe::UnavailableError(absl::StrCat(
RecordError(mediapipe::UnavailableError(absl::StrCat(
"Detected a deadlock due to input throttling for: \"", stream->Name(),
"\". All calculators are idle while packet sources remain active "
"and throttled. Consider adjusting \"max_queue_size\" or "
@@ -1166,7 +1163,7 @@ void CalculatorGraph::SetGraphInputStreamAddMode(GraphInputStreamAddMode mode) {
}
void CalculatorGraph::Cancel() {
// TODO This function should return ::mediapipe::Status.
// TODO This function should return mediapipe::Status.
scheduler_.Cancel();
}
@@ -1174,11 +1171,11 @@ void CalculatorGraph::Pause() { scheduler_.Pause(); }
void CalculatorGraph::Resume() { scheduler_.Resume(); }
::mediapipe::Status CalculatorGraph::SetServicePacket(
mediapipe::Status CalculatorGraph::SetServicePacket(
const GraphServiceBase& service, Packet p) {
// TODO: check that the graph has not been started!
service_packets_[service.key] = std::move(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
Packet CalculatorGraph::GetServicePacket(const GraphServiceBase& service) {
@@ -1189,10 +1186,10 @@ Packet CalculatorGraph::GetServicePacket(const GraphServiceBase& service) {
return it->second;
}
::mediapipe::Status CalculatorGraph::SetExecutorInternal(
mediapipe::Status CalculatorGraph::SetExecutorInternal(
const std::string& name, std::shared_ptr<Executor> executor) {
if (!executors_.emplace(name, executor).second) {
return ::mediapipe::AlreadyExistsErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::AlreadyExistsErrorBuilder(MEDIAPIPE_LOC)
<< "SetExecutor must be called only once for the executor \"" << name
<< "\"";
}
@@ -1201,21 +1198,21 @@ Packet CalculatorGraph::GetServicePacket(const GraphServiceBase& service) {
} else {
MP_RETURN_IF_ERROR(scheduler_.SetNonDefaultExecutor(name, executor.get()));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorGraph::SetExecutor(
mediapipe::Status CalculatorGraph::SetExecutor(
const std::string& name, std::shared_ptr<Executor> executor) {
RET_CHECK(!initialized_)
<< "SetExecutor can only be called before Initialize()";
if (IsReservedExecutorName(name)) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "\"" << name << "\" is a reserved executor name.";
}
return SetExecutorInternal(name, std::move(executor));
}
::mediapipe::Status CalculatorGraph::CreateDefaultThreadPool(
mediapipe::Status CalculatorGraph::CreateDefaultThreadPool(
const ThreadPoolExecutorOptions* default_executor_options,
int num_threads) {
MediaPipeOptions extendable_options;
@@ -1237,16 +1234,16 @@ bool CalculatorGraph::IsReservedExecutorName(const std::string& name) {
return ValidatedGraphConfig::IsReservedExecutorName(name);
}
::mediapipe::Status CalculatorGraph::FinishRun() {
mediapipe::Status CalculatorGraph::FinishRun() {
// Check for any errors that may have occurred.
::mediapipe::Status status = ::mediapipe::OkStatus();
mediapipe::Status status = mediapipe::OkStatus();
MP_RETURN_IF_ERROR(profiler_->Stop());
GetCombinedErrors(&status);
CleanupAfterRun(&status);
return status;
}
void CalculatorGraph::CleanupAfterRun(::mediapipe::Status* status) {
void CalculatorGraph::CleanupAfterRun(mediapipe::Status* status) {
for (auto& item : graph_input_streams_) {
item.second->Close();
}
@@ -1313,7 +1310,7 @@ bool MetricElementComparator(const std::pair<std::string, int64>& e1,
}
} // namespace
::mediapipe::Status CalculatorGraph::GetCalculatorProfiles(
mediapipe::Status CalculatorGraph::GetCalculatorProfiles(
std::vector<CalculatorProfile>* profiles) const {
return profiler_->GetCalculatorProfiles(profiles);
}
+51 -53
View File
@@ -62,7 +62,7 @@ struct GpuSharedData;
namespace mediapipe {
typedef ::mediapipe::StatusOr<OutputStreamPoller> StatusOrPoller;
typedef mediapipe::StatusOr<OutputStreamPoller> StatusOrPoller;
// The class representing a DAG of calculator nodes.
//
@@ -126,12 +126,12 @@ class CalculatorGraph {
// Initializes the graph from a its proto description.
// side_packets that are provided at this stage are common across all Run()
// invocations and could be used to execute PacketGenerators immediately.
::mediapipe::Status Initialize(
mediapipe::Status Initialize(
const CalculatorGraphConfig& config,
const std::map<std::string, Packet>& side_packets);
// Convenience version which does not take side packets.
::mediapipe::Status Initialize(const CalculatorGraphConfig& config);
mediapipe::Status Initialize(const CalculatorGraphConfig& config);
// Initializes the CalculatorGraph from the specified graph and subgraph
// configs. Template graph and subgraph configs can be specified through
@@ -139,7 +139,7 @@ class CalculatorGraph {
// CalclatorGraphConfig.type. A subgraph can be instantiated directly by
// specifying its type in |graph_type|. A template graph can be instantiated
// directly by specifying its template arguments in |options|.
::mediapipe::Status Initialize(
mediapipe::Status Initialize(
const std::vector<CalculatorGraphConfig>& configs,
const std::vector<CalculatorGraphTemplate>& templates,
const std::map<std::string, Packet>& side_packets = {},
@@ -155,9 +155,9 @@ class CalculatorGraph {
// packet emitted by the output stream. Can only be called before Run() or
// StartRun().
// TODO: Rename to AddOutputStreamCallback.
::mediapipe::Status ObserveOutputStream(
mediapipe::Status ObserveOutputStream(
const std::string& stream_name,
std::function<::mediapipe::Status(const Packet&)> packet_callback);
std::function<mediapipe::Status(const Packet&)> packet_callback);
// Adds an OutputStreamPoller for a stream. This provides a synchronous,
// polling API for accessing a stream's output. Should only be called before
@@ -169,17 +169,17 @@ class CalculatorGraph {
// packets (generated by PacketGenerators) can be retrieved before
// graph is done. Returns error if the graph is still running (for non-base
// packets) or the output side packet is not found or empty.
::mediapipe::StatusOr<Packet> GetOutputSidePacket(
mediapipe::StatusOr<Packet> GetOutputSidePacket(
const std::string& packet_name);
// Runs the graph after adding the given extra input side packets. All
// arguments are forgotten after Run() returns.
// Run() is a blocking call and will return when all calculators are done.
virtual ::mediapipe::Status Run(
virtual mediapipe::Status Run(
const std::map<std::string, Packet>& extra_side_packets);
// Run the graph without adding any input side packets.
::mediapipe::Status Run() { return Run({}); }
mediapipe::Status Run() { return Run({}); }
// Start a run of the graph. StartRun, WaitUntilDone, HasError,
// AddPacketToInputStream, and CloseInputStream allow more control over
@@ -199,7 +199,7 @@ class CalculatorGraph {
// MP_RETURN_IF_ERROR(graph.CloseInputStream(stream));
// }
// MP_RETURN_IF_ERROR(graph.WaitUntilDone());
::mediapipe::Status StartRun(
mediapipe::Status StartRun(
const std::map<std::string, Packet>& extra_side_packets) {
return StartRun(extra_side_packets, {});
}
@@ -208,7 +208,7 @@ class CalculatorGraph {
// stream header before running.
// Note: We highly discourage the use of stream headers, this is added for the
// compatibility of existing calculators that use headers during Open().
::mediapipe::Status StartRun(
mediapipe::Status StartRun(
const std::map<std::string, Packet>& extra_side_packets,
const std::map<std::string, Packet>& stream_headers);
@@ -216,20 +216,20 @@ class CalculatorGraph {
// until all source calculators have returned StatusStop(), all
// graph_input_streams_ have been closed, and no more calculators can
// be run). This function can be called only after StartRun().
::mediapipe::Status WaitUntilDone();
mediapipe::Status WaitUntilDone();
// Wait until the running graph is in the idle mode, which is when nothing can
// be scheduled and nothing is running in the worker threads. This function
// can be called only after StartRun().
// NOTE: The graph must not have any source nodes because source nodes prevent
// the running graph from becoming idle until the source nodes are done.
::mediapipe::Status WaitUntilIdle();
mediapipe::Status WaitUntilIdle();
// Wait until a packet is emitted on one of the observed output streams.
// Returns immediately if a packet has already been emitted since the last
// call to this function.
// Returns OutOfRangeError if the graph terminated while waiting.
::mediapipe::Status WaitForObservedOutput();
mediapipe::Status WaitForObservedOutput();
// Quick non-locking means of checking if the graph has encountered an error.
bool HasError() const { return has_error_; }
@@ -243,8 +243,8 @@ class CalculatorGraph {
// sizes of the queues in the graph. The input stream must have been specified
// in the configuration as a graph level input_stream. On error, nothing is
// added.
::mediapipe::Status AddPacketToInputStream(const std::string& stream_name,
const Packet& packet);
mediapipe::Status AddPacketToInputStream(const std::string& stream_name,
const Packet& packet);
// Same as the l-value version of this function by the same name, but moves
// the r-value referenced packet into the stream instead of copying it over.
@@ -253,12 +253,12 @@ class CalculatorGraph {
// packet may remain valid. In particular, when using the ADD_IF_NOT_FULL
// mode with a full queue, this will return StatusUnavailable and the caller
// may try adding the packet again later.
::mediapipe::Status AddPacketToInputStream(const std::string& stream_name,
Packet&& packet);
mediapipe::Status AddPacketToInputStream(const std::string& stream_name,
Packet&& packet);
// Sets the queue size of a graph input stream, overriding the graph default.
::mediapipe::Status SetInputStreamMaxQueueSize(const std::string& stream_name,
int max_queue_size);
mediapipe::Status SetInputStreamMaxQueueSize(const std::string& stream_name,
int max_queue_size);
// Check if an input stream exists in the graph
bool HasInputStream(const std::string& name);
@@ -268,14 +268,14 @@ class CalculatorGraph {
// been closed (and all packets propagate through the graph).
// Note that multiple threads cannot call CloseInputStream() on the same
// stream_name at the same time.
::mediapipe::Status CloseInputStream(const std::string& stream_name);
mediapipe::Status CloseInputStream(const std::string& stream_name);
// Closes all the graph input streams.
// TODO: deprecate this function in favor of CloseAllPacketSources.
::mediapipe::Status CloseAllInputStreams();
mediapipe::Status CloseAllInputStreams();
// Closes all the graph input streams and source calculator nodes.
::mediapipe::Status CloseAllPacketSources();
mediapipe::Status CloseAllPacketSources();
// Returns the pointer to the stream with the given name, or dies if none
// exists. The result remains owned by the CalculatorGraph.
@@ -290,7 +290,7 @@ class CalculatorGraph {
// calculator in the graph. May be called at any time after the graph has been
// initialized.
ABSL_DEPRECATED("Use profiler()->GetCalculatorProfiles() instead")
::mediapipe::Status GetCalculatorProfiles(
mediapipe::Status GetCalculatorProfiles(
std::vector<CalculatorProfile>*) const;
// Set the type of counter used in this graph.
@@ -301,15 +301,15 @@ class CalculatorGraph {
// Callback when an error is encountered.
// Adds the error to the vector of errors.
void RecordError(const ::mediapipe::Status& error)
void RecordError(const mediapipe::Status& error)
ABSL_LOCKS_EXCLUDED(error_mutex_);
// Combines errors into a status. Returns true if the vector of errors is
// non-empty.
bool GetCombinedErrors(const std::string& error_prefix,
::mediapipe::Status* error_status);
mediapipe::Status* error_status);
// Convenience overload which specifies a default error prefix.
bool GetCombinedErrors(::mediapipe::Status* error_status);
bool GetCombinedErrors(mediapipe::Status* error_status);
// Returns the maximum input stream queue size.
int GetMaxInputStreamQueueSize();
@@ -338,8 +338,8 @@ class CalculatorGraph {
// Sets the executor that will run the nodes assigned to the executor
// named |name|. If |name| is empty, this sets the default executor. Must
// be called before the graph is initialized.
::mediapipe::Status SetExecutor(const std::string& name,
std::shared_ptr<Executor> executor);
mediapipe::Status SetExecutor(const std::string& name,
std::shared_ptr<Executor> executor);
// WARNING: the following public methods are exposed to Scheduler only.
@@ -370,18 +370,18 @@ class CalculatorGraph {
// Only meant for internal use.
std::shared_ptr<::mediapipe::GpuResources> GetGpuResources() const;
::mediapipe::Status SetGpuResources(
mediapipe::Status SetGpuResources(
std::shared_ptr<::mediapipe::GpuResources> resources);
// Helper for PrepareForRun. If it returns a non-empty map, those packets
// must be added to the existing side packets, replacing existing values
// that have the same key.
::mediapipe::StatusOr<std::map<std::string, Packet>> PrepareGpu(
mediapipe::StatusOr<std::map<std::string, Packet>> PrepareGpu(
const std::map<std::string, Packet>& side_packets);
#endif // !defined(MEDIAPIPE_DISABLE_GPU)
template <typename T>
::mediapipe::Status SetServiceObject(const GraphService<T>& service,
std::shared_ptr<T> object) {
mediapipe::Status SetServiceObject(const GraphService<T>& service,
std::shared_ptr<T> object) {
return SetServicePacket(service,
MakePacket<std::shared_ptr<T>>(std::move(object)));
}
@@ -394,8 +394,7 @@ class CalculatorGraph {
}
// Only the Java API should call this directly.
::mediapipe::Status SetServicePacket(const GraphServiceBase& service,
Packet p);
mediapipe::Status SetServicePacket(const GraphServiceBase& service, Packet p);
private:
// GraphRunState is used as a parameter in the function CallStatusHandlers.
@@ -419,8 +418,7 @@ class CalculatorGraph {
shard_.SetSpec(manager_->Spec());
}
void PrepareForRun(
std::function<void(::mediapipe::Status)> error_callback) {
void PrepareForRun(std::function<void(mediapipe::Status)> error_callback) {
manager_->PrepareForRun(std::move(error_callback));
}
@@ -448,7 +446,7 @@ class CalculatorGraph {
};
// Initializes the graph from a ValidatedGraphConfig object.
::mediapipe::Status Initialize(
mediapipe::Status Initialize(
std::unique_ptr<ValidatedGraphConfig> validated_graph,
const std::map<std::string, Packet>& side_packets);
@@ -456,28 +454,28 @@ class CalculatorGraph {
// AddPacketToInputStream(Packet&& packet) or
// AddPacketToInputStream(const Packet& packet).
template <typename T>
::mediapipe::Status AddPacketToInputStreamInternal(
mediapipe::Status AddPacketToInputStreamInternal(
const std::string& stream_name, T&& packet);
// Sets the executor that will run the nodes assigned to the executor
// named |name|. If |name| is empty, this sets the default executor.
// Does not check that the graph is uninitialized and |name| is not a
// reserved executor name.
::mediapipe::Status SetExecutorInternal(const std::string& name,
std::shared_ptr<Executor> executor);
mediapipe::Status SetExecutorInternal(const std::string& name,
std::shared_ptr<Executor> executor);
// If the num_threads field in default_executor_options is not specified,
// assigns a reasonable value based on system configuration and the graph.
// Then, creates the default thread pool if appropriate.
//
// Only called by InitializeExecutors().
::mediapipe::Status InitializeDefaultExecutor(
mediapipe::Status InitializeDefaultExecutor(
const ThreadPoolExecutorOptions* default_executor_options,
bool use_application_thread);
// Creates a thread pool as the default executor. The num_threads argument
// overrides the num_threads field in default_executor_options.
::mediapipe::Status CreateDefaultThreadPool(
mediapipe::Status CreateDefaultThreadPool(
const ThreadPoolExecutorOptions* default_executor_options,
int num_threads);
@@ -485,31 +483,31 @@ class CalculatorGraph {
static bool IsReservedExecutorName(const std::string& name);
// Helper functions for Initialize().
::mediapipe::Status InitializeExecutors();
::mediapipe::Status InitializePacketGeneratorGraph(
mediapipe::Status InitializeExecutors();
mediapipe::Status InitializePacketGeneratorGraph(
const std::map<std::string, Packet>& side_packets);
::mediapipe::Status InitializeStreams();
::mediapipe::Status InitializeProfiler();
::mediapipe::Status InitializeCalculatorNodes();
mediapipe::Status InitializeStreams();
mediapipe::Status InitializeProfiler();
mediapipe::Status InitializeCalculatorNodes();
// Iterates through all nodes and schedules any that can be opened.
void ScheduleAllOpenableNodes();
// Does the bulk of the work for StartRun but does not start the scheduler.
::mediapipe::Status PrepareForRun(
mediapipe::Status PrepareForRun(
const std::map<std::string, Packet>& extra_side_packets,
const std::map<std::string, Packet>& stream_headers);
// Cleans up any remaining state after the run and returns any errors that may
// have occurred during the run. Called after the scheduler has terminated.
::mediapipe::Status FinishRun();
mediapipe::Status FinishRun();
// Cleans up any remaining state after the run. All status handlers run here
// if their requested input side packets exist.
// The original |*status| is passed to all the status handlers. If any status
// handler fails, it appends its error to errors_, and CleanupAfterRun sets
// |*status| to the new combined errors on return.
void CleanupAfterRun(::mediapipe::Status* status)
void CleanupAfterRun(mediapipe::Status* status)
ABSL_LOCKS_EXCLUDED(error_mutex_);
// Calls HandlePreRunStatus or HandleStatus on the StatusHandlers. Which one
@@ -517,7 +515,7 @@ class CalculatorGraph {
// current_run_side_packets_ must be set before this function is called.
// On error, has_error_ will be set.
void CallStatusHandlers(GraphRunState graph_run_state,
const ::mediapipe::Status& status);
const mediapipe::Status& status);
// Callback function to throttle or unthrottle source nodes when a stream
// becomes full or non-full. A node is throttled (i.e. prevented being
@@ -611,7 +609,7 @@ class CalculatorGraph {
// Vector of errors encountered while running graph. Always use RecordError()
// to add an error to this vector.
std::vector<::mediapipe::Status> errors_ ABSL_GUARDED_BY(error_mutex_);
std::vector<mediapipe::Status> errors_ ABSL_GUARDED_BY(error_mutex_);
// True if the default executor uses the application thread.
bool use_application_thread_ = false;
@@ -30,7 +30,7 @@ namespace {
constexpr int kIntTestValue = 33;
typedef std::function<::mediapipe::Status(CalculatorContext* cc)>
typedef std::function<mediapipe::Status(CalculatorContext* cc)>
CalculatorContextFunction;
// Returns the contents of a set of Packets.
@@ -87,26 +87,26 @@ class CountingExecutor : public Executor {
// streams and outputs the sum to the output stream.
class IntAdderCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
cc->Inputs().Index(i).Set<int>();
}
cc->Outputs().Index(0).Set<int>();
cc->SetTimestampOffset(TimestampDiff(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
int sum = 0;
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
sum += cc->Inputs().Index(i).Get<int>();
}
cc->Outputs().Index(0).Add(new int(sum), cc->InputTimestamp());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(IntAdderCalculator);
@@ -114,13 +114,13 @@ REGISTER_CALCULATOR(IntAdderCalculator);
template <typename InputType>
class TypedSinkCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<InputType>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
return ::mediapipe::OkStatus();
mediapipe::Status Process(CalculatorContext* cc) override {
return mediapipe::OkStatus();
}
};
typedef TypedSinkCalculator<std::string> StringSinkCalculator;
@@ -132,13 +132,13 @@ REGISTER_CALCULATOR(IntSinkCalculator);
// integer.
class EvenIntFilterCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
int value = cc->Inputs().Index(0).Get<int>();
if (value % 2 == 0) {
cc->Outputs().Index(0).AddPacket(cc->Inputs().Index(0).Value());
@@ -146,7 +146,7 @@ class EvenIntFilterCalculator : public CalculatorBase {
cc->Outputs().Index(0).SetNextTimestampBound(
cc->InputTimestamp().NextAllowedInStream());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(EvenIntFilterCalculator);
@@ -156,19 +156,19 @@ REGISTER_CALCULATOR(EvenIntFilterCalculator);
// input stream carries the value true.
class ValveCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Inputs().Index(1).Set<bool>();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
cc->Outputs().Index(0).SetHeader(cc->Inputs().Index(0).Header());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
if (cc->Inputs().Index(1).Get<bool>()) {
cc->GetCounter("PassThrough")->Increment();
cc->Outputs().Index(0).AddPacket(cc->Inputs().Index(0).Value());
@@ -182,7 +182,7 @@ class ValveCalculator : public CalculatorBase {
cc->Outputs().Index(0).SetNextTimestampBound(
cc->InputTimestamp().NextAllowedInStream());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(ValveCalculator);
@@ -191,27 +191,27 @@ REGISTER_CALCULATOR(ValveCalculator);
// but shifts the timestamp.
class TimeShiftCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
cc->InputSidePackets().Index(0).Set<TimestampDiff>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
// Input: arbitrary Packets.
// Output: copy of the input.
cc->Outputs().Index(0).SetHeader(cc->Inputs().Index(0).Header());
shift_ = cc->InputSidePackets().Index(0).Get<TimestampDiff>();
cc->SetOffset(shift_);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
cc->GetCounter("PassThrough")->Increment();
cc->Outputs().Index(0).AddPacket(
cc->Inputs().Index(0).Value().At(cc->InputTimestamp() + shift_));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -231,17 +231,17 @@ REGISTER_CALCULATOR(TimeShiftCalculator);
// T=2000 Output 100
class OutputAndBoundSourceCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Outputs().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
counter_ = 0;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
Timestamp timestamp(counter_);
if (counter_ % 20 == 0) {
cc->Outputs().Index(0).AddPacket(
@@ -253,7 +253,7 @@ class OutputAndBoundSourceCalculator : public CalculatorBase {
return tool::StatusStop();
}
counter_ += 10;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -266,42 +266,42 @@ REGISTER_CALCULATOR(OutputAndBoundSourceCalculator);
// Process() method. The input stream and output stream have the integer type.
class Delay20Calculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).Set<int>();
cc->SetTimestampOffset(TimestampDiff(20));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
cc->Outputs().Index(0).AddPacket(MakePacket<int>(0).At(Timestamp(0)));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
const Packet& packet = cc->Inputs().Index(0).Value();
Timestamp timestamp = packet.Timestamp() + 20;
cc->Outputs().Index(0).AddPacket(packet.At(timestamp));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(Delay20Calculator);
class CustomBoundCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
cc->Outputs().Index(0).SetNextTimestampBound(cc->InputTimestamp() + 1);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(CustomBoundCalculator);
@@ -310,7 +310,7 @@ REGISTER_CALCULATOR(CustomBoundCalculator);
TEST(CalculatorGraph, SetNextTimestampBoundPropagation) {
CalculatorGraph graph;
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'in'
input_stream: 'gate'
node {
@@ -435,7 +435,7 @@ TEST(CalculatorGraph, NotAllInputPacketsAtNextTimestampBoundAvailable) {
//
CalculatorGraph graph;
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'in0_unfiltered'
input_stream: 'in1_to_be_filtered'
node {
@@ -507,7 +507,7 @@ TEST(CalculatorGraph, NotAllInputPacketsAtNextTimestampBoundAvailable) {
TEST(CalculatorGraph, PropagateBoundLoop) {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
node {
calculator: 'OutputAndBoundSourceCalculator'
output_stream: 'integers'
@@ -553,7 +553,7 @@ TEST(CalculatorGraph, CheckBatchProcessingBoundPropagation) {
// the sink calculator's input stream should report packet timestamp
// mismatches.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
node {
calculator: 'OutputAndBoundSourceCalculator'
output_stream: 'integers'
@@ -585,7 +585,7 @@ TEST(CalculatorGraphBoundsTest, ImmediateHandlerBounds) {
// The second PassthroughCalculator delivers an output packet whenever the
// first PassThroughCalculator delivers a timestamp bound.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'input'
node {
calculator: 'CustomBoundCalculator'
@@ -613,7 +613,7 @@ TEST(CalculatorGraphBoundsTest, ImmediateHandlerBounds) {
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output", [&](const Packet& p) {
output_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -638,19 +638,19 @@ TEST(CalculatorGraphBoundsTest, ImmediateHandlerBounds) {
// A Calculator that only sets timestamp bound by SetOffset().
class OffsetBoundCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).Set<int>();
cc->SetTimestampOffset(TimestampDiff(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Process(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OffsetBoundCalculator);
@@ -658,27 +658,27 @@ REGISTER_CALCULATOR(OffsetBoundCalculator);
// A Calculator that produces a packet for each call to Process.
class BoundToPacketCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
cc->Inputs().Index(i).SetAny();
}
for (int i = 0; i < cc->Outputs().NumEntries(); ++i) {
cc->Outputs().Index(i).Set<Timestamp>();
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
for (int i = 0; i < cc->Outputs().NumEntries(); ++i) {
Timestamp t = cc->Inputs().Index(i).Value().Timestamp();
cc->Outputs().Index(i).AddPacket(
mediapipe::MakePacket<Timestamp>(t).At(cc->InputTimestamp()));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(BoundToPacketCalculator);
@@ -688,22 +688,22 @@ class FuturePacketCalculator : public CalculatorBase {
public:
static constexpr int64 kOutputFutureMicros = 3;
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
const Packet& packet = cc->Inputs().Index(0).Value();
Timestamp timestamp =
Timestamp(packet.Timestamp().Value() + kOutputFutureMicros);
cc->Outputs().Index(0).AddPacket(packet.At(timestamp));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(FuturePacketCalculator);
@@ -715,7 +715,7 @@ TEST(CalculatorGraphBoundsTest, OffsetBoundPropagation) {
// The PassThroughCalculator delivers an output packet whenever the
// OffsetBoundCalculator delivers a timestamp bound.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'input'
node {
calculator: 'OffsetBoundCalculator'
@@ -735,7 +735,7 @@ TEST(CalculatorGraphBoundsTest, OffsetBoundPropagation) {
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output", [&](const Packet& p) {
output_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -763,7 +763,7 @@ TEST(CalculatorGraphBoundsTest, BoundWithoutInputPackets) {
// The BoundToPacketCalculator delivers an output packet whenever the
// OffsetBoundCalculator delivers a timestamp bound.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'input'
node {
calculator: 'FuturePacketCalculator'
@@ -786,7 +786,7 @@ TEST(CalculatorGraphBoundsTest, BoundWithoutInputPackets) {
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output", [&](const Packet& p) {
output_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -821,7 +821,7 @@ TEST(CalculatorGraphBoundsTest, FixedSizeHandlerBounds) {
// The PassthroughCalculator delivers an output packet whenever the
// LambdaCalculator delivers a timestamp bound.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'input'
input_side_packet: 'open_function'
input_side_packet: 'process_function'
@@ -860,13 +860,13 @@ TEST(CalculatorGraphBoundsTest, FixedSizeHandlerBounds) {
std::vector<Packet> outputs;
MP_ASSERT_OK(graph.ObserveOutputStream("output", [&](const Packet& p) {
outputs.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
std::vector<Packet> thinned_outputs;
MP_ASSERT_OK(
graph.ObserveOutputStream("thinned_output", [&](const Packet& p) {
thinned_outputs.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
// The enter_semaphore is used to wait for LambdaCalculator::Process.
@@ -875,13 +875,13 @@ TEST(CalculatorGraphBoundsTest, FixedSizeHandlerBounds) {
AtomicSemaphore exit_semaphore(0);
CalculatorContextFunction open_fn = [&](CalculatorContext* cc) {
cc->SetOffset(0);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
};
CalculatorContextFunction process_fn = [&](CalculatorContext* cc) {
enter_semaphore.Release(1);
exit_semaphore.Acquire(1);
cc->Outputs().Index(0).AddPacket(cc->Inputs().Index(0).Value());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
};
MP_ASSERT_OK(graph.StartRun({
{"open_fn", Adopt(new auto(open_fn))},
@@ -935,22 +935,22 @@ TEST(CalculatorGraphBoundsTest, FixedSizeHandlerBounds) {
// A Calculator that outputs only the last packet from its input stream.
class LastPacketCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Outputs().Index(0).SetAny();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
cc->Outputs().Index(0).SetNextTimestampBound(cc->InputTimestamp());
last_packet_ = cc->Inputs().Index(0).Value();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Close(CalculatorContext* cc) final {
mediapipe::Status Close(CalculatorContext* cc) final {
cc->Outputs().Index(0).AddPacket(last_packet_);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -965,7 +965,7 @@ TEST(CalculatorGraphBoundsTest, LastPacketCheck) {
// packet or input stream close. The output "last_output" shows the
// last packet, and "output" shows the timestamp bounds.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: 'input'
output_stream: 'output'
output_stream: 'last_output'
@@ -992,12 +992,12 @@ TEST(CalculatorGraphBoundsTest, LastPacketCheck) {
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output", [&](const Packet& p) {
output_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
std::vector<Packet> last_output_packets;
MP_ASSERT_OK(graph.ObserveOutputStream("last_output", [&](const Packet& p) {
last_output_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -1048,18 +1048,18 @@ void TestBoundsForEmptyInputs(std::string input_stream_handler) {
absl::StrReplaceAll({{"$input_stream_handler", input_stream_handler}},
&config_str);
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
CalculatorGraph graph;
std::vector<Packet> input_ts_packets;
std::vector<Packet> bounds_ts_packets;
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("input_ts", [&](const Packet& p) {
input_ts_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.ObserveOutputStream("bounds_ts", [&](const Packet& p) {
bounds_ts_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -1129,7 +1129,7 @@ TEST(CalculatorGraphBoundsTest, BoundsForEmptyInputs_SyncSets) {
// A Calculator that produces a packet for each timestamp bounds update.
class ProcessBoundToPacketCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
cc->Inputs().Index(i).SetAny();
}
@@ -1138,10 +1138,10 @@ class ProcessBoundToPacketCalculator : public CalculatorBase {
}
cc->SetInputStreamHandler("ImmediateInputStreamHandler");
cc->SetProcessTimestampBounds(true);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
for (int i = 0; i < cc->Outputs().NumEntries(); ++i) {
Timestamp t = cc->Inputs().Index(i).Value().Timestamp();
// Create a new packet for each input stream with a new timestamp bound,
@@ -1151,7 +1151,7 @@ class ProcessBoundToPacketCalculator : public CalculatorBase {
cc->Outputs().Index(i).Add(new auto(t), t);
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(ProcessBoundToPacketCalculator);
@@ -1159,7 +1159,7 @@ REGISTER_CALCULATOR(ProcessBoundToPacketCalculator);
// A Calculator that passes through each packet and timestamp immediately.
class ImmediatePassthroughCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
cc->Inputs().Index(i).SetAny();
}
@@ -1168,10 +1168,10 @@ class ImmediatePassthroughCalculator : public CalculatorBase {
}
cc->SetInputStreamHandler("ImmediateInputStreamHandler");
cc->SetProcessTimestampBounds(true);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
for (int i = 0; i < cc->Outputs().NumEntries(); ++i) {
if (!cc->Inputs().Index(i).IsEmpty()) {
cc->Outputs().Index(i).AddPacket(cc->Inputs().Index(i).Value());
@@ -1185,7 +1185,7 @@ class ImmediatePassthroughCalculator : public CalculatorBase {
}
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(ImmediatePassthroughCalculator);
@@ -1217,14 +1217,14 @@ void TestProcessForEmptyInputs(const std::string& input_stream_handler) {
absl::StrReplaceAll({{"$input_stream_handler", input_stream_handler}},
&config_str);
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
CalculatorGraph graph;
std::vector<Packet> input_ts_packets;
std::vector<Packet> bounds_ts_packets;
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("bounds_ts", [&](const Packet& p) {
bounds_ts_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -1317,18 +1317,18 @@ TEST(CalculatorGraphBoundsTest, ProcessTimestampBounds_Passthrough) {
}
)";
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
CalculatorGraph graph;
std::vector<Packet> output_0_packets;
std::vector<Packet> output_1_packets;
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output_0", [&](const Packet& p) {
output_0_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.ObserveOutputStream("output_1", [&](const Packet& p) {
output_1_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -1378,20 +1378,20 @@ TEST(CalculatorGraphBoundsTest, ProcessTimestampBounds_Passthrough) {
// A Calculator that sends a timestamp bound for every other input.
class OccasionalBoundCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
absl::SleepFor(absl::Milliseconds(1));
if (cc->InputTimestamp().Value() % 20 == 0) {
Timestamp bound = cc->InputTimestamp().NextAllowedInStream();
cc->Outputs().Index(0).SetNextTimestampBound(
std::max(bound, cc->Outputs().Index(0).NextTimestampBound()));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OccasionalBoundCalculator);
@@ -1413,13 +1413,13 @@ TEST(CalculatorGraphBoundsTest, MaxInFlightWithOccasionalBound) {
num_threads: 4
)";
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
CalculatorGraph graph;
std::vector<Packet> output_0_packets;
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output_0", [&](const Packet& p) {
output_0_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -1443,20 +1443,20 @@ TEST(CalculatorGraphBoundsTest, MaxInFlightWithOccasionalBound) {
// A Calculator that uses both SetTimestampOffset and SetNextTimestampBound.
class OffsetAndBoundCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
cc->SetTimestampOffset(TimestampDiff(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
return ::mediapipe::OkStatus();
mediapipe::Status Open(CalculatorContext* cc) final {
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
if (cc->InputTimestamp().Value() % 20 == 0) {
cc->Outputs().Index(0).SetNextTimestampBound(Timestamp(10000));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OffsetAndBoundCalculator);
@@ -1475,13 +1475,13 @@ TEST(CalculatorGraphBoundsTest, OffsetAndBound) {
}
)";
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(config_str);
CalculatorGraph graph;
std::vector<Packet> output_0_packets;
MP_ASSERT_OK(graph.Initialize(config));
MP_ASSERT_OK(graph.ObserveOutputStream("output_0", [&](const Packet& p) {
output_0_packets.push_back(p);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
MP_ASSERT_OK(graph.WaitUntilIdle());
@@ -53,25 +53,25 @@ class CalculatorGraphEventLoopTest : public testing::Test {
// testing.
class BlockingPassThroughCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
cc->InputSidePackets().Index(0).Set<std::unique_ptr<absl::Mutex>>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
mutex_ = GetFromUniquePtr<absl::Mutex>(cc->InputSidePackets().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
mutex_->Lock();
cc->Outputs().Index(0).AddPacket(
cc->Inputs().Index(0).Value().At(cc->InputTimestamp()));
mutex_->Unlock();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -87,15 +87,15 @@ struct SimpleHeader {
class UsingHeaderCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
if (cc->Inputs().Index(0).Header().IsEmpty()) {
return ::mediapipe::UnknownError("No stream header present.");
return mediapipe::UnknownError("No stream header present.");
}
const SimpleHeader& header =
@@ -105,13 +105,13 @@ class UsingHeaderCalculator : public CalculatorBase {
output_header->height = header.height;
cc->Outputs().Index(0).SetHeader(Adopt(output_header.release()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
cc->Outputs().Index(0).AddPacket(
cc->Inputs().Index(0).Value().At(cc->InputTimestamp()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(UsingHeaderCalculator);
@@ -187,21 +187,21 @@ TEST_F(CalculatorGraphEventLoopTest, WellProvisionedEventLoop) {
// Pass-Through calculator that fails upon receiving the 10th packet.
class FailingPassThroughCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
Timestamp timestamp = cc->InputTimestamp();
if (timestamp.Value() == 9) {
return ::mediapipe::UnknownError(
return mediapipe::UnknownError(
"Meant to fail (magicstringincludedhere).");
}
cc->Outputs().Index(0).AddPacket(
cc->Inputs().Index(0).Value().At(timestamp));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(FailingPassThroughCalculator);
@@ -231,7 +231,7 @@ TEST_F(CalculatorGraphEventLoopTest, FailingEventLoop) {
this, std::placeholders::_1))}}));
// Insert packets.
::mediapipe::Status status;
mediapipe::Status status;
for (int i = 0; true; ++i) {
status = graph.AddPacketToInputStream("input_numbers",
Adopt(new int(i)).At(Timestamp(i)));
@@ -315,10 +315,10 @@ TEST_F(CalculatorGraphEventLoopTest, SetStreamHeader) {
&CalculatorGraphEventLoopTest::AddThreadSafeVectorSink,
this, std::placeholders::_1))}}));
::mediapipe::Status status = graph.WaitUntilIdle();
mediapipe::Status status = graph.WaitUntilIdle();
// Expect to fail if header not set.
ASSERT_FALSE(status.ok());
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kUnknown);
EXPECT_EQ(status.code(), mediapipe::StatusCode::kUnknown);
EXPECT_THAT(status.message(),
testing::HasSubstr("No stream header present."));
@@ -387,7 +387,7 @@ TEST_F(CalculatorGraphEventLoopTest, TryToAddPacketToInputStream) {
// mechanism could be off by 1 at most due to the order of acquisition of
// locks.
for (int i = 0; i < kNumInputPackets; ++i) {
::mediapipe::Status status = graph.AddPacketToInputStream(
mediapipe::Status status = graph.AddPacketToInputStream(
"input_numbers", Adopt(new int(i)).At(Timestamp(i)));
if (!status.ok()) {
++fail_count;
@@ -472,7 +472,7 @@ TEST_F(CalculatorGraphEventLoopTest, ThrottleGraphInputStreamTwice) {
// Lock the mutex so that the BlockingPassThroughCalculator cannot read any
// of these packets.
mutex->Lock();
::mediapipe::Status status = ::mediapipe::OkStatus();
mediapipe::Status status = mediapipe::OkStatus();
for (int i = 0; i < 10; ++i) {
status = graph.AddPacketToInputStream("input_numbers",
Adopt(new int(i)).At(Timestamp(i)));
@@ -482,7 +482,7 @@ TEST_F(CalculatorGraphEventLoopTest, ThrottleGraphInputStreamTwice) {
}
mutex->Unlock();
ASSERT_FALSE(status.ok());
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kUnavailable);
EXPECT_EQ(status.code(), mediapipe::StatusCode::kUnavailable);
EXPECT_THAT(status.message(), testing::HasSubstr("Graph is throttled."));
MP_ASSERT_OK(graph.CloseInputStream("input_numbers"));
MP_ASSERT_OK(graph.WaitUntilDone());
@@ -523,7 +523,7 @@ TEST_F(CalculatorGraphEventLoopTest, WaitToAddPacketToInputStream) {
// All of these packets should be accepted by the graph.
int fail_count = 0;
for (int i = 0; i < kNumInputPackets; ++i) {
::mediapipe::Status status = graph.AddPacketToInputStream(
mediapipe::Status status = graph.AddPacketToInputStream(
"input_numbers", Adopt(new int(i)).At(Timestamp(i)));
if (!status.ok()) {
++fail_count;
@@ -38,16 +38,16 @@ namespace {
// output side packet.
class OutputSidePacketInProcessCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->OutputSidePackets().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
cc->OutputSidePackets().Index(0).Set(
cc->Inputs().Index(0).Value().At(Timestamp::Unset()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OutputSidePacketInProcessCalculator);
@@ -56,22 +56,22 @@ REGISTER_CALCULATOR(OutputSidePacketInProcessCalculator);
// receives. Outputs the total number of packets as a side packet in Close.
class CountAndOutputSummarySidePacketInCloseCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->OutputSidePackets().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
++count_;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Close(CalculatorContext* cc) final {
mediapipe::Status Close(CalculatorContext* cc) final {
absl::SleepFor(absl::Milliseconds(300)); // For GetOutputSidePacket test.
cc->OutputSidePackets().Index(0).Set(
MakePacket<int>(count_).At(Timestamp::Unset()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
int count_ = 0;
@@ -82,15 +82,15 @@ REGISTER_CALCULATOR(CountAndOutputSummarySidePacketInCloseCalculator);
// output side packet. This triggers an error in the graph.
class OutputSidePacketWithTimestampCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->OutputSidePackets().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
cc->OutputSidePackets().Index(0).Set(cc->Inputs().Index(0).Value());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OutputSidePacketWithTimestampCalculator);
@@ -98,19 +98,19 @@ REGISTER_CALCULATOR(OutputSidePacketWithTimestampCalculator);
// Generates an output side packet containing the integer 1.
class IntegerOutputSidePacketCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->OutputSidePackets().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
cc->OutputSidePackets().Index(0).Set(MakePacket<int>(1));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
LOG(FATAL) << "Not reached.";
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(IntegerOutputSidePacketCalculator);
@@ -119,23 +119,23 @@ REGISTER_CALCULATOR(IntegerOutputSidePacketCalculator);
// side packets.
class SidePacketAdderCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->InputSidePackets().Index(0).Set<int>();
cc->InputSidePackets().Index(1).Set<int>();
cc->OutputSidePackets().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
cc->OutputSidePackets().Index(0).Set(
MakePacket<int>(cc->InputSidePackets().Index(1).Get<int>() +
cc->InputSidePackets().Index(0).Get<int>()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
LOG(FATAL) << "Not reached.";
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(SidePacketAdderCalculator);
@@ -144,21 +144,21 @@ REGISTER_CALCULATOR(SidePacketAdderCalculator);
// input side packet.
class SidePacketToStreamPacketCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->InputSidePackets().Index(0).SetAny();
cc->Outputs().Index(0).SetSameAs(&cc->InputSidePackets().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
cc->Outputs().Index(0).AddPacket(
cc->InputSidePackets().Index(0).At(Timestamp::PostStream()));
cc->Outputs().Index(0).Close();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
return ::mediapipe::tool::StatusStop();
mediapipe::Status Process(CalculatorContext* cc) final {
return mediapipe::tool::StatusStop();
}
};
REGISTER_CALCULATOR(SidePacketToStreamPacketCalculator);
@@ -166,18 +166,18 @@ REGISTER_CALCULATOR(SidePacketToStreamPacketCalculator);
// Packet generator for an arbitrary unit64 packet.
class Uint64PacketGenerator : public PacketGenerator {
public:
static ::mediapipe::Status FillExpectations(
static mediapipe::Status FillExpectations(
const PacketGeneratorOptions& extendable_options,
PacketTypeSet* input_side_packets, PacketTypeSet* output_side_packets) {
output_side_packets->Index(0).Set<uint64>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
static ::mediapipe::Status Generate(
static mediapipe::Status Generate(
const PacketGeneratorOptions& extendable_options,
const PacketSet& input_side_packets, PacketSet* output_side_packets) {
output_side_packets->Index(0) = Adopt(new uint64(15LL << 32 | 5));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_PACKET_GENERATOR(Uint64PacketGenerator);
@@ -185,7 +185,7 @@ REGISTER_PACKET_GENERATOR(Uint64PacketGenerator);
TEST(CalculatorGraph, OutputSidePacketInProcess) {
const int64 offset = 100;
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "offset"
node {
calculator: "OutputSidePacketInProcessCalculator"
@@ -204,7 +204,7 @@ TEST(CalculatorGraph, OutputSidePacketInProcess) {
MP_ASSERT_OK(graph.ObserveOutputStream(
"output", [&output_packets](const Packet& packet) {
output_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
// Run the graph twice.
@@ -226,11 +226,11 @@ TEST(CalculatorGraph, OutputSidePacketInProcess) {
// also be ignored.
class PassThroughGenerator : public PacketGenerator {
public:
static ::mediapipe::Status FillExpectations(
static mediapipe::Status FillExpectations(
const PacketGeneratorOptions& extendable_options, PacketTypeSet* inputs,
PacketTypeSet* outputs) {
if (!inputs->TagMap()->SameAs(*outputs->TagMap())) {
return ::mediapipe::InvalidArgumentError(
return mediapipe::InvalidArgumentError(
"Input and outputs to PassThroughGenerator must use the same tags "
"and indexes.");
}
@@ -238,24 +238,24 @@ class PassThroughGenerator : public PacketGenerator {
inputs->Get(id).SetAny();
outputs->Get(id).SetSameAs(&inputs->Get(id));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
static ::mediapipe::Status Generate(
static mediapipe::Status Generate(
const PacketGeneratorOptions& extendable_options,
const PacketSet& input_side_packets, PacketSet* output_side_packets) {
for (CollectionItemId id = input_side_packets.BeginId();
id < input_side_packets.EndId(); ++id) {
output_side_packets->Get(id) = input_side_packets.Get(id);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_PACKET_GENERATOR(PassThroughGenerator);
TEST(CalculatorGraph, SharePacketGeneratorGraph) {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
node {
calculator: 'CountingSourceCalculator'
output_stream: 'count1'
@@ -383,7 +383,7 @@ TEST(CalculatorGraph, SharePacketGeneratorGraph) {
TEST(CalculatorGraph, OutputSidePacketAlreadySet) {
const int64 offset = 100;
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "offset"
node {
calculator: "OutputSidePacketInProcessCalculator"
@@ -402,15 +402,15 @@ TEST(CalculatorGraph, OutputSidePacketAlreadySet) {
"offset", MakePacket<TimestampDiff>(offset).At(Timestamp(1))));
MP_ASSERT_OK(graph.CloseInputStream("offset"));
::mediapipe::Status status = graph.WaitUntilDone();
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kAlreadyExists);
mediapipe::Status status = graph.WaitUntilDone();
EXPECT_EQ(status.code(), mediapipe::StatusCode::kAlreadyExists);
EXPECT_THAT(status.message(), testing::HasSubstr("was already set."));
}
TEST(CalculatorGraph, OutputSidePacketWithTimestamp) {
const int64 offset = 100;
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "offset"
node {
calculator: "OutputSidePacketWithTimestampCalculator"
@@ -428,15 +428,15 @@ TEST(CalculatorGraph, OutputSidePacketWithTimestamp) {
MP_ASSERT_OK(graph.AddPacketToInputStream(
"offset", MakePacket<TimestampDiff>(offset).At(Timestamp(237))));
MP_ASSERT_OK(graph.CloseInputStream("offset"));
::mediapipe::Status status = graph.WaitUntilDone();
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kInvalidArgument);
mediapipe::Status status = graph.WaitUntilDone();
EXPECT_EQ(status.code(), mediapipe::StatusCode::kInvalidArgument);
EXPECT_THAT(status.message(), testing::HasSubstr("has a timestamp 237."));
}
TEST(CalculatorGraph, OutputSidePacketConsumedBySourceNode) {
const int max_count = 10;
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "max_count"
node {
calculator: "OutputSidePacketInProcessCalculator"
@@ -460,7 +460,7 @@ TEST(CalculatorGraph, OutputSidePacketConsumedBySourceNode) {
MP_ASSERT_OK(graph.ObserveOutputStream(
"output", [&output_packets](const Packet& packet) {
output_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
// Wait until the graph is idle so that
@@ -486,19 +486,19 @@ class FirstPacketFilterCalculator : public CalculatorBase {
FirstPacketFilterCalculator() {}
~FirstPacketFilterCalculator() override {}
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->Outputs().Index(0).SetSameAs(&cc->Inputs().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
if (!seen_first_packet_) {
cc->Outputs().Index(0).AddPacket(cc->Inputs().Index(0).Value());
cc->Outputs().Index(0).Close();
seen_first_packet_ = true;
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -529,7 +529,7 @@ TEST(CalculatorGraph, SourceLayerInversion) {
// Set num_threads to 1 to force sequential execution for deterministic
// outputs.
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
num_threads: 1
node {
calculator: "CountingSourceCalculator"
@@ -568,8 +568,8 @@ TEST(CalculatorGraph, SourceLayerInversion) {
MP_ASSERT_OK(graph.Initialize(
config, {{"max_count", MakePacket<int>(max_count)},
{"initial_value1", MakePacket<int>(initial_value1)}}));
::mediapipe::Status status = graph.Run();
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kUnknown);
mediapipe::Status status = graph.Run();
EXPECT_EQ(status.code(), mediapipe::StatusCode::kUnknown);
EXPECT_THAT(status.message(), testing::HasSubstr("deadlock"));
}
@@ -577,7 +577,7 @@ TEST(CalculatorGraph, SourceLayerInversion) {
// streams and no output streams.
TEST(CalculatorGraph, PacketGeneratorLikeCalculators) {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
node {
calculator: "IntegerOutputSidePacketCalculator"
output_side_packet: "one"
@@ -614,7 +614,7 @@ TEST(CalculatorGraph, PacketGeneratorLikeCalculators) {
MP_ASSERT_OK(graph.ObserveOutputStream(
"output", [&output_packets](const Packet& packet) {
output_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.Run());
ASSERT_EQ(1, output_packets.size());
@@ -624,7 +624,7 @@ TEST(CalculatorGraph, PacketGeneratorLikeCalculators) {
TEST(CalculatorGraph, OutputSummarySidePacketInClose) {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "input_packets"
node {
calculator: "CountAndOutputSummarySidePacketInCloseCalculator"
@@ -643,7 +643,7 @@ TEST(CalculatorGraph, OutputSummarySidePacketInClose) {
MP_ASSERT_OK(graph.ObserveOutputStream(
"output", [&output_packets](const Packet& packet) {
output_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
// Run the graph twice.
@@ -665,7 +665,7 @@ TEST(CalculatorGraph, OutputSummarySidePacketInClose) {
TEST(CalculatorGraph, GetOutputSidePacket) {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "input_packets"
node {
calculator: "CountAndOutputSummarySidePacketInCloseCalculator"
@@ -686,14 +686,14 @@ TEST(CalculatorGraph, GetOutputSidePacket) {
MP_ASSERT_OK(graph.Initialize(config));
// Check a packet generated by the PacketGenerator, which is available after
// graph initialization, can be fetched before graph starts.
::mediapipe::StatusOr<Packet> status_or_packet =
mediapipe::StatusOr<Packet> status_or_packet =
graph.GetOutputSidePacket("output_uint64");
MP_ASSERT_OK(status_or_packet);
EXPECT_EQ(Timestamp::Unset(), status_or_packet.ValueOrDie().Timestamp());
// IntSplitterPacketGenerator is missing its input side packet and we
// won't be able to get its output side packet now.
status_or_packet = graph.GetOutputSidePacket("output_uint32_pair");
EXPECT_EQ(::mediapipe::StatusCode::kUnavailable,
EXPECT_EQ(mediapipe::StatusCode::kUnavailable,
status_or_packet.status().code());
// Run the graph twice.
int max_count = 100;
@@ -713,13 +713,13 @@ TEST(CalculatorGraph, GetOutputSidePacket) {
// Should return NOT_FOUND for invalid side packets.
status_or_packet = graph.GetOutputSidePacket("unknown");
EXPECT_FALSE(status_or_packet.ok());
EXPECT_EQ(::mediapipe::StatusCode::kNotFound,
EXPECT_EQ(mediapipe::StatusCode::kNotFound,
status_or_packet.status().code());
// Should return UNAVAILABLE before graph is done for valid non-base
// packets.
status_or_packet = graph.GetOutputSidePacket("num_of_packets");
EXPECT_FALSE(status_or_packet.ok());
EXPECT_EQ(::mediapipe::StatusCode::kUnavailable,
EXPECT_EQ(mediapipe::StatusCode::kUnavailable,
status_or_packet.status().code());
// Should stil return a base even before graph is done.
status_or_packet = graph.GetOutputSidePacket("output_uint64");
@@ -749,20 +749,20 @@ typedef std::string HugeModel;
// Generates an output-side-packet once for each calculator-graph.
class OutputSidePacketCachedCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->OutputSidePackets().Index(0).Set<HugeModel>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
cc->OutputSidePackets().Index(0).Set(MakePacket<HugeModel>(
R"(An expensive side-packet created only once per graph)"));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
LOG(FATAL) << "Not reached.";
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OutputSidePacketCachedCalculator);
@@ -774,7 +774,7 @@ bool Equals(Packet p1, Packet p2) {
TEST(CalculatorGraph, OutputSidePacketCached) {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
node {
calculator: "OutputSidePacketCachedCalculator"
output_side_packet: "model"
@@ -791,7 +791,7 @@ TEST(CalculatorGraph, OutputSidePacketCached) {
MP_ASSERT_OK(graph.ObserveOutputStream(
"output", [&output_packets](const Packet& packet) {
output_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
// Run the graph three times.
@@ -34,39 +34,39 @@
namespace mediapipe {}
namespace testing_ns {
using ::mediapipe::CalculatorBase;
using ::mediapipe::CalculatorContext;
using ::mediapipe::CalculatorContract;
using ::mediapipe::CalculatorGraphConfig;
using ::mediapipe::GetFromUniquePtr;
using ::mediapipe::InputStreamShardSet;
using ::mediapipe::MakePacket;
using ::mediapipe::OutputStreamShardSet;
using ::mediapipe::Timestamp;
namespace proto_ns = ::mediapipe::proto_ns;
using ::mediapipe::CalculatorGraph;
using ::mediapipe::Packet;
using mediapipe::CalculatorBase;
using mediapipe::CalculatorContext;
using mediapipe::CalculatorContract;
using mediapipe::CalculatorGraphConfig;
using mediapipe::GetFromUniquePtr;
using mediapipe::InputStreamShardSet;
using mediapipe::MakePacket;
using mediapipe::OutputStreamShardSet;
using mediapipe::Timestamp;
namespace proto_ns = mediapipe::proto_ns;
using mediapipe::CalculatorGraph;
using mediapipe::Packet;
class InfiniteSequenceCalculator : public mediapipe::CalculatorBase {
public:
static ::mediapipe::Status GetContract(mediapipe::CalculatorContract* cc) {
static mediapipe::Status GetContract(mediapipe::CalculatorContract* cc) {
cc->Outputs().Tag("OUT").Set<int>();
cc->Outputs().Tag("EVENT").Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
cc->Outputs().Tag("EVENT").AddPacket(MakePacket<int>(1).At(Timestamp(1)));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
cc->Outputs().Tag("OUT").AddPacket(
MakePacket<int>(count_).At(Timestamp(count_)));
count_++;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Close(CalculatorContext* cc) override {
mediapipe::Status Close(CalculatorContext* cc) override {
cc->Outputs().Tag("EVENT").AddPacket(MakePacket<int>(2).At(Timestamp(2)));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -76,30 +76,30 @@ REGISTER_CALCULATOR(::testing_ns::InfiniteSequenceCalculator);
class StoppingPassThroughCalculator : public mediapipe::CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(""); ++i) {
cc->Inputs().Get("", i).SetAny();
cc->Outputs().Get("", i).SetSameAs(&cc->Inputs().Get("", i));
}
cc->Outputs().Tag("EVENT").Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
cc->Outputs().Tag("EVENT").AddPacket(MakePacket<int>(1).At(Timestamp(1)));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
for (int i = 0; i < cc->Inputs().NumEntries(""); ++i) {
if (!cc->Inputs().Get("", i).IsEmpty()) {
cc->Outputs().Get("", i).AddPacket(cc->Inputs().Get("", i).Value());
}
}
return (++count_ <= max_count_) ? ::mediapipe::OkStatus()
: ::mediapipe::tool::StatusStop();
return (++count_ <= max_count_) ? mediapipe::OkStatus()
: mediapipe::tool::StatusStop();
}
::mediapipe::Status Close(CalculatorContext* cc) override {
mediapipe::Status Close(CalculatorContext* cc) override {
cc->Outputs().Tag("EVENT").AddPacket(MakePacket<int>(2).At(Timestamp(2)));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -124,39 +124,39 @@ class AtomicSemaphore {
};
// A ProcessFunction that passes through all packets.
::mediapipe::Status DoProcess(const InputStreamShardSet& inputs,
OutputStreamShardSet* outputs) {
mediapipe::Status DoProcess(const InputStreamShardSet& inputs,
OutputStreamShardSet* outputs) {
for (int i = 0; i < inputs.NumEntries(); ++i) {
if (!inputs.Index(i).Value().IsEmpty()) {
outputs->Index(i).AddPacket(inputs.Index(i).Value());
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
typedef std::function<::mediapipe::Status(const InputStreamShardSet&,
OutputStreamShardSet*)>
typedef std::function<mediapipe::Status(const InputStreamShardSet&,
OutputStreamShardSet*)>
ProcessFunction;
// A Calculator that delegates its Process function to a callback function.
class ProcessCallbackCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (int i = 0; i < cc->Inputs().NumEntries(); ++i) {
cc->Inputs().Index(i).SetAny();
cc->Outputs().Index(i).SetSameAs(&cc->Inputs().Index(0));
}
cc->InputSidePackets().Index(0).Set<std::unique_ptr<ProcessFunction>>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) final {
mediapipe::Status Open(CalculatorContext* cc) final {
callback_ =
*GetFromUniquePtr<ProcessFunction>(cc->InputSidePackets().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
return callback_(cc->Inputs(), &(cc->Outputs()));
}
@@ -202,22 +202,22 @@ TEST(CalculatorGraphStoppingTest, CloseAllPacketSources) {
if (out_packets.size() >= kNumPackets) {
MP_EXPECT_OK(graph.CloseAllPacketSources());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.ObserveOutputStream( //
"count_out", [&](const Packet& packet) {
count_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.ObserveOutputStream( //
"event", [&](const Packet& packet) {
event_packets.push_back(packet.Get<int>());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.ObserveOutputStream( //
"event_out", [&](const Packet& packet) {
event_out_packets.push_back(packet.Get<int>());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_ASSERT_OK(graph.StartRun({}));
for (int i = 0; i < kNumPackets; ++i) {
@@ -261,7 +261,7 @@ TEST(CalculatorGraphStoppingTest, DeadlockReporting) {
MP_ASSERT_OK(
graph.ObserveOutputStream("out_1", [&out_packets](const Packet& packet) {
out_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
// Lambda that waits for a local semaphore.
@@ -289,8 +289,8 @@ TEST(CalculatorGraphStoppingTest, DeadlockReporting) {
MP_EXPECT_OK(add_packet("in_1", 2));
EXPECT_FALSE(add_packet("in_1", 3).ok());
::mediapipe::Status status = graph.WaitUntilIdle();
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kUnavailable);
mediapipe::Status status = graph.WaitUntilIdle();
EXPECT_EQ(status.code(), mediapipe::StatusCode::kUnavailable);
EXPECT_THAT(
status.message(),
testing::HasSubstr("Detected a deadlock due to input throttling"));
@@ -326,7 +326,7 @@ TEST(CalculatorGraphStoppingTest, DeadlockResolution) {
MP_ASSERT_OK(
graph.ObserveOutputStream("out_1", [&out_packets](const Packet& packet) {
out_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
// Lambda that waits for a local semaphore.
File diff suppressed because it is too large Load Diff
+38 -38
View File
@@ -73,7 +73,7 @@ Timestamp CalculatorNode::SourceProcessOrder(
return calculator_->SourceProcessOrder(cc);
}
::mediapipe::Status CalculatorNode::Initialize(
mediapipe::Status CalculatorNode::Initialize(
const ValidatedGraphConfig* validated_graph, int node_id,
InputStreamManager* input_stream_managers,
OutputStreamManager* output_stream_managers,
@@ -159,7 +159,7 @@ Timestamp CalculatorNode::SourceProcessOrder(
return InitializeInputStreams(input_stream_managers, output_stream_managers);
}
::mediapipe::Status CalculatorNode::InitializeOutputSidePackets(
mediapipe::Status CalculatorNode::InitializeOutputSidePackets(
const PacketTypeSet& output_side_packet_types,
OutputSidePacketImpl* output_side_packets) {
output_side_packets_ =
@@ -173,10 +173,10 @@ Timestamp CalculatorNode::SourceProcessOrder(
output_side_packets_->GetPtr(id) =
&output_side_packets[base_index + id.value()];
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorNode::InitializeInputSidePackets(
mediapipe::Status CalculatorNode::InitializeInputSidePackets(
OutputSidePacketImpl* output_side_packets) {
const NodeTypeInfo& node_type_info =
validated_graph_->CalculatorInfos()[node_id_];
@@ -201,10 +201,10 @@ Timestamp CalculatorNode::SourceProcessOrder(
<< output_side_packet_index;
origin_output_side_packet->AddMirror(&input_side_packet_handler_, id);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorNode::InitializeOutputStreams(
mediapipe::Status CalculatorNode::InitializeOutputStreams(
OutputStreamManager* output_stream_managers) {
RET_CHECK(output_stream_managers) << "output_stream_managers is NULL";
const NodeTypeInfo& node_type_info =
@@ -216,7 +216,7 @@ Timestamp CalculatorNode::SourceProcessOrder(
current_output_stream_managers);
}
::mediapipe::Status CalculatorNode::InitializeInputStreams(
mediapipe::Status CalculatorNode::InitializeInputStreams(
InputStreamManager* input_stream_managers,
OutputStreamManager* output_stream_managers) {
RET_CHECK(input_stream_managers) << "input_stream_managers is NULL";
@@ -247,10 +247,10 @@ Timestamp CalculatorNode::SourceProcessOrder(
<< output_stream_index;
origin_output_stream_manager->AddMirror(input_stream_handler_.get(), id);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorNode::InitializeInputStreamHandler(
mediapipe::Status CalculatorNode::InitializeInputStreamHandler(
const InputStreamHandlerConfig& handler_config,
const PacketTypeSet& input_stream_types) {
const ProtoString& input_stream_handler_name =
@@ -265,10 +265,10 @@ Timestamp CalculatorNode::SourceProcessOrder(
_ << "\"" << input_stream_handler_name
<< "\" is not a registered input stream handler.");
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorNode::InitializeOutputStreamHandler(
mediapipe::Status CalculatorNode::InitializeOutputStreamHandler(
const OutputStreamHandlerConfig& handler_config,
const PacketTypeSet& output_stream_types) {
const ProtoString& output_stream_handler_name =
@@ -282,10 +282,10 @@ Timestamp CalculatorNode::SourceProcessOrder(
/*calculator_run_in_parallel=*/max_in_flight_ > 1),
_ << "\"" << output_stream_handler_name
<< "\" is not a registered output stream handler.");
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorNode::ConnectShardsToStreams(
mediapipe::Status CalculatorNode::ConnectShardsToStreams(
CalculatorContext* calculator_context) {
RET_CHECK(calculator_context);
MP_RETURN_IF_ERROR(
@@ -325,13 +325,13 @@ void CalculatorNode::SetMaxInputStreamQueueSize(int max_queue_size) {
input_stream_handler_->SetMaxQueueSize(max_queue_size);
}
::mediapipe::Status CalculatorNode::PrepareForRun(
mediapipe::Status CalculatorNode::PrepareForRun(
const std::map<std::string, Packet>& all_side_packets,
const std::map<std::string, Packet>& service_packets,
std::function<void()> ready_for_open_callback,
std::function<void()> source_node_opened_callback,
std::function<void(CalculatorContext*)> schedule_callback,
std::function<void(::mediapipe::Status)> error_callback,
std::function<void(mediapipe::Status)> error_callback,
CounterFactory* counter_factory) {
RET_CHECK(ready_for_open_callback) << "ready_for_open_callback is NULL";
RET_CHECK(schedule_callback) << "schedule_callback is NULL";
@@ -398,7 +398,7 @@ void CalculatorNode::SetMaxInputStreamQueueSize(int max_queue_size) {
input_side_packets_ready_ =
(input_side_packet_handler_.MissingInputSidePacketCount() == 0);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
namespace {
@@ -410,7 +410,7 @@ const Packet GetPacket(const OutputSidePacket& out) {
}
// Resends the output-side-packets from the previous graph run.
::mediapipe::Status ResendSidePackets(CalculatorContext* cc) {
mediapipe::Status ResendSidePackets(CalculatorContext* cc) {
auto& outs = cc->OutputSidePackets();
for (CollectionItemId id = outs.BeginId(); id < outs.EndId(); ++id) {
Packet packet = GetPacket(outs.Get(id));
@@ -419,7 +419,7 @@ const Packet GetPacket(const OutputSidePacket& out) {
outs.Get(id).Set(packet);
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
} // namespace
@@ -433,7 +433,7 @@ bool CalculatorNode::OutputsAreConstant(CalculatorContext* cc) {
return true;
}
::mediapipe::Status CalculatorNode::OpenNode() {
mediapipe::Status CalculatorNode::OpenNode() {
VLOG(2) << "CalculatorNode::OpenNode() for " << DebugName();
CalculatorContext* default_context =
@@ -448,7 +448,7 @@ bool CalculatorNode::OutputsAreConstant(CalculatorContext* cc) {
calculator_context_manager_.PushInputTimestampToContext(
default_context, Timestamp::Unstarted());
::mediapipe::Status result;
mediapipe::Status result;
if (OutputsAreConstant(default_context)) {
result = ResendSidePackets(default_context);
} else {
@@ -493,7 +493,7 @@ bool CalculatorNode::OutputsAreConstant(CalculatorContext* cc) {
status_ = kStateOpened;
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void CalculatorNode::ActivateNode() {
@@ -527,8 +527,8 @@ void CalculatorNode::CloseOutputStreams(OutputStreamShardSet* outputs) {
output_stream_handler_->Close(outputs);
}
::mediapipe::Status CalculatorNode::CloseNode(
const ::mediapipe::Status& graph_status, bool graph_run_ended) {
mediapipe::Status CalculatorNode::CloseNode(
const mediapipe::Status& graph_status, bool graph_run_ended) {
{
absl::MutexLock status_lock(&status_mutex_);
RET_CHECK_NE(status_, kStateClosed)
@@ -548,11 +548,11 @@ void CalculatorNode::CloseOutputStreams(OutputStreamShardSet* outputs) {
calculator_context_manager_.SetGraphStatusInContext(default_context,
graph_status);
::mediapipe::Status result;
mediapipe::Status result;
if (OutputsAreConstant(default_context)) {
// Do nothing.
result = ::mediapipe::OkStatus();
result = mediapipe::OkStatus();
} else {
MEDIAPIPE_PROFILING(CLOSE, default_context);
LegacyCalculatorSupport::Scoped<CalculatorContext> s(default_context);
@@ -582,10 +582,10 @@ void CalculatorNode::CloseOutputStreams(OutputStreamShardSet* outputs) {
"Calculator::Close() for node \"$0\" failed: ", DebugName());
VLOG(2) << "Closed node " << DebugName();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void CalculatorNode::CleanupAfterRun(const ::mediapipe::Status& graph_status) {
void CalculatorNode::CleanupAfterRun(const mediapipe::Status& graph_status) {
if (needs_to_close_) {
calculator_context_manager_.PushInputTimestampToContext(
calculator_context_manager_.GetDefaultCalculatorContext(),
@@ -754,12 +754,12 @@ std::string CalculatorNode::DebugName() const {
}
// TODO: Split this function.
::mediapipe::Status CalculatorNode::ProcessNode(
mediapipe::Status CalculatorNode::ProcessNode(
CalculatorContext* calculator_context) {
if (IsSource()) {
// This is a source Calculator.
if (Closed()) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
const Timestamp input_timestamp = calculator_context->InputTimestamp();
@@ -768,7 +768,7 @@ std::string CalculatorNode::DebugName() const {
output_stream_handler_->PrepareOutputs(input_timestamp, outputs);
VLOG(2) << "Calling Calculator::Process() for node: " << DebugName();
::mediapipe::Status result;
mediapipe::Status result;
{
MEDIAPIPE_PROFILING(PROCESS, calculator_context);
@@ -782,7 +782,7 @@ std::string CalculatorNode::DebugName() const {
// Needs to call CloseNode().
node_stopped = true;
} else {
return ::mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
return mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
<< absl::Substitute(
"Calculator::Process() for node \"$0\" failed: ",
DebugName());
@@ -791,15 +791,15 @@ std::string CalculatorNode::DebugName() const {
output_stream_handler_->PostProcess(input_timestamp);
if (node_stopped) {
MP_RETURN_IF_ERROR(
CloseNode(::mediapipe::OkStatus(), /*graph_run_ended=*/false));
CloseNode(mediapipe::OkStatus(), /*graph_run_ended=*/false));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
} else {
// This is not a source Calculator.
InputStreamShardSet* const inputs = &calculator_context->Inputs();
OutputStreamShardSet* const outputs = &calculator_context->Outputs();
::mediapipe::Status result =
::mediapipe::InternalError("Calculator context has no input packets.");
mediapipe::Status result =
mediapipe::InternalError("Calculator context has no input packets.");
int num_invocations = calculator_context_manager_.NumberOfContextTimestamps(
*calculator_context);
@@ -818,7 +818,7 @@ std::string CalculatorNode::DebugName() const {
if (OutputsAreConstant(calculator_context)) {
// Do nothing.
result = ::mediapipe::OkStatus();
result = mediapipe::OkStatus();
} else {
MEDIAPIPE_PROFILING(PROCESS, calculator_context);
LegacyCalculatorSupport::Scoped<CalculatorContext> s(
@@ -838,7 +838,7 @@ std::string CalculatorNode::DebugName() const {
// ensure that all sources will be closed and that packets in input
// streams will be processed before the graph is terminated.
if (!result.ok() && result != tool::StatusStop()) {
return ::mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
return mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
<< absl::Substitute(
"Calculator::Process() for node \"$0\" failed: ",
DebugName());
@@ -855,7 +855,7 @@ std::string CalculatorNode::DebugName() const {
CHECK_EQ(calculator_context_manager_.NumberOfContextTimestamps(
*calculator_context),
1);
return CloseNode(::mediapipe::OkStatus(), /*graph_run_ended=*/false);
return CloseNode(mediapipe::OkStatus(), /*graph_run_ended=*/false);
} else {
RET_CHECK_FAIL()
<< "Invalid input timestamp in ProcessNode(). timestamp: "
+15 -15
View File
@@ -95,7 +95,7 @@ class CalculatorNode {
void SetExecutor(const std::string& executor);
// Calls Process() on the Calculator corresponding to this node.
::mediapipe::Status ProcessNode(CalculatorContext* calculator_context);
mediapipe::Status ProcessNode(CalculatorContext* calculator_context);
// Initializes the node. The buffer_size_hint argument is
// set to the value specified in the graph proto for this field.
@@ -105,7 +105,7 @@ class CalculatorNode {
// output_side_packets is expected to point to a contiguous flat array with
// OutputSidePacketImpls corresponding to the output side packet indexes in
// validated_graph.
::mediapipe::Status Initialize(
mediapipe::Status Initialize(
const ValidatedGraphConfig* validated_graph, int node_id,
InputStreamManager* input_stream_managers,
OutputStreamManager* output_stream_managers,
@@ -121,22 +121,22 @@ class CalculatorNode {
// can be scheduled. source_node_opened_callback is called when a source
// node is opened. schedule_callback is passed to the InputStreamHandler
// and is called each time a new invocation can be scheduled.
::mediapipe::Status PrepareForRun(
mediapipe::Status PrepareForRun(
const std::map<std::string, Packet>& all_side_packets,
const std::map<std::string, Packet>& service_packets,
std::function<void()> ready_for_open_callback,
std::function<void()> source_node_opened_callback,
std::function<void(CalculatorContext*)> schedule_callback,
std::function<void(::mediapipe::Status)> error_callback,
std::function<void(mediapipe::Status)> error_callback,
CounterFactory* counter_factory) ABSL_LOCKS_EXCLUDED(status_mutex_);
// Opens the node.
::mediapipe::Status OpenNode() ABSL_LOCKS_EXCLUDED(status_mutex_);
mediapipe::Status OpenNode() ABSL_LOCKS_EXCLUDED(status_mutex_);
// Called when a source node's layer becomes active.
void ActivateNode() ABSL_LOCKS_EXCLUDED(status_mutex_);
// Cleans up the node after the CalculatorGraph has been run. Deletes
// the Calculator managed by this node. graph_status is the status of
// the graph run.
void CleanupAfterRun(const ::mediapipe::Status& graph_status)
void CleanupAfterRun(const mediapipe::Status& graph_status)
ABSL_LOCKS_EXCLUDED(status_mutex_);
// Returns true iff PrepareForRun() has been called (and types verified).
@@ -218,8 +218,8 @@ class CalculatorNode {
// Closes the node's calculator and input and output streams.
// graph_status is the current status of the graph run. graph_run_ended
// indicates whether the graph run has ended.
::mediapipe::Status CloseNode(const ::mediapipe::Status& graph_status,
bool graph_run_ended)
mediapipe::Status CloseNode(const mediapipe::Status& graph_status,
bool graph_run_ended)
ABSL_LOCKS_EXCLUDED(status_mutex_);
// Returns a pointer to the default calculator context that is used for
@@ -235,34 +235,34 @@ class CalculatorNode {
private:
// Sets up the output side packets from the master flat array.
::mediapipe::Status InitializeOutputSidePackets(
mediapipe::Status InitializeOutputSidePackets(
const PacketTypeSet& output_side_packet_types,
OutputSidePacketImpl* output_side_packets);
// Connects the input side packets as mirrors on the output side packets.
// Output side packets are looked up in the master flat array which is
// provided.
::mediapipe::Status InitializeInputSidePackets(
mediapipe::Status InitializeInputSidePackets(
OutputSidePacketImpl* output_side_packets);
// Sets up the output streams from the master flat array.
::mediapipe::Status InitializeOutputStreams(
mediapipe::Status InitializeOutputStreams(
OutputStreamManager* output_stream_managers);
// Sets up the input streams and connects them as mirrors on the
// output streams. Both input streams and output streams are looked
// up in the master flat arrays which are provided.
::mediapipe::Status InitializeInputStreams(
mediapipe::Status InitializeInputStreams(
InputStreamManager* input_stream_managers,
OutputStreamManager* output_stream_managers);
::mediapipe::Status InitializeInputStreamHandler(
mediapipe::Status InitializeInputStreamHandler(
const InputStreamHandlerConfig& handler_config,
const PacketTypeSet& input_stream_types);
::mediapipe::Status InitializeOutputStreamHandler(
mediapipe::Status InitializeOutputStreamHandler(
const OutputStreamHandlerConfig& handler_config,
const PacketTypeSet& output_stream_types);
// Connects the input/output stream shards in the given calculator context to
// the input/output streams of the node.
::mediapipe::Status ConnectShardsToStreams(
mediapipe::Status ConnectShardsToStreams(
CalculatorContext* calculator_context);
// The general scheduling logic shared by EndScheduling() and
+17 -17
View File
@@ -37,23 +37,23 @@ class CountCalculator : public CalculatorBase {
CountCalculator() { ++num_constructed_; }
~CountCalculator() override { ++num_destroyed_; }
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
++num_fill_expectations_;
cc->Inputs().Get(cc->Inputs().BeginId()).Set<int>();
cc->Outputs().Get(cc->Outputs().BeginId()).Set<int>();
cc->InputSidePackets().Get(cc->InputSidePackets().BeginId()).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
++num_open_;
// Simulate doing nontrivial work to ensure that the time spent in the
// method will register on streamz each time it is called.
usleep(100);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
++num_process_;
int input_stream_int = cc->Inputs().Get(cc->Inputs().BeginId()).Get<int>();
int side_packet_int =
@@ -65,15 +65,15 @@ class CountCalculator : public CalculatorBase {
// Simulate doing nontrivial work to ensure that the time spent in the
// method will register on streamz each time it is called.
usleep(100);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Close(CalculatorContext* cc) override {
mediapipe::Status Close(CalculatorContext* cc) override {
++num_close_;
// Simulate doing nontrivial work to ensure that the time spent in the
// method will register on streamz each time it is called.
usleep(100);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
static int num_constructed_;
@@ -94,7 +94,7 @@ int CountCalculator::num_destroyed_ = 0;
void SourceNodeOpenedNoOp() {}
void CheckFail(const ::mediapipe::Status& status) {
void CheckFail(const mediapipe::Status& status) {
LOG(FATAL) << "The test triggered the error callback with status: " << status;
}
@@ -133,7 +133,7 @@ class CalculatorNodeTest : public ::testing::Test {
CalculatorGraphConfig graph_config;
// Add the test for the node under test.
if (use_tags) {
graph_config = ::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(
graph_config = mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(
first_two_nodes_string +
"node {\n" // Node index 2
" calculator: \"CountCalculator\"\n"
@@ -143,7 +143,7 @@ class CalculatorNodeTest : public ::testing::Test {
" input_side_packet: \"INPUT_SIDE_PACKET_TAG:input_a\"\n"
"}\n");
} else {
graph_config = ::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(
graph_config = mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(
first_two_nodes_string +
"node {\n" // Node index 2
" calculator: \"CountCalculator\"\n"
@@ -165,7 +165,7 @@ class CalculatorNodeTest : public ::testing::Test {
&buffer_size_hint_, graph_profiler_));
}
::mediapipe::Status PrepareNodeForRun() {
mediapipe::Status PrepareNodeForRun() {
return node_->PrepareForRun( //
input_side_packets_, //
service_packets_, //
@@ -180,7 +180,7 @@ class CalculatorNodeTest : public ::testing::Test {
nullptr);
}
::mediapipe::Status InitializeStreams() {
mediapipe::Status InitializeStreams() {
// START OF: code is copied from
// CalculatorGraph::InitializePacketGeneratorGraph.
// Create and initialize the output side packets.
@@ -220,7 +220,7 @@ class CalculatorNodeTest : public ::testing::Test {
stream_a_manager_ = &output_stream_managers_[1];
stream_b_manager_ = &output_stream_managers_[2];
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
virtual void SimulateParentOpenNode() { stream_a_manager_->LockIntroData(); }
@@ -482,7 +482,7 @@ TEST_F(CalculatorNodeTest, CleanupAfterRun) {
node_->EndScheduling();
// The max parallelism is already reached.
EXPECT_FALSE(node_->TryToBeginScheduling());
node_->CleanupAfterRun(::mediapipe::OkStatus());
node_->CleanupAfterRun(mediapipe::OkStatus());
EXPECT_FALSE(node_->Prepared());
EXPECT_FALSE(node_->Opened());
@@ -517,7 +517,7 @@ void CalculatorNodeTest::TestCleanupAfterRunTwice() {
EXPECT_TRUE(node_->TryToBeginScheduling());
MP_EXPECT_OK(node_->ProcessNode(cc_));
node_->EndScheduling();
node_->CleanupAfterRun(::mediapipe::OkStatus());
node_->CleanupAfterRun(mediapipe::OkStatus());
stream_a_manager_->PrepareForRun(nullptr);
@@ -543,7 +543,7 @@ void CalculatorNodeTest::TestCleanupAfterRunTwice() {
node_->EndScheduling();
// The max parallelism is already reached.
EXPECT_FALSE(node_->TryToBeginScheduling());
node_->CleanupAfterRun(::mediapipe::OkStatus());
node_->CleanupAfterRun(mediapipe::OkStatus());
EXPECT_FALSE(node_->Prepared());
EXPECT_FALSE(node_->Opened());
@@ -50,20 +50,20 @@ inline void BusySleep(absl::Duration duration) {
class SlowPlusOneCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Outputs().Index(0).Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
cc->SetOffset(mediapipe::TimestampDiff(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
if (cc->InputTimestamp().Value() % 4 == 0) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
RandomEngine random(testing::UnitTest::GetInstance()->random_seed());
@@ -71,7 +71,7 @@ class SlowPlusOneCalculator : public CalculatorBase {
BusySleep(absl::Milliseconds(90 + uniform_dist(random)));
cc->Outputs().Index(0).Add(new int(cc->Inputs().Index(0).Get<int>() + 1),
cc->InputTimestamp());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
@@ -91,7 +91,7 @@ class ParallelExecutionTest : public testing::Test {
TEST_F(ParallelExecutionTest, SlowPlusOneCalculatorsTest) {
CalculatorGraphConfig graph_config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "input"
node {
calculator: "SlowPlusOneCalculator"
@@ -124,7 +124,7 @@ TEST_F(ParallelExecutionTest, SlowPlusOneCalculatorsTest) {
const int kTotalNums = 100;
int fail_count = 0;
for (int i = 0; i < kTotalNums; ++i) {
::mediapipe::Status status = graph.AddPacketToInputStream(
mediapipe::Status status = graph.AddPacketToInputStream(
"input", Adopt(new int(i)).At(Timestamp(i)));
if (!status.ok()) {
++fail_count;
+9 -9
View File
@@ -19,14 +19,14 @@
#include "mediapipe/framework/calculator_base.h"
#define REGISTER_CALCULATOR(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED(::mediapipe::CalculatorBaseRegistry, \
calculator_registration, name, \
absl::make_unique<name>); \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
::mediapipe::internal::StaticAccessToCalculatorBaseRegistry, \
access_registration, name, \
absl::make_unique< \
::mediapipe::internal::StaticAccessToCalculatorBaseTyped<name>>)
#define REGISTER_CALCULATOR(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED(mediapipe::CalculatorBaseRegistry, \
calculator_registration, name, \
absl::make_unique<name>); \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
mediapipe::internal::StaticAccessToCalculatorBaseRegistry, \
access_registration, name, \
absl::make_unique< \
mediapipe::internal::StaticAccessToCalculatorBaseTyped<name>>)
#endif // MEDIAPIPE_FRAMEWORK_CALCULATOR_REGISTRY_H_
@@ -30,9 +30,9 @@ bool IsLegacyCalculator(const std::string& package_name,
return false;
}
::mediapipe::Status VerifyCalculatorWithContract(
const std::string& package_name, const std::string& node_class,
CalculatorContract* contract) {
mediapipe::Status VerifyCalculatorWithContract(const std::string& package_name,
const std::string& node_class,
CalculatorContract* contract) {
// A number of calculators use the non-CC methods on GlCalculatorHelper
// even though they are CalculatorBase-based.
ASSIGN_OR_RETURN(
@@ -43,10 +43,10 @@ bool IsLegacyCalculator(const std::string& package_name,
MP_RETURN_IF_ERROR(static_access_to_calculator_base->GetContract(contract))
.SetPrepend()
<< node_class << ": ";
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::StatusOr<std::unique_ptr<CalculatorBase>> CreateCalculator(
mediapipe::StatusOr<std::unique_ptr<CalculatorBase>> CreateCalculator(
const std::shared_ptr<tool::TagMap>& input_tag_map,
const std::shared_ptr<tool::TagMap>& output_tag_map,
const std::string& package_name, CalculatorState* calculator_state,
@@ -31,11 +31,11 @@ namespace mediapipe {
bool IsLegacyCalculator(const std::string& package_name,
const std::string& node_class);
::mediapipe::Status VerifyCalculatorWithContract(
const std::string& package_name, const std::string& node_class,
CalculatorContract* contract);
mediapipe::Status VerifyCalculatorWithContract(const std::string& package_name,
const std::string& node_class,
CalculatorContract* contract);
::mediapipe::StatusOr<std::unique_ptr<CalculatorBase>> CreateCalculator(
mediapipe::StatusOr<std::unique_ptr<CalculatorBase>> CreateCalculator(
const std::shared_ptr<tool::TagMap>& input_tag_map,
const std::shared_ptr<tool::TagMap>& output_tag_map,
const std::string& package_name, CalculatorState* calculator_state,
+18 -18
View File
@@ -36,15 +36,15 @@ namespace {
// Input side packets: 1, pointing to CalculatorRunner::StreamContents.
class CalculatorRunnerSourceCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->InputSidePackets()
.Index(0)
.Set<const CalculatorRunner::StreamContents*>();
cc->Outputs().Index(0).SetAny();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
const auto* contents = cc->InputSidePackets()
.Index(0)
.Get<const CalculatorRunner::StreamContents*>();
@@ -53,9 +53,9 @@ class CalculatorRunnerSourceCalculator : public CalculatorBase {
for (const Packet& packet : contents->packets) {
cc->Outputs().Index(0).AddPacket(packet);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
return tool::StatusStop();
}
};
@@ -67,23 +67,23 @@ REGISTER_CALCULATOR(CalculatorRunnerSourceCalculator);
// Input side packets: 1, pointing to CalculatorRunner::StreamContents.
class CalculatorRunnerSinkCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).SetAny();
cc->InputSidePackets().Index(0).Set<CalculatorRunner::StreamContents*>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
contents_ = cc->InputSidePackets()
.Index(0)
.Get<CalculatorRunner::StreamContents*>();
contents_->header = cc->Inputs().Index(0).Header();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
contents_->packets.push_back(cc->Inputs().Index(0).Value());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
private:
@@ -98,7 +98,7 @@ CalculatorRunner::CalculatorRunner(
MEDIAPIPE_CHECK_OK(InitializeFromNodeConfig(node_config));
}
::mediapipe::Status CalculatorRunner::InitializeFromNodeConfig(
mediapipe::Status CalculatorRunner::InitializeFromNodeConfig(
const CalculatorGraphConfig::Node& node_config) {
node_config_ = node_config;
@@ -126,7 +126,7 @@ CalculatorRunner::CalculatorRunner(
tool::TagMap::Create(node_config_.output_side_packet()));
output_side_packets_ = absl::make_unique<PacketSet>(output_side_map);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
CalculatorRunner::CalculatorRunner(const std::string& calculator_type,
@@ -220,10 +220,10 @@ std::map<std::string, int64> CalculatorRunner::GetCountersValues() {
return graph_->GetCounterFactory()->GetCounterSet()->GetCountersValues();
}
::mediapipe::Status CalculatorRunner::BuildGraph() {
mediapipe::Status CalculatorRunner::BuildGraph() {
if (graph_ != nullptr) {
// The graph was already built.
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
RET_CHECK(inputs_) << "The inputs were not initialized.";
RET_CHECK(outputs_) << "The outputs were not initialized.";
@@ -277,10 +277,10 @@ std::map<std::string, int64> CalculatorRunner::GetCountersValues() {
graph_ = absl::make_unique<CalculatorGraph>();
MP_RETURN_IF_ERROR(graph_->Initialize(config));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status CalculatorRunner::Run() {
mediapipe::Status CalculatorRunner::Run() {
MP_RETURN_IF_ERROR(BuildGraph());
// Set the input side packets for the sources.
std::map<std::string, Packet> input_side_packets;
@@ -352,7 +352,7 @@ std::map<std::string, int64> CalculatorRunner::GetCountersValues() {
tag, (index == -1) ? ++positional_index : index);
ASSIGN_OR_RETURN(contents, graph_->GetOutputSidePacket(name));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
} // namespace mediapipe
+4 -4
View File
@@ -109,11 +109,11 @@ class CalculatorRunner {
// Runs the calculator, by calling Open(), Process() with the
// inputs provided via mutable_inputs(), and Close(). Returns the
// ::mediapipe::Status from CalculatorGraph::Run(). Internally, Run()
// mediapipe::Status from CalculatorGraph::Run(). Internally, Run()
// constructs a CalculatorGraph in the first call, and calls
// CalculatorGraph::Run(). A single instance of CalculatorRunner
// uses the same instance of CalculatorGraph for all runs.
::mediapipe::Status Run();
mediapipe::Status Run();
// Returns the vector of contents of the output streams. The .header
// field contains the stream header and the .packets field contains
@@ -135,11 +135,11 @@ class CalculatorRunner {
static const char kSinkPrefix[];
// Initialize using a node config (does the constructor's work).
::mediapipe::Status InitializeFromNodeConfig(
mediapipe::Status InitializeFromNodeConfig(
const CalculatorGraphConfig::Node& node_config);
// Builds the graph if one does not already exist.
::mediapipe::Status BuildGraph();
mediapipe::Status BuildGraph();
CalculatorGraphConfig::Node node_config_;
+10 -10
View File
@@ -40,7 +40,7 @@ namespace {
// at InputTimestamp. The headers are strings.
class CalculatorRunnerTestCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Index(0).Set<int>();
cc->Inputs().Index(1).Set<int>();
cc->Outputs().Index(0).Set<int>();
@@ -50,10 +50,10 @@ class CalculatorRunnerTestCalculator : public CalculatorBase {
cc->OutputSidePackets()
.Tag("SIDE_OUTPUT")
.SetSameAs(&cc->InputSidePackets().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Open(CalculatorContext* cc) override {
mediapipe::Status Open(CalculatorContext* cc) override {
std::string input_header_string =
absl::StrCat(cc->Inputs().Index(0).Header().Get<std::string>(),
cc->Inputs().Index(1).Header().Get<std::string>());
@@ -66,17 +66,17 @@ class CalculatorRunnerTestCalculator : public CalculatorBase {
cc->OutputSidePackets()
.Tag("SIDE_OUTPUT")
.Set(cc->InputSidePackets().Index(0));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
for (int index = 0; index < 2; ++index) {
cc->Outputs().Index(index).Add(
new int(-cc->Inputs().Index(index).Get<int>()), cc->InputTimestamp());
}
cc->Outputs().Index(2).AddPacket(
cc->InputSidePackets().Index(0).At(cc->InputTimestamp()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(CalculatorRunnerTestCalculator);
@@ -87,7 +87,7 @@ REGISTER_CALCULATOR(CalculatorRunnerTestCalculator);
// with the same tag name (and any index).
class CalculatorRunnerMultiTagTestCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
for (const std::string& tag : cc->Inputs().GetTags()) {
for (CollectionItemId item_id = cc->Inputs().BeginId(tag);
item_id < cc->Inputs().EndId(tag); ++item_id) {
@@ -95,10 +95,10 @@ class CalculatorRunnerMultiTagTestCalculator : public CalculatorBase {
}
cc->Outputs().Get(tag, 0).Set<int>();
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
for (const std::string& tag : cc->Inputs().GetTags()) {
auto sum = absl::make_unique<int>(0);
for (CollectionItemId item_id = cc->Inputs().BeginId(tag);
@@ -109,7 +109,7 @@ class CalculatorRunnerMultiTagTestCalculator : public CalculatorBase {
}
cc->Outputs().Get(tag, 0).Add(sum.release(), cc->InputTimestamp());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(CalculatorRunnerMultiTagTestCalculator);
+2 -2
View File
@@ -448,7 +448,7 @@ template <typename T, CollectionStorage storage, typename ErrorHandler>
typename Collection<T, storage, ErrorHandler>::value_type*&
Collection<T, storage, ErrorHandler>::GetPtr(CollectionItemId id) {
static_assert(storage == CollectionStorage::kStorePointer,
"::mediapipe::internal::Collection<T>::GetPtr() is only "
"mediapipe::internal::Collection<T>::GetPtr() is only "
"available for collections that were defined with template "
"argument storage == CollectionStorage::kStorePointer.");
CHECK_LE(BeginId(), id);
@@ -460,7 +460,7 @@ template <typename T, CollectionStorage storage, typename ErrorHandler>
const typename Collection<T, storage, ErrorHandler>::value_type*
Collection<T, storage, ErrorHandler>::GetPtr(CollectionItemId id) const {
static_assert(storage == CollectionStorage::kStorePointer,
"::mediapipe::internal::Collection<T>::GetPtr() is only "
"mediapipe::internal::Collection<T>::GetPtr() is only "
"available for collections that were defined with template "
"argument storage == CollectionStorage::kStorePointer.");
CHECK_LE(BeginId(), id);
+1 -1
View File
@@ -157,7 +157,7 @@ class CollectionItemId {
}
private:
friend class ::mediapipe::tool::TagMap;
friend class mediapipe::tool::TagMap;
// Initialization from a value.
explicit constexpr CollectionItemId(int init_value) : value_(init_value) {}
+2 -2
View File
@@ -183,7 +183,7 @@ TEST(CollectionTest, StaticEmptyCollectionHeapCheck) {
}
template <typename T>
::mediapipe::Status TestCollectionWithPointers(
mediapipe::Status TestCollectionWithPointers(
const std::vector<T>& original_values, const T& inject1, const T& inject2) {
std::shared_ptr<tool::TagMap> tag_map =
tool::CreateTagMap({"TAG_A:a", "TAG_B:1:b", "TAG_A:2:c", "TAG_B:d",
@@ -451,7 +451,7 @@ template <typename T>
++i;
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
TEST(CollectionTest, TestCollectionWithPointersIntAndString) {
+1 -1
View File
@@ -67,7 +67,7 @@ void CounterSet::PrintCounters() ABSL_LOCKS_EXCLUDED(mu_) {
Counter* CounterSet::Get(const std::string& name) ABSL_LOCKS_EXCLUDED(mu_) {
absl::ReaderMutexLock lock(&mu_);
if (!::mediapipe::ContainsKey(counters_, name)) {
if (!mediapipe::ContainsKey(counters_, name)) {
return nullptr;
}
return counters_[name].get();
+28 -31
View File
@@ -22,63 +22,60 @@ namespace mediapipe {
// Each of the functions below creates a canonical error with the given
// message. The error code of the returned status object matches the name of
// the function.
inline ::mediapipe::Status AlreadyExistsError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kAlreadyExists, message);
inline mediapipe::Status AlreadyExistsError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kAlreadyExists, message);
}
inline ::mediapipe::Status CancelledError() {
return ::mediapipe::Status(::mediapipe::StatusCode::kCancelled, "");
inline mediapipe::Status CancelledError() {
return mediapipe::Status(mediapipe::StatusCode::kCancelled, "");
}
inline ::mediapipe::Status CancelledError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kCancelled, message);
inline mediapipe::Status CancelledError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kCancelled, message);
}
inline ::mediapipe::Status InternalError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kInternal, message);
inline mediapipe::Status InternalError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kInternal, message);
}
inline ::mediapipe::Status InvalidArgumentError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kInvalidArgument,
message);
inline mediapipe::Status InvalidArgumentError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kInvalidArgument, message);
}
inline ::mediapipe::Status FailedPreconditionError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kFailedPrecondition,
message);
inline mediapipe::Status FailedPreconditionError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kFailedPrecondition, message);
}
inline ::mediapipe::Status NotFoundError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kNotFound, message);
inline mediapipe::Status NotFoundError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kNotFound, message);
}
inline ::mediapipe::Status OutOfRangeError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kOutOfRange, message);
inline mediapipe::Status OutOfRangeError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kOutOfRange, message);
}
inline ::mediapipe::Status PermissionDeniedError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kPermissionDenied,
message);
inline mediapipe::Status PermissionDeniedError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kPermissionDenied, message);
}
inline ::mediapipe::Status UnimplementedError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kUnimplemented, message);
inline mediapipe::Status UnimplementedError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kUnimplemented, message);
}
inline ::mediapipe::Status UnknownError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kUnknown, message);
inline mediapipe::Status UnknownError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kUnknown, message);
}
inline ::mediapipe::Status UnavailableError(absl::string_view message) {
return ::mediapipe::Status(::mediapipe::StatusCode::kUnavailable, message);
inline mediapipe::Status UnavailableError(absl::string_view message) {
return mediapipe::Status(mediapipe::StatusCode::kUnavailable, message);
}
inline bool IsCancelled(const ::mediapipe::Status& status) {
return status.code() == ::mediapipe::StatusCode::kCancelled;
inline bool IsCancelled(const mediapipe::Status& status) {
return status.code() == mediapipe::StatusCode::kCancelled;
}
inline bool IsNotFound(const ::mediapipe::Status& status) {
return status.code() == ::mediapipe::StatusCode::kNotFound;
inline bool IsNotFound(const mediapipe::Status& status) {
return status.code() == mediapipe::StatusCode::kNotFound;
}
} // namespace mediapipe
+1 -1
View File
@@ -21,7 +21,7 @@
// void func() {}
// FILE* fp = fopen("data.txt", "r");
// if (fp == nullptr) return;
// auto fp_cleaner = ::mediapipe::MakeCleanup([fp] { fclose(fp); });
// auto fp_cleaner = mediapipe::MakeCleanup([fp] { fclose(fp); });
// // No matter what, fclose(fp) will happen.
// DataObject d;
// while (ReadDataObject(fp, &d)) {
+26 -26
View File
@@ -138,11 +138,11 @@ class DirectoryListing {
} // namespace
::mediapipe::Status GetContents(absl::string_view file_name,
std::string* output) {
FILE* fp = fopen(file_name.data(), "r");
mediapipe::Status GetContents(absl::string_view file_name, std::string* output,
bool read_as_binary) {
FILE* fp = fopen(file_name.data(), read_as_binary ? "rb" : "r");
if (fp == NULL) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Can't find file: " << file_name;
}
@@ -151,36 +151,36 @@ class DirectoryListing {
char buf[4096];
size_t ret = fread(buf, 1, 4096, fp);
if (ret == 0 && ferror(fp)) {
return ::mediapipe::InternalErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InternalErrorBuilder(MEDIAPIPE_LOC)
<< "Error while reading file: " << file_name;
}
output->append(std::string(buf, ret));
}
fclose(fp);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status SetContents(absl::string_view file_name,
absl::string_view content) {
mediapipe::Status SetContents(absl::string_view file_name,
absl::string_view content) {
FILE* fp = fopen(file_name.data(), "w");
if (fp == NULL) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Can't open file: " << file_name;
}
fwrite(content.data(), sizeof(char), content.size(), fp);
size_t write_error = ferror(fp);
if (fclose(fp) != 0 || write_error) {
return ::mediapipe::InternalErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InternalErrorBuilder(MEDIAPIPE_LOC)
<< "Error while writing file: " << file_name
<< ". Error message: " << strerror(write_error);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status MatchInTopSubdirectories(
const std::string& parent_directory, const std::string& file_name,
std::vector<std::string>* results) {
mediapipe::Status MatchInTopSubdirectories(const std::string& parent_directory,
const std::string& file_name,
std::vector<std::string>* results) {
DirectoryListing parent_listing(parent_directory);
while (parent_listing.HasNextEntry()) {
@@ -194,12 +194,12 @@ class DirectoryListing {
}
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status MatchFileTypeInDirectory(
const std::string& directory, const std::string& file_suffix,
std::vector<std::string>* results) {
mediapipe::Status MatchFileTypeInDirectory(const std::string& directory,
const std::string& file_suffix,
std::vector<std::string>* results) {
DirectoryListing directory_listing(directory);
while (directory_listing.HasNextEntry()) {
@@ -209,21 +209,21 @@ class DirectoryListing {
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Exists(absl::string_view file_name) {
mediapipe::Status Exists(absl::string_view file_name) {
struct stat buffer;
int status;
status = stat(std::string(file_name).c_str(), &buffer);
if (status == 0) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
switch (errno) {
case EACCES:
return ::mediapipe::PermissionDeniedError("Insufficient permissions.");
return mediapipe::PermissionDeniedError("Insufficient permissions.");
default:
return ::mediapipe::NotFoundError("The path does not exist.");
return mediapipe::NotFoundError("The path does not exist.");
}
}
@@ -235,7 +235,7 @@ int mkdir(std::string path) {
int mkdir(std::string path) { return _mkdir(path.c_str()); }
#endif
::mediapipe::Status RecursivelyCreateDir(absl::string_view path) {
mediapipe::Status RecursivelyCreateDir(absl::string_view path) {
if (path.empty() || Exists(path).ok()) {
return mediapipe::OkStatus();
}
@@ -244,9 +244,9 @@ int mkdir(std::string path) { return _mkdir(path.c_str()); }
if (mkdir(std::string(path)) != 0) {
switch (errno) {
case EACCES:
return ::mediapipe::PermissionDeniedError("Insufficient permissions.");
return mediapipe::PermissionDeniedError("Insufficient permissions.");
default:
return ::mediapipe::UnavailableError("Failed to create directory.");
return mediapipe::UnavailableError("Failed to create directory.");
}
}
return mediapipe::OkStatus();
+12 -12
View File
@@ -20,23 +20,23 @@
namespace mediapipe {
namespace file {
::mediapipe::Status GetContents(absl::string_view file_name,
std::string* output);
mediapipe::Status GetContents(absl::string_view file_name, std::string* output,
bool read_as_binary = false);
::mediapipe::Status SetContents(absl::string_view file_name,
absl::string_view content);
mediapipe::Status SetContents(absl::string_view file_name,
absl::string_view content);
::mediapipe::Status MatchInTopSubdirectories(
const std::string& parent_directory, const std::string& file_name,
std::vector<std::string>* results);
mediapipe::Status MatchInTopSubdirectories(const std::string& parent_directory,
const std::string& file_name,
std::vector<std::string>* results);
::mediapipe::Status MatchFileTypeInDirectory(const std::string& directory,
const std::string& file_suffix,
std::vector<std::string>* results);
mediapipe::Status MatchFileTypeInDirectory(const std::string& directory,
const std::string& file_suffix,
std::vector<std::string>* results);
::mediapipe::Status Exists(absl::string_view file_name);
mediapipe::Status Exists(absl::string_view file_name);
::mediapipe::Status RecursivelyCreateDir(absl::string_view path);
mediapipe::Status RecursivelyCreateDir(absl::string_view path);
} // namespace file
} // namespace mediapipe
+1 -1
View File
@@ -92,7 +92,7 @@ class MonotonicClockAccess {
// Create a monotonic clock based on the given state. Caller owns state
// so that multiple such clocks can be created from the same state.
static MonotonicClock* CreateMonotonicClock(State* state);
friend class ::mediapipe::MonotonicClockTest;
friend class mediapipe::MonotonicClockTest;
};
} // namespace mediapipe
@@ -428,7 +428,7 @@ class ClockFrenzy {
void Start(int nthreads) {
absl::MutexLock l(&lock_);
running_ = true;
threads_ = absl::make_unique<::mediapipe::ThreadPool>("Frenzy", nthreads);
threads_ = absl::make_unique<mediapipe::ThreadPool>("Frenzy", nthreads);
threads_->StartWorkers();
for (int i = 0; i < nthreads; ++i) {
threads_->Schedule([&]() { Feed(); });
@@ -452,7 +452,7 @@ class ClockFrenzy {
Clock* real_clock_;
std::vector<SimulationClock*> sim_clocks_;
std::vector<MonotonicClock*> mono_clocks_;
std::unique_ptr<::mediapipe::ThreadPool> threads_;
std::unique_ptr<mediapipe::ThreadPool> threads_;
// Provide a lock to avoid race conditions in non-threadsafe ACMRandom.
mutable absl::Mutex lock_;
+12 -12
View File
@@ -67,7 +67,7 @@ namespace mediapipe {
// class Client {};
//
// using ClientRegistry =
// GlobalFactoryRegistry<::mediapipe::StatusOr<unique_ptr<Client>>;
// GlobalFactoryRegistry<mediapipe::StatusOr<unique_ptr<Client>>;
//
// class MyClient : public Client {
// public:
@@ -84,7 +84,7 @@ namespace mediapipe {
// ::my_ns::MyClient,
// []() {
// auto backend = absl::make_unique<Backend>("/path/to/backend");
// const ::mediapipe::Status status = backend->Init();
// const mediapipe::Status status = backend->Init();
// if (!status.ok()) {
// return status;
// }
@@ -95,8 +95,8 @@ namespace mediapipe {
//
// === Using the registry to create instances ==============================
//
// // Registry will return ::mediapipe::StatusOr<Object>
// ::mediapipe::StatusOr<unique_ptr<Widget>> s_or_widget =
// // Registry will return mediapipe::StatusOr<Object>
// mediapipe::StatusOr<unique_ptr<Widget>> s_or_widget =
// WidgetRegistry::CreateByName(
// "my_ns.MyWidget", std::move(gadget), thing);
// // Registry will return NOT_FOUND if the name is unknown.
@@ -115,7 +115,7 @@ namespace mediapipe {
// // This might be useful if clients outside of your codebase are registering
// // plugins.
// for (const auto& name : WidgetRegistry::GetRegisteredNames()) {
// ::mediapipe::StatusOr<unique_ptr<Widget>> s_or_widget =
// mediapipe::StatusOr<unique_ptr<Widget>> s_or_widget =
// WidgetRegistry::CreateByName(name, std::move(gadget), thing);
// ...
// }
@@ -134,13 +134,13 @@ constexpr char kNameSep[] = ".";
template <typename T>
struct WrapStatusOr {
using type = ::mediapipe::StatusOr<T>;
using type = mediapipe::StatusOr<T>;
};
// Specialization to avoid double-wrapping types that are already StatusOrs.
template <typename T>
struct WrapStatusOr<::mediapipe::StatusOr<T>> {
using type = ::mediapipe::StatusOr<T>;
struct WrapStatusOr<mediapipe::StatusOr<T>> {
using type = mediapipe::StatusOr<T>;
};
} // namespace registration_internal
@@ -196,8 +196,8 @@ class FunctionRegistry {
absl::ReaderMutexLock lock(&lock_);
auto it = functions_.find(name);
if (it == functions_.end()) {
return ::mediapipe::NotFoundError("No registered object with name: " +
name);
return mediapipe::NotFoundError("No registered object with name: " +
name);
}
function = it->second;
}
@@ -379,12 +379,12 @@ class GlobalFactoryRegistry {
#define MEDIAPIPE_REGISTER_FACTORY_FUNCTION(RegistryType, name, ...) \
static auto* REGISTRY_STATIC_VAR(registration_##name, __LINE__) = \
new ::mediapipe::RegistrationToken( \
new mediapipe::RegistrationToken( \
RegistryType::Register(#name, __VA_ARGS__))
#define REGISTER_FACTORY_FUNCTION_QUALIFIED(RegistryType, var_name, name, ...) \
static auto* REGISTRY_STATIC_VAR(var_name, __LINE__) = \
new ::mediapipe::RegistrationToken( \
new mediapipe::RegistrationToken( \
RegistryType::Register(#name, __VA_ARGS__))
} // namespace mediapipe
+10 -10
View File
@@ -16,23 +16,23 @@
namespace mediapipe {
::mediapipe::StatusBuilder RetCheckFailSlowPath(
::mediapipe::source_location location) {
mediapipe::StatusBuilder RetCheckFailSlowPath(
mediapipe::source_location location) {
// TODO Implement LogWithStackTrace().
return ::mediapipe::InternalErrorBuilder(location)
return mediapipe::InternalErrorBuilder(location)
<< "RET_CHECK failure (" << location.file_name() << ":"
<< location.line() << ") ";
}
::mediapipe::StatusBuilder RetCheckFailSlowPath(
::mediapipe::source_location location, const char* condition) {
return ::mediapipe::RetCheckFailSlowPath(location) << condition;
mediapipe::StatusBuilder RetCheckFailSlowPath(
mediapipe::source_location location, const char* condition) {
return mediapipe::RetCheckFailSlowPath(location) << condition;
}
::mediapipe::StatusBuilder RetCheckFailSlowPath(
::mediapipe::source_location location, const char* condition,
const ::mediapipe::Status& status) {
return ::mediapipe::RetCheckFailSlowPath(location)
mediapipe::StatusBuilder RetCheckFailSlowPath(
mediapipe::source_location location, const char* condition,
const mediapipe::Status& status) {
return mediapipe::RetCheckFailSlowPath(location)
<< condition << " returned " << status << " ";
}
+13 -14
View File
@@ -21,23 +21,23 @@
namespace mediapipe {
// Returns a StatusBuilder that corresponds to a `RET_CHECK` failure.
::mediapipe::StatusBuilder RetCheckFailSlowPath(
::mediapipe::source_location location);
mediapipe::StatusBuilder RetCheckFailSlowPath(
mediapipe::source_location location);
// Returns a StatusBuilder that corresponds to a `RET_CHECK` failure.
::mediapipe::StatusBuilder RetCheckFailSlowPath(
::mediapipe::source_location location, const char* condition);
mediapipe::StatusBuilder RetCheckFailSlowPath(
mediapipe::source_location location, const char* condition);
// Returns a StatusBuilder that corresponds to a `RET_CHECK` failure.
::mediapipe::StatusBuilder RetCheckFailSlowPath(
::mediapipe::source_location location, const char* condition,
const ::mediapipe::Status& status);
mediapipe::StatusBuilder RetCheckFailSlowPath(
mediapipe::source_location location, const char* condition,
const mediapipe::Status& status);
inline StatusBuilder RetCheckImpl(const ::mediapipe::Status& status,
inline StatusBuilder RetCheckImpl(const mediapipe::Status& status,
const char* condition,
::mediapipe::source_location location) {
mediapipe::source_location location) {
if (ABSL_PREDICT_TRUE(status.ok()))
return ::mediapipe::StatusBuilder(OkStatus(), location);
return mediapipe::StatusBuilder(OkStatus(), location);
return RetCheckFailSlowPath(location, condition, status);
}
@@ -45,13 +45,12 @@ inline StatusBuilder RetCheckImpl(const ::mediapipe::Status& status,
#define RET_CHECK(cond) \
while (ABSL_PREDICT_FALSE(!(cond))) \
return ::mediapipe::RetCheckFailSlowPath(MEDIAPIPE_LOC, #cond)
return mediapipe::RetCheckFailSlowPath(MEDIAPIPE_LOC, #cond)
#define RET_CHECK_OK(status) \
MP_RETURN_IF_ERROR( \
::mediapipe::RetCheckImpl((status), #status, MEDIAPIPE_LOC))
MP_RETURN_IF_ERROR(mediapipe::RetCheckImpl((status), #status, MEDIAPIPE_LOC))
#define RET_CHECK_FAIL() return ::mediapipe::RetCheckFailSlowPath(MEDIAPIPE_LOC)
#define RET_CHECK_FAIL() return mediapipe::RetCheckFailSlowPath(MEDIAPIPE_LOC)
#define MEDIAPIPE_INTERNAL_RET_CHECK_OP(name, op, lhs, rhs) \
RET_CHECK((lhs)op(rhs))
+2 -2
View File
@@ -302,9 +302,9 @@ struct LogFatalOnError {
// type is created per type_name.
#define MEDIAPIPE_DEFINE_SAFE_INT_TYPE(type_name, value_type, policy_type) \
struct type_name##_safe_tag_ {}; \
typedef ::mediapipe::intops::StrongInt< \
typedef mediapipe::intops::StrongInt< \
type_name##_safe_tag_, value_type, \
::mediapipe::intops::SafeIntStrongIntValidator<policy_type>> \
mediapipe::intops::SafeIntStrongIntValidator<policy_type>> \
type_name;
#endif // MEDIAPIPE_DEPS_SAFE_INT_H_
+8 -8
View File
@@ -21,21 +21,21 @@
#include "mediapipe/framework/port/gtest.h"
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeInt8, int8,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeUInt8, uint8,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeInt16, int16,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeUInt16, uint16,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeInt32, int32,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeInt64, int64,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeUInt32, uint32,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
MEDIAPIPE_DEFINE_SAFE_INT_TYPE(SafeUInt64, uint64,
::mediapipe::intops::LogFatalOnError);
mediapipe::intops::LogFatalOnError);
namespace mediapipe {
namespace intops {
+1 -1
View File
@@ -59,6 +59,6 @@ class source_location {
// If a function takes a source_location parameter, pass this as the argument.
#define MEDIAPIPE_LOC \
::mediapipe::source_location::DoNotInvokeDirectly(__LINE__, __FILE__)
mediapipe::source_location::DoNotInvokeDirectly(__LINE__, __FILE__)
#endif // MEDIAPIPE_DEPS_SOURCE_LOCATION_H_
+1 -1
View File
@@ -23,7 +23,7 @@ std::ostream& operator<<(std::ostream& os, const Status& x) {
return os;
}
std::string* MediaPipeCheckOpHelperOutOfLine(const ::mediapipe::Status& v,
std::string* MediaPipeCheckOpHelperOutOfLine(const mediapipe::Status& v,
const char* msg) {
std::string r("Non-OK-status: ");
r += msg;
+11 -10
View File
@@ -29,24 +29,21 @@ namespace mediapipe {
using Status = absl::Status;
using StatusCode = absl::StatusCode;
inline ::mediapipe::Status OkStatus() { return absl::OkStatus(); }
inline mediapipe::Status OkStatus() { return absl::OkStatus(); }
extern std::string* MediaPipeCheckOpHelperOutOfLine(
const ::mediapipe::Status& v, const char* msg);
extern std::string* MediaPipeCheckOpHelperOutOfLine(const mediapipe::Status& v,
const char* msg);
inline std::string* MediaPipeCheckOpHelper(::mediapipe::Status v,
inline std::string* MediaPipeCheckOpHelper(mediapipe::Status v,
const char* msg) {
if (v.ok()) return nullptr;
return MediaPipeCheckOpHelperOutOfLine(v, msg);
}
#define MEDIAPIPE_DO_CHECK_OK(val, level) \
while (auto _result = ::mediapipe::MediaPipeCheckOpHelper(val, #val)) \
#define MEDIAPIPE_DO_CHECK_OK(val, level) \
while (auto _result = mediapipe::MediaPipeCheckOpHelper(val, #val)) \
LOG(level) << *(_result)
// To be consistent with MP_EXPECT_OK, we add prefix MEDIAPIPE_ to
// CHECK_OK, QCHECK_OK, and DCHECK_OK. We prefer to use the marcos with
// MEDIAPIPE_ prefix in mediapipe's codebase.
#define MEDIAPIPE_CHECK_OK(val) MEDIAPIPE_DO_CHECK_OK(val, FATAL)
#define MEDIAPIPE_QCHECK_OK(val) MEDIAPIPE_DO_CHECK_OK(val, QFATAL)
@@ -54,9 +51,13 @@ inline std::string* MediaPipeCheckOpHelper(::mediapipe::Status v,
#define MEDIAPIPE_DCHECK_OK(val) MEDIAPIPE_CHECK_OK(val)
#else
#define MEDIAPIPE_DCHECK_OK(val) \
while (false && (::mediapipe::OkStatus() == (val))) LOG(FATAL)
while (false && (mediapipe::OkStatus() == (val))) LOG(FATAL)
#endif
#define CHECK_OK MEDIAPIPE_CHECK_OK
#define QCHECK_OK MEDIAPIPE_QCHECK_OK
#define DCHECK_OK MEDIAPIPE_DCHECK_OK
} // namespace mediapipe
#endif // MEDIAPIPE_DEPS_STATUS_H_
+1 -1
View File
@@ -68,7 +68,7 @@ StatusBuilder::operator Status() && {
return JoinMessageToStatus();
}
::mediapipe::Status StatusBuilder::JoinMessageToStatus() {
mediapipe::Status StatusBuilder::JoinMessageToStatus() {
std::string message;
if (join_style_ == MessageJoinStyle::kAnnotate) {
if (!status_.ok()) {
+24 -28
View File
@@ -30,15 +30,15 @@ class ABSL_MUST_USE_RESULT StatusBuilder {
// Creates a `StatusBuilder` based on an original status. If logging is
// enabled, it will use `location` as the location from which the log message
// occurs. A typical user will call this with `MEDIAPIPE_LOC`.
StatusBuilder(const ::mediapipe::Status& original_status,
::mediapipe::source_location location)
StatusBuilder(const mediapipe::Status& original_status,
mediapipe::source_location location)
: status_(original_status),
line_(location.line()),
file_(location.file_name()),
stream_(new std::ostringstream) {}
StatusBuilder(::mediapipe::Status&& original_status,
::mediapipe::source_location location)
StatusBuilder(mediapipe::Status&& original_status,
mediapipe::source_location location)
: status_(std::move(original_status)),
line_(location.line()),
file_(location.file_name()),
@@ -47,14 +47,13 @@ class ABSL_MUST_USE_RESULT StatusBuilder {
// Creates a `StatusBuilder` from a mediapipe status code. If logging is
// enabled, it will use `location` as the location from which the log message
// occurs. A typical user will call this with `MEDIAPIPE_LOC`.
StatusBuilder(::mediapipe::StatusCode code,
::mediapipe::source_location location)
StatusBuilder(mediapipe::StatusCode code, mediapipe::source_location location)
: status_(code, ""),
line_(location.line()),
file_(location.file_name()),
stream_(new std::ostringstream) {}
StatusBuilder(const ::mediapipe::Status& original_status, const char* file,
StatusBuilder(const mediapipe::Status& original_status, const char* file,
int line)
: status_(original_status),
line_(line),
@@ -79,7 +78,7 @@ class ABSL_MUST_USE_RESULT StatusBuilder {
operator Status() const&;
operator Status() &&;
::mediapipe::Status JoinMessageToStatus();
mediapipe::Status JoinMessageToStatus();
private:
// Specifies how to join the error message in the original status and any
@@ -91,7 +90,7 @@ class ABSL_MUST_USE_RESULT StatusBuilder {
};
// The status that the result will be based on.
::mediapipe::Status status_;
mediapipe::Status status_;
// The line to record if this file is logged.
int line_;
// Not-owned: The file to record if this status is logged.
@@ -104,43 +103,40 @@ class ABSL_MUST_USE_RESULT StatusBuilder {
};
inline StatusBuilder AlreadyExistsErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kAlreadyExists, location);
mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kAlreadyExists, location);
}
inline StatusBuilder FailedPreconditionErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kFailedPrecondition, location);
mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kFailedPrecondition, location);
}
inline StatusBuilder InternalErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kInternal, location);
inline StatusBuilder InternalErrorBuilder(mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kInternal, location);
}
inline StatusBuilder InvalidArgumentErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kInvalidArgument, location);
mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kInvalidArgument, location);
}
inline StatusBuilder NotFoundErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kNotFound, location);
inline StatusBuilder NotFoundErrorBuilder(mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kNotFound, location);
}
inline StatusBuilder UnavailableErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kUnavailable, location);
mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kUnavailable, location);
}
inline StatusBuilder UnimplementedErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kUnimplemented, location);
mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kUnimplemented, location);
}
inline StatusBuilder UnknownErrorBuilder(
::mediapipe::source_location location) {
return StatusBuilder(::mediapipe::StatusCode::kUnknown, location);
inline StatusBuilder UnknownErrorBuilder(mediapipe::source_location location) {
return StatusBuilder(mediapipe::StatusCode::kUnknown, location);
}
} // namespace mediapipe
+17 -18
View File
@@ -19,55 +19,54 @@
namespace mediapipe {
TEST(StatusBuilder, AnnotateMode) {
::mediapipe::Status status =
StatusBuilder(::mediapipe::Status(::mediapipe::StatusCode::kNotFound,
"original message"),
mediapipe::Status status =
StatusBuilder(mediapipe::Status(mediapipe::StatusCode::kNotFound,
"original message"),
MEDIAPIPE_LOC)
<< "annotated message1 "
<< "annotated message2";
ASSERT_FALSE(status.ok());
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kNotFound);
EXPECT_EQ(status.code(), mediapipe::StatusCode::kNotFound);
EXPECT_EQ(status.message(),
"original message; annotated message1 annotated message2");
}
TEST(StatusBuilder, PrependMode) {
::mediapipe::Status status =
StatusBuilder(
::mediapipe::Status(::mediapipe::StatusCode::kInvalidArgument,
"original message"),
MEDIAPIPE_LOC)
mediapipe::Status status =
StatusBuilder(mediapipe::Status(mediapipe::StatusCode::kInvalidArgument,
"original message"),
MEDIAPIPE_LOC)
.SetPrepend()
<< "prepended message1 "
<< "prepended message2 ";
ASSERT_FALSE(status.ok());
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kInvalidArgument);
EXPECT_EQ(status.code(), mediapipe::StatusCode::kInvalidArgument);
EXPECT_EQ(status.message(),
"prepended message1 prepended message2 original message");
}
TEST(StatusBuilder, AppendMode) {
::mediapipe::Status status =
StatusBuilder(::mediapipe::Status(::mediapipe::StatusCode::kInternal,
"original message"),
mediapipe::Status status =
StatusBuilder(mediapipe::Status(mediapipe::StatusCode::kInternal,
"original message"),
MEDIAPIPE_LOC)
.SetAppend()
<< " extra message1"
<< " extra message2";
ASSERT_FALSE(status.ok());
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kInternal);
EXPECT_EQ(status.code(), mediapipe::StatusCode::kInternal);
EXPECT_EQ(status.message(), "original message extra message1 extra message2");
}
TEST(StatusBuilder, NoLoggingMode) {
::mediapipe::Status status =
StatusBuilder(::mediapipe::Status(::mediapipe::StatusCode::kUnavailable,
"original message"),
mediapipe::Status status =
StatusBuilder(mediapipe::Status(mediapipe::StatusCode::kUnavailable,
"original message"),
MEDIAPIPE_LOC)
.SetNoLogging()
<< " extra message";
ASSERT_FALSE(status.ok());
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kUnavailable);
EXPECT_EQ(status.code(), mediapipe::StatusCode::kUnavailable);
EXPECT_EQ(status.message(), "original message");
}
+26 -26
View File
@@ -13,7 +13,7 @@
// limitations under the License.
//
// Helper macros and methods to return and propagate errors with
// `::mediapipe::Status`.
// `mediapipe::Status`.
//
// The owners of mediapipe do not endorse use of these macros as a good
// programming practice, and would prefer that you write the equivalent C++
@@ -26,29 +26,29 @@
#include "mediapipe/framework/deps/status.h"
#include "mediapipe/framework/deps/status_builder.h"
// Evaluates an expression that produces a `::mediapipe::Status`. If the status
// Evaluates an expression that produces a `mediapipe::Status`. If the status
// is not ok, returns it from the current function.
//
// For example:
// ::mediapipe::Status MultiStepFunction() {
// mediapipe::Status MultiStepFunction() {
// MP_RETURN_IF_ERROR(Function(args...));
// MP_RETURN_IF_ERROR(foo.Method(args...));
// return ::mediapipe::OkStatus();
// return mediapipe::OkStatus();
// }
//
// The macro ends with a `::mediapipe::StatusBuilder` which allows the returned
// The macro ends with a `mediapipe::StatusBuilder` which allows the returned
// status to be extended with more details. Any chained expressions after the
// macro will not be evaluated unless there is an error.
//
// For example:
// ::mediapipe::Status MultiStepFunction() {
// mediapipe::Status MultiStepFunction() {
// MP_RETURN_IF_ERROR(Function(args...)) << "in MultiStepFunction";
// MP_RETURN_IF_ERROR(foo.Method(args...)).Log(base_logging::ERROR)
// << "while processing query: " << query.DebugString();
// return ::mediapipe::OkStatus();
// return mediapipe::OkStatus();
// }
//
// `::mediapipe::StatusBuilder` supports adapting the builder chain using a
// `mediapipe::StatusBuilder` supports adapting the builder chain using a
// `With` method and a functor. This allows for powerful extensions to the
// macro.
//
@@ -62,10 +62,10 @@
// MP_RETURN_IF_ERROR(bar()).With(TeamPolicy);
//
// Changing the return type allows the macro to be used with Task and Rpc
// interfaces. See `::mediapipe::TaskReturn` and `rpc::RpcSetStatus` for
// interfaces. See `mediapipe::TaskReturn` and `rpc::RpcSetStatus` for
// details.
//
// void Read(StringPiece name, ::mediapipe::Task* task) {
// void Read(StringPiece name, mediapipe::Task* task) {
// int64 id;
// MP_RETURN_IF_ERROR(GetIdForName(name, &id)).With(TaskReturn(task));
// MP_RETURN_IF_ERROR(ReadForId(id)).With(TaskReturn(task));
@@ -73,22 +73,22 @@
// }
//
// If using this macro inside a lambda, you need to annotate the return type
// to avoid confusion between a `::mediapipe::StatusBuilder` and a
// `::mediapipe::Status` type. E.g.
// to avoid confusion between a `mediapipe::StatusBuilder` and a
// `mediapipe::Status` type. E.g.
//
// []() -> ::mediapipe::Status {
// []() -> mediapipe::Status {
// MP_RETURN_IF_ERROR(Function(args...));
// MP_RETURN_IF_ERROR(foo.Method(args...));
// return ::mediapipe::OkStatus();
// return mediapipe::OkStatus();
// }
#define MP_RETURN_IF_ERROR(expr) \
STATUS_MACROS_IMPL_ELSE_BLOCKER_ \
if (::mediapipe::status_macro_internal::StatusAdaptorForMacros \
if (mediapipe::status_macro_internal::StatusAdaptorForMacros \
status_macro_internal_adaptor = {(expr), __FILE__, __LINE__}) { \
} else /* NOLINT */ \
return status_macro_internal_adaptor.Consume()
// Executes an expression `rexpr` that returns a `::mediapipe::StatusOr<T>`. On
// Executes an expression `rexpr` that returns a `mediapipe::StatusOr<T>`. On
// OK, extracts its value into the variable defined by `lhs`, otherwise returns
// from the current function. By default the error status is returned
// unchanged, but it may be modified by an `error_expression`. If there is an
@@ -121,7 +121,7 @@
//
// If passed, the `error_expression` is evaluated to produce the return
// value. The expression may reference any variable visible in scope, as
// well as a `::mediapipe::StatusBuilder` object populated with the error and
// well as a `mediapipe::StatusBuilder` object populated with the error and
// named by a single underscore `_`. The expression typically uses the
// builder to modify the status and is returned directly in manner similar
// to MP_RETURN_IF_ERROR. The expression may, however, evaluate to any type
@@ -156,15 +156,15 @@
STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_( \
STATUS_MACROS_IMPL_CONCAT_(_status_or_value, __LINE__), lhs, rexpr, \
error_expression)
#define STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_(statusor, lhs, rexpr, \
error_expression) \
auto statusor = (rexpr); \
if (ABSL_PREDICT_FALSE(!statusor.ok())) { \
::mediapipe::StatusBuilder _(std::move(statusor).status(), __FILE__, \
__LINE__); \
(void)_; /* error_expression is allowed to not use this variable */ \
return (error_expression); \
} \
#define STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_(statusor, lhs, rexpr, \
error_expression) \
auto statusor = (rexpr); \
if (ABSL_PREDICT_FALSE(!statusor.ok())) { \
mediapipe::StatusBuilder _(std::move(statusor).status(), __FILE__, \
__LINE__); \
(void)_; /* error_expression is allowed to not use this variable */ \
return (error_expression); \
} \
lhs = std::move(statusor).ValueOrDie()
// Internal helper for concatenating macro values.
+15 -15
View File
@@ -20,7 +20,7 @@
namespace mediapipe {
TEST(Status, OK) {
EXPECT_EQ(OkStatus().code(), ::mediapipe::StatusCode::kOk);
EXPECT_EQ(OkStatus().code(), mediapipe::StatusCode::kOk);
EXPECT_EQ(OkStatus().message(), "");
MP_EXPECT_OK(OkStatus());
MP_ASSERT_OK(OkStatus());
@@ -30,25 +30,25 @@ TEST(Status, OK) {
}
TEST(DeathStatus, CheckOK) {
Status status(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status status(mediapipe::StatusCode::kInvalidArgument, "Invalid");
ASSERT_DEATH(MEDIAPIPE_CHECK_OK(status), "Invalid");
}
TEST(Status, Set) {
Status status;
status = Status(::mediapipe::StatusCode::kCancelled, "Error message");
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kCancelled);
status = Status(mediapipe::StatusCode::kCancelled, "Error message");
EXPECT_EQ(status.code(), mediapipe::StatusCode::kCancelled);
EXPECT_EQ(status.message(), "Error message");
}
TEST(Status, Copy) {
Status a(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status a(mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status b(a);
ASSERT_EQ(a.ToString(), b.ToString());
}
TEST(Status, Assign) {
Status a(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status a(mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status b;
b = a;
ASSERT_EQ(a.ToString(), b.ToString());
@@ -58,10 +58,10 @@ TEST(Status, Update) {
Status s;
s.Update(OkStatus());
ASSERT_TRUE(s.ok());
Status a(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status a(mediapipe::StatusCode::kInvalidArgument, "Invalid");
s.Update(a);
ASSERT_EQ(s.ToString(), a.ToString());
Status b(::mediapipe::StatusCode::kInternal, "Invalid");
Status b(mediapipe::StatusCode::kInternal, "Invalid");
s.Update(b);
ASSERT_EQ(s.ToString(), a.ToString());
s.Update(OkStatus());
@@ -72,26 +72,26 @@ TEST(Status, Update) {
TEST(Status, EqualsOK) { ASSERT_EQ(OkStatus(), Status()); }
TEST(Status, EqualsSame) {
Status a(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status b(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status a(mediapipe::StatusCode::kInvalidArgument, "Invalid");
Status b(mediapipe::StatusCode::kInvalidArgument, "Invalid");
ASSERT_EQ(a, b);
}
TEST(Status, EqualsCopy) {
const Status a(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
const Status a(mediapipe::StatusCode::kInvalidArgument, "Invalid");
const Status b = a;
ASSERT_EQ(a, b);
}
TEST(Status, EqualsDifferentCode) {
const Status a(::mediapipe::StatusCode::kInvalidArgument, "Invalid");
const Status b(::mediapipe::StatusCode::kInternal, "Internal");
const Status a(mediapipe::StatusCode::kInvalidArgument, "Invalid");
const Status b(mediapipe::StatusCode::kInternal, "Internal");
ASSERT_NE(a, b);
}
TEST(Status, EqualsDifferentMessage) {
const Status a(::mediapipe::StatusCode::kInvalidArgument, "message");
const Status b(::mediapipe::StatusCode::kInvalidArgument, "another");
const Status a(mediapipe::StatusCode::kInvalidArgument, "message");
const Status b(mediapipe::StatusCode::kInvalidArgument, "another");
ASSERT_NE(a, b);
}
+3 -3
View File
@@ -22,14 +22,14 @@
namespace mediapipe {
namespace internal_statusor {
void Helper::HandleInvalidStatusCtorArg(::mediapipe::Status* status) {
void Helper::HandleInvalidStatusCtorArg(mediapipe::Status* status) {
const char* kMessage =
"An OK status is not a valid constructor argument to StatusOr<T>";
LOG(ERROR) << kMessage;
*status = ::mediapipe::InternalError(kMessage);
*status = mediapipe::InternalError(kMessage);
}
void Helper::Crash(const ::mediapipe::Status& status) {
void Helper::Crash(const mediapipe::Status& status) {
LOG(FATAL) << "Attempting to fetch value instead of handling error "
<< status;
}
+30 -30
View File
@@ -25,7 +25,7 @@
//
// Example client usage for a StatusOr<T>, where T is not a pointer:
//
// ::mediapipe::StatusOr<float> result = DoBigCalculationThatCouldFail();
// mediapipe::StatusOr<float> result = DoBigCalculationThatCouldFail();
// if (result.ok()) {
// float answer = result.ValueOrDie();
// printf("Big calculation yielded: %f", answer);
@@ -35,7 +35,7 @@
//
// Example client usage for a StatusOr<T*>:
//
// ::mediapipe::StatusOr<Foo*> result = FooFactory::MakeNewFoo(arg);
// mediapipe::StatusOr<Foo*> result = FooFactory::MakeNewFoo(arg);
// if (result.ok()) {
// std::unique_ptr<Foo> foo(result.ValueOrDie());
// foo->DoSomethingCool();
@@ -45,7 +45,7 @@
//
// Example client usage for a StatusOr<std::unique_ptr<T>>:
//
// ::mediapipe::StatusOr<std::unique_ptr<Foo>> result =
// mediapipe::StatusOr<std::unique_ptr<Foo>> result =
// FooFactory::MakeNewFoo(arg);
// if (result.ok()) {
// std::unique_ptr<Foo> foo = std::move(result.ValueOrDie());
@@ -56,9 +56,9 @@
//
// Example factory implementation returning StatusOr<T*>:
//
// ::mediapipe::StatusOr<Foo*> FooFactory::MakeNewFoo(int arg) {
// mediapipe::StatusOr<Foo*> FooFactory::MakeNewFoo(int arg) {
// if (arg <= 0) {
// return ::mediapipe::InvalidArgumentError("Arg must be positive");
// return mediapipe::InvalidArgumentError("Arg must be positive");
// } else {
// return new Foo(arg);
// }
@@ -148,11 +148,11 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
//
// REQUIRES: !status.ok(). This requirement is DCHECKed.
// In optimized builds, passing Status::OK() here will have the effect
// of passing ::mediapipe::StatusCode::kInternal as a fallback.
StatusOr(const ::mediapipe::Status& status);
StatusOr& operator=(const ::mediapipe::Status& status);
StatusOr(const ::mediapipe::StatusBuilder& builder);
StatusOr& operator=(const ::mediapipe::StatusBuilder& builder);
// of passing mediapipe::StatusCode::kInternal as a fallback.
StatusOr(const mediapipe::Status& status);
StatusOr& operator=(const mediapipe::Status& status);
StatusOr(const mediapipe::StatusBuilder& builder);
StatusOr& operator=(const mediapipe::StatusBuilder& builder);
// TODO: Add operator=(T) overloads.
@@ -162,18 +162,18 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
StatusOr(T&& value);
// RValue versions of the operations declared above.
StatusOr(::mediapipe::Status&& status);
StatusOr& operator=(::mediapipe::Status&& status);
StatusOr(::mediapipe::StatusBuilder&& builder);
StatusOr& operator=(::mediapipe::StatusBuilder&& builder);
StatusOr(mediapipe::Status&& status);
StatusOr& operator=(mediapipe::Status&& status);
StatusOr(mediapipe::StatusBuilder&& builder);
StatusOr& operator=(mediapipe::StatusBuilder&& builder);
// Returns this->status().ok()
bool ok() const { return this->status_.ok(); }
// Returns a reference to mediapipe status. If this contains a T, then
// returns Status::OK().
const ::mediapipe::Status& status() const&;
::mediapipe::Status status() &&;
const mediapipe::Status& status() const&;
mediapipe::Status status() &&;
// Returns a reference to our current value, or CHECK-fails if !this->ok().
//
@@ -213,48 +213,48 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
template <typename T>
StatusOr<T>::StatusOr()
: Base(::mediapipe::Status(::mediapipe::StatusCode::kUnknown, "")) {}
: Base(mediapipe::Status(mediapipe::StatusCode::kUnknown, "")) {}
template <typename T>
StatusOr<T>::StatusOr(const T& value) : Base(value) {}
template <typename T>
StatusOr<T>::StatusOr(const ::mediapipe::Status& status) : Base(status) {}
StatusOr<T>::StatusOr(const mediapipe::Status& status) : Base(status) {}
template <typename T>
StatusOr<T>::StatusOr(const ::mediapipe::StatusBuilder& builder)
StatusOr<T>::StatusOr(const mediapipe::StatusBuilder& builder)
: Base(builder) {}
template <typename T>
StatusOr<T>& StatusOr<T>::operator=(const ::mediapipe::Status& status) {
StatusOr<T>& StatusOr<T>::operator=(const mediapipe::Status& status) {
this->Assign(status);
return *this;
}
template <typename T>
StatusOr<T>& StatusOr<T>::operator=(const ::mediapipe::StatusBuilder& builder) {
return *this = static_cast<::mediapipe::Status>(builder);
StatusOr<T>& StatusOr<T>::operator=(const mediapipe::StatusBuilder& builder) {
return *this = static_cast<mediapipe::Status>(builder);
}
template <typename T>
StatusOr<T>::StatusOr(T&& value) : Base(std::move(value)) {}
template <typename T>
StatusOr<T>::StatusOr(::mediapipe::Status&& status) : Base(std::move(status)) {}
StatusOr<T>::StatusOr(mediapipe::Status&& status) : Base(std::move(status)) {}
template <typename T>
StatusOr<T>::StatusOr(::mediapipe::StatusBuilder&& builder)
StatusOr<T>::StatusOr(mediapipe::StatusBuilder&& builder)
: Base(std::move(builder)) {}
template <typename T>
StatusOr<T>& StatusOr<T>::operator=(::mediapipe::Status&& status) {
StatusOr<T>& StatusOr<T>::operator=(mediapipe::Status&& status) {
this->Assign(std::move(status));
return *this;
}
template <typename T>
StatusOr<T>& StatusOr<T>::operator=(::mediapipe::StatusBuilder&& builder) {
return *this = static_cast<::mediapipe::Status>(std::move(builder));
StatusOr<T>& StatusOr<T>::operator=(mediapipe::StatusBuilder&& builder) {
return *this = static_cast<mediapipe::Status>(std::move(builder));
}
template <typename T>
@@ -289,12 +289,12 @@ inline StatusOr<T>& StatusOr<T>::operator=(StatusOr<U>&& other) {
}
template <typename T>
const ::mediapipe::Status& StatusOr<T>::status() const& {
const mediapipe::Status& StatusOr<T>::status() const& {
return this->status_;
}
template <typename T>
::mediapipe::Status StatusOr<T>::status() && {
return ok() ? ::mediapipe::OkStatus() : std::move(this->status_);
mediapipe::Status StatusOr<T>::status() && {
return ok() ? mediapipe::OkStatus() : std::move(this->status_);
}
template <typename T>
+10 -10
View File
@@ -24,8 +24,8 @@ namespace internal_statusor {
class Helper {
public:
// Move type-agnostic error handling to the .cc.
static void HandleInvalidStatusCtorArg(::mediapipe::Status*);
ABSL_ATTRIBUTE_NORETURN static void Crash(const ::mediapipe::Status& status);
static void HandleInvalidStatusCtorArg(mediapipe::Status*);
ABSL_ATTRIBUTE_NORETURN static void Crash(const mediapipe::Status& status);
};
// Construct an instance of T in `p` through placement new, passing Args... to
@@ -92,10 +92,10 @@ class StatusOrData {
explicit StatusOrData(const T& value) : data_(value) { MakeStatus(); }
explicit StatusOrData(T&& value) : data_(std::move(value)) { MakeStatus(); }
explicit StatusOrData(const ::mediapipe::Status& status) : status_(status) {
explicit StatusOrData(const mediapipe::Status& status) : status_(status) {
EnsureNotOk();
}
explicit StatusOrData(::mediapipe::Status&& status)
explicit StatusOrData(mediapipe::Status&& status)
: status_(std::move(status)) {
EnsureNotOk();
}
@@ -133,7 +133,7 @@ class StatusOrData {
MakeValue(value);
} else {
MakeValue(value);
status_ = ::mediapipe::OkStatus();
status_ = mediapipe::OkStatus();
}
}
@@ -143,17 +143,17 @@ class StatusOrData {
MakeValue(std::move(value));
} else {
MakeValue(std::move(value));
status_ = ::mediapipe::OkStatus();
status_ = mediapipe::OkStatus();
}
}
void Assign(const ::mediapipe::Status& status) {
void Assign(const mediapipe::Status& status) {
Clear();
status_ = status;
EnsureNotOk();
}
void Assign(::mediapipe::Status&& status) {
void Assign(mediapipe::Status&& status) {
Clear();
status_ = std::move(status);
EnsureNotOk();
@@ -168,7 +168,7 @@ class StatusOrData {
// Eg. in the copy constructor we use the default constructor of Status in
// the ok() path to avoid an extra Ref call.
union {
::mediapipe::Status status_;
mediapipe::Status status_;
};
// data_ is active iff status_.ok()==true
@@ -203,7 +203,7 @@ class StatusOrData {
// argument.
template <typename... Args>
void MakeStatus(Args&&... args) {
internal_statusor::PlacementNew<::mediapipe::Status>(
internal_statusor::PlacementNew<mediapipe::Status>(
&status_, std::forward<Args>(args)...);
}
};
+93 -94
View File
@@ -74,19 +74,19 @@ TEST(StatusOr, ElementType) {
TEST(StatusOr, TestNoDefaultConstructorInitialization) {
// Explicitly initialize it with an error code.
::mediapipe::StatusOr<NoDefaultConstructor> statusor(
::mediapipe::CancelledError(""));
mediapipe::StatusOr<NoDefaultConstructor> statusor(
mediapipe::CancelledError(""));
EXPECT_FALSE(statusor.ok());
EXPECT_EQ(statusor.status().code(), ::mediapipe::StatusCode::kCancelled);
EXPECT_EQ(statusor.status().code(), mediapipe::StatusCode::kCancelled);
// Default construction of StatusOr initializes it with an UNKNOWN error code.
::mediapipe::StatusOr<NoDefaultConstructor> statusor2;
mediapipe::StatusOr<NoDefaultConstructor> statusor2;
EXPECT_FALSE(statusor2.ok());
EXPECT_EQ(statusor2.status().code(), ::mediapipe::StatusCode::kUnknown);
EXPECT_EQ(statusor2.status().code(), mediapipe::StatusCode::kUnknown);
}
TEST(StatusOr, TestMoveOnlyInitialization) {
::mediapipe::StatusOr<std::unique_ptr<int>> thing(ReturnUniquePtr());
mediapipe::StatusOr<std::unique_ptr<int>> thing(ReturnUniquePtr());
ASSERT_TRUE(thing.ok());
EXPECT_EQ(0, *thing.ValueOrDie());
int* previous = thing.ValueOrDie().get();
@@ -98,13 +98,13 @@ TEST(StatusOr, TestMoveOnlyInitialization) {
}
TEST(StatusOr, TestMoveOnlyStatusCtr) {
::mediapipe::StatusOr<std::unique_ptr<int>> thing(
::mediapipe::CancelledError(""));
mediapipe::StatusOr<std::unique_ptr<int>> thing(
mediapipe::CancelledError(""));
ASSERT_FALSE(thing.ok());
}
TEST(StatusOr, TestMoveOnlyValueExtraction) {
::mediapipe::StatusOr<std::unique_ptr<int>> thing(ReturnUniquePtr());
mediapipe::StatusOr<std::unique_ptr<int>> thing(ReturnUniquePtr());
ASSERT_TRUE(thing.ok());
std::unique_ptr<int> ptr = thing.ConsumeValueOrDie();
EXPECT_EQ(0, *ptr);
@@ -115,7 +115,7 @@ TEST(StatusOr, TestMoveOnlyValueExtraction) {
}
TEST(StatusOr, TestMoveOnlyConversion) {
::mediapipe::StatusOr<std::unique_ptr<const int>> const_thing(
mediapipe::StatusOr<std::unique_ptr<const int>> const_thing(
ReturnUniquePtr());
EXPECT_TRUE(const_thing.ok());
EXPECT_EQ(0, *const_thing.ValueOrDie());
@@ -129,23 +129,23 @@ TEST(StatusOr, TestMoveOnlyConversion) {
}
TEST(StatusOr, TestMoveOnlyVector) {
// Sanity check that ::mediapipe::StatusOr<MoveOnly> works in vector.
std::vector<::mediapipe::StatusOr<std::unique_ptr<int>>> vec;
// Sanity check that mediapipe::StatusOr<MoveOnly> works in vector.
std::vector<mediapipe::StatusOr<std::unique_ptr<int>>> vec;
vec.push_back(ReturnUniquePtr());
vec.resize(2);
auto another_vec = std::move(vec);
EXPECT_EQ(0, *another_vec[0].ValueOrDie());
EXPECT_EQ(::mediapipe::StatusCode::kUnknown, another_vec[1].status().code());
EXPECT_EQ(mediapipe::StatusCode::kUnknown, another_vec[1].status().code());
}
TEST(StatusOr, TestMoveWithValuesAndErrors) {
::mediapipe::StatusOr<std::string> status_or(std::string(1000, '0'));
::mediapipe::StatusOr<std::string> value1(std::string(1000, '1'));
::mediapipe::StatusOr<std::string> value2(std::string(1000, '2'));
::mediapipe::StatusOr<std::string> error1(
Status(::mediapipe::StatusCode::kUnknown, "error1"));
::mediapipe::StatusOr<std::string> error2(
Status(::mediapipe::StatusCode::kUnknown, "error2"));
mediapipe::StatusOr<std::string> status_or(std::string(1000, '0'));
mediapipe::StatusOr<std::string> value1(std::string(1000, '1'));
mediapipe::StatusOr<std::string> value2(std::string(1000, '2'));
mediapipe::StatusOr<std::string> error1(
Status(mediapipe::StatusCode::kUnknown, "error1"));
mediapipe::StatusOr<std::string> error2(
Status(mediapipe::StatusCode::kUnknown, "error2"));
ASSERT_TRUE(status_or.ok());
EXPECT_EQ(std::string(1000, '0'), status_or.ValueOrDie());
@@ -172,13 +172,13 @@ TEST(StatusOr, TestMoveWithValuesAndErrors) {
}
TEST(StatusOr, TestCopyWithValuesAndErrors) {
::mediapipe::StatusOr<std::string> status_or(std::string(1000, '0'));
::mediapipe::StatusOr<std::string> value1(std::string(1000, '1'));
::mediapipe::StatusOr<std::string> value2(std::string(1000, '2'));
::mediapipe::StatusOr<std::string> error1(
Status(::mediapipe::StatusCode::kUnknown, "error1"));
::mediapipe::StatusOr<std::string> error2(
Status(::mediapipe::StatusCode::kUnknown, "error2"));
mediapipe::StatusOr<std::string> status_or(std::string(1000, '0'));
mediapipe::StatusOr<std::string> value1(std::string(1000, '1'));
mediapipe::StatusOr<std::string> value2(std::string(1000, '2'));
mediapipe::StatusOr<std::string> error1(
Status(mediapipe::StatusCode::kUnknown, "error1"));
mediapipe::StatusOr<std::string> error2(
Status(mediapipe::StatusCode::kUnknown, "error2"));
ASSERT_TRUE(status_or.ok());
EXPECT_EQ(std::string(1000, '0'), status_or.ValueOrDie());
@@ -211,226 +211,225 @@ TEST(StatusOr, TestCopyWithValuesAndErrors) {
}
TEST(StatusOr, TestDefaultCtor) {
::mediapipe::StatusOr<int> thing;
mediapipe::StatusOr<int> thing;
EXPECT_FALSE(thing.ok());
EXPECT_EQ(thing.status().code(), ::mediapipe::StatusCode::kUnknown);
EXPECT_EQ(thing.status().code(), mediapipe::StatusCode::kUnknown);
}
TEST(StatusOrDeathTest, TestDefaultCtorValue) {
::mediapipe::StatusOr<int> thing;
mediapipe::StatusOr<int> thing;
EXPECT_DEATH(thing.ValueOrDie(), "");
const ::mediapipe::StatusOr<int> thing2;
const mediapipe::StatusOr<int> thing2;
EXPECT_DEATH(thing.ValueOrDie(), "");
}
TEST(StatusOr, TestStatusCtor) {
::mediapipe::StatusOr<int> thing(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int> thing(
mediapipe::Status(mediapipe::StatusCode::kCancelled, ""));
EXPECT_FALSE(thing.ok());
EXPECT_EQ(thing.status().code(), ::mediapipe::StatusCode::kCancelled);
EXPECT_EQ(thing.status().code(), mediapipe::StatusCode::kCancelled);
}
TEST(StatusOr, TestValueCtor) {
const int kI = 4;
const ::mediapipe::StatusOr<int> thing(kI);
const mediapipe::StatusOr<int> thing(kI);
EXPECT_TRUE(thing.ok());
EXPECT_EQ(kI, thing.ValueOrDie());
}
TEST(StatusOr, TestCopyCtorStatusOk) {
const int kI = 4;
const ::mediapipe::StatusOr<int> original(kI);
const ::mediapipe::StatusOr<int> copy(original);
const mediapipe::StatusOr<int> original(kI);
const mediapipe::StatusOr<int> copy(original);
EXPECT_EQ(copy.status(), original.status());
EXPECT_EQ(original.ValueOrDie(), copy.ValueOrDie());
}
TEST(StatusOr, TestCopyCtorStatusNotOk) {
::mediapipe::StatusOr<int> original(
Status(::mediapipe::StatusCode::kCancelled, ""));
::mediapipe::StatusOr<int> copy(original);
mediapipe::StatusOr<int> original(
Status(mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int> copy(original);
EXPECT_EQ(copy.status(), original.status());
}
TEST(StatusOr, TestCopyCtorNonAssignable) {
const int kI = 4;
CopyNoAssign value(kI);
::mediapipe::StatusOr<CopyNoAssign> original(value);
::mediapipe::StatusOr<CopyNoAssign> copy(original);
mediapipe::StatusOr<CopyNoAssign> original(value);
mediapipe::StatusOr<CopyNoAssign> copy(original);
EXPECT_EQ(copy.status(), original.status());
EXPECT_EQ(original.ValueOrDie().foo_, copy.ValueOrDie().foo_);
}
TEST(StatusOr, TestCopyCtorStatusOKConverting) {
const int kI = 4;
::mediapipe::StatusOr<int> original(kI);
::mediapipe::StatusOr<double> copy(original);
mediapipe::StatusOr<int> original(kI);
mediapipe::StatusOr<double> copy(original);
EXPECT_EQ(copy.status(), original.status());
EXPECT_DOUBLE_EQ(original.ValueOrDie(), copy.ValueOrDie());
}
TEST(StatusOr, TestCopyCtorStatusNotOkConverting) {
::mediapipe::StatusOr<int> original(
Status(::mediapipe::StatusCode::kCancelled, ""));
::mediapipe::StatusOr<double> copy(original);
mediapipe::StatusOr<int> original(
Status(mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<double> copy(original);
EXPECT_EQ(copy.status(), original.status());
}
TEST(StatusOr, TestAssignmentStatusOk) {
const int kI = 4;
::mediapipe::StatusOr<int> source(kI);
::mediapipe::StatusOr<int> target;
mediapipe::StatusOr<int> source(kI);
mediapipe::StatusOr<int> target;
target = source;
EXPECT_EQ(target.status(), source.status());
EXPECT_EQ(source.ValueOrDie(), target.ValueOrDie());
}
TEST(StatusOr, TestAssignmentStatusNotOk) {
::mediapipe::StatusOr<int> source(
Status(::mediapipe::StatusCode::kCancelled, ""));
::mediapipe::StatusOr<int> target;
mediapipe::StatusOr<int> source(
Status(mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int> target;
target = source;
EXPECT_EQ(target.status(), source.status());
}
TEST(StatusOr, TestStatus) {
::mediapipe::StatusOr<int> good(4);
mediapipe::StatusOr<int> good(4);
EXPECT_TRUE(good.ok());
::mediapipe::StatusOr<int> bad(
Status(::mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int> bad(Status(mediapipe::StatusCode::kCancelled, ""));
EXPECT_FALSE(bad.ok());
EXPECT_EQ(bad.status(), Status(::mediapipe::StatusCode::kCancelled, ""));
EXPECT_EQ(bad.status(), Status(mediapipe::StatusCode::kCancelled, ""));
}
TEST(StatusOr, TestValue) {
const int kI = 4;
::mediapipe::StatusOr<int> thing(kI);
mediapipe::StatusOr<int> thing(kI);
EXPECT_EQ(kI, thing.ValueOrDie());
}
TEST(StatusOr, TestValueConst) {
const int kI = 4;
const ::mediapipe::StatusOr<int> thing(kI);
const mediapipe::StatusOr<int> thing(kI);
EXPECT_EQ(kI, thing.ValueOrDie());
}
TEST(StatusOrDeathTest, TestValueNotOk) {
::mediapipe::StatusOr<int> thing(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, "cancelled"));
mediapipe::StatusOr<int> thing(
mediapipe::Status(mediapipe::StatusCode::kCancelled, "cancelled"));
EXPECT_DEATH(thing.ValueOrDie(), "cancelled");
}
TEST(StatusOrDeathTest, TestValueNotOkConst) {
const ::mediapipe::StatusOr<int> thing(
::mediapipe::Status(::mediapipe::StatusCode::kUnknown, ""));
const mediapipe::StatusOr<int> thing(
mediapipe::Status(mediapipe::StatusCode::kUnknown, ""));
EXPECT_DEATH(thing.ValueOrDie(), "");
}
TEST(StatusOr, TestPointerDefaultCtor) {
::mediapipe::StatusOr<int*> thing;
mediapipe::StatusOr<int*> thing;
EXPECT_FALSE(thing.ok());
EXPECT_EQ(thing.status().code(), ::mediapipe::StatusCode::kUnknown);
EXPECT_EQ(thing.status().code(), mediapipe::StatusCode::kUnknown);
}
TEST(StatusOrDeathTest, TestPointerDefaultCtorValue) {
::mediapipe::StatusOr<int*> thing;
mediapipe::StatusOr<int*> thing;
EXPECT_DEATH(thing.ValueOrDie(), "");
}
TEST(StatusOr, TestPointerStatusCtor) {
::mediapipe::StatusOr<int*> thing(
Status(::mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int*> thing(
Status(mediapipe::StatusCode::kCancelled, ""));
EXPECT_FALSE(thing.ok());
EXPECT_EQ(thing.status(), Status(::mediapipe::StatusCode::kCancelled, ""));
EXPECT_EQ(thing.status(), Status(mediapipe::StatusCode::kCancelled, ""));
}
TEST(StatusOr, TestPointerValueCtor) {
const int kI = 4;
::mediapipe::StatusOr<const int*> thing(&kI);
mediapipe::StatusOr<const int*> thing(&kI);
EXPECT_TRUE(thing.ok());
EXPECT_EQ(&kI, thing.ValueOrDie());
}
TEST(StatusOr, TestPointerCopyCtorStatusOk) {
const int kI = 0;
::mediapipe::StatusOr<const int*> original(&kI);
::mediapipe::StatusOr<const int*> copy(original);
mediapipe::StatusOr<const int*> original(&kI);
mediapipe::StatusOr<const int*> copy(original);
EXPECT_EQ(copy.status(), original.status());
EXPECT_EQ(original.ValueOrDie(), copy.ValueOrDie());
}
TEST(StatusOr, TestPointerCopyCtorStatusNotOk) {
::mediapipe::StatusOr<int*> original(
Status(::mediapipe::StatusCode::kCancelled, ""));
::mediapipe::StatusOr<int*> copy(original);
mediapipe::StatusOr<int*> original(
Status(mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int*> copy(original);
EXPECT_EQ(copy.status(), original.status());
}
TEST(StatusOr, TestPointerCopyCtorStatusOKConverting) {
Derived derived;
::mediapipe::StatusOr<Derived*> original(&derived);
::mediapipe::StatusOr<Base2*> copy(original);
mediapipe::StatusOr<Derived*> original(&derived);
mediapipe::StatusOr<Base2*> copy(original);
EXPECT_EQ(copy.status(), original.status());
EXPECT_EQ(static_cast<const Base2*>(original.ValueOrDie()),
copy.ValueOrDie());
}
TEST(StatusOr, TestPointerCopyCtorStatusNotOkConverting) {
::mediapipe::StatusOr<Derived*> original(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, ""));
::mediapipe::StatusOr<Base2*> copy(original);
mediapipe::StatusOr<Derived*> original(
mediapipe::Status(mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<Base2*> copy(original);
EXPECT_EQ(copy.status(), original.status());
}
TEST(StatusOr, TestPointerAssignmentStatusOk) {
const int kI = 0;
::mediapipe::StatusOr<const int*> source(&kI);
::mediapipe::StatusOr<const int*> target;
mediapipe::StatusOr<const int*> source(&kI);
mediapipe::StatusOr<const int*> target;
target = source;
EXPECT_EQ(target.status(), source.status());
EXPECT_EQ(source.ValueOrDie(), target.ValueOrDie());
}
TEST(StatusOr, TestPointerAssignmentStatusNotOk) {
::mediapipe::StatusOr<int*> source(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, ""));
::mediapipe::StatusOr<int*> target;
mediapipe::StatusOr<int*> source(
mediapipe::Status(mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<int*> target;
target = source;
EXPECT_EQ(target.status(), source.status());
}
TEST(StatusOr, TestPointerStatus) {
const int kI = 0;
::mediapipe::StatusOr<const int*> good(&kI);
mediapipe::StatusOr<const int*> good(&kI);
EXPECT_TRUE(good.ok());
::mediapipe::StatusOr<const int*> bad(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, ""));
mediapipe::StatusOr<const int*> bad(
mediapipe::Status(mediapipe::StatusCode::kCancelled, ""));
EXPECT_EQ(bad.status(),
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, ""));
mediapipe::Status(mediapipe::StatusCode::kCancelled, ""));
}
TEST(StatusOr, TestPointerValue) {
const int kI = 0;
::mediapipe::StatusOr<const int*> thing(&kI);
mediapipe::StatusOr<const int*> thing(&kI);
EXPECT_EQ(&kI, thing.ValueOrDie());
}
TEST(StatusOr, TestPointerValueConst) {
const int kI = 0;
const ::mediapipe::StatusOr<const int*> thing(&kI);
const mediapipe::StatusOr<const int*> thing(&kI);
EXPECT_EQ(&kI, thing.ValueOrDie());
}
TEST(StatusOrDeathTest, TestPointerValueNotOk) {
::mediapipe::StatusOr<int*> thing(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, "cancelled"));
mediapipe::StatusOr<int*> thing(
mediapipe::Status(mediapipe::StatusCode::kCancelled, "cancelled"));
EXPECT_DEATH(thing.ValueOrDie(), "cancelled");
}
TEST(StatusOrDeathTest, TestPointerValueNotOkConst) {
const ::mediapipe::StatusOr<int*> thing(
::mediapipe::Status(::mediapipe::StatusCode::kCancelled, "cancelled"));
const mediapipe::StatusOr<int*> thing(
mediapipe::Status(mediapipe::StatusCode::kCancelled, "cancelled"));
EXPECT_DEATH(thing.ValueOrDie(), "cancelled");
}
+6 -6
View File
@@ -313,9 +313,9 @@ VT2<T2> operator/(const K& k, const BasicVector<VT2, T2, N2>& a) {
// ======================================================================
template <typename T>
class Vector2
: public ::mediapipe::deps::internal_vector::BasicVector<Vector2, T, 2> {
: public mediapipe::deps::internal_vector::BasicVector<Vector2, T, 2> {
private:
using Base = ::mediapipe::deps::internal_vector::BasicVector<::Vector2, T, 2>;
using Base = mediapipe::deps::internal_vector::BasicVector<::Vector2, T, 2>;
using VType = T;
public:
@@ -383,9 +383,9 @@ class Vector2
template <typename T>
class Vector3
: public ::mediapipe::deps::internal_vector::BasicVector<Vector3, T, 3> {
: public mediapipe::deps::internal_vector::BasicVector<Vector3, T, 3> {
private:
using Base = ::mediapipe::deps::internal_vector::BasicVector<::Vector3, T, 3>;
using Base = mediapipe::deps::internal_vector::BasicVector<::Vector3, T, 3>;
using VType = T;
public:
@@ -479,9 +479,9 @@ class Vector3
template <typename T>
class Vector4
: public ::mediapipe::deps::internal_vector::BasicVector<Vector4, T, 4> {
: public mediapipe::deps::internal_vector::BasicVector<Vector4, T, 4> {
private:
using Base = ::mediapipe::deps::internal_vector::BasicVector<::Vector4, T, 4>;
using Base = mediapipe::deps::internal_vector::BasicVector<::Vector4, T, 4>;
using VType = T;
public:
+5 -6
View File
@@ -48,7 +48,7 @@ class Executor {
// A registered Executor subclass must implement the static factory method
// Create. The Executor subclass cannot be registered without it.
//
// static ::mediapipe::StatusOr<Executor*> Create(
// static mediapipe::StatusOr<Executor*> Create(
// const MediaPipeOptions& extendable_options);
//
// Create validates extendable_options, then calls the constructor, and
@@ -65,14 +65,13 @@ class Executor {
virtual void Schedule(std::function<void()> task) = 0;
};
using ExecutorRegistry = GlobalFactoryRegistry<::mediapipe::StatusOr<Executor*>,
using ExecutorRegistry = GlobalFactoryRegistry<mediapipe::StatusOr<Executor*>,
const MediaPipeOptions&>;
// Macro for registering the executor.
#define REGISTER_EXECUTOR(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED(::mediapipe::ExecutorRegistry, \
executor_registration, name, \
name::Create)
#define REGISTER_EXECUTOR(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
mediapipe::ExecutorRegistry, executor_registration, name, name::Create)
} // namespace mediapipe
@@ -29,7 +29,7 @@ namespace {
// NOTE: If we need to update this class, that means there is a
// backward-incompatible change in the MediaPipe API and MediaPipe clients also
// need to update their mediapipe::Executor subclasses.
class MyExecutor : public ::mediapipe::Executor {
class MyExecutor : public mediapipe::Executor {
public:
MyExecutor();
~MyExecutor() override;
@@ -37,21 +37,21 @@ class MyExecutor : public ::mediapipe::Executor {
// To verify a mediapipe::Executor subclass outside the mediapipe namespace
// can override any method, override every method in the mediapipe::Executor
// interface.
void AddTask(::mediapipe::TaskQueue* task_queue) override;
void AddTask(mediapipe::TaskQueue* task_queue) override;
void Schedule(std::function<void()> task) override;
private:
std::unique_ptr<::mediapipe::ThreadPool> thread_pool_;
std::unique_ptr<mediapipe::ThreadPool> thread_pool_;
};
MyExecutor::MyExecutor() {
thread_pool_ = absl::make_unique<::mediapipe::ThreadPool>("my_executor", 1);
thread_pool_ = absl::make_unique<mediapipe::ThreadPool>("my_executor", 1);
thread_pool_->StartWorkers();
}
MyExecutor::~MyExecutor() { thread_pool_.reset(nullptr); }
void MyExecutor::AddTask(::mediapipe::TaskQueue* task_queue) {
void MyExecutor::AddTask(mediapipe::TaskQueue* task_queue) {
thread_pool_->Schedule([task_queue] { task_queue->RunNextTask(); });
}
@@ -59,7 +59,7 @@ void MyExecutor::Schedule(std::function<void()> task) {
thread_pool_->Schedule(std::move(task));
}
class NoOpTaskQueue : public ::mediapipe::TaskQueue {
class NoOpTaskQueue : public mediapipe::TaskQueue {
public:
// Returns the number of times RunNextTask() was called.
int call_count() const { return call_count_; }
@@ -20,6 +20,8 @@ syntax = "proto2";
package mediapipe;
option objc_class_prefix = "MediaPipe";
message Classification {
// The index of the class in the corresponding label map.
optional int32 index = 1;
+9 -8
View File
@@ -27,17 +27,18 @@ message Landmark {
optional float y = 2;
optional float z = 3;
// Landmark visibility. Float score of whether landmark is visible or occluded
// by other objects. Landmark considered as invisible also if it is
// not present on the screen (out of scene bounds).
// Depending on the model, visibility value is either a
// Landmark visibility. Should stay unset if not supported.
// Float score of whether landmark is visible or occluded by other objects.
// Landmark considered as invisible also if it is not present on the screen
// (out of scene bounds). Depending on the model, visibility value is either a
// sigmoid or an argument of sigmoid.
optional float visibility = 4;
// Landmark presence. Float score of whether landmark is present on the scene
// (located within scene bounds).
// Depending on the model, presence value is either a result of sigmoid
// or an argument of sigmoid function to get landmark presence probability.
// Landmark presence. Should stay unset if not supported.
// Float score of whether landmark is present on the scene (located within
// scene bounds). Depending on the model, presence value is either a result of
// sigmoid or an argument of sigmoid function to get landmark presence
// probability.
optional float presence = 5;
}
+2 -3
View File
@@ -72,13 +72,13 @@ std::unique_ptr<cv::Mat> MaskToMat(const LocationData::BinaryMask& mask) {
}
return image;
}
::mediapipe::StatusOr<std::unique_ptr<cv::Mat>> RectangleToMat(
mediapipe::StatusOr<std::unique_ptr<cv::Mat>> RectangleToMat(
int image_width, int image_height, const Rectangle_i& rect) {
// These checks prevent undefined behavior caused when setting memory for
// rectangles whose edges lie outside image edges.
if (rect.ymin() < 0 || rect.xmin() < 0 || rect.xmax() > image_width ||
rect.ymax() > image_height) {
return ::mediapipe::InvalidArgumentError(absl::Substitute(
return mediapipe::InvalidArgumentError(absl::Substitute(
"Rectangle must be bounded by image boundaries.\nImage Width: "
"$0\nImage Height: $1\nRectangle: [($2, $3), ($4, $5)]",
image_width, image_height, rect.xmin(), rect.ymin(), rect.xmax(),
@@ -564,7 +564,6 @@ Rectangle_f Location::ConvertToRelativeBBox(int image_width,
switch (location_data_.format()) {
case LocationData::GLOBAL: {
return Rectangle_f(0.0f, 0.0f, 1.0f, 1.0f);
break;
}
case LocationData::BOUNDING_BOX: {
const auto& box = location_data_.bounding_box();
+32 -42
View File
@@ -132,9 +132,6 @@ void Tensor::AllocateMtlBuffer(id<MTLDevice> device) const {
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_30
Tensor::OpenGlTexture2dView Tensor::GetOpenGlTexture2dReadView() const {
LOG_IF(FATAL, BhwcDepthFromShape(shape_) > 4)
<< "OpenGlTexture2d supports depth <= 4. Current depth is "
<< BhwcDepthFromShape(shape_);
LOG_IF(FATAL, valid_ == kValidNone)
<< "Tensor must be written prior to read from.";
LOG_IF(FATAL, !(valid_ & (kValidCpu | kValidOpenGlTexture2d)))
@@ -145,10 +142,11 @@ Tensor::OpenGlTexture2dView Tensor::GetOpenGlTexture2dReadView() const {
if (!(valid_ & kValidOpenGlTexture2d)) {
uint8_t* buffer;
std::unique_ptr<uint8_t[]> temp_buffer;
if (BhwcDepthFromShape(shape_) == 4) {
if (BhwcDepthFromShape(shape_) % 4 == 0) {
// No padding exists because number of channels are multiple of 4.
buffer = reinterpret_cast<uint8_t*>(cpu_buffer_);
} else {
const int padded_depth = 4;
const int padded_depth = (BhwcDepthFromShape(shape_) + 3) / 4 * 4;
const int padded_depth_size = padded_depth * element_size();
const int padded_size = BhwcBatchFromShape(shape_) *
BhwcHeightFromShape(shape_) *
@@ -194,9 +192,14 @@ void Tensor::AllocateOpenGlTexture2d() const {
// supported from floating point textures.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F, BhwcWidthFromShape(shape_),
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
const int pixels_per_depth = (BhwcDepthFromShape(shape_) + 3) / 4;
const int width = BhwcWidthFromShape(shape_) * pixels_per_depth;
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F, width,
BhwcHeightFromShape(shape_));
glBindTexture(GL_TEXTURE_2D, 0);
glGenFramebuffers(1, &frame_buffer_);
}
}
#endif // MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_30
@@ -265,6 +268,8 @@ void Tensor::Move(Tensor* src) {
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_30
gl_context_ = std::move(src->gl_context_);
frame_buffer_ = src->frame_buffer_;
src->frame_buffer_ = GL_INVALID_INDEX;
opengl_texture2d_ = src->opengl_texture2d_;
src->opengl_texture2d_ = GL_INVALID_INDEX;
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_31
@@ -298,9 +303,13 @@ void Tensor::Invalidate() {
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_30
if (opengl_texture2d_ != GL_INVALID_INDEX) {
GLuint opengl_texture2d = opengl_texture2d_;
gl_context_->RunWithoutWaiting(
[opengl_texture2d]() { glDeleteTextures(1, &opengl_texture2d); });
GLuint frame_buffer = frame_buffer_;
gl_context_->RunWithoutWaiting([opengl_texture2d, frame_buffer]() {
glDeleteTextures(1, &opengl_texture2d);
glDeleteFramebuffers(1, &frame_buffer);
});
opengl_texture2d_ = GL_INVALID_INDEX;
frame_buffer_ = GL_INVALID_INDEX;
}
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_31
if (opengl_buffer_ != GL_INVALID_INDEX) {
@@ -347,53 +356,34 @@ Tensor::CpuReadView Tensor::GetCpuReadView() const {
// yet.
if (valid_ & kValidOpenGlTexture2d) {
gl_context_->Run([this]() {
GLint current_fbo;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &current_fbo);
const int pixels_per_depth = (BhwcDepthFromShape(shape_) + 3) / 4;
const int width = BhwcWidthFromShape(shape_) * pixels_per_depth;
uint8_t* buffer;
std::unique_ptr<uint8_t[]> temp_buffer;
if (BhwcDepthFromShape(shape_) == 4) {
if (BhwcDepthFromShape(shape_) % 4 == 0) {
buffer = reinterpret_cast<uint8_t*>(cpu_buffer_);
} else {
const int padded_depth = (BhwcDepthFromShape(shape_) + 3) / 4 * 4;
const int padded_size =
BhwcBatchFromShape(shape_) * BhwcHeightFromShape(shape_) *
BhwcWidthFromShape(shape_) * padded_depth * element_size();
const int padded_size = BhwcBatchFromShape(shape_) *
BhwcHeightFromShape(shape_) * width *
pixels_per_depth * 4 * element_size();
temp_buffer = absl::make_unique<uint8_t[]>(padded_size);
buffer = temp_buffer.get();
}
GLint color_attachment_name;
glGetFramebufferAttachmentParameteriv(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &color_attachment_name);
if (color_attachment_name != opengl_texture2d_) {
// Save the viewport. Note that we assume that the color attachment is
// a GL_TEXTURE_2D texture.
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer_);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, opengl_texture2d_, 0);
glPixelStorei(GL_PACK_ROW_LENGTH, width);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, width, BhwcHeightFromShape(shape_), GL_RGBA,
GL_FLOAT, buffer);
// Set the data from GLTexture object.
glViewport(0, 0, BhwcWidthFromShape(shape_),
BhwcHeightFromShape(shape_));
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, opengl_texture2d_, 0);
glReadPixels(0, 0, BhwcWidthFromShape(shape_),
BhwcHeightFromShape(shape_), GL_RGBA, GL_FLOAT, buffer);
// Restore from the saved viewport and color attachment name.
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, color_attachment_name, 0);
} else {
glReadPixels(0, 0, BhwcWidthFromShape(shape_),
BhwcHeightFromShape(shape_), GL_RGBA, GL_FLOAT, buffer);
}
if (BhwcDepthFromShape(shape_) < 4) {
if (BhwcDepthFromShape(shape_) % 4) {
uint8_t* dest_buffer = reinterpret_cast<uint8_t*>(cpu_buffer_);
const int actual_depth_size =
BhwcDepthFromShape(shape_) * element_size();
const int padded_depth_size = 4 * element_size();
const int padded_depth_size = pixels_per_depth * 4 * element_size();
for (int e = 0;
e < BhwcBatchFromShape(shape_) * BhwcHeightFromShape(shape_) *
BhwcWidthFromShape(shape_);
+1
View File
@@ -253,6 +253,7 @@ class Tensor {
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_30
mutable std::shared_ptr<mediapipe::GlContext> gl_context_;
mutable GLuint opengl_texture2d_ = GL_INVALID_INDEX;
mutable GLuint frame_buffer_ = GL_INVALID_INDEX;
void AllocateOpenGlTexture2d() const;
#if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_31
mutable GLuint opengl_buffer_ = GL_INVALID_INDEX;
+12 -12
View File
@@ -18,7 +18,7 @@ namespace mediapipe {
namespace internal {
::mediapipe::Status GraphOutputStream::Initialize(
mediapipe::Status GraphOutputStream::Initialize(
const std::string& stream_name, const PacketType* packet_type,
OutputStreamManager* output_stream_manager) {
RET_CHECK(output_stream_manager);
@@ -38,20 +38,20 @@ namespace internal {
MP_RETURN_IF_ERROR(input_stream_handler_->InitializeInputStreamManagers(
input_stream_.get()));
output_stream_manager->AddMirror(input_stream_handler_.get(), id);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void GraphOutputStream::PrepareForRun(
std::function<void()> notification_callback,
std::function<void(::mediapipe::Status)> error_callback) {
std::function<void(mediapipe::Status)> error_callback) {
input_stream_handler_->PrepareForRun(
/*headers_ready_callback=*/[] {}, std::move(notification_callback),
/*schedule_callback=*/nullptr, std::move(error_callback));
}
::mediapipe::Status OutputStreamObserver::Initialize(
mediapipe::Status OutputStreamObserver::Initialize(
const std::string& stream_name, const PacketType* packet_type,
std::function<::mediapipe::Status(const Packet&)> packet_callback,
std::function<mediapipe::Status(const Packet&)> packet_callback,
OutputStreamManager* output_stream_manager) {
RET_CHECK(output_stream_manager);
@@ -60,7 +60,7 @@ void GraphOutputStream::PrepareForRun(
output_stream_manager);
}
::mediapipe::Status OutputStreamObserver::Notify() {
mediapipe::Status OutputStreamObserver::Notify() {
while (true) {
bool empty;
Timestamp min_timestamp = input_stream_->MinTimestampOrBound(&empty);
@@ -76,10 +76,10 @@ void GraphOutputStream::PrepareForRun(
num_packets_dropped, input_stream_->Name());
MP_RETURN_IF_ERROR(packet_callback_(packet));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status OutputStreamPollerImpl::Initialize(
mediapipe::Status OutputStreamPollerImpl::Initialize(
const std::string& stream_name, const PacketType* packet_type,
std::function<void(InputStreamManager*, bool*)> queue_size_callback,
OutputStreamManager* output_stream_manager) {
@@ -87,12 +87,12 @@ void GraphOutputStream::PrepareForRun(
output_stream_manager));
input_stream_handler_->SetQueueSizeCallbacks(queue_size_callback,
queue_size_callback);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputStreamPollerImpl::PrepareForRun(
std::function<void()> notification_callback,
std::function<void(::mediapipe::Status)> error_callback) {
std::function<void(mediapipe::Status)> error_callback) {
input_stream_handler_->PrepareForRun(
/*headers_ready_callback=*/[] {}, std::move(notification_callback),
/*schedule_callback=*/nullptr, std::move(error_callback));
@@ -116,11 +116,11 @@ void OutputStreamPollerImpl::SetMaxQueueSize(int queue_size) {
int OutputStreamPollerImpl::QueueSize() { return input_stream_->QueueSize(); }
::mediapipe::Status OutputStreamPollerImpl::Notify() {
mediapipe::Status OutputStreamPollerImpl::Notify() {
mutex_.Lock();
handler_condvar_.Signal();
mutex_.Unlock();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputStreamPollerImpl::NotifyError() {
+12 -12
View File
@@ -50,18 +50,18 @@ class GraphOutputStream {
// input stream and attaches the input stream to an output stream as
// the mirror for observation/polling. Ownership of output_stream_manager
// is not transferred to the graph output stream object.
::mediapipe::Status Initialize(const std::string& stream_name,
const PacketType* packet_type,
OutputStreamManager* output_stream_manager);
mediapipe::Status Initialize(const std::string& stream_name,
const PacketType* packet_type,
OutputStreamManager* output_stream_manager);
// Installs callbacks into its GraphOutputStreamHandler.
virtual void PrepareForRun(
std::function<void()> notification_callback,
std::function<void(::mediapipe::Status)> error_callback);
std::function<void(mediapipe::Status)> error_callback);
// Notifies the graph output stream of new packets emitted by the output
// stream.
virtual ::mediapipe::Status Notify() = 0;
virtual mediapipe::Status Notify() = 0;
// Notifies the graph output stream of the errors in the calculator graph.
virtual void NotifyError() = 0;
@@ -110,21 +110,21 @@ class OutputStreamObserver : public GraphOutputStream {
public:
virtual ~OutputStreamObserver() {}
::mediapipe::Status Initialize(
mediapipe::Status Initialize(
const std::string& stream_name, const PacketType* packet_type,
std::function<::mediapipe::Status(const Packet&)> packet_callback,
std::function<mediapipe::Status(const Packet&)> packet_callback,
OutputStreamManager* output_stream_manager);
// Notifies the observer of new packets emitted by the observed
// output stream.
::mediapipe::Status Notify() override;
mediapipe::Status Notify() override;
// Notifies the observer of the errors in the calculator graph.
void NotifyError() override {}
private:
// Invoked on every packet emitted by the observed output stream.
std::function<::mediapipe::Status(const Packet&)> packet_callback_;
std::function<mediapipe::Status(const Packet&)> packet_callback_;
};
// OutputStreamPollerImpl that returns packets to the caller via
@@ -134,14 +134,14 @@ class OutputStreamPollerImpl : public GraphOutputStream {
virtual ~OutputStreamPollerImpl() {}
// Initializes an OutputStreamPollerImpl.
::mediapipe::Status Initialize(
mediapipe::Status Initialize(
const std::string& stream_name, const PacketType* packet_type,
std::function<void(InputStreamManager*, bool*)> queue_size_callback,
OutputStreamManager* output_stream_manager);
void PrepareForRun(
std::function<void()> notification_callback,
std::function<void(::mediapipe::Status)> error_callback) override;
std::function<void(mediapipe::Status)> error_callback) override;
// Resets graph_has_error_ and cleans the internal packet queue.
void Reset();
@@ -152,7 +152,7 @@ class OutputStreamPollerImpl : public GraphOutputStream {
int QueueSize();
// Notifies the poller of new packets emitted by the output stream.
::mediapipe::Status Notify() override;
mediapipe::Status Notify() override;
// Notifies the poller of the errors in the calculator graph.
void NotifyError() override;
+3 -3
View File
@@ -48,7 +48,7 @@ class GraphServiceTest : public ::testing::Test {
protected:
void SetUp() override {
CalculatorGraphConfig config =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "in"
node {
calculator: "TestServiceCalculator"
@@ -60,7 +60,7 @@ class GraphServiceTest : public ::testing::Test {
MP_ASSERT_OK(
graph_.ObserveOutputStream("out", [this](const Packet& packet) {
output_packets_.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
}
@@ -98,7 +98,7 @@ TEST_F(GraphServiceTest, UseInCalculator) {
TEST_F(GraphServiceTest, Contract) {
const CalculatorGraphConfig::Node node =
::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig::Node>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig::Node>(R"(
calculator: "TestServiceCalculator"
input_stream: "in"
output_stream: "out"
+2 -2
View File
@@ -28,7 +28,7 @@ namespace mediapipe {
class GraphValidation {
public:
// Validates the specified CalculatorGraphConfig.
::mediapipe::Status Validate(
mediapipe::Status Validate(
const CalculatorGraphConfig& config,
const std::map<std::string, Packet>& side_packets = {}) {
return graph_.Initialize(config, side_packets);
@@ -40,7 +40,7 @@ class GraphValidation {
// CalclatorGraphConfig.type. A subgraph can be validated directly by
// specifying its type in |graph_type|. A template graph can be validated
// directly by specifying its template arguments in |arguments|.
::mediapipe::Status Validate(
mediapipe::Status Validate(
const std::vector<CalculatorGraphConfig>& configs,
const std::vector<CalculatorGraphTemplate>& templates,
const std::map<std::string, Packet>& side_packets = {},
+14 -14
View File
@@ -66,7 +66,7 @@ TEST(GraphValidationTest, InitializeGraphFromProtos) {
graph_1.Initialize({config_1, config_2}, {}, {}, "PassThroughGraph"));
EXPECT_THAT(
graph_1.Config(),
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
type: "PassThroughGraph"
input_stream: "INPUT:stream_1"
output_stream: "OUTPUT:stream_2"
@@ -84,7 +84,7 @@ TEST(GraphValidationTest, InitializeGraphFromProtos) {
MP_EXPECT_OK(graph_2.Initialize({config_1, config_2}, {}));
EXPECT_THAT(
graph_2.Config(),
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "INPUT:stream_1"
output_stream: "OUTPUT:stream_2"
node {
@@ -106,9 +106,9 @@ TEST(GraphValidationTest, InitializeGraphFromProtos) {
TEST(GraphValidationTest, InitializeGraphFromLinker) {
EXPECT_FALSE(SubgraphRegistry::IsRegistered("DubQuadTestSubgraph"));
ValidatedGraphConfig builder_1;
::mediapipe::Status status_1 =
mediapipe::Status status_1 =
builder_1.Initialize({}, {}, "DubQuadTestSubgraph");
EXPECT_EQ(status_1.code(), ::mediapipe::StatusCode::kNotFound);
EXPECT_EQ(status_1.code(), mediapipe::StatusCode::kNotFound);
EXPECT_THAT(status_1.message(),
testing::HasSubstr(
R"(No registered object with name: DubQuadTestSubgraph)"));
@@ -174,7 +174,7 @@ TEST(GraphValidationTest, InitializeTemplateFromProtos) {
"PassThroughGraph", &options));
EXPECT_THAT(
graph_1.Config(),
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
type: "PassThroughGraph"
input_stream: "INPUT:stream_9"
output_stream: "OUTPUT:stream_2"
@@ -193,7 +193,7 @@ TEST(GraphValidationTest, InitializeTemplateFromProtos) {
MP_EXPECT_OK(graph_2.Initialize({config_2}, {config_1}));
EXPECT_THAT(
graph_2.Config(),
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "INPUT:stream_1"
output_stream: "OUTPUT:stream_2"
node {
@@ -254,7 +254,7 @@ TEST(GraphValidationTest, OptionalSubgraphStreams) {
graph_1.Config(),
// The result includes only the requested input and output streams.
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_stream: "INPUT:foo_in"
output_stream: "OUTPUT:foo_out"
node {
@@ -314,7 +314,7 @@ TEST(GraphValidationTest, OptionalSubgraphStreamsMismatched) {
GraphValidation validation_1;
mediapipe::Status status = validation_1.Validate({config_1, config_2}, {});
ASSERT_EQ(status.code(), ::mediapipe::StatusCode::kInvalidArgument);
ASSERT_EQ(status.code(), mediapipe::StatusCode::kInvalidArgument);
ASSERT_THAT(status.ToString(),
testing::HasSubstr(
"PassThroughCalculator must use matching tags and indexes"));
@@ -323,22 +323,22 @@ TEST(GraphValidationTest, OptionalSubgraphStreamsMismatched) {
// A calculator that optionally accepts an input-side-packet.
class OptionalSideInputTestCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->InputSidePackets().Tag("SIDEINPUT").Set<std::string>().Optional();
cc->Inputs().Tag("SELECT").Set<int>().Optional();
cc->Inputs().Tag("ENABLE").Set<bool>().Optional();
cc->Outputs().Tag("OUTPUT").Set<std::string>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) final {
mediapipe::Status Process(CalculatorContext* cc) final {
std::string value("default");
if (cc->InputSidePackets().HasTag("SIDEINPUT")) {
value = cc->InputSidePackets().Tag("SIDEINPUT").Get<std::string>();
}
cc->Outputs().Tag("OUTPUT").Add(new std::string(value),
cc->InputTimestamp());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(OptionalSideInputTestCalculator);
@@ -374,7 +374,7 @@ TEST(GraphValidationTest, OptionalInputNotProvidedForSubgraphCalculator) {
graph_1.Config(),
// The expanded graph omits the optional input-side-packet.
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_side_packet: "INPUT:foo_in"
output_stream: "OUTPUT:foo_out"
node {
@@ -431,7 +431,7 @@ TEST(GraphValidationTest, MultipleOptionalInputsForSubgraph) {
// The expanded graph includes only the specified input, "SELECT".
// Without the fix to RemoveIgnoredStreams(), the expanded graph
// includes the wrong input.
EqualsProto(::mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
input_side_packet: "INPUT:foo_in"
input_stream: "SELECT:foo_select"
output_stream: "OUTPUT:foo_out"
@@ -21,11 +21,11 @@
namespace mediapipe {
::mediapipe::Status InputSidePacketHandler::PrepareForRun(
mediapipe::Status InputSidePacketHandler::PrepareForRun(
const PacketTypeSet* input_side_packet_types,
const std::map<std::string, Packet>& all_side_packets,
std::function<void()> input_side_packets_ready_callback,
std::function<void(::mediapipe::Status)> error_callback) {
std::function<void(mediapipe::Status)> error_callback) {
int missing_input_side_packet_count;
prev_input_side_packets_ = std::move(input_side_packets_);
ASSIGN_OR_RETURN(
@@ -39,7 +39,7 @@ namespace mediapipe {
input_side_packets_ready_callback_ =
std::move(input_side_packets_ready_callback);
error_callback_ = std::move(error_callback);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
bool InputSidePacketHandler::InputSidePacketsChanged() {
@@ -49,25 +49,24 @@ bool InputSidePacketHandler::InputSidePacketsChanged() {
}
void InputSidePacketHandler::Set(CollectionItemId id, const Packet& packet) {
::mediapipe::Status status = SetInternal(id, packet);
mediapipe::Status status = SetInternal(id, packet);
if (!status.ok()) {
TriggerErrorCallback(status);
}
}
::mediapipe::Status InputSidePacketHandler::SetInternal(CollectionItemId id,
const Packet& packet) {
mediapipe::Status InputSidePacketHandler::SetInternal(CollectionItemId id,
const Packet& packet) {
RET_CHECK_GT(missing_input_side_packet_count_, 0);
Packet& side_packet = input_side_packets_->Get(id);
if (!side_packet.IsEmpty()) {
return ::mediapipe::AlreadyExistsErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::AlreadyExistsErrorBuilder(MEDIAPIPE_LOC)
<< "Input side packet with id " << id << " was already set.";
}
::mediapipe::Status result =
input_side_packet_types_->Get(id).Validate(packet);
mediapipe::Status result = input_side_packet_types_->Get(id).Validate(packet);
if (!result.ok()) {
return ::mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
return mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
<< absl::StrCat(
"Packet type mismatch on calculator input side packet with "
"id ",
@@ -78,11 +77,11 @@ void InputSidePacketHandler::Set(CollectionItemId id, const Packet& packet) {
1, std::memory_order_acq_rel) == 1) {
input_side_packets_ready_callback_();
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void InputSidePacketHandler::TriggerErrorCallback(
const ::mediapipe::Status& status) const {
const mediapipe::Status& status) const {
CHECK(error_callback_);
error_callback_(status);
}
@@ -41,11 +41,11 @@ class InputSidePacketHandler {
// Resets the input side packet handler and its underlying input side packets
// for another run of the graph.
::mediapipe::Status PrepareForRun(
mediapipe::Status PrepareForRun(
const PacketTypeSet* input_side_packet_types,
const std::map<std::string, Packet>& all_side_packets,
std::function<void()> input_side_packets_ready_callback,
std::function<void(::mediapipe::Status)> error_callback);
std::function<void(mediapipe::Status)> error_callback);
// Sets a particular input side packet.
void Set(CollectionItemId id, const Packet& packet);
@@ -63,11 +63,11 @@ class InputSidePacketHandler {
private:
// Called by Set().
::mediapipe::Status SetInternal(CollectionItemId id, const Packet& packet);
mediapipe::Status SetInternal(CollectionItemId id, const Packet& packet);
// Triggers the error callback with ::mediapipe::Status info when an error
// Triggers the error callback with mediapipe::Status info when an error
// occurs.
void TriggerErrorCallback(const ::mediapipe::Status& status) const;
void TriggerErrorCallback(const mediapipe::Status& status) const;
const PacketTypeSet* input_side_packet_types_;
@@ -77,7 +77,7 @@ class InputSidePacketHandler {
std::atomic<int> missing_input_side_packet_count_{0};
std::function<void()> input_side_packets_ready_callback_;
std::function<void(::mediapipe::Status)> error_callback_;
std::function<void(mediapipe::Status)> error_callback_;
};
} // namespace mediapipe
+22 -23
View File
@@ -24,13 +24,13 @@ namespace mediapipe {
using SyncSet = InputStreamHandler::SyncSet;
::mediapipe::Status InputStreamHandler::InitializeInputStreamManagers(
mediapipe::Status InputStreamHandler::InitializeInputStreamManagers(
InputStreamManager* flat_input_stream_managers) {
for (CollectionItemId id = input_stream_managers_.BeginId();
id < input_stream_managers_.EndId(); ++id) {
input_stream_managers_.Get(id) = &flat_input_stream_managers[id.value()];
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
InputStreamManager* InputStreamHandler::GetInputStreamManager(
@@ -38,7 +38,7 @@ InputStreamManager* InputStreamHandler::GetInputStreamManager(
return input_stream_managers_.Get(id);
}
::mediapipe::Status InputStreamHandler::SetupInputShards(
mediapipe::Status InputStreamHandler::SetupInputShards(
InputStreamShardSet* input_shards) {
RET_CHECK(input_shards);
for (CollectionItemId id = input_stream_managers_.BeginId();
@@ -48,7 +48,7 @@ InputStreamManager* InputStreamHandler::GetInputStreamManager(
input_shards->Get(id).SetName(&manager->Name());
input_shards->Get(id).SetHeader(manager->Header());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
std::vector<std::pair<std::string, int>>
@@ -68,7 +68,7 @@ void InputStreamHandler::PrepareForRun(
std::function<void()> headers_ready_callback,
std::function<void()> notification_callback,
std::function<void(CalculatorContext*)> schedule_callback,
std::function<void(::mediapipe::Status)> error_callback) {
std::function<void(mediapipe::Status)> error_callback) {
headers_ready_callback_ = std::move(headers_ready_callback);
notification_ = std::move(notification_callback);
schedule_callback_ = std::move(schedule_callback);
@@ -94,8 +94,7 @@ void InputStreamHandler::SetQueueSizeCallbacks(
}
void InputStreamHandler::SetHeader(CollectionItemId id, const Packet& header) {
::mediapipe::Status result =
input_stream_managers_.Get(id)->SetHeader(header);
mediapipe::Status result = input_stream_managers_.Get(id)->SetHeader(header);
if (!result.ok()) {
error_callback_(result);
return;
@@ -175,9 +174,9 @@ bool InputStreamHandler::ScheduleInvocations(int max_allowance,
}
CalculatorContext* default_context =
calculator_context_manager_->GetDefaultCalculatorContext();
::mediapipe::LogEvent(default_context->GetProfilingContext(),
TraceEvent(TraceEvent::NOT_READY)
.set_node_id(default_context->NodeId()));
mediapipe::LogEvent(default_context->GetProfilingContext(),
TraceEvent(TraceEvent::NOT_READY)
.set_node_id(default_context->NodeId()));
break;
} else if (node_readiness == NodeReadiness::kReadyForProcess) {
CalculatorContext* calculator_context =
@@ -193,9 +192,9 @@ bool InputStreamHandler::ScheduleInvocations(int max_allowance,
schedule_callback_(calculator_context);
++invocations_scheduled;
}
::mediapipe::LogEvent(calculator_context->GetProfilingContext(),
TraceEvent(TraceEvent::READY_FOR_PROCESS)
.set_node_id(calculator_context->NodeId()));
mediapipe::LogEvent(calculator_context->GetProfilingContext(),
TraceEvent(TraceEvent::READY_FOR_PROCESS)
.set_node_id(calculator_context->NodeId()));
} else {
CHECK(node_readiness == NodeReadiness::kReadyForClose);
// If any parallel invocations are in progress or a calculator context has
@@ -214,9 +213,9 @@ bool InputStreamHandler::ScheduleInvocations(int max_allowance,
schedule_callback_(default_context);
++invocations_scheduled;
prepared_context_for_close_ = true;
::mediapipe::LogEvent(default_context->GetProfilingContext(),
TraceEvent(TraceEvent::READY_FOR_CLOSE)
.set_node_id(default_context->NodeId()));
mediapipe::LogEvent(default_context->GetProfilingContext(),
TraceEvent(TraceEvent::READY_FOR_CLOSE)
.set_node_id(default_context->NodeId()));
break;
}
}
@@ -246,12 +245,12 @@ void LogQueuedPackets(CalculatorContext* context, InputStreamManager* stream,
.set_input_ts(queue_tail.Timestamp())
.set_stream_id(&stream->Name())
.set_event_data(stream->QueueSize() + 1);
::mediapipe::LogEvent(context->GetProfilingContext(),
event.set_packet_ts(queue_tail.Timestamp()));
mediapipe::LogEvent(context->GetProfilingContext(),
event.set_packet_ts(queue_tail.Timestamp()));
Packet queue_head = stream->QueueHead();
if (!queue_head.IsEmpty()) {
::mediapipe::LogEvent(context->GetProfilingContext(),
event.set_packet_ts(queue_head.Timestamp()));
mediapipe::LogEvent(context->GetProfilingContext(),
event.set_packet_ts(queue_head.Timestamp()));
}
}
}
@@ -261,7 +260,7 @@ void InputStreamHandler::AddPackets(CollectionItemId id,
LogQueuedPackets(GetCalculatorContext(calculator_context_manager_),
input_stream_managers_.Get(id), packets.back());
bool notify = false;
::mediapipe::Status result =
mediapipe::Status result =
input_stream_managers_.Get(id)->AddPackets(packets, &notify);
if (!result.ok()) {
error_callback_(result);
@@ -276,7 +275,7 @@ void InputStreamHandler::MovePackets(CollectionItemId id,
LogQueuedPackets(GetCalculatorContext(calculator_context_manager_),
input_stream_managers_.Get(id), packets->back());
bool notify = false;
::mediapipe::Status result =
mediapipe::Status result =
input_stream_managers_.Get(id)->MovePackets(packets, &notify);
if (!result.ok()) {
error_callback_(result);
@@ -289,7 +288,7 @@ void InputStreamHandler::MovePackets(CollectionItemId id,
void InputStreamHandler::SetNextTimestampBound(CollectionItemId id,
Timestamp bound) {
bool notify = false;
::mediapipe::Status result =
mediapipe::Status result =
input_stream_managers_.Get(id)->SetNextTimestampBound(bound, &notify);
if (!result.ok()) {
error_callback_(result);
+9 -10
View File
@@ -84,13 +84,13 @@ class InputStreamHandler {
// InputStreamHandler::input_stream_managers_ (meaning it should point
// to somewhere in the middle of the master flat array of all input
// stream managers).
::mediapipe::Status InitializeInputStreamManagers(
mediapipe::Status InitializeInputStreamManagers(
InputStreamManager* flat_input_stream_managers);
InputStreamManager* GetInputStreamManager(CollectionItemId id);
// Sets up the InputStreamShardSet by propagating data from the managers.
::mediapipe::Status SetupInputShards(InputStreamShardSet* input_shards);
mediapipe::Status SetupInputShards(InputStreamShardSet* input_shards);
// Returns a vector of pairs of stream name and queue size for monitoring
// purpose.
@@ -106,7 +106,7 @@ class InputStreamHandler {
std::function<void()> headers_ready_callback,
std::function<void()> notification_callback,
std::function<void(CalculatorContext*)> schedule_callback,
std::function<void(::mediapipe::Status)> error_callback);
std::function<void(mediapipe::Status)> error_callback);
int NumInputStreams() const { return input_stream_managers_.NumEntries(); }
@@ -286,7 +286,7 @@ class InputStreamHandler {
std::function<void()> notification_;
// A callback to schedule the node with the prepared calculator context.
std::function<void(CalculatorContext*)> schedule_callback_;
std::function<void(::mediapipe::Status)> error_callback_;
std::function<void(mediapipe::Status)> error_callback_;
private:
// Indicates when to fill the input set. If true, every input set will be
@@ -318,12 +318,11 @@ using InputStreamHandlerRegistry = GlobalFactoryRegistry<
} // namespace mediapipe
// Macro for registering the input stream handler.
#define REGISTER_INPUT_STREAM_HANDLER(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
::mediapipe::InputStreamHandlerRegistry, input_handler_registration, \
name, \
absl::make_unique<name, std::shared_ptr<tool::TagMap>, \
CalculatorContextManager*, const MediaPipeOptions&, \
#define REGISTER_INPUT_STREAM_HANDLER(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
mediapipe::InputStreamHandlerRegistry, input_handler_registration, name, \
absl::make_unique<name, std::shared_ptr<tool::TagMap>, \
CalculatorContextManager*, const MediaPipeOptions&, \
bool>)
#endif // MEDIAPIPE_FRAMEWORK_INPUT_STREAM_HANDLER_H_
+21 -20
View File
@@ -27,13 +27,14 @@
namespace mediapipe {
::mediapipe::Status InputStreamManager::Initialize(
const std::string& name, const PacketType* packet_type, bool back_edge) {
mediapipe::Status InputStreamManager::Initialize(const std::string& name,
const PacketType* packet_type,
bool back_edge) {
name_ = name;
packet_type_ = packet_type;
back_edge_ = back_edge;
PrepareForRun();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
const std::string& InputStreamManager::Name() const { return name_; }
@@ -69,28 +70,28 @@ Packet InputStreamManager::QueueHead() const {
return queue_.front();
}
::mediapipe::Status InputStreamManager::SetHeader(const Packet& header) {
mediapipe::Status InputStreamManager::SetHeader(const Packet& header) {
if (header.Timestamp() != Timestamp::Unset()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Headers must not have a timestamp. Stream: \"" << name_
<< "\".";
}
header_ = header;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status InputStreamManager::AddPackets(
mediapipe::Status InputStreamManager::AddPackets(
const std::list<Packet>& container, bool* notify) {
return AddOrMovePacketsInternal<const std::list<Packet>&>(container, notify);
}
::mediapipe::Status InputStreamManager::MovePackets(
std::list<Packet>* container, bool* notify) {
mediapipe::Status InputStreamManager::MovePackets(std::list<Packet>* container,
bool* notify) {
return AddOrMovePacketsInternal<std::list<Packet>&>(*container, notify);
}
template <typename Container>
::mediapipe::Status InputStreamManager::AddOrMovePacketsInternal(
mediapipe::Status InputStreamManager::AddOrMovePacketsInternal(
Container container, bool* notify) {
*notify = false;
bool queue_became_non_empty = false;
@@ -99,7 +100,7 @@ template <typename Container>
// Scope to prevent locking the stream when notification is called.
absl::MutexLock stream_lock(&stream_mutex_);
if (closed_) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
// Check if the queue was full before packets came in.
bool was_queue_full =
@@ -107,7 +108,7 @@ template <typename Container>
// Check if the queue becomes non-empty.
queue_became_non_empty = queue_.empty() && !container.empty();
for (auto& packet : container) {
::mediapipe::Status result = packet_type_->Validate(packet);
mediapipe::Status result = packet_type_->Validate(packet);
if (!result.ok()) {
return tool::AddStatusPrefix(
absl::StrCat(
@@ -118,7 +119,7 @@ template <typename Container>
const Timestamp timestamp = packet.Timestamp();
if (!timestamp.IsAllowedInStream()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "In stream \"" << name_
<< "\", timestamp not specified or set to illegal value: "
<< timestamp.DebugString();
@@ -129,13 +130,13 @@ template <typename Container>
// Timestamp::PreStream().NextAllowedInStream() is
// Timestamp::OneOverPostStream().
if (timestamp == Timestamp::PostStream() && num_packets_added_ > 0) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "In stream \"" << name_
<< "\", a packet at Timestamp::PostStream() must be the only "
"Packet in an InputStream.";
}
if (timestamp < next_timestamp_bound_) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Packet timestamp mismatch on a calculator receiving from "
"stream \""
<< name_ << "\". Current minimum expected timestamp is "
@@ -176,21 +177,21 @@ template <typename Container>
becomes_full_callback_(this, &last_reported_stream_full_);
}
*notify = queue_became_non_empty;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status InputStreamManager::SetNextTimestampBound(
mediapipe::Status InputStreamManager::SetNextTimestampBound(
const Timestamp bound, bool* notify) {
*notify = false;
{
// Scope to prevent locking the stream when notification is called.
absl::MutexLock stream_lock(&stream_mutex_);
if (closed_) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
if (enable_timestamps_ && bound < next_timestamp_bound_) {
return ::mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
<< "SetNextTimestampBound must be called with a timestamp greater "
"than or equal to the current bound. In stream \""
<< name_ << "\". Current minimum expected timestamp is "
@@ -210,7 +211,7 @@ template <typename Container>
}
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void InputStreamManager::DisableTimestamps() { enable_timestamps_ = false; }
+8 -9
View File
@@ -57,8 +57,8 @@ class InputStreamManager {
InputStreamManager() = default;
// Initializes the InputStreamManager.
::mediapipe::Status Initialize(const std::string& name,
const PacketType* packet_type, bool back_edge);
mediapipe::Status Initialize(const std::string& name,
const PacketType* packet_type, bool back_edge);
// Returns the stream name.
const std::string& Name() const;
@@ -67,7 +67,7 @@ class InputStreamManager {
bool BackEdge() const { return back_edge_; }
// Sets the header Packet.
::mediapipe::Status SetHeader(const Packet& header);
mediapipe::Status SetHeader(const Packet& header);
const Packet& Header() const { return header_; }
@@ -87,13 +87,13 @@ class InputStreamManager {
// Timestamp::PostStream(), the packet must be the only packet in the
// stream.
// Violation of any of these conditions causes an error status.
::mediapipe::Status AddPackets(const std::list<Packet>& container,
bool* notify);
mediapipe::Status AddPackets(const std::list<Packet>& container,
bool* notify);
// Move a list of timestamped packets. Sets "notify" to true if the queue
// becomes non-empty. Does nothing if the input stream is closed. After the
// move, all packets in the container must be empty.
::mediapipe::Status MovePackets(std::list<Packet>* container, bool* notify);
mediapipe::Status MovePackets(std::list<Packet>* container, bool* notify);
// Closes the input stream. This function can be called multiple times.
void Close() ABSL_LOCKS_EXCLUDED(stream_mutex_);
@@ -103,7 +103,7 @@ class InputStreamManager {
// empty. Returns an error status if this decreases the bound, unless
// DisableTimestamps() is called. Does nothing if the input stream is
// closed.
::mediapipe::Status SetNextTimestampBound(Timestamp bound, bool* notify)
mediapipe::Status SetNextTimestampBound(Timestamp bound, bool* notify)
ABSL_LOCKS_EXCLUDED(stream_mutex_);
// Returns the smallest timestamp at which we might see an input in
@@ -182,8 +182,7 @@ class InputStreamManager {
// Otherwise, the caller must be MovePackets() and Container should be
// non-const reference.
template <typename Container>
::mediapipe::Status AddOrMovePacketsInternal(Container container,
bool* notify)
mediapipe::Status AddOrMovePacketsInternal(Container container, bool* notify)
ABSL_LOCKS_EXCLUDED(stream_mutex_);
// Returns true if the next timestamp bound reaches Timestamp::Done().
@@ -133,7 +133,7 @@ TEST_F(InputStreamManagerTest, AddPacketUnset) {
packets.push_back(MakePacket<std::string>("packet 1").At(Timestamp::Unset()));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(), testing::HasSubstr("Timestamp::Unset()"));
EXPECT_FALSE(notify_);
@@ -145,7 +145,7 @@ TEST_F(InputStreamManagerTest, AddPacketUnstarted) {
MakePacket<std::string>("packet 1").At(Timestamp::Unstarted()));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(), testing::HasSubstr("Timestamp::Unstarted()"));
EXPECT_FALSE(notify_);
@@ -157,7 +157,7 @@ TEST_F(InputStreamManagerTest, AddPacketOneOverPostStream) {
MakePacket<std::string>("packet 1").At(Timestamp::OneOverPostStream()));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(),
testing::HasSubstr("Timestamp::OneOverPostStream()"));
@@ -169,7 +169,7 @@ TEST_F(InputStreamManagerTest, AddPacketDone) {
packets.push_back(MakePacket<std::string>("packet 1").At(Timestamp::Done()));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(), testing::HasSubstr("Timestamp::Done()"));
EXPECT_FALSE(notify_);
@@ -196,7 +196,7 @@ TEST_F(InputStreamManagerTest, AddPacketsAfterPreStream) {
packets.push_back(MakePacket<std::string>("packet 2").At(Timestamp(10)));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(),
testing::HasSubstr("Timestamp::OneOverPostStream()"));
@@ -224,7 +224,7 @@ TEST_F(InputStreamManagerTest, AddPacketsBeforePostStream) {
MakePacket<std::string>("packet 2").At(Timestamp::PostStream()));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(), testing::HasSubstr("Timestamp::PostStream()"));
EXPECT_FALSE(notify_);
@@ -237,7 +237,7 @@ TEST_F(InputStreamManagerTest, AddPacketsReverseTimestamps) {
packets.push_back(MakePacket<std::string>("packet 3").At(Timestamp(30)));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(),
testing::HasSubstr(
@@ -398,7 +398,7 @@ TEST_F(InputStreamManagerTest, BadPacketType) {
packets.push_back(MakePacket<int>(10).At(Timestamp(10)));
EXPECT_TRUE(input_stream_manager_->IsEmpty());
::mediapipe::Status result =
mediapipe::Status result =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result.message(), testing::HasSubstr("Packet type mismatch"));
EXPECT_FALSE(notify_);
@@ -543,7 +543,7 @@ TEST_F(InputStreamManagerTest, BackwardsInTime) {
EXPECT_FALSE(notify_);
notify_ = false;
::mediapipe::Status result = input_stream_manager_->SetNextTimestampBound(
mediapipe::Status result = input_stream_manager_->SetNextTimestampBound(
Timestamp(40), &notify_); // Set Timestamp bound backwards in time.
ASSERT_THAT(result.message(), testing::HasSubstr("40"));
ASSERT_THAT(result.message(), testing::HasSubstr("50"));
@@ -554,7 +554,7 @@ TEST_F(InputStreamManagerTest, BackwardsInTime) {
packets.clear();
packets.push_back(MakePacket<std::string>("packet 3")
.At(Timestamp(30))); // Backwards in time
::mediapipe::Status result2 =
mediapipe::Status result2 =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result2.message(), testing::HasSubstr("50"));
ASSERT_THAT(result2.message(), testing::HasSubstr("30"));
@@ -585,7 +585,7 @@ TEST_F(InputStreamManagerTest, BackwardsInTime) {
packets.clear();
packets.push_back(MakePacket<std::string>("packet 5")
.At(Timestamp(130))); // Backwards in time.
::mediapipe::Status result3 =
mediapipe::Status result3 =
input_stream_manager_->AddPackets(packets, &notify_); // No notification
ASSERT_THAT(result3.message(), testing::HasSubstr("151"));
ASSERT_THAT(result3.message(), testing::HasSubstr("130"));
+12 -12
View File
@@ -20,21 +20,21 @@
namespace mediapipe {
::mediapipe::Status OutputSidePacketImpl::Initialize(
mediapipe::Status OutputSidePacketImpl::Initialize(
const std::string& name, const PacketType* packet_type) {
name_ = name;
packet_type_ = packet_type;
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputSidePacketImpl::PrepareForRun(
std::function<void(::mediapipe::Status)> error_callback) {
std::function<void(mediapipe::Status)> error_callback) {
error_callback_ = std::move(error_callback);
initialized_ = false;
}
void OutputSidePacketImpl::Set(const Packet& packet) {
::mediapipe::Status status = SetInternal(packet);
mediapipe::Status status = SetInternal(packet);
if (!status.ok()) {
TriggerErrorCallback(status);
}
@@ -46,26 +46,26 @@ void OutputSidePacketImpl::AddMirror(
mirrors_.emplace_back(input_side_packet_handler, id);
}
::mediapipe::Status OutputSidePacketImpl::SetInternal(const Packet& packet) {
mediapipe::Status OutputSidePacketImpl::SetInternal(const Packet& packet) {
if (initialized_) {
return ::mediapipe::AlreadyExistsErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::AlreadyExistsErrorBuilder(MEDIAPIPE_LOC)
<< "Output side packet \"" << name_ << "\" was already set.";
}
if (packet.IsEmpty()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Empty packet set on output side packet \"" << name_ << "\".";
}
if (packet.Timestamp() != Timestamp::Unset()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Output side packet \"" << name_ << "\" has a timestamp "
<< packet.Timestamp().DebugString() << ".";
}
::mediapipe::Status result = packet_type_->Validate(packet);
mediapipe::Status result = packet_type_->Validate(packet);
if (!result.ok()) {
return ::mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
return mediapipe::StatusBuilder(result, MEDIAPIPE_LOC).SetPrepend()
<< absl::StrCat(
"Packet type mismatch on calculator output side packet \"",
name_, "\": ");
@@ -76,11 +76,11 @@ void OutputSidePacketImpl::AddMirror(
for (const auto& mirror : mirrors_) {
mirror.input_side_packet_handler->Set(mirror.id, packet_);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputSidePacketImpl::TriggerErrorCallback(
const ::mediapipe::Status& status) const {
const mediapipe::Status& status) const {
CHECK(error_callback_);
error_callback_(status);
}
@@ -35,13 +35,13 @@ class OutputSidePacketImpl : public OutputSidePacket {
~OutputSidePacketImpl() override = default;
// Initializes the OutputSidePacketImpl.
::mediapipe::Status Initialize(const std::string& name,
const PacketType* packet_type);
mediapipe::Status Initialize(const std::string& name,
const PacketType* packet_type);
// Prepares this for processing. If an error occurs in a user called function
// (such as Set()) then error_callback will be called before returning
// control to the user.
void PrepareForRun(std::function<void(::mediapipe::Status)> error_callback);
void PrepareForRun(std::function<void(mediapipe::Status)> error_callback);
// Gets the output side packet.
Packet GetPacket() const { return packet_; }
@@ -70,15 +70,15 @@ class OutputSidePacketImpl : public OutputSidePacket {
};
// Called by Set().
::mediapipe::Status SetInternal(const Packet& packet);
mediapipe::Status SetInternal(const Packet& packet);
// Triggers the error callback with ::mediapipe::Status info when an error
// Triggers the error callback with mediapipe::Status info when an error
// occurs.
void TriggerErrorCallback(const ::mediapipe::Status& status) const;
void TriggerErrorCallback(const mediapipe::Status& status) const;
std::string name_;
const PacketType* packet_type_;
std::function<void(::mediapipe::Status)> error_callback_;
std::function<void(mediapipe::Status)> error_callback_;
Packet packet_;
bool initialized_ = false;
+5 -5
View File
@@ -20,16 +20,16 @@
namespace mediapipe {
::mediapipe::Status OutputStreamHandler::InitializeOutputStreamManagers(
mediapipe::Status OutputStreamHandler::InitializeOutputStreamManagers(
OutputStreamManager* flat_output_stream_managers) {
for (CollectionItemId id = output_stream_managers_.BeginId();
id < output_stream_managers_.EndId(); ++id) {
output_stream_managers_.Get(id) = &flat_output_stream_managers[id.value()];
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status OutputStreamHandler::SetupOutputShards(
mediapipe::Status OutputStreamHandler::SetupOutputShards(
OutputStreamShardSet* output_shards) {
CHECK(output_shards);
for (CollectionItemId id = output_stream_managers_.BeginId();
@@ -37,11 +37,11 @@ namespace mediapipe {
OutputStreamManager* manager = output_stream_managers_.Get(id);
output_shards->Get(id).SetSpec(manager->Spec());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputStreamHandler::PrepareForRun(
const std::function<void(::mediapipe::Status)>& error_callback) {
const std::function<void(mediapipe::Status)>& error_callback) {
for (auto& manager : output_stream_managers_) {
manager->PrepareForRun(error_callback);
}
+9 -9
View File
@@ -76,11 +76,11 @@ class OutputStreamHandler {
// OutputStreamHandler::output_stream_managers_ (meaning it should
// point to somewhere in the middle of the master flat array of all
// output stream managers).
::mediapipe::Status InitializeOutputStreamManagers(
mediapipe::Status InitializeOutputStreamManagers(
OutputStreamManager* flat_output_stream_managers);
// Sets up output shards by connecting to the managers.
::mediapipe::Status SetupOutputShards(OutputStreamShardSet* output_shards);
mediapipe::Status SetupOutputShards(OutputStreamShardSet* output_shards);
int NumOutputStreams() const { return output_stream_managers_.NumEntries(); }
@@ -92,7 +92,7 @@ class OutputStreamHandler {
// Calls OutputStreamManager::PrepareForRun(error_callback) per stream, and
// resets data memebers.
void PrepareForRun(
const std::function<void(::mediapipe::Status)>& error_callback)
const std::function<void(mediapipe::Status)>& error_callback)
ABSL_LOCKS_EXCLUDED(timestamp_mutex_);
// Marks the output streams as started and propagates any changes made in
@@ -203,12 +203,12 @@ using OutputStreamHandlerRegistry = GlobalFactoryRegistry<
} // namespace mediapipe
// Macro for registering the output stream handler.
#define REGISTER_OUTPUT_STREAM_HANDLER(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
::mediapipe::OutputStreamHandlerRegistry, output_handler_registration, \
name, \
absl::make_unique<name, std::shared_ptr<tool::TagMap>, \
CalculatorContextManager*, const MediaPipeOptions&, \
#define REGISTER_OUTPUT_STREAM_HANDLER(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
mediapipe::OutputStreamHandlerRegistry, output_handler_registration, \
name, \
absl::make_unique<name, std::shared_ptr<tool::TagMap>, \
CalculatorContextManager*, const MediaPipeOptions&, \
bool>)
#endif // MEDIAPIPE_FRAMEWORK_OUTPUT_STREAM_HANDLER_H_
+5 -5
View File
@@ -20,17 +20,17 @@
namespace mediapipe {
::mediapipe::Status OutputStreamManager::Initialize(
mediapipe::Status OutputStreamManager::Initialize(
const std::string& name, const PacketType* packet_type) {
output_stream_spec_.name = name;
output_stream_spec_.packet_type = packet_type;
output_stream_spec_.offset_enabled = false;
PrepareForRun(nullptr);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputStreamManager::PrepareForRun(
std::function<void(::mediapipe::Status)> error_callback) {
std::function<void(mediapipe::Status)> error_callback) {
output_stream_spec_.error_callback = std::move(error_callback);
output_stream_spec_.locked_intro_data = false;
@@ -66,7 +66,7 @@ bool OutputStreamManager::IsClosed() const {
void OutputStreamManager::PropagateHeader() {
if (output_stream_spec_.locked_intro_data) {
output_stream_spec_.TriggerErrorCallback(
::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
<< "PropagateHeader must be called in CalculatorNode::OpenNode(). "
"Stream: \""
<< output_stream_spec_.name << "\".");
@@ -106,7 +106,7 @@ Timestamp OutputStreamManager::ComputeOutputTimestampBound(
if (input_timestamp != Timestamp::Unstarted() &&
!input_timestamp.IsAllowedInStream()) {
output_stream_spec_.TriggerErrorCallback(
::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
<< "Invalid input timestamp to compute the output timestamp bound. "
"Stream: \""
<< output_stream_spec_.name
+3 -3
View File
@@ -40,13 +40,13 @@ class OutputStreamManager {
OutputStreamManager() = default;
// Initializes the OutputStreamManager.
::mediapipe::Status Initialize(const std::string& name,
const PacketType* packet_type);
mediapipe::Status Initialize(const std::string& name,
const PacketType* packet_type);
// Prepares this for processing. If an error occurs in a user called function
// (such as AddPacket()) then error_callback will be called before returning
// control to the user.
void PrepareForRun(std::function<void(::mediapipe::Status)> error_callback);
void PrepareForRun(std::function<void(mediapipe::Status)> error_callback);
// Gets the stream name.
const std::string& Name() const { return output_stream_spec_.name; }
@@ -85,9 +85,7 @@ class OutputStreamManagerTest : public ::testing::Test {
void ScheduleNoOp(CalculatorContext* cc) {}
void RecordError(const ::mediapipe::Status& error) {
errors_.push_back(error);
}
void RecordError(const mediapipe::Status& error) { errors_.push_back(error); }
void ReportQueueNoOp(InputStreamManager* stream, bool* stream_was_full) {}
@@ -106,7 +104,7 @@ class OutputStreamManagerTest : public ::testing::Test {
std::function<void()> headers_ready_callback_;
std::function<void()> notification_callback_;
std::function<void(CalculatorContext*)> schedule_callback_;
std::function<void(::mediapipe::Status)> error_callback_;
std::function<void(mediapipe::Status)> error_callback_;
InputStreamManager::QueueSizeCallback queue_full_callback_;
InputStreamManager::QueueSizeCallback queue_not_full_callback_;
@@ -116,7 +114,7 @@ class OutputStreamManagerTest : public ::testing::Test {
InputStreamManager input_stream_manager_;
// Vector of errors encountered while using the stream.
std::vector<::mediapipe::Status> errors_;
std::vector<mediapipe::Status> errors_;
};
TEST_F(OutputStreamManagerTest, Init) {}
+8 -8
View File
@@ -34,7 +34,7 @@ const std::string& OutputStreamShard::Name() const {
void OutputStreamShard::SetNextTimestampBound(Timestamp bound) {
if (!bound.IsAllowedInStream() && bound != Timestamp::OneOverPostStream()) {
output_stream_spec_->TriggerErrorCallback(
::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "In stream \"" << Name()
<< "\", timestamp bound set to illegal value: " << bound.DebugString());
return;
@@ -54,7 +54,7 @@ bool OutputStreamShard::IsClosed() const { return closed_; }
void OutputStreamShard::SetOffset(TimestampDiff offset) {
if (output_stream_spec_->locked_intro_data) {
output_stream_spec_->TriggerErrorCallback(
::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
<< "SetOffset must be called from Calculator::Open(). Stream: \""
<< output_stream_spec_->name << "\".");
return;
@@ -66,7 +66,7 @@ void OutputStreamShard::SetOffset(TimestampDiff offset) {
void OutputStreamShard::SetHeader(const Packet& header) {
if (closed_) {
output_stream_spec_->TriggerErrorCallback(
::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
<< "SetHeader must be called before the stream is closed. Stream: \""
<< output_stream_spec_->name << "\".");
return;
@@ -74,7 +74,7 @@ void OutputStreamShard::SetHeader(const Packet& header) {
if (output_stream_spec_->locked_intro_data) {
output_stream_spec_->TriggerErrorCallback(
::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
<< "SetHeader must be called from Calculator::Open(). Stream: \""
<< output_stream_spec_->name << "\".");
return;
@@ -96,18 +96,18 @@ const Packet& OutputStreamShard::Header() const {
template <typename T>
Status OutputStreamShard::AddPacketInternal(T&& packet) {
if (IsClosed()) {
return ::mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::FailedPreconditionErrorBuilder(MEDIAPIPE_LOC)
<< "Packet sent to closed stream \"" << Name() << "\".";
}
if (packet.IsEmpty()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Empty packet sent to stream \"" << Name() << "\".";
}
const Timestamp timestamp = packet.Timestamp();
if (!timestamp.IsAllowedInStream()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "In stream \"" << Name()
<< "\", timestamp not specified or set to illegal value: "
<< timestamp.DebugString();
@@ -128,7 +128,7 @@ Status OutputStreamShard::AddPacketInternal(T&& packet) {
// TODO debug log?
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void OutputStreamShard::AddPacket(const Packet& packet) {
+4 -4
View File
@@ -31,16 +31,16 @@ class OutputStreamManager;
// The output stream spec shared across all output stream shards and their
// output stream manager.
struct OutputStreamSpec {
// Triggers the error callback with ::mediapipe::Status info when an error
// Triggers the error callback with mediapipe::Status info when an error
// occurs.
void TriggerErrorCallback(const ::mediapipe::Status& status) const {
void TriggerErrorCallback(const mediapipe::Status& status) const {
CHECK(error_callback);
error_callback(status);
}
std::string name;
const PacketType* packet_type;
std::function<void(::mediapipe::Status)> error_callback;
std::function<void(mediapipe::Status)> error_callback;
bool locked_intro_data;
// Those three variables are the intro data protected by locked_intro_data.
bool offset_enabled;
@@ -102,7 +102,7 @@ class OutputStreamShard : public OutputStream {
// AddPacketInternal template is called by either AddPacket(Packet&& packet)
// or AddPacket(const Packet& packet).
template <typename T>
::mediapipe::Status AddPacketInternal(T&& packet);
mediapipe::Status AddPacketInternal(T&& packet);
// Returns a pointer to the output queue.
std::list<Packet>* OutputQueue() { return &output_queue_; }
+6 -6
View File
@@ -51,7 +51,7 @@ const HolderBase* GetHolder(const Packet& packet) {
return packet.holder_.get();
}
::mediapipe::StatusOr<Packet> PacketFromDynamicProto(
mediapipe::StatusOr<Packet> PacketFromDynamicProto(
const std::string& type_name, const std::string& serialized) {
ASSIGN_OR_RETURN(
auto message_holder,
@@ -105,16 +105,16 @@ std::string Packet::DebugString() const {
return result;
}
::mediapipe::Status Packet::ValidateAsProtoMessageLite() const {
mediapipe::Status Packet::ValidateAsProtoMessageLite() const {
if (ABSL_PREDICT_FALSE(IsEmpty())) {
return ::mediapipe::InternalError("Packet is empty.");
return mediapipe::InternalError("Packet is empty.");
}
if (ABSL_PREDICT_FALSE(holder_->GetProtoMessageLite() == nullptr)) {
return ::mediapipe::InvalidArgumentError(
return mediapipe::InvalidArgumentError(
absl::StrCat("The Packet stores \"", holder_->DebugTypeName(), "\"",
"which is not convertible to proto_ns::MessageLite."));
} else {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
}
@@ -129,7 +129,7 @@ const proto_ns::MessageLite& Packet::GetProtoMessageLite() const {
StatusOr<std::vector<const proto_ns::MessageLite*>>
Packet::GetVectorOfProtoMessageLitePtrs() {
if (holder_ == nullptr) {
return ::mediapipe::InternalError("Packet is empty.");
return mediapipe::InternalError("Packet is empty.");
}
return holder_->GetVectorOfProtoMessageLite();
}
+30 -30
View File
@@ -53,7 +53,7 @@ Packet Create(HolderBase* holder, Timestamp timestamp);
Packet Create(std::shared_ptr<HolderBase> holder, Timestamp timestamp);
const HolderBase* GetHolder(const Packet& packet);
const std::shared_ptr<HolderBase>& GetHolderShared(const Packet& packet);
::mediapipe::StatusOr<Packet> PacketFromDynamicProto(
mediapipe::StatusOr<Packet> PacketFromDynamicProto(
const std::string& type_name, const std::string& serialized);
} // namespace packet_internal
@@ -111,7 +111,7 @@ class Packet {
// holder. Otherwise, returns error when the packet can't be consumed.
// See ConsumeOrCopy for threading requirements and example usage.
template <typename T>
::mediapipe::StatusOr<std::unique_ptr<T>> Consume();
mediapipe::StatusOr<std::unique_ptr<T>> Consume();
// Consumes the packet and transfers the ownership of the data to a
// unique pointer if the packet is the sole owner of a non-foreign
@@ -131,11 +131,11 @@ class Packet {
// ASSIGN_OR_RETURN(auto detection, p.ConsumeOrCopy<Detection>());
// If you would like to crash on failure (prefer ASSIGN_OR_RETURN):
// auto detection = p.ConsumeOrCopy<Detection>().ValueOrDie();
// // In functions which do not return ::mediapipe::Status use an adaptor
// // In functions which do not return mediapipe::Status use an adaptor
// // function as the third argument to ASSIGN_OR_RETURN. In tests,
// // use an adaptor which returns void.
// ASSIGN_OR_RETURN(auto detection, p.ConsumeOrCopy<Detection>(),
// _.With([](const ::mediapipe::Status& status) {
// _.With([](const mediapipe::Status& status) {
// MP_EXPECT_OK(status);
// // Use CHECK_OK to crash and report a usable line
// // number (which the ValueOrDie alternative does not).
@@ -145,13 +145,13 @@ class Packet {
//
// Version for non-arrays.
template <typename T>
::mediapipe::StatusOr<std::unique_ptr<T>> ConsumeOrCopy(
mediapipe::StatusOr<std::unique_ptr<T>> ConsumeOrCopy(
bool* was_copied = nullptr,
typename std::enable_if<!std::is_array<T>::value>::type* = nullptr);
// Version for bounded array.
template <typename T>
::mediapipe::StatusOr<std::unique_ptr<T>> ConsumeOrCopy(
mediapipe::StatusOr<std::unique_ptr<T>> ConsumeOrCopy(
bool* was_copied = nullptr,
typename std::enable_if<std::is_array<T>::value &&
std::extent<T>::value != 0>::type* = nullptr);
@@ -160,7 +160,7 @@ class Packet {
// delete helper.
// Version for unbounded array.
template <typename T>
::mediapipe::StatusOr<std::unique_ptr<T>> ConsumeOrCopy(
mediapipe::StatusOr<std::unique_ptr<T>> ConsumeOrCopy(
bool* was_copied = nullptr,
typename std::enable_if<std::is_array<T>::value &&
std::extent<T>::value == 0>::type* = nullptr);
@@ -178,11 +178,11 @@ class Packet {
// Returns an error if the packet does not contain data of type T.
template <typename T>
::mediapipe::Status ValidateAsType() const;
mediapipe::Status ValidateAsType() const;
// Returns an error if the packet is not an instance of
// a protocol buffer message.
::mediapipe::Status ValidateAsProtoMessageLite() const;
mediapipe::Status ValidateAsProtoMessageLite() const;
// Get the type id for the underlying type stored in the Packet.
// Crashes if IsEmpty() == true.
@@ -406,7 +406,7 @@ template <typename T>
StatusOr<std::vector<const proto_ns::MessageLite*>>
ConvertToVectorOfProtoMessageLitePtrs(const T* data,
/*is_proto_vector=*/std::false_type) {
return ::mediapipe::InvalidArgumentError(absl::StrCat(
return mediapipe::InvalidArgumentError(absl::StrCat(
"The Packet stores \"", tool::TypeId<T>().name(), "\"",
"which is not convertible to vector<proto_ns::MessageLite*>."));
}
@@ -496,7 +496,7 @@ class Holder : public HolderBase {
// This method is dangerous and is only used by Packet::Consume() if the
// packet is the only owner of the holder.
template <typename U = T>
::mediapipe::StatusOr<std::unique_ptr<T>> Release(
mediapipe::StatusOr<std::unique_ptr<T>> Release(
typename std::enable_if<!std::is_array<U>::value ||
std::extent<U>::value != 0>::type* = 0) {
// Since C++ doesn't allow virtual, templated functions, check holder
@@ -513,10 +513,10 @@ class Holder : public HolderBase {
// TODO: support unbounded array after fixing the bug in holder's
// delete helper.
template <typename U = T>
::mediapipe::StatusOr<std::unique_ptr<T>> Release(
mediapipe::StatusOr<std::unique_ptr<T>> Release(
typename std::enable_if<std::is_array<U>::value &&
std::extent<U>::value == 0>::type* = 0) {
return ::mediapipe::InternalError("Release T[] isn't supported.");
return mediapipe::InternalError("Release T[] isn't supported.");
}
const std::string DebugTypeName() const final {
return MediaPipeTypeStringOrDemangled<T>();
@@ -580,8 +580,8 @@ class ForeignHolder : public Holder<T> {
this->ptr_ = nullptr;
}
// Foreign holder can't release data pointer without ownership.
::mediapipe::StatusOr<std::unique_ptr<T>> Release() {
return ::mediapipe::InternalError(
mediapipe::StatusOr<std::unique_ptr<T>> Release() {
return mediapipe::InternalError(
"Foreign holder can't release data ptr without ownership.");
}
};
@@ -621,14 +621,14 @@ inline Packet& Packet::operator=(const Packet& packet) {
}
template <typename T>
inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::Consume() {
inline mediapipe::StatusOr<std::unique_ptr<T>> Packet::Consume() {
// If type validation fails, returns error.
MP_RETURN_IF_ERROR(ValidateAsType<T>());
// Clients who use this function are responsible for ensuring that no
// other thread is doing anything with this Packet.
if (holder_.unique()) {
VLOG(2) << "Consuming the data of " << DebugString();
::mediapipe::StatusOr<std::unique_ptr<T>> release_result =
mediapipe::StatusOr<std::unique_ptr<T>> release_result =
holder_->As<T>()->Release();
if (release_result.ok()) {
VLOG(2) << "Setting " << DebugString() << " to empty.";
@@ -638,12 +638,12 @@ inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::Consume() {
}
// If packet isn't the sole owner of the holder, returns kFailedPrecondition
// error with message.
return ::mediapipe::Status(::mediapipe::StatusCode::kFailedPrecondition,
"Packet isn't the sole owner of the holder.");
return mediapipe::Status(mediapipe::StatusCode::kFailedPrecondition,
"Packet isn't the sole owner of the holder.");
}
template <typename T>
inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
inline mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
bool* was_copied,
typename std::enable_if<!std::is_array<T>::value>::type*) {
MP_RETURN_IF_ERROR(ValidateAsType<T>());
@@ -651,7 +651,7 @@ inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
if (!holder_->HolderIsOfType<packet_internal::ForeignHolder<T>>() &&
holder_.unique()) {
VLOG(2) << "Consuming the data of " << DebugString();
::mediapipe::StatusOr<std::unique_ptr<T>> release_result =
mediapipe::StatusOr<std::unique_ptr<T>> release_result =
holder_->As<T>()->Release();
if (release_result.ok()) {
VLOG(2) << "Setting " << DebugString() << " to empty.";
@@ -673,7 +673,7 @@ inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
}
template <typename T>
inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
inline mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
bool* was_copied,
typename std::enable_if<std::is_array<T>::value &&
std::extent<T>::value != 0>::type*) {
@@ -682,7 +682,7 @@ inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
if (!holder_->HolderIsOfType<packet_internal::ForeignHolder<T>>() &&
holder_.unique()) {
VLOG(2) << "Consuming the data of " << DebugString();
::mediapipe::StatusOr<std::unique_ptr<T>> release_result =
mediapipe::StatusOr<std::unique_ptr<T>> release_result =
holder_->As<T>()->Release();
if (release_result.ok()) {
VLOG(2) << "Setting " << DebugString() << " to empty.";
@@ -710,11 +710,11 @@ inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
}
template <typename T>
inline ::mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
inline mediapipe::StatusOr<std::unique_ptr<T>> Packet::ConsumeOrCopy(
bool* was_copied,
typename std::enable_if<std::is_array<T>::value &&
std::extent<T>::value == 0>::type*) {
return ::mediapipe::InternalError("Unbounded array isn't supported.");
return mediapipe::InternalError("Unbounded array isn't supported.");
}
inline Packet::Packet(Packet&& packet) {
@@ -746,25 +746,25 @@ inline const T& Packet::Get() const {
packet_internal::Holder<T>* holder = IsEmpty() ? nullptr : holder_->As<T>();
if (holder == nullptr) {
// Produce a good error message.
::mediapipe::Status status = ValidateAsType<T>();
mediapipe::Status status = ValidateAsType<T>();
LOG(FATAL) << "Packet::Get() failed: " << status.message();
}
return holder->data();
}
template <typename T>
::mediapipe::Status Packet::ValidateAsType() const {
mediapipe::Status Packet::ValidateAsType() const {
if (ABSL_PREDICT_FALSE(IsEmpty())) {
return ::mediapipe::InternalError(absl::StrCat(
return mediapipe::InternalError(absl::StrCat(
"Expected a Packet of type: ", MediaPipeTypeStringOrDemangled<T>(),
", but received an empty Packet."));
}
if (ABSL_PREDICT_FALSE(holder_->As<T>() == nullptr)) {
return ::mediapipe::InvalidArgumentError(absl::StrCat(
return mediapipe::InvalidArgumentError(absl::StrCat(
"The Packet stores \"", holder_->DebugTypeName(), "\", but \"",
MediaPipeTypeStringOrDemangled<T>(), "\" was requested."));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
inline Timestamp Packet::Timestamp() const { return timestamp_; }
+16 -16
View File
@@ -49,12 +49,12 @@ class PacketGenerator {
// and
// produce output side packets.
//
// static ::mediapipe::Status FillExpectations(
// static mediapipe::Status FillExpectations(
// const PacketGeneratorOptions& extendable_options,
// PacketTypeSet* input_side_packets,
// PacketTypeSet* output_side_packets);
//
// static ::mediapipe::Status Generate(
// static mediapipe::Status Generate(
// const PacketGeneratorOptions& extendable_options,
// const PacketSet& input_side_packets,
// PacketSet* output_side_packets);
@@ -69,11 +69,11 @@ namespace internal {
class StaticAccessToGenerator {
public:
virtual ~StaticAccessToGenerator() {}
virtual ::mediapipe::Status FillExpectations(
virtual mediapipe::Status FillExpectations(
const PacketGeneratorOptions& extendable_options, //
PacketTypeSet* input_side_packets, //
PacketTypeSet* output_side_packets) = 0;
virtual ::mediapipe::Status Generate(
virtual mediapipe::Status Generate(
const PacketGeneratorOptions& extendable_options, //
const PacketSet& input_side_packets, //
PacketSet* output_side_packets) = 0;
@@ -87,7 +87,7 @@ using StaticAccessToGeneratorRegistry =
template <class T>
constexpr bool PacketGeneratorHasFillExpectations(
decltype(&T::FillExpectations) /*unused*/) {
typedef ::mediapipe::Status (*FillExpectationsType)(
typedef mediapipe::Status (*FillExpectationsType)(
const PacketGeneratorOptions& extendable_options, //
PacketTypeSet* input_side_packets, //
PacketTypeSet* output_side_packets);
@@ -100,7 +100,7 @@ constexpr bool PacketGeneratorHasFillExpectations(...) {
}
template <class T>
constexpr bool PacketGeneratorHasGenerate(decltype(&T::Generate) /*unused*/) {
typedef ::mediapipe::Status (*GenerateType)(
typedef mediapipe::Status (*GenerateType)(
const PacketGeneratorOptions& extendable_options, //
const PacketSet& input_side_packets, //
PacketSet* output_side_packets);
@@ -117,10 +117,10 @@ constexpr bool PacketGeneratorHasGenerate(...) {
template <typename PacketGeneratorSubclass>
class StaticAccessToGeneratorTyped : public StaticAccessToGenerator {
public:
static_assert(std::is_base_of<::mediapipe::PacketGenerator,
static_assert(std::is_base_of<mediapipe::PacketGenerator,
PacketGeneratorSubclass>::value,
"Classes registered with REGISTER_PACKET_GENERATOR must be "
"subclasses of ::mediapipe::PacketGenerator.");
"subclasses of mediapipe::PacketGenerator.");
static_assert(
PacketGeneratorHasFillExpectations<PacketGeneratorSubclass>(nullptr),
"FillExpectations() must be defined with the correct signature in "
@@ -129,7 +129,7 @@ class StaticAccessToGeneratorTyped : public StaticAccessToGenerator {
"Generate() must be defined with the correct signature in "
"every PacketGenerator.");
::mediapipe::Status FillExpectations(
mediapipe::Status FillExpectations(
const PacketGeneratorOptions& extendable_options, //
PacketTypeSet* input_side_packets, //
PacketTypeSet* output_side_packets) final {
@@ -137,7 +137,7 @@ class StaticAccessToGeneratorTyped : public StaticAccessToGenerator {
extendable_options, input_side_packets, output_side_packets);
}
::mediapipe::Status Generate(
mediapipe::Status Generate(
const PacketGeneratorOptions& extendable_options, //
const PacketSet& input_side_packets, //
PacketSet* output_side_packets) final {
@@ -150,12 +150,12 @@ class StaticAccessToGeneratorTyped : public StaticAccessToGenerator {
// Macro for registering PacketGenerators. It actually just registers
// the StaticAccessToGeneratorTyped class.
#define REGISTER_PACKET_GENERATOR(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
::mediapipe::internal::StaticAccessToGeneratorRegistry, \
generator_registration, name, \
absl::make_unique< \
::mediapipe::internal::StaticAccessToGeneratorTyped<name>>)
#define REGISTER_PACKET_GENERATOR(name) \
REGISTER_FACTORY_FUNCTION_QUALIFIED( \
mediapipe::internal::StaticAccessToGeneratorRegistry, \
generator_registration, name, \
absl::make_unique< \
mediapipe::internal::StaticAccessToGeneratorTyped<name>>)
} // namespace mediapipe
+25 -27
View File
@@ -44,7 +44,7 @@ namespace {
// generator cannot be run given the currently available side packets
// (and false otherwise). If an error occurs then unrunnable and
// input_side_packet_set are undefined.
::mediapipe::Status CreateInputsForGenerator(
mediapipe::Status CreateInputsForGenerator(
const ValidatedGraphConfig& validated_graph, int generator_index,
const std::map<std::string, Packet>& side_packets,
PacketSet* input_side_packet_set, bool* unrunnable) {
@@ -55,7 +55,7 @@ namespace {
.packet_generator();
// Fill the PacketSet (if possible).
*unrunnable = false;
std::vector<::mediapipe::Status> statuses;
std::vector<mediapipe::Status> statuses;
for (CollectionItemId id = node_type_info.InputSidePacketTypes().BeginId();
id < node_type_info.InputSidePacketTypes().EndId(); ++id) {
const std::string& name =
@@ -67,7 +67,7 @@ namespace {
continue;
}
input_side_packet_set->Get(id) = it->second;
::mediapipe::Status status =
mediapipe::Status status =
node_type_info.InputSidePacketTypes().Get(id).Validate(
input_side_packet_set->Get(id));
if (!status.ok()) {
@@ -82,15 +82,15 @@ namespace {
return tool::CombinedStatus(
absl::StrCat(generator_name, " had invalid configuration."), statuses);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
// Generate the packets from a PacketGenerator, place them in
// output_side_packet_set, and validate their types.
::mediapipe::Status Generate(const ValidatedGraphConfig& validated_graph,
int generator_index,
const PacketSet& input_side_packet_set,
PacketSet* output_side_packet_set) {
mediapipe::Status Generate(const ValidatedGraphConfig& validated_graph,
int generator_index,
const PacketSet& input_side_packet_set,
PacketSet* output_side_packet_set) {
const NodeTypeInfo& node_type_info =
validated_graph.GeneratorInfos()[generator_index];
const PacketGeneratorConfig& generator_config =
@@ -113,7 +113,7 @@ namespace {
.SetPrepend()
<< generator_name
<< "::Generate() output packets were of incorrect type: ";
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
// GeneratorScheduler schedules the packet generators in a validated graph for
@@ -126,7 +126,7 @@ class GeneratorScheduler {
// PacketGenerators (those not run at initialize time due to missing
// dependencies).
GeneratorScheduler(const ValidatedGraphConfig* validated_graph,
::mediapipe::Executor* executor,
mediapipe::Executor* executor,
const std::vector<int>& non_base_generators, bool initial);
// Run a PacketGenerator on a given executor on the provided input
@@ -149,7 +149,7 @@ class GeneratorScheduler {
// rather, not executed) in non_scheduled_generators. Returns the combined
// error status if there were errors while running the packet generators.
// NOTE: This method should only be called when there are no pending tasks.
::mediapipe::Status GetNonScheduledGenerators(
mediapipe::Status GetNonScheduledGenerators(
std::vector<int>* non_scheduled_generators) const;
private:
@@ -161,7 +161,7 @@ class GeneratorScheduler {
void RunApplicationThreadTasks() ABSL_LOCKS_EXCLUDED(app_thread_mutex_);
const ValidatedGraphConfig* const validated_graph_;
::mediapipe::Executor* executor_;
mediapipe::Executor* executor_;
mutable absl::Mutex mutex_;
// The number of pending tasks.
@@ -169,7 +169,7 @@ class GeneratorScheduler {
// This condition variable is signaled when num_tasks_ becomes 0.
absl::CondVar idle_condvar_;
// Accumulates the error statuses while running the packet generators.
std::vector<::mediapipe::Status> statuses_ ABSL_GUARDED_BY(mutex_);
std::vector<mediapipe::Status> statuses_ ABSL_GUARDED_BY(mutex_);
// scheduled_generators_[i] is true if the packet generator with index i was
// scheduled (or rather, executed).
std::vector<bool> scheduled_generators_ ABSL_GUARDED_BY(mutex_);
@@ -182,8 +182,7 @@ class GeneratorScheduler {
};
GeneratorScheduler::GeneratorScheduler(
const ValidatedGraphConfig* validated_graph,
::mediapipe::Executor* executor,
const ValidatedGraphConfig* validated_graph, mediapipe::Executor* executor,
const std::vector<int>& non_base_generators, bool initial)
: validated_graph_(validated_graph),
executor_(executor),
@@ -220,7 +219,7 @@ void GeneratorScheduler::GenerateAndScheduleNext(
.OutputSidePacketTypes()
.TagMap());
VLOG(1) << "Running generator " << generator_index;
::mediapipe::Status status =
mediapipe::Status status =
Generate(*validated_graph_, generator_index, *input_side_packet_set,
&output_side_packet_set);
@@ -236,7 +235,7 @@ void GeneratorScheduler::GenerateAndScheduleNext(
const auto& name = output_side_packet_set.TagMap()->Names()[id.value()];
auto item = side_packets->emplace(name, output_side_packet_set.Get(id));
if (!item.second) {
statuses_.push_back(::mediapipe::AlreadyExistsError(
statuses_.push_back(mediapipe::AlreadyExistsError(
absl::StrCat("Side packet \"", name, "\" was defined twice.")));
}
}
@@ -267,7 +266,7 @@ void GeneratorScheduler::ScheduleAllRunnableGenerators(
.InputSidePacketTypes()
.TagMap());
::mediapipe::Status status =
mediapipe::Status status =
CreateInputsForGenerator(*validated_graph_, index, *side_packets,
input_side_packet_set.get(), &is_unrunnable);
if (!status.ok()) {
@@ -314,7 +313,7 @@ void GeneratorScheduler::WaitUntilIdle() {
}
}
::mediapipe::Status GeneratorScheduler::GetNonScheduledGenerators(
mediapipe::Status GeneratorScheduler::GetNonScheduledGenerators(
std::vector<int>* non_scheduled_generators) const {
non_scheduled_generators->clear();
@@ -327,7 +326,7 @@ void GeneratorScheduler::WaitUntilIdle() {
non_scheduled_generators->push_back(i);
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void GeneratorScheduler::AddApplicationThreadTask(std::function<void()> task) {
@@ -357,9 +356,8 @@ void GeneratorScheduler::RunApplicationThreadTasks() {
PacketGeneratorGraph::~PacketGeneratorGraph() {}
::mediapipe::Status PacketGeneratorGraph::Initialize(
const ValidatedGraphConfig* validated_graph,
::mediapipe::Executor* executor,
mediapipe::Status PacketGeneratorGraph::Initialize(
const ValidatedGraphConfig* validated_graph, mediapipe::Executor* executor,
const std::map<std::string, Packet>& input_side_packets) {
validated_graph_ = validated_graph;
executor_ = executor;
@@ -370,14 +368,14 @@ PacketGeneratorGraph::~PacketGeneratorGraph() {}
/*initial=*/true);
}
::mediapipe::Status PacketGeneratorGraph::RunGraphSetup(
mediapipe::Status PacketGeneratorGraph::RunGraphSetup(
const std::map<std::string, Packet>& input_side_packets,
std::map<std::string, Packet>* output_side_packets) const {
*output_side_packets = base_packets_;
for (const std::pair<const std::string, Packet>& item : input_side_packets) {
auto iter = output_side_packets->find(item.first);
if (iter != output_side_packets->end()) {
return ::mediapipe::AlreadyExistsError(
return mediapipe::AlreadyExistsError(
absl::StrCat("Side packet \"", iter->first, "\" was defined twice."));
}
output_side_packets->insert(iter, item);
@@ -396,10 +394,10 @@ PacketGeneratorGraph::~PacketGeneratorGraph() {}
<< "Some Generators were unrunnable (validation should have failed).\n"
"Generator indexes: "
<< absl::StrJoin(non_scheduled_generators, ", ");
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status PacketGeneratorGraph::ExecuteGenerators(
mediapipe::Status PacketGeneratorGraph::ExecuteGenerators(
std::map<std::string, Packet>* output_side_packets,
std::vector<int>* non_scheduled_generators, bool initial) const {
VLOG(1) << "ExecuteGenerators initial == " << initial;
+6 -6
View File
@@ -67,14 +67,14 @@ class PacketGeneratorGraph {
// stage and will be common to all calls to CalculatorGraph::Run().
// Any generators which are runnable at this stage (that only depend on
// things in the graph or input_side_packets) will be run at this time.
virtual ::mediapipe::Status Initialize(
virtual mediapipe::Status Initialize(
const ValidatedGraphConfig* validated_graph,
::mediapipe::Executor* executor,
mediapipe::Executor* executor,
const std::map<std::string, Packet>& input_side_packets);
// Add the input_side_packets and run any remaining generators (which
// must now be runnable) to produce output_side_packets.
virtual ::mediapipe::Status RunGraphSetup(
virtual mediapipe::Status RunGraphSetup(
const std::map<std::string, Packet>& input_side_packets,
std::map<std::string, Packet>* output_side_packets) const;
@@ -96,7 +96,7 @@ class PacketGeneratorGraph {
// packets and unrunnable generators. "initial" must be set to true for
// the first pass and false for subsequent passes. output_side_packets
// must be set to include the input side packets before calling.
::mediapipe::Status ExecuteGenerators(
mediapipe::Status ExecuteGenerators(
std::map<std::string, Packet>* output_side_packets,
std::vector<int>* non_scheduled_generators, bool initial) const;
@@ -109,9 +109,9 @@ class PacketGeneratorGraph {
// The executor to use for running the generators. We do not own the
// executor but it must outlive this object.
::mediapipe::Executor* executor_ = nullptr;
mediapipe::Executor* executor_ = nullptr;
// An object to own the executor if it needs to be deleted.
std::unique_ptr<::mediapipe::Executor> executor_owner_;
std::unique_ptr<mediapipe::Executor> executor_owner_;
// The base level packets available after initialization.
std::map<std::string, Packet> base_packets_;
+4 -4
View File
@@ -27,7 +27,7 @@ namespace mediapipe {
namespace {
class DoNothingGenerator : public PacketGenerator {
public:
static ::mediapipe::Status FillExpectations(
static mediapipe::Status FillExpectations(
const PacketGeneratorOptions& extendable_options,
PacketTypeSet* input_side_packets, PacketTypeSet* output_side_packets) {
for (CollectionItemId id = input_side_packets->BeginId();
@@ -38,17 +38,17 @@ class DoNothingGenerator : public PacketGenerator {
id < output_side_packets->EndId(); ++id) {
output_side_packets->Get(id).Set<bool>();
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
static ::mediapipe::Status Generate(
static mediapipe::Status Generate(
const PacketGeneratorOptions& extendable_options,
const PacketSet& input_side_packets, PacketSet* output_side_packets) {
for (CollectionItemId id = output_side_packets->BeginId();
id < output_side_packets->EndId(); ++id) {
output_side_packets->Get(id) = MakePacket<bool>(true);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
@@ -28,20 +28,20 @@ namespace test_ns {
class TestSinkCalculator : public CalculatorBase {
public:
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
static mediapipe::Status GetContract(CalculatorContract* cc) {
cc->Inputs().Tag("IN").Set<mediapipe::InputOnlyProto>();
cc->Outputs().Tag("OUT").Set<int>();
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status Process(CalculatorContext* cc) override {
mediapipe::Status Process(CalculatorContext* cc) override {
int x = cc->Inputs().Tag("IN").Get<mediapipe::InputOnlyProto>().x();
cc->Outputs().Tag("OUT").AddPacket(
MakePacket<int>(x).At(cc->InputTimestamp()));
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
};
REGISTER_CALCULATOR(::mediapipe::test_ns::TestSinkCalculator);
REGISTER_CALCULATOR(TestSinkCalculator);
} // namespace test_ns
+21 -21
View File
@@ -145,7 +145,7 @@ struct UnregisteredPairStruct {
std::string first;
bool second;
};
MEDIAPIPE_REGISTER_TYPE(::mediapipe::RegisteredPairStruct,
MEDIAPIPE_REGISTER_TYPE(mediapipe::RegisteredPairStruct,
"::mediapipe::RegisteredPairStruct", nullptr, nullptr);
MEDIAPIPE_REGISTER_TYPE(int, "int", nullptr, nullptr);
MEDIAPIPE_REGISTER_TYPE(float, "float", nullptr, nullptr);
@@ -210,8 +210,8 @@ TEST(PacketTest, ValidateAsProtoMessageLite) {
Packet packet = Adopt(proto_ptr.release());
MP_EXPECT_OK(packet.ValidateAsProtoMessageLite());
Packet packet2 = MakePacket<int>(3);
::mediapipe::Status status = packet2.ValidateAsProtoMessageLite();
EXPECT_EQ(status.code(), ::mediapipe::StatusCode::kInvalidArgument);
mediapipe::Status status = packet2.ValidateAsProtoMessageLite();
EXPECT_EQ(status.code(), mediapipe::StatusCode::kInvalidArgument);
}
TEST(PacketTest, SyncedPacket) {
@@ -283,11 +283,11 @@ TEST(PacketTest, TestPacketMoveConstructor) {
TEST(PacketTest, TestPacketConsume) {
Packet packet1 = MakePacket<int>(33);
Packet packet_copy = packet1;
::mediapipe::StatusOr<std::unique_ptr<int>> result1 =
mediapipe::StatusOr<std::unique_ptr<int>> result1 =
packet_copy.Consume<int>();
// Both packet1 and packet_copy own the data, Consume() should return error.
::mediapipe::Status status1 = result1.status();
EXPECT_EQ(status1.code(), ::mediapipe::StatusCode::kFailedPrecondition);
mediapipe::Status status1 = result1.status();
EXPECT_EQ(status1.code(), mediapipe::StatusCode::kFailedPrecondition);
EXPECT_THAT(status1.message(),
testing::HasSubstr("isn't the sole owner of the holder"));
ASSERT_FALSE(packet1.IsEmpty());
@@ -297,7 +297,7 @@ TEST(PacketTest, TestPacketConsume) {
Packet packet2 = MakePacket<int>(33);
// Types don't match (int vs float).
::mediapipe::StatusOr<std::unique_ptr<float>> result2 =
mediapipe::StatusOr<std::unique_ptr<float>> result2 =
packet2.Consume<float>();
EXPECT_THAT(
result2.status().message(),
@@ -307,7 +307,7 @@ TEST(PacketTest, TestPacketConsume) {
// packet3 is the sole owner of the data.
Packet packet3 = MakePacket<int>(42);
::mediapipe::StatusOr<std::unique_ptr<int>> result3 = packet3.Consume<int>();
mediapipe::StatusOr<std::unique_ptr<int>> result3 = packet3.Consume<int>();
// After Consume(), packet3 should be empty and result3 owns the data.
EXPECT_TRUE(result3.ok());
ASSERT_NE(nullptr, result3.ValueOrDie());
@@ -319,7 +319,7 @@ TEST(PacketTest, TestPacketConsumeOrCopy) {
Packet packet1 = MakePacket<int>(33);
Packet packet_copy = packet1;
bool was_copied1 = false;
::mediapipe::StatusOr<std::unique_ptr<int>> result1 =
mediapipe::StatusOr<std::unique_ptr<int>> result1 =
packet_copy.ConsumeOrCopy<int>(&was_copied1);
// Both packet1 and packet_copy own the data, ConsumeOrCopy() returns a copy
// of the data and sets packet_copy to empty.
@@ -334,7 +334,7 @@ TEST(PacketTest, TestPacketConsumeOrCopy) {
Packet packet2 = MakePacket<int>(33);
// Types don't match (int vs float).
::mediapipe::StatusOr<std::unique_ptr<float>> result2 =
mediapipe::StatusOr<std::unique_ptr<float>> result2 =
packet2.ConsumeOrCopy<float>();
EXPECT_THAT(
result2.status().message(),
@@ -346,7 +346,7 @@ TEST(PacketTest, TestPacketConsumeOrCopy) {
bool was_copied3 = false;
// packet3 is the sole owner of the data. ConsumeOrCopy() transfers the
// ownership to result3 and makes packet3 empty.
::mediapipe::StatusOr<std::unique_ptr<int>> result3 =
mediapipe::StatusOr<std::unique_ptr<int>> result3 =
packet3.ConsumeOrCopy<int>(&was_copied3);
EXPECT_FALSE(was_copied3);
EXPECT_TRUE(result3.ok());
@@ -358,9 +358,9 @@ TEST(PacketTest, TestPacketConsumeOrCopy) {
TEST(PacketTest, TestConsumeForeignHolder) {
std::unique_ptr<int> data(new int(33));
Packet packet = PointToForeign(data.get());
::mediapipe::StatusOr<std::unique_ptr<int>> result = packet.Consume<int>();
mediapipe::StatusOr<std::unique_ptr<int>> result = packet.Consume<int>();
EXPECT_FALSE(result.ok());
EXPECT_EQ(result.status().code(), ::mediapipe::StatusCode::kInternal);
EXPECT_EQ(result.status().code(), mediapipe::StatusCode::kInternal);
EXPECT_EQ(result.status().message(),
"Foreign holder can't release data ptr without ownership.");
ASSERT_FALSE(packet.IsEmpty());
@@ -372,7 +372,7 @@ TEST(PacketTest, TestForeignHolderConsumeOrCopy) {
Packet packet1 = PointToForeign(data1.get());
Packet packet_copy = packet1;
bool was_copied1 = false;
::mediapipe::StatusOr<std::unique_ptr<int>> result1 =
mediapipe::StatusOr<std::unique_ptr<int>> result1 =
packet_copy.ConsumeOrCopy<int>(&was_copied1);
// After ConsumeOrCopy(), result1 gets the copy of packet_copy's data and
// packet_copy is set to empty.
@@ -388,7 +388,7 @@ TEST(PacketTest, TestForeignHolderConsumeOrCopy) {
std::unique_ptr<int> data2(new int(33));
Packet packet2 = PointToForeign(data2.get());
bool was_copied2 = false;
::mediapipe::StatusOr<std::unique_ptr<int>> result2 =
mediapipe::StatusOr<std::unique_ptr<int>> result2 =
packet2.ConsumeOrCopy<int>(&was_copied2);
// After ConsumeOrCopy(), result2 gets the copy of packet2's data and packet2
// is set to empty.
@@ -402,11 +402,11 @@ TEST(PacketTest, TestForeignHolderConsumeOrCopy) {
TEST(PacketTest, TestConsumeBoundedArray) {
Packet packet1 = MakePacket<int[3]>(10, 20, 30);
Packet packet_copy = packet1;
::mediapipe::StatusOr<std::unique_ptr<int[3]>> result1 =
mediapipe::StatusOr<std::unique_ptr<int[3]>> result1 =
packet_copy.Consume<int[3]>();
// Both packet1 and packet_copy own the data, Consume() should return error.
::mediapipe::Status status1 = result1.status();
EXPECT_EQ(status1.code(), ::mediapipe::StatusCode::kFailedPrecondition);
mediapipe::Status status1 = result1.status();
EXPECT_EQ(status1.code(), mediapipe::StatusCode::kFailedPrecondition);
EXPECT_THAT(status1.message(),
testing::HasSubstr("isn't the sole owner of the holder"));
ASSERT_FALSE(packet1.IsEmpty());
@@ -422,7 +422,7 @@ TEST(PacketTest, TestConsumeBoundedArray) {
Packet packet2 = MakePacket<int[3]>(40, 50, 60);
// After Consume(), packet2 should be empty and result2 owns the data.
::mediapipe::StatusOr<std::unique_ptr<int[3]>> result2 =
mediapipe::StatusOr<std::unique_ptr<int[3]>> result2 =
packet2.Consume<int[3]>();
ASSERT_NE(nullptr, result2.ValueOrDie());
auto value3 = result2.ValueOrDie().get();
@@ -436,7 +436,7 @@ TEST(PacketTest, TestConsumeOrCopyBoundedArray) {
Packet packet1 = MakePacket<int[3]>(10, 20, 30);
Packet packet_copy = packet1;
bool was_copied1 = false;
::mediapipe::StatusOr<std::unique_ptr<int[3]>> result1 =
mediapipe::StatusOr<std::unique_ptr<int[3]>> result1 =
packet_copy.ConsumeOrCopy<int[3]>(&was_copied1);
// Both packet1 and packet_copy own the data, ConsumeOrCopy() returns a copy
// of the data and sets packet_copy to empty.
@@ -459,7 +459,7 @@ TEST(PacketTest, TestConsumeOrCopyBoundedArray) {
bool was_copied2 = false;
// packet2 is the sole owner of the data. ConsumeOrCopy() transfers the
// ownership to result2 and makes packet2 empty.
::mediapipe::StatusOr<std::unique_ptr<int[3]>> result2 =
mediapipe::StatusOr<std::unique_ptr<int[3]>> result2 =
packet2.ConsumeOrCopy<int[3]>(&was_copied2);
EXPECT_TRUE(result2.ok());
EXPECT_FALSE(was_copied2);
+15 -16
View File
@@ -125,9 +125,9 @@ const std::string PacketType::DebugTypeName() const {
return type_name_;
}
::mediapipe::Status PacketType::Validate(const Packet& packet) const {
mediapipe::Status PacketType::Validate(const Packet& packet) const {
if (!initialized_) {
return ::mediapipe::InvalidArgumentError(
return mediapipe::InvalidArgumentError(
"Uninitialized PacketType was used for validation.");
}
if (same_as_) {
@@ -136,7 +136,7 @@ const std::string PacketType::DebugTypeName() const {
return GetSameAs()->Validate(packet);
}
if (no_packets_allowed_) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "No packets are allowed for type: " << type_name_;
}
if (validate_method_ != nullptr) {
@@ -144,10 +144,10 @@ const std::string PacketType::DebugTypeName() const {
}
// The PacketType is the Any Type.
if (packet.IsEmpty()) {
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
<< "Empty packets are not allowed for type: " << type_name_;
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
bool PacketType::IsConsistentWith(const PacketType& other) const {
@@ -176,8 +176,7 @@ bool PacketType::IsConsistentWith(const PacketType& other) const {
return type1->validate_method_ == type2->validate_method_;
}
::mediapipe::Status ValidatePacketTypeSet(
const PacketTypeSet& packet_type_set) {
mediapipe::Status ValidatePacketTypeSet(const PacketTypeSet& packet_type_set) {
std::vector<std::string> errors;
if (packet_type_set.GetErrorHandler().HasError()) {
errors = packet_type_set.GetErrorHandler().ErrorMessages();
@@ -191,30 +190,30 @@ bool PacketType::IsConsistentWith(const PacketType& other) const {
}
}
if (!errors.empty()) {
return ::mediapipe::InvalidArgumentError(absl::StrCat(
return mediapipe::InvalidArgumentError(absl::StrCat(
"ValidatePacketTypeSet failed:\n", absl::StrJoin(errors, "\n")));
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
::mediapipe::Status ValidatePacketSet(const PacketTypeSet& packet_type_set,
const PacketSet& packet_set) {
std::vector<::mediapipe::Status> errors;
mediapipe::Status ValidatePacketSet(const PacketTypeSet& packet_type_set,
const PacketSet& packet_set) {
std::vector<mediapipe::Status> errors;
if (!packet_type_set.TagMap()->SameAs(*packet_set.TagMap())) {
return ::mediapipe::InvalidArgumentError(absl::StrCat(
return mediapipe::InvalidArgumentError(absl::StrCat(
"TagMaps do not match. PacketTypeSet TagMap:\n",
packet_type_set.TagMap()->DebugString(), "\n\nPacketSet TagMap:\n",
packet_set.TagMap()->DebugString()));
}
for (CollectionItemId id = packet_type_set.BeginId();
id < packet_type_set.EndId(); ++id) {
::mediapipe::Status status =
mediapipe::Status status =
packet_type_set.Get(id).Validate(packet_set.Get(id));
if (!status.ok()) {
std::pair<std::string, int> tag_index =
packet_type_set.TagAndIndexFromId(id);
errors.push_back(
::mediapipe::StatusBuilder(status, MEDIAPIPE_LOC).SetPrepend()
mediapipe::StatusBuilder(status, MEDIAPIPE_LOC).SetPrepend()
<< "Packet \"" << packet_type_set.TagMap()->Names()[id.value()]
<< "\" with tag \"" << tag_index.first << "\" and index "
<< tag_index.second << " failed validation. ");
@@ -223,7 +222,7 @@ bool PacketType::IsConsistentWith(const PacketType& other) const {
if (!errors.empty()) {
return tool::CombinedStatus("ValidatePacketSet failed:", errors);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
} // namespace mediapipe
+5 -5
View File
@@ -85,7 +85,7 @@ class PacketType {
bool IsConsistentWith(const PacketType& other) const;
// Returns OK if the packet contains an object of the appropriate type.
::mediapipe::Status Validate(const Packet& packet) const;
mediapipe::Status Validate(const Packet& packet) const;
// Returns a pointer to the Registered type name, or nullptr if the type
// is not registered. Do not use this for validation, use Validate()
@@ -98,7 +98,7 @@ class PacketType {
private:
// Typedef for the ValidateAsType() method in Packet that is used for
// type validation and identification.
typedef ::mediapipe::Status (Packet::*ValidateMethodType)() const;
typedef mediapipe::Status (Packet::*ValidateMethodType)() const;
// Records whether the packet type was set in any way.
bool initialized_;
@@ -213,15 +213,15 @@ using PacketTypeSet =
// Returns OK if the packets in the PacketSet are of the appropriate type.
// packet_type_set must be valid before this is called (but packet_set
// may be in any state).
::mediapipe::Status ValidatePacketSet(const PacketTypeSet& packet_type_set,
const PacketSet& packet_set);
mediapipe::Status ValidatePacketSet(const PacketTypeSet& packet_type_set,
const PacketSet& packet_set);
// Validates that the PacketTypeSet was initialized properly.
// An error is returned if
// 1) Tag() or Index() is called with an invalid argument (however,
// a valid PacketType is still returned by the function).
// 2) Any PacketType is not initialized.
::mediapipe::Status ValidatePacketTypeSet(const PacketTypeSet& packet_type_set);
mediapipe::Status ValidatePacketTypeSet(const PacketTypeSet& packet_type_set);
// Templated function definitions.
@@ -81,16 +81,16 @@ class PlatformSpecificProfilingScope {
} // namespace mediapipe
// General profiling macro.
#define PLATFORM_SPECIFIC_PROFILER(name, id, packet_timestamp) \
::mediapipe::PlatformSpecificProfilingScope platform_specific_scope( \
#define PLATFORM_SPECIFIC_PROFILER(name, id, packet_timestamp) \
mediapipe::PlatformSpecificProfilingScope platform_specific_scope( \
name, id, packet_timestamp);
// Automated profiling macro.
// Filters out all methods except Calculator::Process().
#define PLATFORM_SPECIFIC_PROCESS_PROFILER(name, id, method_name, \
packet_timestamp) \
::mediapipe::PlatformSpecificProfilingScope platform_specific_scope( \
name, id, packet_timestamp, ::mediapipe::TraceEvent::method_name);
#define PLATFORM_SPECIFIC_PROCESS_PROFILER(name, id, method_name, \
packet_timestamp) \
mediapipe::PlatformSpecificProfilingScope platform_specific_scope( \
name, id, packet_timestamp, mediapipe::TraceEvent::method_name);
#else
#define PLATFORM_SPECIFIC_PROFILER(name, id, packet_timestamp)
@@ -53,7 +53,7 @@ TEST_F(CircularBufferTest, ParallelWriteAndRead) {
std::atomic_int read_sum(0);
std::atomic_int read_count(0);
{
::mediapipe::ThreadPool pool(12);
mediapipe::ThreadPool pool(12);
pool.StartWorkers();
// Start 6 writers.
+11 -11
View File
@@ -199,7 +199,7 @@ void GraphProfiler::Reset() {
}
// Begins profiling for a single graph run.
::mediapipe::Status GraphProfiler::Start(::mediapipe::Executor* executor) {
mediapipe::Status GraphProfiler::Start(mediapipe::Executor* executor) {
// If specified, start periodic profile output while the graph runs.
Resume();
if (is_tracing_ && IsTraceIntervalEnabled(profiler_config_, tracer()) &&
@@ -220,18 +220,18 @@ void GraphProfiler::Reset() {
}
});
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
// Ends profiling for a single graph run.
::mediapipe::Status GraphProfiler::Stop() {
mediapipe::Status GraphProfiler::Stop() {
is_running_ = false;
Pause();
// If specified, write a final profile.
if (IsTraceLogEnabled(profiler_config_)) {
MP_RETURN_IF_ERROR(WriteProfile());
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void GraphProfiler::LogEvent(const TraceEvent& event) {
@@ -281,7 +281,7 @@ void GraphProfiler::AddPacketInfo(const TraceEvent& packet_info) {
production_time_usec, production_time_usec);
}
::mediapipe::Status GraphProfiler::GetCalculatorProfiles(
mediapipe::Status GraphProfiler::GetCalculatorProfiles(
std::vector<CalculatorProfile>* profiles) const {
absl::ReaderMutexLock lock(&profiler_mutex_);
RET_CHECK(is_initialized_)
@@ -289,7 +289,7 @@ void GraphProfiler::AddPacketInfo(const TraceEvent& packet_info) {
for (auto& entry : calculator_profiles_) {
profiles->push_back(entry.second);
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void GraphProfiler::InitializeTimeHistogram(int64 interval_size_usec,
@@ -566,9 +566,9 @@ void AssignNodeNames(GraphProfile* profile) {
}
}
::mediapipe::StatusOr<std::string> GraphProfiler::GetTraceLogPath() {
mediapipe::StatusOr<std::string> GraphProfiler::GetTraceLogPath() {
if (!IsTraceLogEnabled(profiler_config_)) {
return ::mediapipe::InternalError(
return mediapipe::InternalError(
"Trace log writing is disabled, unable to get trace_log_path.");
}
if (profiler_config_.trace_log_path().empty()) {
@@ -581,10 +581,10 @@ void AssignNodeNames(GraphProfile* profile) {
}
}
::mediapipe::Status GraphProfiler::WriteProfile() {
mediapipe::Status GraphProfiler::WriteProfile() {
if (profiler_config_.trace_log_disabled()) {
// Logging is disabled, so we can exit writing without error.
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
ASSIGN_OR_RETURN(std::string trace_log_path, GetTraceLogPath());
int log_interval_count = GetLogIntervalCount(profiler_config_);
@@ -606,7 +606,7 @@ void AssignNodeNames(GraphProfile* profile) {
previous_log_end_time_ = end_time;
// If there are no trace events, skip log writing.
if (is_tracing_ && trace->calculator_trace().empty()) {
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
// Record the latest CalculatorProfiles.
@@ -140,9 +140,9 @@ class GraphProfiler : public std::enable_shared_from_this<ProfilingContext> {
// Process() and does NOT affect information for Open() and Close() methods.
void Reset() ABSL_LOCKS_EXCLUDED(profiler_mutex_);
// Begins profiling for a single graph run.
::mediapipe::Status Start(::mediapipe::Executor* executor);
mediapipe::Status Start(mediapipe::Executor* executor);
// Ends profiling for a single graph run.
::mediapipe::Status Stop();
mediapipe::Status Stop();
// Record a tracing event.
void LogEvent(const TraceEvent& event);
@@ -150,12 +150,12 @@ class GraphProfiler : public std::enable_shared_from_this<ProfilingContext> {
// Collects the runtime profile for Open(), Process(), and Close() of each
// calculator in the graph. May be called at any time after the graph has been
// initialized.
::mediapipe::Status GetCalculatorProfiles(std::vector<CalculatorProfile>*)
const ABSL_LOCKS_EXCLUDED(profiler_mutex_);
mediapipe::Status GetCalculatorProfiles(std::vector<CalculatorProfile>*) const
ABSL_LOCKS_EXCLUDED(profiler_mutex_);
// Writes recent profiling and tracing data to a file specified in the
// ProfilerConfig. Includes events since the previous call to WriteProfile.
::mediapipe::Status WriteProfile();
mediapipe::Status WriteProfile();
// Returns the trace event buffer.
GraphTracer* tracer() { return packet_tracer_.get(); }
@@ -294,7 +294,7 @@ class GraphProfiler : public std::enable_shared_from_this<ProfilingContext> {
// Helper method to get trace_log_path. If the trace_log_path is empty and
// tracing is enabled, this function returns a default platform dependent
// trace_log_path.
::mediapipe::StatusOr<std::string> GetTraceLogPath();
mediapipe::StatusOr<std::string> GetTraceLogPath();
// Helper method to get the clock time in microsecond.
int64 TimeNowUsec() { return ToUnixMicros(clock_->TimeNow()); }
@@ -81,17 +81,17 @@ class GraphProfilerStub {
inline void Initialize(const ValidatedGraphConfig& validated_graph_config) {}
inline void SetClock(const std::shared_ptr<mediapipe::Clock>& clock) {}
inline void LogEvent(const TraceEvent& event) {}
inline ::mediapipe::Status GetCalculatorProfiles(
inline mediapipe::Status GetCalculatorProfiles(
std::vector<CalculatorProfile>*) const {
return mediapipe::OkStatus();
}
inline void Pause() {}
inline void Resume() {}
inline void Reset() {}
inline ::mediapipe::Status Start(::mediapipe::Executor* executor) {
inline mediapipe::Status Start(mediapipe::Executor* executor) {
return mediapipe::OkStatus();
}
inline ::mediapipe::Status Stop() { return mediapipe::OkStatus(); }
inline mediapipe::Status Stop() { return mediapipe::OkStatus(); }
inline GraphTracer* tracer() { return nullptr; }
inline std::unique_ptr<GlProfilingHelper> CreateGlProfilingHelper() {
return nullptr;
@@ -1176,7 +1176,7 @@ TEST(GraphProfilerTest, ParallelReads) {
MP_ASSERT_OK(graph.ObserveOutputStream("out_1", [&](const Packet& packet) {
absl::MutexLock lock(&out_1_mutex);
out_1_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
MP_EXPECT_OK(graph.StartRun(
{{"range_step", MakePacket<std::pair<uint32, uint32>>(1000, 1)}}));
@@ -121,7 +121,7 @@ TEST_F(GraphTracerTest, EmptyTrace) {
// Validate the GraphTrace data.
EXPECT_THAT(GetTrace(),
EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
base_time: 0
base_timestamp: 0
stream_name: ""
@@ -144,7 +144,7 @@ TEST_F(GraphTracerTest, CalculatorTrace) {
// Validate the GraphTrace data.
EXPECT_THAT(
GetTrace(), EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
GetTrace(), EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
base_time: 1608911100000000
base_timestamp: 1608911100000000
stream_name: ""
@@ -225,7 +225,7 @@ TEST_F(GraphTracerTest, GraphTrace) {
// Validate the GraphTrace data.
EXPECT_THAT(
GetTrace(), EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
GetTrace(), EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
base_time: 1608911100000000
base_timestamp: 1608911100000000
stream_name: ""
@@ -425,7 +425,7 @@ class GraphTracerE2ETest : public ::testing::Test {
MP_ASSERT_OK(graph_.SetExecutor("", executor));
}
void SetUpRealClock() { clock_ = ::mediapipe::Clock::RealClock(); }
void SetUpRealClock() { clock_ = mediapipe::Clock::RealClock(); }
static Packet PacketAt(int64 ts) {
return Adopt(new int64(999)).At(Timestamp(ts));
@@ -475,19 +475,19 @@ class GraphTracerE2ETest : public ::testing::Test {
}
// A Calculator::Process callback function.
typedef std::function<::mediapipe::Status(const InputStreamShardSet&,
OutputStreamShardSet*)>
typedef std::function<mediapipe::Status(const InputStreamShardSet&,
OutputStreamShardSet*)>
ProcessFunction;
// A testing callback function that passes through all packets.
::mediapipe::Status PassThrough(const InputStreamShardSet& inputs,
OutputStreamShardSet* outputs) {
mediapipe::Status PassThrough(const InputStreamShardSet& inputs,
OutputStreamShardSet* outputs) {
for (int i = 0; i < inputs.NumEntries(); ++i) {
if (!inputs.Index(i).Value().IsEmpty()) {
outputs->Index(i).AddPacket(inputs.Index(i).Value());
}
}
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
void RunPassThroughGraph() {
@@ -511,7 +511,7 @@ class GraphTracerE2ETest : public ::testing::Test {
MP_ASSERT_OK(
graph_.ObserveOutputStream("output_0", [&](const Packet& packet) {
out_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
simulation_clock_->ThreadStart();
MP_ASSERT_OK(graph_.StartRun({}));
@@ -557,7 +557,7 @@ class GraphTracerE2ETest : public ::testing::Test {
clock_->Sleep(absl::Microseconds(packets.front().first));
outputs->Index(0).AddPacket(packets.front().second);
packets.erase(packets.begin());
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}
return tool::StatusStop();
};
@@ -580,7 +580,7 @@ class GraphTracerE2ETest : public ::testing::Test {
MP_ASSERT_OK(graph_.ObserveOutputStream("output_packets_0",
[&](const Packet& packet) {
out_packets.push_back(packet);
return ::mediapipe::OkStatus();
return mediapipe::OkStatus();
}));
simulation_clock_->ThreadStart();
MP_ASSERT_OK(graph_.StartRun({}));
@@ -597,7 +597,7 @@ class GraphTracerE2ETest : public ::testing::Test {
CalculatorGraphConfig graph_config_;
CalculatorGraph graph_;
::mediapipe::Clock* clock_;
mediapipe::Clock* clock_;
std::shared_ptr<SimulationClock> simulation_clock_;
};
@@ -628,7 +628,7 @@ TEST_F(GraphTracerE2ETest, PassThroughGraphProfile) {
MP_EXPECT_OK(graph_.profiler()->GetCalculatorProfiles(&profiles));
EXPECT_EQ(1, profiles.size());
CalculatorProfile expected =
::mediapipe::ParseTextProtoOrDie<CalculatorProfile>(R"(
mediapipe::ParseTextProtoOrDie<CalculatorProfile>(R"(
name: "LambdaCalculator"
open_runtime: 0
close_runtime: 0
@@ -658,7 +658,7 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLog) {
absl::InfiniteFuture(), &trace);
GraphTrace node_timestamps = NodeTimestamps(trace);
EXPECT_THAT(node_timestamps,
EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(R"(
calculator_trace { node_id: 1 input_timestamp: 10000 }
calculator_trace { node_id: 2 input_timestamp: 10000 }
calculator_trace { node_id: 3 input_timestamp: 10000 }
@@ -801,7 +801,9 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLog) {
calculator_trace { node_id: 5 input_timestamp: 10000 }
calculator_trace { node_id: 5 input_timestamp: 10000 }
calculator_trace { node_id: 1 input_timestamp: 50001 }
calculator_trace { node_id: 1 input_timestamp: 10000 })")));
calculator_trace { node_id: 1 input_timestamp: 10000 }
calculator_trace { node_id: 1 input_timestamp: 10000 }
)")));
// Validate a one-timestamp slice of the event trace.
GraphTrace trace_2;
@@ -812,7 +814,7 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLog) {
StripDataIds(&trace_2);
EXPECT_THAT(
trace_2,
EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(
EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(
R"(
base_time: 1544086800000000
base_timestamp: 10000
@@ -986,14 +988,14 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLog) {
}
// Read a GraphProfile from a file path.
::mediapipe::Status ReadGraphProfile(const std::string& path,
GraphProfile* profile) {
mediapipe::Status ReadGraphProfile(const std::string& path,
GraphProfile* profile) {
std::ifstream ifs;
ifs.open(path);
proto_ns::io::IstreamInputStream in_stream(&ifs);
profile->ParseFromZeroCopyStream(&in_stream);
return ifs.is_open() ? ::mediapipe::OkStatus()
: ::mediapipe::UnavailableError("Cannot open");
return ifs.is_open() ? mediapipe::OkStatus()
: mediapipe::UnavailableError("Cannot open");
}
TEST_F(GraphTracerE2ETest, DemuxGraphLogFile) {
@@ -1005,7 +1007,7 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLogFile) {
GraphProfile profile;
MP_EXPECT_OK(
ReadGraphProfile(absl::StrCat(log_path, 0, ".binarypb"), &profile));
EXPECT_EQ(111, profile.graph_trace(0).calculator_trace().size());
EXPECT_EQ(112, profile.graph_trace(0).calculator_trace().size());
}
TEST_F(GraphTracerE2ETest, DemuxGraphLogFiles) {
@@ -1034,7 +1036,7 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLogFiles) {
// The expected counts of calculator_trace records in each of the log files.
// The processing spans three 12.5ms log files, because
// RunDemuxInFlightGraph adds packets over 30ms.
std::vector<int> expected = {49, 64, 11};
std::vector<int> expected = {49, 64, 12};
EXPECT_EQ(event_counts, expected);
GraphProfile& profile_2 = graph_profiles[2];
profile_2.clear_calculator_profiles();
@@ -1044,7 +1046,7 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLogFiles) {
StripDataIds(&trace);
}
EXPECT_THAT(profile_2,
EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphProfile>(R"(
EqualsProto(mediapipe::ParseTextProtoOrDie<GraphProfile>(R"(
graph_trace {
base_time: 1544086800000000
base_timestamp: 0
@@ -1145,6 +1147,11 @@ TEST_F(GraphTracerE2ETest, DemuxGraphLogFiles) {
stream_id: 7
}
}
calculator_trace {
node_id: 1
event_type: READY_FOR_PROCESS
start_time: 70004
}
calculator_trace {
node_id: 1
event_type: READY_FOR_CLOSE
@@ -1286,7 +1293,7 @@ TEST_F(GraphTracerE2ETest, GpuTaskTrace) {
&trace_1);
EXPECT_THAT(
trace_1,
EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(
EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(
R"(
base_time: 1100
base_timestamp: 1000
@@ -1323,7 +1330,7 @@ TEST_F(GraphTracerE2ETest, GpuTaskTrace) {
&trace_2);
EXPECT_THAT(
trace_2,
EqualsProto(::mediapipe::ParseTextProtoOrDie<GraphTrace>(
EqualsProto(mediapipe::ParseTextProtoOrDie<GraphTrace>(
R"(
base_time: 1100
base_timestamp: 1000
@@ -27,13 +27,13 @@ StatusOr<std::string> GetDefaultTraceLogDirectory() {
StatusOr<std::string>* result = new StatusOr<std::string>();
bool has_jvm = java::HasJavaVM();
if (!has_jvm) {
*result = ::mediapipe::InternalError("JavaVM not available.");
*result = mediapipe::InternalError("JavaVM not available.");
return result;
}
JNIEnv* env = java::GetJNIEnv();
if (!env) {
*result = ::mediapipe::InternalError("JNIEnv not available.");
*result = mediapipe::InternalError("JNIEnv not available.");
return result;
}

Some files were not shown because too many files have changed in this diff Show More