Project import generated by Copybara.
GitOrigin-RevId: f9a66589eaf652bb93f8e37ed9e4da26e59ef214
This commit is contained in:
@@ -1107,6 +1107,19 @@ cc_library(
|
||||
alwayslink = 1,
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "basic_types_registration",
|
||||
srcs = ["basic_types_registration.cc"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
":type_map",
|
||||
"//mediapipe/framework/port:integral_types",
|
||||
"@com_google_absl//absl/memory",
|
||||
"@com_google_absl//absl/strings",
|
||||
],
|
||||
alwayslink = 1,
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "validated_graph_config",
|
||||
srcs = ["validated_graph_config.cc"],
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#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, \
|
||||
nullptr, nullptr)
|
||||
|
||||
// Note: we cannot define a type which type hash id is already in the map.
|
||||
// E.g. if tool::GetTypeHash<int>() == tool::GetTypeHash<int32>(), then only one
|
||||
// can be registered.
|
||||
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(bool);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(double);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(float);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(int);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(int64);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(uint64);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<bool>);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<double>);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<float>);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<int>);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<int64>);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<std::string>);
|
||||
MEDIAPIPE_REGISTER_GENERIC_TYPE(::std::vector<::std::vector<float>>);
|
||||
@@ -218,10 +218,11 @@ template <typename T>
|
||||
EXPECT_EQ(values[5], collection_ptr->Get("TAG_C", 0));
|
||||
|
||||
// Test const-ness.
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<decltype(
|
||||
collection.Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<decltype(
|
||||
collection_ptr->Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<
|
||||
decltype(collection.Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(true,
|
||||
std::is_const<typename std::remove_reference<
|
||||
decltype(collection_ptr->Get("TAG_A", 0))>::type>::value);
|
||||
|
||||
// Test access using a range based for.
|
||||
int i = 0;
|
||||
@@ -278,10 +279,11 @@ template <typename T>
|
||||
EXPECT_EQ(values[5], collection_ptr->Get("TAG_C", 0));
|
||||
|
||||
// Test const-ness.
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<decltype(
|
||||
collection.Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<decltype(
|
||||
collection_ptr->Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<
|
||||
decltype(collection.Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(true,
|
||||
std::is_const<typename std::remove_reference<
|
||||
decltype(collection_ptr->Get("TAG_A", 0))>::type>::value);
|
||||
|
||||
// Test access using a range based for.
|
||||
int i = 0;
|
||||
@@ -309,10 +311,10 @@ template <typename T>
|
||||
// storage == kStoreValue.
|
||||
EXPECT_EQ(&values[i], collection_ptr->GetPtr(id));
|
||||
EXPECT_EQ(values[i], *collection_ptr->GetPtr(id));
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<decltype(
|
||||
*collection.GetPtr(id))>::type>::value);
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<decltype(
|
||||
*collection_ptr->GetPtr(id))>::type>::value);
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<
|
||||
decltype(*collection.GetPtr(id))>::type>::value);
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<
|
||||
decltype(*collection_ptr->GetPtr(id))>::type>::value);
|
||||
++i;
|
||||
}
|
||||
|
||||
@@ -386,10 +388,11 @@ template <typename T>
|
||||
EXPECT_EQ(&values[5], collection_ptr->Get("TAG_C", 0));
|
||||
|
||||
// Test const-ness.
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<decltype(
|
||||
collection.Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<decltype(
|
||||
collection_ptr->Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<
|
||||
decltype(collection.Get("TAG_A", 0))>::type>::value);
|
||||
EXPECT_EQ(true,
|
||||
std::is_const<typename std::remove_reference<
|
||||
decltype(collection_ptr->Get("TAG_A", 0))>::type>::value);
|
||||
|
||||
// Test access using a range based for.
|
||||
int i = 0;
|
||||
@@ -473,8 +476,8 @@ TEST(CollectionTest, TestIteratorFunctions) {
|
||||
collection.GetPtr(collection.GetId("TAG_B", 1)) = &values[4];
|
||||
collection.GetPtr(collection.GetId("TAG_C", 0)) = &values[5];
|
||||
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<decltype(
|
||||
collection.begin())>::type>::value);
|
||||
EXPECT_EQ(false, std::is_const<typename std::remove_reference<
|
||||
decltype(collection.begin())>::type>::value);
|
||||
EXPECT_EQ(values[0], *collection.begin());
|
||||
EXPECT_EQ(false, collection.begin()->empty());
|
||||
EXPECT_EQ(false, (*collection.begin()).empty());
|
||||
@@ -483,8 +486,8 @@ TEST(CollectionTest, TestIteratorFunctions) {
|
||||
|
||||
const auto* collection_ptr = &collection;
|
||||
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<decltype(
|
||||
*collection_ptr->begin())>::type>::value);
|
||||
EXPECT_EQ(true, std::is_const<typename std::remove_reference<
|
||||
decltype(*collection_ptr->begin())>::type>::value);
|
||||
EXPECT_EQ(values[0], *collection_ptr->begin());
|
||||
EXPECT_EQ(false, collection_ptr->begin()->empty());
|
||||
EXPECT_EQ(false, (*collection_ptr->begin()).empty());
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#include <direct.h>
|
||||
#else
|
||||
#include <dirent.h>
|
||||
#endif // _WIN32
|
||||
|
||||
@@ -23,8 +23,6 @@ package(
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
exports_files(["LICENSE"])
|
||||
|
||||
mediapipe_proto_library(
|
||||
name = "detection_proto",
|
||||
srcs = ["detection.proto"],
|
||||
@@ -32,6 +30,18 @@ mediapipe_proto_library(
|
||||
deps = ["//mediapipe/framework/formats:location_data_proto"],
|
||||
)
|
||||
|
||||
mediapipe_register_type(
|
||||
base_name = "detection",
|
||||
include_headers = ["mediapipe/framework/formats/detection.pb.h"],
|
||||
types = [
|
||||
"::mediapipe::Detection",
|
||||
"::mediapipe::DetectionList",
|
||||
"::std::vector<::mediapipe::Detection>",
|
||||
"::std::vector<::mediapipe::DetectionList>",
|
||||
],
|
||||
deps = ["//mediapipe/framework/formats:detection_cc_proto"],
|
||||
)
|
||||
|
||||
mediapipe_proto_library(
|
||||
name = "classification_proto",
|
||||
srcs = ["classification.proto"],
|
||||
@@ -214,6 +224,18 @@ mediapipe_proto_library(
|
||||
deps = ["//mediapipe/framework/formats:location_data_proto"],
|
||||
)
|
||||
|
||||
mediapipe_register_type(
|
||||
base_name = "rect",
|
||||
include_headers = ["mediapipe/framework/formats/rect.pb.h"],
|
||||
types = [
|
||||
"::mediapipe::Rect",
|
||||
"::mediapipe::NormalizedRect",
|
||||
"::std::vector<::mediapipe::Rect>",
|
||||
"::std::vector<::mediapipe::NormalizedRect>",
|
||||
],
|
||||
deps = [":rect_cc_proto"],
|
||||
)
|
||||
|
||||
mediapipe_proto_library(
|
||||
name = "landmark_proto",
|
||||
srcs = ["landmark.proto"],
|
||||
@@ -231,6 +253,7 @@ mediapipe_register_type(
|
||||
"::mediapipe::NormalizedLandmarkList",
|
||||
"::std::vector<::mediapipe::Landmark>",
|
||||
"::std::vector<::mediapipe::NormalizedLandmark>",
|
||||
"::std::vector<::mediapipe::NormalizedLandmarkList>",
|
||||
],
|
||||
deps = [":landmark_cc_proto"],
|
||||
)
|
||||
|
||||
@@ -20,8 +20,6 @@ package(default_visibility = ["//visibility:private"])
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
exports_files(["LICENSE"])
|
||||
|
||||
mediapipe_proto_library(
|
||||
name = "locus_proto",
|
||||
srcs = ["locus.proto"],
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
exports_files(["LICENSE"])
|
||||
|
||||
load("//mediapipe/framework/port:build_config.bzl", "mediapipe_cc_proto_library")
|
||||
|
||||
package(default_visibility = ["//visibility:private"])
|
||||
|
||||
@@ -163,9 +163,10 @@ template <typename Container>
|
||||
}
|
||||
queue_became_full = (!was_queue_full && max_queue_size_ != -1 &&
|
||||
queue_.size() >= max_queue_size_);
|
||||
VLOG_IF(3, queue_.size() > 1)
|
||||
<< "Queue size greater than 1: stream name: " << name_
|
||||
<< " queue_size: " << queue_.size();
|
||||
if (queue_.size() > 1) {
|
||||
VLOG(3) << "Queue size greater than 1: stream name: " << name_
|
||||
<< " queue_size: " << queue_.size();
|
||||
}
|
||||
VLOG(3) << "Input stream:" << name_
|
||||
<< " becomes non-empty status:" << queue_became_non_empty
|
||||
<< " Size: " << queue_.size();
|
||||
|
||||
@@ -66,6 +66,7 @@ class LegacyCalculatorSupport {
|
||||
};
|
||||
};
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
// We only declare this variable for two specializations of the template because
|
||||
// it is only meant to be used for these two types.
|
||||
// Note that, since these variables are members of specific template
|
||||
@@ -79,6 +80,7 @@ thread_local CalculatorContext*
|
||||
template <>
|
||||
thread_local CalculatorContract*
|
||||
LegacyCalculatorSupport::Scoped<CalculatorContract>::current_;
|
||||
#endif
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
|
||||
@@ -439,13 +439,18 @@ struct is_concrete_proto_t
|
||||
template <typename T>
|
||||
struct MessageRegistrationImpl {
|
||||
static NoDestructor<mediapipe::RegistrationToken> registration;
|
||||
// This could have been a lambda inside registration's initializer below, but
|
||||
// MSVC has a bug with lambdas, so we put it here as a workaround.
|
||||
static std::unique_ptr<Holder<T>> CreateMessageHolder() {
|
||||
return absl::make_unique<Holder<T>>(new T);
|
||||
}
|
||||
};
|
||||
|
||||
// Static members of template classes can be defined in the header.
|
||||
template <typename T>
|
||||
NoDestructor<mediapipe::RegistrationToken>
|
||||
MessageRegistrationImpl<T>::registration(MessageHolderRegistry::Register(
|
||||
T{}.GetTypeName(), [] { return absl::make_unique<Holder<T>>(new T); }));
|
||||
T{}.GetTypeName(), MessageRegistrationImpl<T>::CreateMessageHolder));
|
||||
|
||||
// For non-Message payloads, this does nothing.
|
||||
template <typename T, typename Enable = void>
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
|
||||
@@ -204,6 +204,10 @@ void GraphProfiler::Reset() {
|
||||
Resume();
|
||||
if (is_tracing_ && IsTraceIntervalEnabled(profiler_config_, tracer()) &&
|
||||
executor != nullptr) {
|
||||
// Inform the user via logging the path to the trace logs.
|
||||
ASSIGN_OR_RETURN(std::string trace_log_path, GetTraceLogPath());
|
||||
LOG(INFO) << "trace_log_path: " << trace_log_path;
|
||||
|
||||
is_running_ = true;
|
||||
executor->Schedule([this] {
|
||||
absl::Time deadline = clock_->TimeNow() + tracer()->GetTraceLogInterval();
|
||||
@@ -583,8 +587,6 @@ void AssignNodeNames(GraphProfile* profile) {
|
||||
return ::mediapipe::OkStatus();
|
||||
}
|
||||
ASSIGN_OR_RETURN(std::string trace_log_path, GetTraceLogPath());
|
||||
// Inform the user via logging the path to the trace logs.
|
||||
LOG(INFO) << "trace_log_path: " << trace_log_path;
|
||||
int log_interval_count = GetLogIntervalCount(profiler_config_);
|
||||
int log_file_count = GetLogFileCount(profiler_config_);
|
||||
|
||||
|
||||
@@ -49,6 +49,14 @@ class Subgraph {
|
||||
static T GetOptions(const Subgraph::SubgraphOptions& supgraph_options) {
|
||||
return tool::OptionsMap().Initialize(supgraph_options).Get<T>();
|
||||
}
|
||||
|
||||
// Returns the CalculatorGraphConfig::Node specifying the subgraph.
|
||||
// This provides to Subgraphs the same graph information that GetContract
|
||||
// provides to Calculators.
|
||||
static CalculatorGraphConfig::Node GetNode(
|
||||
const Subgraph::SubgraphOptions& supgraph_options) {
|
||||
return supgraph_options;
|
||||
}
|
||||
};
|
||||
|
||||
using SubgraphRegistry = GlobalFactoryRegistry<std::unique_ptr<Subgraph>>;
|
||||
|
||||
Vendored
-2
@@ -17,8 +17,6 @@ licenses(["notice"])
|
||||
|
||||
package(default_visibility = ["//visibility:private"])
|
||||
|
||||
exports_files(["LICENSE"])
|
||||
|
||||
load("//mediapipe/framework/port:build_config.bzl", "mediapipe_cc_proto_library")
|
||||
|
||||
proto_library(
|
||||
|
||||
@@ -13,10 +13,7 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
load(
|
||||
"//mediapipe/framework/port:build_config.bzl",
|
||||
"mediapipe_cc_proto_library",
|
||||
)
|
||||
load("//mediapipe/framework/port:build_config.bzl", "mediapipe_proto_library")
|
||||
load(
|
||||
"//mediapipe/framework/tool:mediapipe_graph.bzl",
|
||||
"data_as_c_string",
|
||||
@@ -44,9 +41,10 @@ cc_library(
|
||||
],
|
||||
)
|
||||
|
||||
proto_library(
|
||||
mediapipe_proto_library(
|
||||
name = "calculator_graph_template_proto",
|
||||
srcs = ["calculator_graph_template.proto"],
|
||||
def_py_proto = False,
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//mediapipe/framework:calculator_options_proto",
|
||||
@@ -55,43 +53,14 @@ proto_library(
|
||||
],
|
||||
)
|
||||
|
||||
java_proto_library(
|
||||
name = "calculator_graph_template_java_proto",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [":calculator_graph_template_proto"],
|
||||
)
|
||||
|
||||
java_lite_proto_library(
|
||||
name = "calculator_graph_template_java_proto_lite",
|
||||
strict_deps = 0,
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [":calculator_graph_template_proto"],
|
||||
)
|
||||
|
||||
proto_library(
|
||||
mediapipe_proto_library(
|
||||
name = "source_proto",
|
||||
srcs = ["source.proto"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = ["//mediapipe/framework:calculator_proto"],
|
||||
)
|
||||
|
||||
mediapipe_cc_proto_library(
|
||||
name = "calculator_graph_template_cc_proto",
|
||||
srcs = ["calculator_graph_template.proto"],
|
||||
cc_deps = [
|
||||
"//mediapipe/framework:calculator_cc_proto",
|
||||
"//mediapipe/framework/deps:proto_descriptor_cc_proto",
|
||||
deps = [
|
||||
"//mediapipe/framework:calculator_options_proto",
|
||||
"//mediapipe/framework:calculator_proto",
|
||||
],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [":calculator_graph_template_proto"],
|
||||
)
|
||||
|
||||
mediapipe_cc_proto_library(
|
||||
name = "source_cc_proto",
|
||||
srcs = ["source.proto"],
|
||||
cc_deps = ["//mediapipe/framework:calculator_cc_proto"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [":source_proto"],
|
||||
)
|
||||
|
||||
cc_binary(
|
||||
@@ -551,22 +520,16 @@ data_as_c_string(
|
||||
outs = ["test_binarypb.inc"],
|
||||
)
|
||||
|
||||
proto_library(
|
||||
mediapipe_proto_library(
|
||||
name = "node_chain_subgraph_proto",
|
||||
srcs = ["node_chain_subgraph.proto"],
|
||||
visibility = ["//mediapipe:__subpackages__"],
|
||||
deps = [
|
||||
"//mediapipe/framework:calculator_options_proto",
|
||||
"//mediapipe/framework:calculator_proto",
|
||||
],
|
||||
)
|
||||
|
||||
mediapipe_cc_proto_library(
|
||||
name = "node_chain_subgraph_cc_proto",
|
||||
srcs = ["node_chain_subgraph.proto"],
|
||||
cc_deps = ["//mediapipe/framework:calculator_cc_proto"],
|
||||
visibility = ["//mediapipe:__subpackages__"],
|
||||
deps = [":node_chain_subgraph_proto"],
|
||||
)
|
||||
|
||||
cc_test(
|
||||
name = "data_as_c_string_test",
|
||||
srcs = [
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package mediapipe;
|
||||
|
||||
import "mediapipe/framework/calculator.proto";
|
||||
|
||||
option java_package = "com.google.mediapipe.proto";
|
||||
option java_outer_classname = "GateSubgraphProto";
|
||||
|
||||
// Options for a gate-subgraph directing traffic to one of several contained
|
||||
// CalculatorGraphConfig's.
|
||||
message GateSubgraphOptions {
|
||||
extend mediapipe.CalculatorOptions {
|
||||
optional GateSubgraphOptions ext = 297196839;
|
||||
}
|
||||
|
||||
// The contained literal subgraph configuration(s).
|
||||
repeated CalculatorGraphConfig contained_graph = 1;
|
||||
|
||||
// The contained registered subgraphs or calculators.
|
||||
repeated CalculatorGraphConfig.Node contained_node = 2;
|
||||
}
|
||||
@@ -316,5 +316,25 @@ static ::mediapipe::Status PrefixNames(std::string prefix,
|
||||
return ::mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
CalculatorGraphConfig MakeSingleNodeGraph(CalculatorGraphConfig::Node node) {
|
||||
using RepeatedStringField = proto_ns::RepeatedPtrField<ProtoString>;
|
||||
struct Connections {
|
||||
const RepeatedStringField& node_conns;
|
||||
RepeatedStringField* graph_conns;
|
||||
};
|
||||
CalculatorGraphConfig config;
|
||||
for (const Connections& item : std::vector<Connections>{
|
||||
{node.input_stream(), config.mutable_input_stream()},
|
||||
{node.output_stream(), config.mutable_output_stream()},
|
||||
{node.input_side_packet(), config.mutable_input_side_packet()},
|
||||
{node.output_side_packet(), config.mutable_output_side_packet()}}) {
|
||||
for (const auto& conn : item.node_conns) {
|
||||
*item.graph_conns->Add() = conn;
|
||||
}
|
||||
}
|
||||
*config.add_node() = std::move(node);
|
||||
return config;
|
||||
}
|
||||
|
||||
} // namespace tool
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -72,6 +72,11 @@ namespace tool {
|
||||
CalculatorGraphConfig* config,
|
||||
const GraphRegistry* graph_registry = nullptr);
|
||||
|
||||
// Creates a graph wrapping the provided node and exposing all of its
|
||||
// connections
|
||||
CalculatorGraphConfig MakeSingleNodeGraph(
|
||||
CalculatorGraphConfig::Node subgraph_node);
|
||||
|
||||
} // namespace tool
|
||||
} // namespace mediapipe
|
||||
|
||||
|
||||
Reference in New Issue
Block a user