Move stream API loopback to third_party.
PiperOrigin-RevId: 559037020
This commit is contained in:
		
							parent
							
								
									9bc8b3bb4f
								
							
						
					
					
						commit
						edb0a64d0e
					
				
							
								
								
									
										14
									
								
								mediapipe/framework/api2/stream/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								mediapipe/framework/api2/stream/BUILD
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cc_library(
 | 
				
			||||||
 | 
					    name = "loopback",
 | 
				
			||||||
 | 
					    hdrs = ["loopback.h"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//mediapipe/calculators/core:previous_loopback_calculator",
 | 
				
			||||||
 | 
					        "//mediapipe/framework/api2:builder",
 | 
				
			||||||
 | 
					        "//mediapipe/framework/api2:port",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    alwayslink = 1,
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										55
									
								
								mediapipe/framework/api2/stream/loopback.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								mediapipe/framework/api2/stream/loopback.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					#ifndef MEDIAPIPE_FRAMEWORK_API2_STREAM_LOOPBACK_H_
 | 
				
			||||||
 | 
					#define MEDIAPIPE_FRAMEWORK_API2_STREAM_LOOPBACK_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <functional>
 | 
				
			||||||
 | 
					#include <utility>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/builder.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/port.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace mediapipe::api2::builder {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Returns a pair of two values:
 | 
				
			||||||
 | 
					// - A stream with loopback data. Such stream, for each new packet in @tick
 | 
				
			||||||
 | 
					//   stream, provides a packet previously calculated within the graph.
 | 
				
			||||||
 | 
					// - A function to define/set loopback data producing stream.
 | 
				
			||||||
 | 
					//   NOTE:
 | 
				
			||||||
 | 
					//     * function must be called and only once, otherwise graph validation will
 | 
				
			||||||
 | 
					//       fail.
 | 
				
			||||||
 | 
					//     * calling function after graph is destroyed results in undefined behavior
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The function wraps `PreviousLoopbackCalculator` into a convenience function
 | 
				
			||||||
 | 
					// and allows graph input to be processed together with some previous output.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// -------
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Example:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ```
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   Graph graph;
 | 
				
			||||||
 | 
					//   Stream<...> tick = ...; // E.g. main input can surve as a tick.
 | 
				
			||||||
 | 
					//   auto [prev_data, set_loopback_fn] = GetLoopbackData<int>(tick, graph);
 | 
				
			||||||
 | 
					//   ...
 | 
				
			||||||
 | 
					//   Stream<int> data = ...;
 | 
				
			||||||
 | 
					//   set_loopback_fn(data);
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ```
 | 
				
			||||||
 | 
					template <class DataT, class TickT>
 | 
				
			||||||
 | 
					std::pair<Stream<DataT>, std::function<void(Stream<DataT>)>> GetLoopbackData(
 | 
				
			||||||
 | 
					    Stream<TickT> tick, mediapipe::api2::builder::Graph& graph) {
 | 
				
			||||||
 | 
					  auto& prev = graph.AddNode("PreviousLoopbackCalculator");
 | 
				
			||||||
 | 
					  tick.ConnectTo(prev.In("MAIN"));
 | 
				
			||||||
 | 
					  return {prev.Out("PREV_LOOP").template Cast<DataT>(),
 | 
				
			||||||
 | 
					          [prev_ptr = &prev](Stream<DataT> data) {
 | 
				
			||||||
 | 
					            // TODO: input stream info must be specified, but
 | 
				
			||||||
 | 
					            // builder api doesn't support it at the moment. As a workaround,
 | 
				
			||||||
 | 
					            // input stream info is added by GraphBuilder as a graph building
 | 
				
			||||||
 | 
					            // post processing step.
 | 
				
			||||||
 | 
					            data.ConnectTo(prev_ptr->In("LOOP"));
 | 
				
			||||||
 | 
					          }};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace mediapipe::api2::builder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // MEDIAPIPE_FRAMEWORK_API2_STREAM_LOOPBACK_H_
 | 
				
			||||||
							
								
								
									
										55
									
								
								mediapipe/framework/api2/stream/loopback_test.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								mediapipe/framework/api2/stream/loopback_test.cc
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/stream/loopback.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/builder.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/node.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/port.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/gmock.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/gtest.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/port/parse_text_proto.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace mediapipe::api2::builder {
 | 
				
			||||||
 | 
					namespace {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestDataProducer : public NodeIntf {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
					  static constexpr Input<float> kLoopbackData{"LOOPBACK_DATA"};
 | 
				
			||||||
 | 
					  static constexpr Output<float> kProducedData{"PRODUCED_DATA"};
 | 
				
			||||||
 | 
					  MEDIAPIPE_NODE_INTERFACE(TestDataProducer, kLoopbackData, kProducedData);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST(LoopbackTest, GetLoopbackData) {
 | 
				
			||||||
 | 
					  Graph graph;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Stream<int> tick = graph.In("TICK").Cast<int>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  auto [data, set_loopback_data_fn] = GetLoopbackData<float>(tick, graph);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  auto& producer = graph.AddNode<TestDataProducer>();
 | 
				
			||||||
 | 
					  data.ConnectTo(producer[TestDataProducer::kLoopbackData]);
 | 
				
			||||||
 | 
					  Stream<float> data_to_loopback(producer[TestDataProducer::kProducedData]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  set_loopback_data_fn(data_to_loopback);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // PreviousLoopbackCalculator configuration is incorrect here and should be
 | 
				
			||||||
 | 
					  // updated when corresponding b/175887687 is fixed.
 | 
				
			||||||
 | 
					  // Use mediapipe::aimatter::GraphBuilder to fix back edges in the graph.
 | 
				
			||||||
 | 
					  EXPECT_THAT(graph.GetConfig(),
 | 
				
			||||||
 | 
					              testing::EqualsProto(
 | 
				
			||||||
 | 
					                  mediapipe::ParseTextProtoOrDie<CalculatorGraphConfig>(R"pb(
 | 
				
			||||||
 | 
					                    node {
 | 
				
			||||||
 | 
					                      calculator: "PreviousLoopbackCalculator"
 | 
				
			||||||
 | 
					                      input_stream: "LOOP:__stream_2"
 | 
				
			||||||
 | 
					                      input_stream: "MAIN:__stream_0"
 | 
				
			||||||
 | 
					                      output_stream: "PREV_LOOP:__stream_1"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    node {
 | 
				
			||||||
 | 
					                      calculator: "TestDataProducer"
 | 
				
			||||||
 | 
					                      input_stream: "LOOPBACK_DATA:__stream_1"
 | 
				
			||||||
 | 
					                      output_stream: "PRODUCED_DATA:__stream_2"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    input_stream: "TICK:__stream_0"
 | 
				
			||||||
 | 
					                  )pb")));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace
 | 
				
			||||||
 | 
					}  // namespace mediapipe::api2::builder
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user