Project import generated by Copybara.
GitOrigin-RevId: d8caa66de45839696f5bd0786ad3bfbcb9cff632
This commit is contained in:
@@ -92,11 +92,11 @@ class BoxDetectorCalculator : public CalculatorBase {
|
||||
public:
|
||||
~BoxDetectorCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
BoxDetectorCalculatorOptions options_;
|
||||
@@ -109,7 +109,7 @@ class BoxDetectorCalculator : public CalculatorBase {
|
||||
|
||||
REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
|
||||
::mediapipe::Status BoxDetectorCalculator::GetContract(CalculatorContract* cc) {
|
||||
mediapipe::Status BoxDetectorCalculator::GetContract(CalculatorContract* cc) {
|
||||
if (cc->Inputs().HasTag("TRACKING")) {
|
||||
cc->Inputs().Tag("TRACKING").Set<TrackingData>();
|
||||
}
|
||||
@@ -172,10 +172,10 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
cc->InputSidePackets().Tag("FRAME_ALIGNMENT").Set<int>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BoxDetectorCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status BoxDetectorCalculator::Open(CalculatorContext* cc) {
|
||||
options_ = cc->Options<BoxDetectorCalculatorOptions>();
|
||||
box_detector_ = BoxDetectorInterface::Create(options_.detector_options());
|
||||
|
||||
@@ -210,10 +210,10 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
frame_alignment_ = cc->InputSidePackets().Tag("FRAME_ALIGNMENT").Get<int>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BoxDetectorCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status BoxDetectorCalculator::Process(CalculatorContext* cc) {
|
||||
const Timestamp timestamp = cc->InputTimestamp();
|
||||
const int64 timestamp_msec = timestamp.Value() / 1000;
|
||||
|
||||
@@ -246,7 +246,7 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
}
|
||||
|
||||
if (!detector_switch_) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
InputStream* track_stream = cc->Inputs().HasTag("TRACKING")
|
||||
@@ -274,7 +274,7 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
if (track_stream != nullptr) {
|
||||
// Detect from tracking data
|
||||
if (track_stream->IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
const TrackingData& tracking_data = track_stream->Get<TrackingData>();
|
||||
@@ -289,7 +289,7 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
} else if (video_stream != nullptr) {
|
||||
// Detect from input frame
|
||||
if (video_stream->IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
TimedBoxProtoList tracked_boxes;
|
||||
@@ -305,7 +305,7 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
detected_boxes.get());
|
||||
} else {
|
||||
if (feature_stream->IsEmpty() || descriptor_stream->IsEmpty()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
const auto& image_size =
|
||||
@@ -377,17 +377,17 @@ REGISTER_CALCULATOR(BoxDetectorCalculator);
|
||||
cc->Outputs().Tag("BOXES").Add(detected_boxes.release(), timestamp);
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BoxDetectorCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status BoxDetectorCalculator::Close(CalculatorContext* cc) {
|
||||
if (write_index_) {
|
||||
BoxDetectorIndex index = box_detector_->ObtainBoxDetectorIndex();
|
||||
MEDIAPIPE_CHECK_OK(mediapipe::file::SetContents(
|
||||
cc->InputSidePackets().Tag("OUTPUT_INDEX_FILENAME").Get<std::string>(),
|
||||
index.SerializeAsString()));
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -123,10 +123,10 @@ class BoxTrackerCalculator : public CalculatorBase {
|
||||
public:
|
||||
~BoxTrackerCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
protected:
|
||||
void RenderStates(const std::vector<MotionBoxState>& states, cv::Mat* mat);
|
||||
@@ -167,7 +167,7 @@ class BoxTrackerCalculator : public CalculatorBase {
|
||||
};
|
||||
|
||||
// MotionBoxPath per unique id that we are tracking.
|
||||
typedef std::unordered_map<int, MotionBoxPath> MotionBoxMap;
|
||||
typedef absl::node_hash_map<int, MotionBoxPath> MotionBoxMap;
|
||||
|
||||
// Performs tracking of all MotionBoxes in box_map by one frame forward or
|
||||
// backward to or from data_frame_num using passed TrackingData.
|
||||
@@ -373,7 +373,7 @@ void AddStateToPath(const MotionBoxState& state, int64 time_msec,
|
||||
|
||||
} // namespace.
|
||||
|
||||
::mediapipe::Status BoxTrackerCalculator::GetContract(CalculatorContract* cc) {
|
||||
mediapipe::Status BoxTrackerCalculator::GetContract(CalculatorContract* cc) {
|
||||
if (cc->Inputs().HasTag("TRACKING")) {
|
||||
cc->Inputs().Tag("TRACKING").Set<TrackingData>();
|
||||
}
|
||||
@@ -452,10 +452,10 @@ void AddStateToPath(const MotionBoxState& state, int64 time_msec,
|
||||
cc->InputSidePackets().Tag(kOptionsTag).Set<CalculatorOptions>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BoxTrackerCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status BoxTrackerCalculator::Open(CalculatorContext* cc) {
|
||||
options_ = tool::RetrieveOptions(cc->Options<BoxTrackerCalculatorOptions>(),
|
||||
cc->InputSidePackets(), kOptionsTag);
|
||||
|
||||
@@ -515,10 +515,10 @@ void AddStateToPath(const MotionBoxState& state, int64 time_msec,
|
||||
<< "Streaming mode not compatible with cache dir.";
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status BoxTrackerCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status BoxTrackerCalculator::Process(CalculatorContext* cc) {
|
||||
// Batch mode, issue tracking requests.
|
||||
if (box_tracker_ && !tracking_issued_) {
|
||||
for (const auto& pos : initial_pos_.box()) {
|
||||
@@ -530,7 +530,7 @@ void AddStateToPath(const MotionBoxState& state, int64 time_msec,
|
||||
const Timestamp& timestamp = cc->InputTimestamp();
|
||||
if (timestamp == Timestamp::PreStream()) {
|
||||
// Indicator packet.
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
InputStream* track_stream = cc->Inputs().HasTag("TRACKING")
|
||||
@@ -892,7 +892,7 @@ void AddStateToPath(const MotionBoxState& state, int64 time_msec,
|
||||
cc->Outputs().Tag("VIZ").Add(viz_frame.release(), timestamp);
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void BoxTrackerCalculator::AddSmoothTransitionToOutputBox(
|
||||
|
||||
@@ -59,11 +59,11 @@ class FlowPackagerCalculator : public CalculatorBase {
|
||||
public:
|
||||
~FlowPackagerCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
// Writes passed chunk to disk.
|
||||
void WriteChunk(const TrackingDataChunk& chunk) const;
|
||||
@@ -90,8 +90,7 @@ class FlowPackagerCalculator : public CalculatorBase {
|
||||
|
||||
REGISTER_CALCULATOR(FlowPackagerCalculator);
|
||||
|
||||
::mediapipe::Status FlowPackagerCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
mediapipe::Status FlowPackagerCalculator::GetContract(CalculatorContract* cc) {
|
||||
if (!cc->Inputs().HasTag("FLOW")) {
|
||||
return tool::StatusFail("No input flow was specified.");
|
||||
}
|
||||
@@ -115,10 +114,10 @@ REGISTER_CALCULATOR(FlowPackagerCalculator);
|
||||
cc->InputSidePackets().Tag("CACHE_DIR").Set<std::string>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FlowPackagerCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status FlowPackagerCalculator::Open(CalculatorContext* cc) {
|
||||
options_ = cc->Options<FlowPackagerCalculatorOptions>();
|
||||
|
||||
flow_packager_.reset(new FlowPackager(options_.flow_packager_options()));
|
||||
@@ -129,10 +128,10 @@ REGISTER_CALCULATOR(FlowPackagerCalculator);
|
||||
cache_dir_ = cc->InputSidePackets().Tag("CACHE_DIR").Get<std::string>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FlowPackagerCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status FlowPackagerCalculator::Process(CalculatorContext* cc) {
|
||||
InputStream* flow_stream = &(cc->Inputs().Tag("FLOW"));
|
||||
const RegionFlowFeatureList& flow = flow_stream->Get<RegionFlowFeatureList>();
|
||||
|
||||
@@ -194,10 +193,10 @@ REGISTER_CALCULATOR(FlowPackagerCalculator);
|
||||
|
||||
prev_timestamp_ = timestamp;
|
||||
++frame_idx_;
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FlowPackagerCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status FlowPackagerCalculator::Close(CalculatorContext* cc) {
|
||||
if (frame_idx_ > 0) {
|
||||
tracking_chunk_.set_last_chunk(true);
|
||||
if (cc->Outputs().HasTag("TRACKING_CHUNK")) {
|
||||
@@ -216,7 +215,7 @@ REGISTER_CALCULATOR(FlowPackagerCalculator);
|
||||
cc->Outputs().Tag("COMPLETE").Add(new bool(true), Timestamp::PreStream());
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void FlowPackagerCalculator::WriteChunk(const TrackingDataChunk& chunk) const {
|
||||
|
||||
@@ -56,27 +56,27 @@ class FlowToImageCalculator : public CalculatorBase {
|
||||
public:
|
||||
FlowToImageCalculator() {}
|
||||
~FlowToImageCalculator() override {}
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
FlowQuantizerModel model_;
|
||||
};
|
||||
|
||||
::mediapipe::Status FlowToImageCalculator::GetContract(CalculatorContract* cc) {
|
||||
mediapipe::Status FlowToImageCalculator::GetContract(CalculatorContract* cc) {
|
||||
cc->Inputs().Index(0).Set<OpticalFlowField>();
|
||||
cc->Outputs().Index(0).Set<ImageFrame>();
|
||||
|
||||
// Model sanity check
|
||||
const auto& options = cc->Options<FlowToImageCalculatorOptions>();
|
||||
if (options.min_value() >= options.max_value()) {
|
||||
return ::mediapipe::InvalidArgumentError("Invalid quantizer model.");
|
||||
return mediapipe::InvalidArgumentError("Invalid quantizer model.");
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FlowToImageCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status FlowToImageCalculator::Open(CalculatorContext* cc) {
|
||||
const auto& options = cc->Options<FlowToImageCalculatorOptions>();
|
||||
// Fill the the model_data, ideally we want to train the model, but we omit
|
||||
// the step for now, and takes the (min, max) range from protobuf.
|
||||
@@ -86,10 +86,10 @@ class FlowToImageCalculator : public CalculatorBase {
|
||||
options.min_value(), options.min_value(),
|
||||
options.max_value(), options.max_value()));
|
||||
model_.LoadFromProto(model_data);
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status FlowToImageCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status FlowToImageCalculator::Process(CalculatorContext* cc) {
|
||||
const auto& input = cc->Inputs().Index(0).Get<OpticalFlowField>();
|
||||
// Input flow is 2-channel with x-dim flow and y-dim flow.
|
||||
// Convert it to a ImageFrame in SRGB space, the 3rd channel is not used (0).
|
||||
@@ -106,7 +106,7 @@ class FlowToImageCalculator : public CalculatorBase {
|
||||
}
|
||||
}
|
||||
cc->Outputs().Index(0).Add(output.release(), cc->InputTimestamp());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(FlowToImageCalculator);
|
||||
|
||||
@@ -95,11 +95,11 @@ class MotionAnalysisCalculator : public CalculatorBase {
|
||||
public:
|
||||
~MotionAnalysisCalculator() override = default;
|
||||
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
// Outputs results to Outputs() if MotionAnalysis buffered sufficient results.
|
||||
@@ -107,8 +107,8 @@ class MotionAnalysisCalculator : public CalculatorBase {
|
||||
void OutputMotionAnalyzedFrames(bool flush, CalculatorContext* cc);
|
||||
|
||||
// Lazy init function to be called on Process.
|
||||
::mediapipe::Status InitOnProcess(InputStream* video_stream,
|
||||
InputStream* selection_stream);
|
||||
mediapipe::Status InitOnProcess(InputStream* video_stream,
|
||||
InputStream* selection_stream);
|
||||
|
||||
// Parses CSV file contents to homographies.
|
||||
bool ParseModelCSV(const std::string& contents,
|
||||
@@ -189,7 +189,7 @@ class MotionAnalysisCalculator : public CalculatorBase {
|
||||
|
||||
REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
|
||||
::mediapipe::Status MotionAnalysisCalculator::GetContract(
|
||||
mediapipe::Status MotionAnalysisCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
if (cc->Inputs().HasTag("VIDEO")) {
|
||||
cc->Inputs().Tag("VIDEO").Set<ImageFrame>();
|
||||
@@ -246,10 +246,10 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
cc->InputSidePackets().Tag(kOptionsTag).Set<CalculatorOptions>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status MotionAnalysisCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status MotionAnalysisCalculator::Open(CalculatorContext* cc) {
|
||||
options_ =
|
||||
tool::RetrieveOptions(cc->Options<MotionAnalysisCalculatorOptions>(),
|
||||
cc->InputSidePackets(), kOptionsTag);
|
||||
@@ -364,7 +364,7 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
// If no video header is provided, just return and initialize on the first
|
||||
// Process() call.
|
||||
if (video_header == nullptr) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
////////////// EARLY RETURN; ONLY HEADER OUTPUT SHOULD GO HERE ///////////////
|
||||
@@ -397,12 +397,12 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
.SetHeader(Adopt(new VideoHeader(*video_header)));
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status MotionAnalysisCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status MotionAnalysisCalculator::Process(CalculatorContext* cc) {
|
||||
if (options_.bypass_mode()) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
InputStream* video_stream =
|
||||
@@ -441,7 +441,7 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
}
|
||||
|
||||
++frame_idx_;
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
if (motion_analysis_ == nullptr) {
|
||||
@@ -491,7 +491,7 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
cc->Outputs().Tag("VIDEO_OUT").AddPacket(video_stream->Value());
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
if (use_frame) {
|
||||
@@ -520,7 +520,7 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
selected_motions_.push_back(frame_selection_result->camera_motion());
|
||||
switch (options_.selection_analysis()) {
|
||||
case MotionAnalysisCalculatorOptions::NO_ANALYSIS_USE_SELECTION:
|
||||
return ::mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::UnknownErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Should not reach this point!";
|
||||
|
||||
case MotionAnalysisCalculatorOptions::ANALYSIS_FROM_FEATURES:
|
||||
@@ -574,10 +574,10 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
OutputMotionAnalyzedFrames(false, cc);
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status MotionAnalysisCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status MotionAnalysisCalculator::Close(CalculatorContext* cc) {
|
||||
// Guard against empty videos.
|
||||
if (motion_analysis_) {
|
||||
OutputMotionAnalyzedFrames(true, cc);
|
||||
@@ -588,7 +588,7 @@ REGISTER_CALCULATOR(MotionAnalysisCalculator);
|
||||
<< meta_motions_.size();
|
||||
}
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void MotionAnalysisCalculator::OutputMotionAnalyzedFrames(
|
||||
@@ -688,7 +688,7 @@ void MotionAnalysisCalculator::OutputMotionAnalyzedFrames(
|
||||
}
|
||||
}
|
||||
|
||||
::mediapipe::Status MotionAnalysisCalculator::InitOnProcess(
|
||||
mediapipe::Status MotionAnalysisCalculator::InitOnProcess(
|
||||
InputStream* video_stream, InputStream* selection_stream) {
|
||||
if (video_stream) {
|
||||
frame_width_ = video_stream->Get<ImageFrame>().Width();
|
||||
@@ -761,7 +761,7 @@ void MotionAnalysisCalculator::OutputMotionAnalyzedFrames(
|
||||
motion_options->set_filter_initialized_irls_weights(true);
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
bool MotionAnalysisCalculator::ParseModelCSV(
|
||||
|
||||
@@ -86,7 +86,7 @@ ImageFormat::Format GetImageFormat(int num_channels) {
|
||||
//
|
||||
class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc) {
|
||||
cc->InputSidePackets().Tag("INPUT_FILE_PATH").Set<std::string>();
|
||||
cc->Outputs().Tag("VIDEO").Set<ImageFrame>();
|
||||
if (cc->Outputs().HasTag("VIDEO_PRESTREAM")) {
|
||||
@@ -95,15 +95,15 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
if (cc->OutputSidePackets().HasTag("SAVED_AUDIO_PATH")) {
|
||||
cc->OutputSidePackets().Tag("SAVED_AUDIO_PATH").Set<std::string>();
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
mediapipe::Status Open(CalculatorContext* cc) override {
|
||||
const std::string& input_file_path =
|
||||
cc->InputSidePackets().Tag("INPUT_FILE_PATH").Get<std::string>();
|
||||
cap_ = absl::make_unique<cv::VideoCapture>(input_file_path);
|
||||
if (!cap_->isOpened()) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Fail to open video file at " << input_file_path;
|
||||
}
|
||||
width_ = static_cast<int>(cap_->get(cv::CAP_PROP_FRAME_WIDTH));
|
||||
@@ -116,19 +116,19 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
cv::Mat frame;
|
||||
cap_->read(frame);
|
||||
if (frame.empty()) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Fail to read any frames from the video file at "
|
||||
<< input_file_path;
|
||||
}
|
||||
format_ = GetImageFormat(frame.channels());
|
||||
if (format_ == ImageFormat::UNKNOWN) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Unsupported video format of the video file at "
|
||||
<< input_file_path;
|
||||
}
|
||||
|
||||
if (fps <= 0 || frame_count_ <= 0 || width_ <= 0 || height_ <= 0) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Fail to make video header due to the incorrect metadata from "
|
||||
"the video file at "
|
||||
<< input_file_path;
|
||||
@@ -170,17 +170,17 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
.Set(MakePacket<std::string>(std::string()));
|
||||
}
|
||||
#else
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "OpenCVVideoDecoderCalculator can't save the audio file "
|
||||
"because FFmpeg is not installed. Please remove "
|
||||
"output_side_packet: \"SAVED_AUDIO_PATH\" from the node "
|
||||
"config.";
|
||||
#endif
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override {
|
||||
mediapipe::Status Process(CalculatorContext* cc) override {
|
||||
auto image_frame = absl::make_unique<ImageFrame>(format_, width_, height_,
|
||||
/*alignment_boundary=*/1);
|
||||
// Use microsecond as the unit of time.
|
||||
@@ -213,10 +213,10 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
decoded_frames_++;
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override {
|
||||
mediapipe::Status Close(CalculatorContext* cc) override {
|
||||
if (cap_ && cap_->isOpened()) {
|
||||
cap_->release();
|
||||
}
|
||||
@@ -225,7 +225,7 @@ class OpenCvVideoDecoderCalculator : public CalculatorBase {
|
||||
<< frame_count_ << " vs decoded frames: " << decoded_frames_
|
||||
<< ").";
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -76,20 +76,20 @@ namespace mediapipe {
|
||||
//
|
||||
class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Close(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status SetUpVideoWriter(float frame_rate, int width, int height);
|
||||
mediapipe::Status SetUpVideoWriter(float frame_rate, int width, int height);
|
||||
|
||||
std::string output_file_path_;
|
||||
int four_cc_;
|
||||
std::unique_ptr<cv::VideoWriter> writer_;
|
||||
};
|
||||
|
||||
::mediapipe::Status OpenCvVideoEncoderCalculator::GetContract(
|
||||
mediapipe::Status OpenCvVideoEncoderCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
RET_CHECK(cc->Inputs().HasTag("VIDEO"));
|
||||
cc->Inputs().Tag("VIDEO").Set<ImageFrame>();
|
||||
@@ -101,10 +101,10 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
if (cc->InputSidePackets().HasTag("AUDIO_FILE_PATH")) {
|
||||
cc->InputSidePackets().Tag("AUDIO_FILE_PATH").Set<std::string>();
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvVideoEncoderCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status OpenCvVideoEncoderCalculator::Open(CalculatorContext* cc) {
|
||||
OpenCvVideoEncoderCalculatorOptions options =
|
||||
cc->Options<OpenCvVideoEncoderCalculatorOptions>();
|
||||
RET_CHECK(options.has_codec() && options.codec().length() == 4)
|
||||
@@ -128,13 +128,12 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
// from the video header directly. The calculator will receive the video
|
||||
// header packet at timestamp prestream.
|
||||
if (cc->Inputs().HasTag("VIDEO_PRESTREAM")) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
return SetUpVideoWriter(options.fps(), options.width(), options.height());
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvVideoEncoderCalculator::Process(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::Status OpenCvVideoEncoderCalculator::Process(CalculatorContext* cc) {
|
||||
if (cc->InputTimestamp() == Timestamp::PreStream()) {
|
||||
const VideoHeader& video_header =
|
||||
cc->Inputs().Tag("VIDEO_PRESTREAM").Get<VideoHeader>();
|
||||
@@ -149,7 +148,7 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
if (format == ImageFormat::GRAY8) {
|
||||
frame = formats::MatView(&image_frame);
|
||||
if (frame.empty()) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Receive empty frame at timestamp "
|
||||
<< cc->Inputs().Tag("VIDEO").Value().Timestamp()
|
||||
<< " in OpenCvVideoEncoderCalculator::Process()";
|
||||
@@ -157,7 +156,7 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
} else {
|
||||
cv::Mat tmp_frame = formats::MatView(&image_frame);
|
||||
if (tmp_frame.empty()) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Receive empty frame at timestamp "
|
||||
<< cc->Inputs().Tag("VIDEO").Value().Timestamp()
|
||||
<< " in OpenCvVideoEncoderCalculator::Process()";
|
||||
@@ -167,15 +166,15 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
} else if (format == ImageFormat::SRGBA) {
|
||||
cv::cvtColor(tmp_frame, frame, cv::COLOR_RGBA2BGR);
|
||||
} else {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Unsupported image format: " << format;
|
||||
}
|
||||
}
|
||||
writer_->write(frame);
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvVideoEncoderCalculator::Close(CalculatorContext* cc) {
|
||||
mediapipe::Status OpenCvVideoEncoderCalculator::Close(CalculatorContext* cc) {
|
||||
if (writer_ && writer_->isOpened()) {
|
||||
writer_->release();
|
||||
}
|
||||
@@ -199,17 +198,17 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
}
|
||||
|
||||
#else
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "OpenCVVideoEncoderCalculator can't attach the audio tracks to "
|
||||
"the video because FFmpeg is not installed. Please remove "
|
||||
"input_side_packet: \"AUDIO_FILE_PATH\" from the node "
|
||||
"config.";
|
||||
#endif
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status OpenCvVideoEncoderCalculator::SetUpVideoWriter(
|
||||
mediapipe::Status OpenCvVideoEncoderCalculator::SetUpVideoWriter(
|
||||
float frame_rate, int width, int height) {
|
||||
RET_CHECK(frame_rate > 0 && width > 0 && height > 0)
|
||||
<< "Invalid video metadata: frame_rate=" << frame_rate
|
||||
@@ -217,10 +216,10 @@ class OpenCvVideoEncoderCalculator : public CalculatorBase {
|
||||
writer_ = absl::make_unique<cv::VideoWriter>(
|
||||
output_file_path_, four_cc_, frame_rate, cv::Size(width, height));
|
||||
if (!writer_->isOpened()) {
|
||||
return ::mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
return mediapipe::InvalidArgumentErrorBuilder(MEDIAPIPE_LOC)
|
||||
<< "Fail to open file at " << output_file_path_;
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(OpenCvVideoEncoderCalculator);
|
||||
|
||||
@@ -139,10 +139,10 @@ Detection GetAxisAlignedDetectionFromTrackedDetection(
|
||||
// }
|
||||
class TrackedDetectionManagerCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
// Adds new list of detections to |waiting_for_update_detections_|.
|
||||
@@ -161,7 +161,7 @@ class TrackedDetectionManagerCalculator : public CalculatorBase {
|
||||
};
|
||||
REGISTER_CALCULATOR(TrackedDetectionManagerCalculator);
|
||||
|
||||
::mediapipe::Status TrackedDetectionManagerCalculator::GetContract(
|
||||
mediapipe::Status TrackedDetectionManagerCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
if (cc->Inputs().HasTag(kDetectionsTag)) {
|
||||
cc->Inputs().Tag(kDetectionsTag).Set<std::vector<Detection>>();
|
||||
@@ -183,19 +183,19 @@ REGISTER_CALCULATOR(TrackedDetectionManagerCalculator);
|
||||
cc->Outputs().Tag(kDetectionBoxesTag).Set<std::vector<NormalizedRect>>();
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status TrackedDetectionManagerCalculator::Open(
|
||||
mediapipe::Status TrackedDetectionManagerCalculator::Open(
|
||||
CalculatorContext* cc) {
|
||||
mediapipe::TrackedDetectionManagerCalculatorOptions options =
|
||||
cc->Options<mediapipe::TrackedDetectionManagerCalculatorOptions>();
|
||||
tracked_detection_manager_.SetConfig(
|
||||
options.tracked_detection_manager_options());
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status TrackedDetectionManagerCalculator::Process(
|
||||
mediapipe::Status TrackedDetectionManagerCalculator::Process(
|
||||
CalculatorContext* cc) {
|
||||
if (cc->Inputs().HasTag(kTrackingBoxesTag) &&
|
||||
!cc->Inputs().Tag(kTrackingBoxesTag).IsEmpty()) {
|
||||
@@ -296,7 +296,7 @@ REGISTER_CALCULATOR(TrackedDetectionManagerCalculator);
|
||||
AddDetectionList(detection_list, cc);
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
void TrackedDetectionManagerCalculator::AddDetectionList(
|
||||
|
||||
@@ -52,14 +52,14 @@ std::string GetTestDir() {
|
||||
CFURLGetFileSystemRepresentation(
|
||||
bundle_url, true, reinterpret_cast<UInt8*>(path), sizeof(path));
|
||||
CFRelease(bundle_url);
|
||||
return ::mediapipe::file::JoinPath(path, "testdata");
|
||||
return mediapipe::file::JoinPath(path, "testdata");
|
||||
#elif defined(__ANDROID__)
|
||||
char path[1024];
|
||||
getcwd(path, sizeof(path));
|
||||
return ::mediapipe::file::JoinPath(path,
|
||||
"mediapipe/calculators/video/testdata");
|
||||
return mediapipe::file::JoinPath(path,
|
||||
"mediapipe/calculators/video/testdata");
|
||||
#else
|
||||
return ::mediapipe::file::JoinPath(
|
||||
return mediapipe::file::JoinPath(
|
||||
"./",
|
||||
// This should match the path of the output files
|
||||
// of the genrule() that generates test model files.
|
||||
|
||||
@@ -74,14 +74,14 @@ cv::Mat ConvertToGrayscale(const cv::Mat& image) {
|
||||
// num_threads: 10
|
||||
class Tvl1OpticalFlowCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status CalculateOpticalFlow(const ImageFrame& current_frame,
|
||||
const ImageFrame& next_frame,
|
||||
OpticalFlowField* flow);
|
||||
mediapipe::Status CalculateOpticalFlow(const ImageFrame& current_frame,
|
||||
const ImageFrame& next_frame,
|
||||
OpticalFlowField* flow);
|
||||
bool forward_requested_ = false;
|
||||
bool backward_requested_ = false;
|
||||
// Stores the idle DenseOpticalFlow objects.
|
||||
@@ -93,11 +93,11 @@ class Tvl1OpticalFlowCalculator : public CalculatorBase {
|
||||
absl::Mutex mutex_;
|
||||
};
|
||||
|
||||
::mediapipe::Status Tvl1OpticalFlowCalculator::GetContract(
|
||||
mediapipe::Status Tvl1OpticalFlowCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
if (!cc->Inputs().HasTag("FIRST_FRAME") ||
|
||||
!cc->Inputs().HasTag("SECOND_FRAME")) {
|
||||
return ::mediapipe::InvalidArgumentError(
|
||||
return mediapipe::InvalidArgumentError(
|
||||
"Missing required input streams. Both FIRST_FRAME and SECOND_FRAME "
|
||||
"must be specified.");
|
||||
}
|
||||
@@ -109,10 +109,10 @@ class Tvl1OpticalFlowCalculator : public CalculatorBase {
|
||||
if (cc->Outputs().HasTag("BACKWARD_FLOW")) {
|
||||
cc->Outputs().Tag("BACKWARD_FLOW").Set<OpticalFlowField>();
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Tvl1OpticalFlowCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status Tvl1OpticalFlowCalculator::Open(CalculatorContext* cc) {
|
||||
{
|
||||
absl::MutexLock lock(&mutex_);
|
||||
tvl1_computers_.emplace_back(cv::createOptFlow_DualTVL1());
|
||||
@@ -124,10 +124,10 @@ class Tvl1OpticalFlowCalculator : public CalculatorBase {
|
||||
backward_requested_ = true;
|
||||
}
|
||||
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Tvl1OpticalFlowCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status Tvl1OpticalFlowCalculator::Process(CalculatorContext* cc) {
|
||||
const ImageFrame& first_frame =
|
||||
cc->Inputs().Tag("FIRST_FRAME").Value().Get<ImageFrame>();
|
||||
const ImageFrame& second_frame =
|
||||
@@ -148,10 +148,10 @@ class Tvl1OpticalFlowCalculator : public CalculatorBase {
|
||||
.Tag("BACKWARD_FLOW")
|
||||
.Add(backward_optical_flow_field.release(), cc->InputTimestamp());
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status Tvl1OpticalFlowCalculator::CalculateOpticalFlow(
|
||||
mediapipe::Status Tvl1OpticalFlowCalculator::CalculateOpticalFlow(
|
||||
const ImageFrame& current_frame, const ImageFrame& next_frame,
|
||||
OpticalFlowField* flow) {
|
||||
CHECK(flow);
|
||||
@@ -184,7 +184,7 @@ class Tvl1OpticalFlowCalculator : public CalculatorBase {
|
||||
absl::MutexLock lock(&mutex_);
|
||||
tvl1_computers_.push_back(tvl1_computer);
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
REGISTER_CALCULATOR(Tvl1OpticalFlowCalculator);
|
||||
|
||||
@@ -45,13 +45,13 @@ namespace mediapipe {
|
||||
// }
|
||||
class VideoPreStreamCalculator : public CalculatorBase {
|
||||
public:
|
||||
static ::mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
::mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
::mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
static mediapipe::Status GetContract(CalculatorContract* cc);
|
||||
mediapipe::Status Open(CalculatorContext* cc) override;
|
||||
mediapipe::Status Process(CalculatorContext* cc) override;
|
||||
|
||||
private:
|
||||
::mediapipe::Status ProcessWithFrameRateInPreStream(CalculatorContext* cc);
|
||||
::mediapipe::Status ProcessWithFrameRateInOptions(CalculatorContext* cc);
|
||||
mediapipe::Status ProcessWithFrameRateInPreStream(CalculatorContext* cc);
|
||||
mediapipe::Status ProcessWithFrameRateInOptions(CalculatorContext* cc);
|
||||
|
||||
std::unique_ptr<VideoHeader> header_;
|
||||
bool frame_rate_in_prestream_ = false;
|
||||
@@ -60,7 +60,7 @@ class VideoPreStreamCalculator : public CalculatorBase {
|
||||
|
||||
REGISTER_CALCULATOR(VideoPreStreamCalculator);
|
||||
|
||||
::mediapipe::Status VideoPreStreamCalculator::GetContract(
|
||||
mediapipe::Status VideoPreStreamCalculator::GetContract(
|
||||
CalculatorContract* cc) {
|
||||
if (!cc->Inputs().UsesTags()) {
|
||||
cc->Inputs().Index(0).Set<ImageFrame>();
|
||||
@@ -69,17 +69,17 @@ REGISTER_CALCULATOR(VideoPreStreamCalculator);
|
||||
cc->Inputs().Tag("VIDEO_PRESTREAM").Set<VideoHeader>();
|
||||
}
|
||||
cc->Outputs().Index(0).Set<VideoHeader>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status VideoPreStreamCalculator::Open(CalculatorContext* cc) {
|
||||
mediapipe::Status VideoPreStreamCalculator::Open(CalculatorContext* cc) {
|
||||
frame_rate_in_prestream_ = cc->Inputs().UsesTags() &&
|
||||
cc->Inputs().HasTag("FRAME") &&
|
||||
cc->Inputs().HasTag("VIDEO_PRESTREAM");
|
||||
header_ = absl::make_unique<VideoHeader>();
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
::mediapipe::Status VideoPreStreamCalculator::ProcessWithFrameRateInPreStream(
|
||||
mediapipe::Status VideoPreStreamCalculator::ProcessWithFrameRateInPreStream(
|
||||
CalculatorContext* cc) {
|
||||
cc->GetCounter("ProcessWithFrameRateInPreStream")->Increment();
|
||||
if (cc->InputTimestamp() == Timestamp::PreStream()) {
|
||||
@@ -99,13 +99,13 @@ REGISTER_CALCULATOR(VideoPreStreamCalculator);
|
||||
cc->Outputs().Index(0).Add(header_.release(), Timestamp::PreStream());
|
||||
emitted_ = true;
|
||||
}
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
::mediapipe::Status VideoPreStreamCalculator::Process(CalculatorContext* cc) {
|
||||
mediapipe::Status VideoPreStreamCalculator::Process(CalculatorContext* cc) {
|
||||
cc->GetCounter("Process")->Increment();
|
||||
if (emitted_) {
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
if (frame_rate_in_prestream_) {
|
||||
return ProcessWithFrameRateInPreStream(cc);
|
||||
@@ -114,7 +114,7 @@ REGISTER_CALCULATOR(VideoPreStreamCalculator);
|
||||
}
|
||||
}
|
||||
|
||||
::mediapipe::Status VideoPreStreamCalculator::ProcessWithFrameRateInOptions(
|
||||
mediapipe::Status VideoPreStreamCalculator::ProcessWithFrameRateInOptions(
|
||||
CalculatorContext* cc) {
|
||||
cc->GetCounter("ProcessWithFrameRateInOptions")->Increment();
|
||||
RET_CHECK_NE(cc->InputTimestamp(), Timestamp::PreStream());
|
||||
@@ -136,7 +136,7 @@ REGISTER_CALCULATOR(VideoPreStreamCalculator);
|
||||
RET_CHECK_NE(header_->frame_rate, 0.0) << "frame rate should be non-zero";
|
||||
cc->Outputs().Index(0).Add(header_.release(), Timestamp::PreStream());
|
||||
emitted_ = true;
|
||||
return ::mediapipe::OkStatus();
|
||||
return mediapipe::OkStatus();
|
||||
}
|
||||
|
||||
} // namespace mediapipe
|
||||
|
||||
@@ -118,7 +118,7 @@ TEST(VideoPreStreamCalculatorTest, FailsWithoutFrameRateInOptions) {
|
||||
"frame",
|
||||
Adopt(new ImageFrame(ImageFormat::SRGB, 1, 2)).At(Timestamp(0))));
|
||||
MP_ASSERT_OK(graph.CloseInputStream("frame"));
|
||||
::mediapipe::Status status = graph.WaitUntilDone();
|
||||
mediapipe::Status status = graph.WaitUntilDone();
|
||||
EXPECT_FALSE(status.ok());
|
||||
EXPECT_THAT(status.ToString(),
|
||||
testing::HasSubstr("frame rate should be non-zero"));
|
||||
@@ -144,7 +144,7 @@ TEST(VideoPreStreamCalculatorTest, FailsWithoutFrameRateInPreStream1) {
|
||||
Adopt(new ImageFrame(ImageFormat::SRGB, 1, 2)).At(Timestamp(0))));
|
||||
MP_ASSERT_OK(graph.CloseInputStream("frame"));
|
||||
MP_ASSERT_OK(graph.CloseInputStream("input_header"));
|
||||
::mediapipe::Status status = graph.WaitUntilDone();
|
||||
mediapipe::Status status = graph.WaitUntilDone();
|
||||
EXPECT_FALSE(status.ok());
|
||||
EXPECT_THAT(status.ToString(),
|
||||
testing::HasSubstr("frame rate should be non-zero"));
|
||||
@@ -177,7 +177,7 @@ TEST(VideoPreStreamCalculatorTest, FailsWithoutFrameRateInPreStream2) {
|
||||
"frame",
|
||||
Adopt(new ImageFrame(ImageFormat::SRGB, 1, 2)).At(Timestamp(0))));
|
||||
MP_ASSERT_OK(graph.CloseInputStream("frame"));
|
||||
::mediapipe::Status status = graph.WaitUntilDone();
|
||||
mediapipe::Status status = graph.WaitUntilDone();
|
||||
EXPECT_FALSE(status.ok());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user