// Copyright 2019 The MediaPipe Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// 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.
syntax = "proto2";
package mediapipe;
import "mediapipe/util/tracking/camera_motion.proto";
import "mediapipe/util/tracking/frame_selection_solution_evaluator.proto";
import "mediapipe/util/tracking/region_flow.proto";
// Stores selected timestamps and corresponding frame index.
message FrameSelectionTimestamp {
optional int64 timestamp = 1; // Timestamp of the selected frame.
// Frame index of the selected frame in the initial video stream. If this
// timestamp was manufactured, this will be the index of the initial frame.
optional int32 frame_idx = 2;
// If this timestamp was manufactured, the timestamp of the original frame.
optional int64 processed_from_timestamp = 3 [default = -1];
}
// Stores the result of the frame selection, with composited features.
// Next index: 6
message FrameSelectionResult {
optional int64 timestamp = 1; // Timestamp of the selected frame.
// Frame index of the selected frame in the initial video stream. If this
// timestamp was manufactured, this will be the index of the initial frame.
optional int32 frame_idx = 2;
// CameraMotion from selected item to previous selected item.
optional CameraMotion camera_motion = 3;
// Features from selected item to previous selected item.
optional RegionFlowFeatureList features = 4;
// If this FrameSelectionResult was the result of processing a previous one,
// the timestamp of the original frame.
optional int64 processed_from_timestamp = 5 [default = -1];
}
// Next index: 7
message FrameSelectionCriterion {
// Interval at which frames should be sampled; set to zero if sampling should
// not be enforced (i.e. selection is performed w.r.t. other criteria).
optional int32 sampling_rate = 1 [default = 0];
// Bandwidth used during dynamic programming. The larger the bandwidth the
// more accurate the result w.r.t. the specified sampling rate. Smaller
// bandwidth's bias the solution suboptimally to center around the mean
// frame numbers of the sampling rate.
// If in (0, 1), assumed to specify fraction of total number of input frames,
// otherwise must be an integer.
optional float bandwidth_frames = 2 [default = 50];
// Search radius for dynamic programming (how many frames you are allowed to
// search around the previous frame).
optional int32 search_radius_frames = 3 [default = 1];
// Allows one to specify custom solution selection criteria (i.e. different
// way to choose the best row of the computed cost matrix).
optional FrameSelectionSolutionEvaluatorType solution_evaluator = 4;
// Outputs a fixed number of frames and automatically sets the appropriate
// sampling rate. Set to 0 by default (i.e. not enabled).
optional int32 max_output_frames = 5 [default = 0];
}
// Options for computing frame selection.
// TODO: Support multiple criteria if required. Currently uses only the
// first one.
message FrameSelectionOptions {
repeated FrameSelectionCriterion criterion = 1;
// FrameSelection buffers incoming CameraMotions for specified chunk size
// and creates cost matrices upon reaching the limit.
// TODO: Implement if necessary (currently nothing is cleared upon
// reaching the limit).
optional int32 chunk_size = 2 [default = 100];
}