xref: /aosp_15_r20/external/googleapis/google/streetview/publish/v1/resources.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC
2*d5c09012SAndroid Build Coastguard Worker//
3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*d5c09012SAndroid Build Coastguard Worker//
7*d5c09012SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*d5c09012SAndroid Build Coastguard Worker//
9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*d5c09012SAndroid Build Coastguard Worker// limitations under the License.
14*d5c09012SAndroid Build Coastguard Worker
15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3";
16*d5c09012SAndroid Build Coastguard Worker
17*d5c09012SAndroid Build Coastguard Workerpackage google.streetview.publish.v1;
18*d5c09012SAndroid Build Coastguard Worker
19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto";
20*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto";
21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto";
22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto";
23*d5c09012SAndroid Build Coastguard Workerimport "google/type/latlng.proto";
24*d5c09012SAndroid Build Coastguard Worker
25*d5c09012SAndroid Build Coastguard Workeroption go_package = "google.golang.org/genproto/googleapis/streetview/publish/v1;publish";
26*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "StreetViewPublishResources";
27*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.geo.ugc.streetview.publish.v1";
28*d5c09012SAndroid Build Coastguard Worker
29*d5c09012SAndroid Build Coastguard Worker// Upload reference for media files.
30*d5c09012SAndroid Build Coastguard Workermessage UploadRef {
31*d5c09012SAndroid Build Coastguard Worker  // Required.
32*d5c09012SAndroid Build Coastguard Worker  oneof file_source {
33*d5c09012SAndroid Build Coastguard Worker    // An upload reference should be unique for each user. It follows
34*d5c09012SAndroid Build Coastguard Worker    // the form:
35*d5c09012SAndroid Build Coastguard Worker    // "https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}"
36*d5c09012SAndroid Build Coastguard Worker    string upload_url = 1;
37*d5c09012SAndroid Build Coastguard Worker  }
38*d5c09012SAndroid Build Coastguard Worker}
39*d5c09012SAndroid Build Coastguard Worker
40*d5c09012SAndroid Build Coastguard Worker// Identifier for a [Photo][google.streetview.publish.v1.Photo].
41*d5c09012SAndroid Build Coastguard Workermessage PhotoId {
42*d5c09012SAndroid Build Coastguard Worker  // A unique identifier for a photo.
43*d5c09012SAndroid Build Coastguard Worker  string id = 1;
44*d5c09012SAndroid Build Coastguard Worker}
45*d5c09012SAndroid Build Coastguard Worker
46*d5c09012SAndroid Build Coastguard Worker// Level information containing level number and its corresponding name.
47*d5c09012SAndroid Build Coastguard Workermessage Level {
48*d5c09012SAndroid Build Coastguard Worker  // Optional. Floor number, used for ordering. 0 indicates the ground level, 1
49*d5c09012SAndroid Build Coastguard Worker  // indicates the first level above ground level, -1 indicates the first level
50*d5c09012SAndroid Build Coastguard Worker  // under ground level. Non-integer values are OK.
51*d5c09012SAndroid Build Coastguard Worker  double number = 1 [(google.api.field_behavior) = OPTIONAL];
52*d5c09012SAndroid Build Coastguard Worker
53*d5c09012SAndroid Build Coastguard Worker  // Required. A name assigned to this Level, restricted to 3 characters.
54*d5c09012SAndroid Build Coastguard Worker  // Consider how the elevator buttons would be labeled for this level if there
55*d5c09012SAndroid Build Coastguard Worker  // was an elevator.
56*d5c09012SAndroid Build Coastguard Worker  string name = 2 [(google.api.field_behavior) = REQUIRED];
57*d5c09012SAndroid Build Coastguard Worker}
58*d5c09012SAndroid Build Coastguard Worker
59*d5c09012SAndroid Build Coastguard Worker// Raw pose measurement for an entity.
60*d5c09012SAndroid Build Coastguard Workermessage Pose {
61*d5c09012SAndroid Build Coastguard Worker  // Latitude and longitude pair of the pose, as explained here:
62*d5c09012SAndroid Build Coastguard Worker  // https://cloud.google.com/datastore/docs/reference/rest/Shared.Types/LatLng
63*d5c09012SAndroid Build Coastguard Worker  // When creating a [Photo][google.streetview.publish.v1.Photo], if the
64*d5c09012SAndroid Build Coastguard Worker  // latitude and longitude pair are not provided, the geolocation from the
65*d5c09012SAndroid Build Coastguard Worker  // exif header is used. A latitude and longitude pair not provided in the
66*d5c09012SAndroid Build Coastguard Worker  // photo or exif header causes the photo process to fail.
67*d5c09012SAndroid Build Coastguard Worker  google.type.LatLng lat_lng_pair = 1;
68*d5c09012SAndroid Build Coastguard Worker
69*d5c09012SAndroid Build Coastguard Worker  // Altitude of the pose in meters above WGS84 ellipsoid.
70*d5c09012SAndroid Build Coastguard Worker  // NaN indicates an unmeasured quantity.
71*d5c09012SAndroid Build Coastguard Worker  double altitude = 2;
72*d5c09012SAndroid Build Coastguard Worker
73*d5c09012SAndroid Build Coastguard Worker  // The following pose parameters pertain to the center of the photo. They
74*d5c09012SAndroid Build Coastguard Worker  // match https://developers.google.com/streetview/spherical-metadata.
75*d5c09012SAndroid Build Coastguard Worker  // Compass heading, measured at the center of the photo in degrees clockwise
76*d5c09012SAndroid Build Coastguard Worker  // from North. Value must be >=0 and <360. NaN indicates an unmeasured
77*d5c09012SAndroid Build Coastguard Worker  // quantity.
78*d5c09012SAndroid Build Coastguard Worker  double heading = 3;
79*d5c09012SAndroid Build Coastguard Worker
80*d5c09012SAndroid Build Coastguard Worker  // Pitch, measured at the center of the photo in degrees. Value must be >=-90
81*d5c09012SAndroid Build Coastguard Worker  // and <= 90. A value of -90 means looking directly down, and a value of 90
82*d5c09012SAndroid Build Coastguard Worker  // means looking directly up.
83*d5c09012SAndroid Build Coastguard Worker  // NaN indicates an unmeasured quantity.
84*d5c09012SAndroid Build Coastguard Worker  double pitch = 4;
85*d5c09012SAndroid Build Coastguard Worker
86*d5c09012SAndroid Build Coastguard Worker  // Roll, measured in degrees. Value must be >= 0 and <360. A value of 0
87*d5c09012SAndroid Build Coastguard Worker  // means level with the horizon.
88*d5c09012SAndroid Build Coastguard Worker  // NaN indicates an unmeasured quantity.
89*d5c09012SAndroid Build Coastguard Worker  double roll = 5;
90*d5c09012SAndroid Build Coastguard Worker
91*d5c09012SAndroid Build Coastguard Worker  // Time of the GPS record since UTC epoch.
92*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp gps_record_timestamp_unix_epoch = 6;
93*d5c09012SAndroid Build Coastguard Worker
94*d5c09012SAndroid Build Coastguard Worker  // Level (the floor in a building) used to configure vertical navigation.
95*d5c09012SAndroid Build Coastguard Worker  Level level = 7;
96*d5c09012SAndroid Build Coastguard Worker
97*d5c09012SAndroid Build Coastguard Worker  // The estimated horizontal accuracy of this pose in meters with 68%
98*d5c09012SAndroid Build Coastguard Worker  // confidence (one standard deviation). For example, on Android, this value is
99*d5c09012SAndroid Build Coastguard Worker  // available from this method:
100*d5c09012SAndroid Build Coastguard Worker  // https://developer.android.com/reference/android/location/Location#getAccuracy().
101*d5c09012SAndroid Build Coastguard Worker  // Other platforms have different methods of obtaining similar accuracy
102*d5c09012SAndroid Build Coastguard Worker  // estimations.
103*d5c09012SAndroid Build Coastguard Worker  float accuracy_meters = 9;
104*d5c09012SAndroid Build Coastguard Worker}
105*d5c09012SAndroid Build Coastguard Worker
106*d5c09012SAndroid Build Coastguard Worker// IMU data from the device sensors.
107*d5c09012SAndroid Build Coastguard Workermessage Imu {
108*d5c09012SAndroid Build Coastguard Worker  // A Generic 3d measurement sample.
109*d5c09012SAndroid Build Coastguard Worker  message Measurement3d {
110*d5c09012SAndroid Build Coastguard Worker    // The timestamp of the IMU measurement.
111*d5c09012SAndroid Build Coastguard Worker    google.protobuf.Timestamp capture_time = 1;
112*d5c09012SAndroid Build Coastguard Worker
113*d5c09012SAndroid Build Coastguard Worker    // The sensor measurement in the x axis.
114*d5c09012SAndroid Build Coastguard Worker    float x = 2;
115*d5c09012SAndroid Build Coastguard Worker
116*d5c09012SAndroid Build Coastguard Worker    // The sensor measurement in the y axis.
117*d5c09012SAndroid Build Coastguard Worker    float y = 3;
118*d5c09012SAndroid Build Coastguard Worker
119*d5c09012SAndroid Build Coastguard Worker    // The sensor measurement in the z axis.
120*d5c09012SAndroid Build Coastguard Worker    float z = 4;
121*d5c09012SAndroid Build Coastguard Worker  }
122*d5c09012SAndroid Build Coastguard Worker
123*d5c09012SAndroid Build Coastguard Worker  // The accelerometer measurements in meters/sec^2 with increasing timestamps
124*d5c09012SAndroid Build Coastguard Worker  // from devices.
125*d5c09012SAndroid Build Coastguard Worker  repeated Measurement3d accel_mpsps = 1;
126*d5c09012SAndroid Build Coastguard Worker
127*d5c09012SAndroid Build Coastguard Worker  // The gyroscope measurements in radians/sec with increasing timestamps from
128*d5c09012SAndroid Build Coastguard Worker  // devices.
129*d5c09012SAndroid Build Coastguard Worker  repeated Measurement3d gyro_rps = 2;
130*d5c09012SAndroid Build Coastguard Worker
131*d5c09012SAndroid Build Coastguard Worker  // The magnetometer measurements of the magnetic field in microtesla (uT) with
132*d5c09012SAndroid Build Coastguard Worker  // increasing timestamps from devices.
133*d5c09012SAndroid Build Coastguard Worker  repeated Measurement3d mag_ut = 3;
134*d5c09012SAndroid Build Coastguard Worker}
135*d5c09012SAndroid Build Coastguard Worker
136*d5c09012SAndroid Build Coastguard Worker// Place metadata for an entity.
137*d5c09012SAndroid Build Coastguard Workermessage Place {
138*d5c09012SAndroid Build Coastguard Worker  // Place identifier, as described in
139*d5c09012SAndroid Build Coastguard Worker  // https://developers.google.com/places/place-id.
140*d5c09012SAndroid Build Coastguard Worker  string place_id = 1;
141*d5c09012SAndroid Build Coastguard Worker
142*d5c09012SAndroid Build Coastguard Worker  // Output only. The name of the place, localized to the language_code.
143*d5c09012SAndroid Build Coastguard Worker  string name = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
144*d5c09012SAndroid Build Coastguard Worker
145*d5c09012SAndroid Build Coastguard Worker  // Output only. The language_code that the name is localized with. This should
146*d5c09012SAndroid Build Coastguard Worker  // be the language_code specified in the request, but may be a fallback.
147*d5c09012SAndroid Build Coastguard Worker  string language_code = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
148*d5c09012SAndroid Build Coastguard Worker}
149*d5c09012SAndroid Build Coastguard Worker
150*d5c09012SAndroid Build Coastguard Worker// A connection is the link from a source photo to a destination photo.
151*d5c09012SAndroid Build Coastguard Workermessage Connection {
152*d5c09012SAndroid Build Coastguard Worker  // Required. The destination of the connection from the containing photo to
153*d5c09012SAndroid Build Coastguard Worker  // another photo.
154*d5c09012SAndroid Build Coastguard Worker  PhotoId target = 1 [(google.api.field_behavior) = REQUIRED];
155*d5c09012SAndroid Build Coastguard Worker}
156*d5c09012SAndroid Build Coastguard Worker
157*d5c09012SAndroid Build Coastguard Worker// Photo is used to store 360 photos along with photo metadata.
158*d5c09012SAndroid Build Coastguard Workermessage Photo {
159*d5c09012SAndroid Build Coastguard Worker  // Status of rights transfer.
160*d5c09012SAndroid Build Coastguard Worker  enum TransferStatus {
161*d5c09012SAndroid Build Coastguard Worker    // The status of this transfer is unspecified.
162*d5c09012SAndroid Build Coastguard Worker    TRANSFER_STATUS_UNKNOWN = 0;
163*d5c09012SAndroid Build Coastguard Worker
164*d5c09012SAndroid Build Coastguard Worker    // This photo has never been in a transfer.
165*d5c09012SAndroid Build Coastguard Worker    NEVER_TRANSFERRED = 1;
166*d5c09012SAndroid Build Coastguard Worker
167*d5c09012SAndroid Build Coastguard Worker    // This photo transfer has been initiated, but the receiver has not yet
168*d5c09012SAndroid Build Coastguard Worker    // responded.
169*d5c09012SAndroid Build Coastguard Worker    PENDING = 2;
170*d5c09012SAndroid Build Coastguard Worker
171*d5c09012SAndroid Build Coastguard Worker    // The photo transfer has been completed, and this photo has been
172*d5c09012SAndroid Build Coastguard Worker    // transferred to the recipient.
173*d5c09012SAndroid Build Coastguard Worker    COMPLETED = 3;
174*d5c09012SAndroid Build Coastguard Worker
175*d5c09012SAndroid Build Coastguard Worker    // The recipient rejected this photo transfer.
176*d5c09012SAndroid Build Coastguard Worker    REJECTED = 4;
177*d5c09012SAndroid Build Coastguard Worker
178*d5c09012SAndroid Build Coastguard Worker    // The photo transfer expired before the recipient took any action.
179*d5c09012SAndroid Build Coastguard Worker    EXPIRED = 5;
180*d5c09012SAndroid Build Coastguard Worker
181*d5c09012SAndroid Build Coastguard Worker    // The sender cancelled this photo transfer.
182*d5c09012SAndroid Build Coastguard Worker    CANCELLED = 6;
183*d5c09012SAndroid Build Coastguard Worker
184*d5c09012SAndroid Build Coastguard Worker    // The recipient owns this photo due to a rights transfer.
185*d5c09012SAndroid Build Coastguard Worker    RECEIVED_VIA_TRANSFER = 7;
186*d5c09012SAndroid Build Coastguard Worker  }
187*d5c09012SAndroid Build Coastguard Worker
188*d5c09012SAndroid Build Coastguard Worker  // Publication status of the photo in Google Maps.
189*d5c09012SAndroid Build Coastguard Worker  enum MapsPublishStatus {
190*d5c09012SAndroid Build Coastguard Worker    // The status of the photo is unknown.
191*d5c09012SAndroid Build Coastguard Worker    UNSPECIFIED_MAPS_PUBLISH_STATUS = 0;
192*d5c09012SAndroid Build Coastguard Worker
193*d5c09012SAndroid Build Coastguard Worker    // The photo is published to the public through Google Maps.
194*d5c09012SAndroid Build Coastguard Worker    PUBLISHED = 1;
195*d5c09012SAndroid Build Coastguard Worker
196*d5c09012SAndroid Build Coastguard Worker    // The photo has been rejected for an unknown reason.
197*d5c09012SAndroid Build Coastguard Worker    REJECTED_UNKNOWN = 2;
198*d5c09012SAndroid Build Coastguard Worker  }
199*d5c09012SAndroid Build Coastguard Worker
200*d5c09012SAndroid Build Coastguard Worker  // Required. Output only. Required when updating a photo. Output only when
201*d5c09012SAndroid Build Coastguard Worker  // creating a photo. Identifier for the photo, which is unique among all
202*d5c09012SAndroid Build Coastguard Worker  // photos in Google.
203*d5c09012SAndroid Build Coastguard Worker  PhotoId photo_id = 1 [
204*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = REQUIRED,
205*d5c09012SAndroid Build Coastguard Worker    (google.api.field_behavior) = OUTPUT_ONLY
206*d5c09012SAndroid Build Coastguard Worker  ];
207*d5c09012SAndroid Build Coastguard Worker
208*d5c09012SAndroid Build Coastguard Worker  // Input only. Required when creating a photo. Input only. The resource URL
209*d5c09012SAndroid Build Coastguard Worker  // where the photo bytes are uploaded to.
210*d5c09012SAndroid Build Coastguard Worker  UploadRef upload_reference = 2 [(google.api.field_behavior) = INPUT_ONLY];
211*d5c09012SAndroid Build Coastguard Worker
212*d5c09012SAndroid Build Coastguard Worker  // Output only. The download URL for the photo bytes. This field is set only
213*d5c09012SAndroid Build Coastguard Worker  // when
214*d5c09012SAndroid Build Coastguard Worker  // [GetPhotoRequest.view][google.streetview.publish.v1.GetPhotoRequest.view]
215*d5c09012SAndroid Build Coastguard Worker  // is set to
216*d5c09012SAndroid Build Coastguard Worker  // [PhotoView.INCLUDE_DOWNLOAD_URL][google.streetview.publish.v1.PhotoView.INCLUDE_DOWNLOAD_URL].
217*d5c09012SAndroid Build Coastguard Worker  string download_url = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
218*d5c09012SAndroid Build Coastguard Worker
219*d5c09012SAndroid Build Coastguard Worker  // Output only. The thumbnail URL for showing a preview of the given photo.
220*d5c09012SAndroid Build Coastguard Worker  string thumbnail_url = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
221*d5c09012SAndroid Build Coastguard Worker
222*d5c09012SAndroid Build Coastguard Worker  // Output only. The share link for the photo.
223*d5c09012SAndroid Build Coastguard Worker  string share_link = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
224*d5c09012SAndroid Build Coastguard Worker
225*d5c09012SAndroid Build Coastguard Worker  // Optional. Pose of the photo.
226*d5c09012SAndroid Build Coastguard Worker  Pose pose = 4 [(google.api.field_behavior) = OPTIONAL];
227*d5c09012SAndroid Build Coastguard Worker
228*d5c09012SAndroid Build Coastguard Worker  // Optional. Connections to other photos. A connection represents the link
229*d5c09012SAndroid Build Coastguard Worker  // from this photo to another photo.
230*d5c09012SAndroid Build Coastguard Worker  repeated Connection connections = 5 [(google.api.field_behavior) = OPTIONAL];
231*d5c09012SAndroid Build Coastguard Worker
232*d5c09012SAndroid Build Coastguard Worker  // Optional. Absolute time when the photo was captured.
233*d5c09012SAndroid Build Coastguard Worker  // When the photo has no exif timestamp, this is used to set a timestamp in
234*d5c09012SAndroid Build Coastguard Worker  // the photo metadata.
235*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp capture_time = 6
236*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OPTIONAL];
237*d5c09012SAndroid Build Coastguard Worker
238*d5c09012SAndroid Build Coastguard Worker  // Output only. Time when the image was uploaded.
239*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp upload_time = 14
240*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
241*d5c09012SAndroid Build Coastguard Worker
242*d5c09012SAndroid Build Coastguard Worker  // Optional. Places where this photo belongs.
243*d5c09012SAndroid Build Coastguard Worker  repeated Place places = 7 [(google.api.field_behavior) = OPTIONAL];
244*d5c09012SAndroid Build Coastguard Worker
245*d5c09012SAndroid Build Coastguard Worker  // Output only. View count of the photo.
246*d5c09012SAndroid Build Coastguard Worker  int64 view_count = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
247*d5c09012SAndroid Build Coastguard Worker
248*d5c09012SAndroid Build Coastguard Worker  // Output only. Status of rights transfer on this photo.
249*d5c09012SAndroid Build Coastguard Worker  TransferStatus transfer_status = 12
250*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
251*d5c09012SAndroid Build Coastguard Worker
252*d5c09012SAndroid Build Coastguard Worker  // Output only. Status in Google Maps, whether this photo was published or
253*d5c09012SAndroid Build Coastguard Worker  // rejected.
254*d5c09012SAndroid Build Coastguard Worker  MapsPublishStatus maps_publish_status = 13
255*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
256*d5c09012SAndroid Build Coastguard Worker}
257*d5c09012SAndroid Build Coastguard Worker
258*d5c09012SAndroid Build Coastguard Worker// A sequence of 360 photos along with metadata.
259*d5c09012SAndroid Build Coastguard Workermessage PhotoSequence {
260*d5c09012SAndroid Build Coastguard Worker  // Primary source of GPS measurements.
261*d5c09012SAndroid Build Coastguard Worker  enum GpsSource {
262*d5c09012SAndroid Build Coastguard Worker    // GPS in raw_gps_timeline takes precedence if it exists.
263*d5c09012SAndroid Build Coastguard Worker    PHOTO_SEQUENCE = 0;
264*d5c09012SAndroid Build Coastguard Worker
265*d5c09012SAndroid Build Coastguard Worker    // GPS in Camera Motion Metadata Track (CAMM) takes precedence if it exists.
266*d5c09012SAndroid Build Coastguard Worker    CAMERA_MOTION_METADATA_TRACK = 1;
267*d5c09012SAndroid Build Coastguard Worker  }
268*d5c09012SAndroid Build Coastguard Worker
269*d5c09012SAndroid Build Coastguard Worker  // Output only. Unique identifier for the photo sequence.
270*d5c09012SAndroid Build Coastguard Worker  // This also acts as a long running operation ID if uploading is performed
271*d5c09012SAndroid Build Coastguard Worker  // asynchronously.
272*d5c09012SAndroid Build Coastguard Worker  string id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
273*d5c09012SAndroid Build Coastguard Worker
274*d5c09012SAndroid Build Coastguard Worker  // Output only. Photos with increasing timestamps.
275*d5c09012SAndroid Build Coastguard Worker  repeated Photo photos = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
276*d5c09012SAndroid Build Coastguard Worker
277*d5c09012SAndroid Build Coastguard Worker  // Input only. Required when creating photo sequence. The resource name
278*d5c09012SAndroid Build Coastguard Worker  // where the bytes of the photo sequence (in the form of video) are uploaded.
279*d5c09012SAndroid Build Coastguard Worker  UploadRef upload_reference = 3 [(google.api.field_behavior) = INPUT_ONLY];
280*d5c09012SAndroid Build Coastguard Worker
281*d5c09012SAndroid Build Coastguard Worker  // Optional. Absolute time when the photo sequence starts to be captured.
282*d5c09012SAndroid Build Coastguard Worker  // If the photo sequence is a video, this is the start time of the video.
283*d5c09012SAndroid Build Coastguard Worker  // If this field is populated in input, it overrides the capture time in the
284*d5c09012SAndroid Build Coastguard Worker  // video or XDM file.
285*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp capture_time_override = 4
286*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OPTIONAL];
287*d5c09012SAndroid Build Coastguard Worker
288*d5c09012SAndroid Build Coastguard Worker  // Output only. The time this photo sequence was created in uSV Store service.
289*d5c09012SAndroid Build Coastguard Worker  google.protobuf.Timestamp upload_time = 18
290*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
291*d5c09012SAndroid Build Coastguard Worker
292*d5c09012SAndroid Build Coastguard Worker  // Input only. Raw GPS measurements with increasing timestamps from the device
293*d5c09012SAndroid Build Coastguard Worker  // that aren't time synced with each photo. These raw measurements will be
294*d5c09012SAndroid Build Coastguard Worker  // used to infer the pose of each frame. Required in input when InputType is
295*d5c09012SAndroid Build Coastguard Worker  // VIDEO and raw GPS measurements are not in Camera Motion Metadata Track
296*d5c09012SAndroid Build Coastguard Worker  // (CAMM). User can indicate which takes precedence using gps_source if raw
297*d5c09012SAndroid Build Coastguard Worker  // GPS measurements are provided in both raw_gps_timeline and Camera Motion
298*d5c09012SAndroid Build Coastguard Worker  // Metadata Track (CAMM).
299*d5c09012SAndroid Build Coastguard Worker  repeated Pose raw_gps_timeline = 7 [(google.api.field_behavior) = INPUT_ONLY];
300*d5c09012SAndroid Build Coastguard Worker
301*d5c09012SAndroid Build Coastguard Worker  // Input only. If both raw_gps_timeline and
302*d5c09012SAndroid Build Coastguard Worker  // the Camera Motion Metadata Track (CAMM) contain GPS measurements,
303*d5c09012SAndroid Build Coastguard Worker  // indicate which takes precedence.
304*d5c09012SAndroid Build Coastguard Worker  GpsSource gps_source = 8 [(google.api.field_behavior) = INPUT_ONLY];
305*d5c09012SAndroid Build Coastguard Worker
306*d5c09012SAndroid Build Coastguard Worker  // Input only. Three axis IMU data for the collection.
307*d5c09012SAndroid Build Coastguard Worker  // If this data is too large to put in the request, then it should be put in
308*d5c09012SAndroid Build Coastguard Worker  // the CAMM track for the video. This data always takes precedence over the
309*d5c09012SAndroid Build Coastguard Worker  // equivalent CAMM data, if it exists.
310*d5c09012SAndroid Build Coastguard Worker  Imu imu = 11 [(google.api.field_behavior) = INPUT_ONLY];
311*d5c09012SAndroid Build Coastguard Worker
312*d5c09012SAndroid Build Coastguard Worker  // Output only. The processing state of this sequence.
313*d5c09012SAndroid Build Coastguard Worker  ProcessingState processing_state = 12
314*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
315*d5c09012SAndroid Build Coastguard Worker
316*d5c09012SAndroid Build Coastguard Worker  // Output only. If this sequence has processing_state = FAILED, this will
317*d5c09012SAndroid Build Coastguard Worker  // contain the reason why it failed. If the processing_state is any other
318*d5c09012SAndroid Build Coastguard Worker  // value, this field will be unset.
319*d5c09012SAndroid Build Coastguard Worker  ProcessingFailureReason failure_reason = 13
320*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
321*d5c09012SAndroid Build Coastguard Worker
322*d5c09012SAndroid Build Coastguard Worker  // Output only. If this sequence has `failure_reason` set, this may contain
323*d5c09012SAndroid Build Coastguard Worker  // additional details about the failure.
324*d5c09012SAndroid Build Coastguard Worker  ProcessingFailureDetails failure_details = 23
325*d5c09012SAndroid Build Coastguard Worker      [(google.api.field_behavior) = OUTPUT_ONLY];
326*d5c09012SAndroid Build Coastguard Worker
327*d5c09012SAndroid Build Coastguard Worker  // Output only. The computed distance of the photo sequence in meters.
328*d5c09012SAndroid Build Coastguard Worker  double distance_meters = 16 [(google.api.field_behavior) = OUTPUT_ONLY];
329*d5c09012SAndroid Build Coastguard Worker
330*d5c09012SAndroid Build Coastguard Worker  // Output only. A rectangular box that encapsulates every image in this photo
331*d5c09012SAndroid Build Coastguard Worker  // sequence.
332*d5c09012SAndroid Build Coastguard Worker  LatLngBounds sequence_bounds = 20 [(google.api.field_behavior) = OUTPUT_ONLY];
333*d5c09012SAndroid Build Coastguard Worker
334*d5c09012SAndroid Build Coastguard Worker  // Output only. The total number of views that all the published images in
335*d5c09012SAndroid Build Coastguard Worker  // this PhotoSequence have received.
336*d5c09012SAndroid Build Coastguard Worker  int64 view_count = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
337*d5c09012SAndroid Build Coastguard Worker
338*d5c09012SAndroid Build Coastguard Worker  // Output only. The filename of the upload. Does not include the directory
339*d5c09012SAndroid Build Coastguard Worker  // path. Only available if the sequence was uploaded on a platform that
340*d5c09012SAndroid Build Coastguard Worker  // provides the filename.
341*d5c09012SAndroid Build Coastguard Worker  string filename = 22 [(google.api.field_behavior) = OUTPUT_ONLY];
342*d5c09012SAndroid Build Coastguard Worker}
343*d5c09012SAndroid Build Coastguard Worker
344*d5c09012SAndroid Build Coastguard Worker// A rectangle in geographical coordinates.
345*d5c09012SAndroid Build Coastguard Workermessage LatLngBounds {
346*d5c09012SAndroid Build Coastguard Worker  // The southwest corner of these bounds.
347*d5c09012SAndroid Build Coastguard Worker  google.type.LatLng southwest = 1;
348*d5c09012SAndroid Build Coastguard Worker
349*d5c09012SAndroid Build Coastguard Worker  // The northeast corner of these bounds.
350*d5c09012SAndroid Build Coastguard Worker  google.type.LatLng northeast = 2;
351*d5c09012SAndroid Build Coastguard Worker}
352*d5c09012SAndroid Build Coastguard Worker
353*d5c09012SAndroid Build Coastguard Worker// The processing state of the sequence. The states move as follows:
354*d5c09012SAndroid Build Coastguard Worker//
355*d5c09012SAndroid Build Coastguard Worker// ```
356*d5c09012SAndroid Build Coastguard Worker//      +-------------------------+
357*d5c09012SAndroid Build Coastguard Worker//      |                         |
358*d5c09012SAndroid Build Coastguard Worker//  +---v---+  +----------+  +----+----+
359*d5c09012SAndroid Build Coastguard Worker//  |PENDING+-->PROCESSING+-->PROCESSED|
360*d5c09012SAndroid Build Coastguard Worker//  +---+---+  +----+-----+  +----+----+
361*d5c09012SAndroid Build Coastguard Worker//      |           |             |
362*d5c09012SAndroid Build Coastguard Worker//      |        +--v---+         |
363*d5c09012SAndroid Build Coastguard Worker//      +-------->FAILED<---------+
364*d5c09012SAndroid Build Coastguard Worker//               +------+
365*d5c09012SAndroid Build Coastguard Worker// ```
366*d5c09012SAndroid Build Coastguard Worker//
367*d5c09012SAndroid Build Coastguard Worker// The sequence may move to FAILED from any state. Additionally, a processed
368*d5c09012SAndroid Build Coastguard Worker// sequence may be re-processed at any time.
369*d5c09012SAndroid Build Coastguard Workerenum ProcessingState {
370*d5c09012SAndroid Build Coastguard Worker  // The state is unspecified, this is the default value.
371*d5c09012SAndroid Build Coastguard Worker  PROCESSING_STATE_UNSPECIFIED = 0;
372*d5c09012SAndroid Build Coastguard Worker
373*d5c09012SAndroid Build Coastguard Worker  // The sequence has not yet started processing.
374*d5c09012SAndroid Build Coastguard Worker  PENDING = 1;
375*d5c09012SAndroid Build Coastguard Worker
376*d5c09012SAndroid Build Coastguard Worker  // The sequence is currently in processing.
377*d5c09012SAndroid Build Coastguard Worker  PROCESSING = 2;
378*d5c09012SAndroid Build Coastguard Worker
379*d5c09012SAndroid Build Coastguard Worker  // The sequence has finished processing including refining position.
380*d5c09012SAndroid Build Coastguard Worker  PROCESSED = 3;
381*d5c09012SAndroid Build Coastguard Worker
382*d5c09012SAndroid Build Coastguard Worker  // The sequence failed processing. See FailureReason for more details.
383*d5c09012SAndroid Build Coastguard Worker  FAILED = 4;
384*d5c09012SAndroid Build Coastguard Worker}
385*d5c09012SAndroid Build Coastguard Worker
386*d5c09012SAndroid Build Coastguard Worker// The possible reasons this [PhotoSequence]
387*d5c09012SAndroid Build Coastguard Worker// [google.streetview.publish.v1.PhotoSequence] failed to process.
388*d5c09012SAndroid Build Coastguard Workerenum ProcessingFailureReason {
389*d5c09012SAndroid Build Coastguard Worker  // The failure reason is unspecified, this is the default value.
390*d5c09012SAndroid Build Coastguard Worker  PROCESSING_FAILURE_REASON_UNSPECIFIED = 0;
391*d5c09012SAndroid Build Coastguard Worker
392*d5c09012SAndroid Build Coastguard Worker  // Video frame's resolution is too small.
393*d5c09012SAndroid Build Coastguard Worker  LOW_RESOLUTION = 1;
394*d5c09012SAndroid Build Coastguard Worker
395*d5c09012SAndroid Build Coastguard Worker  // This video has been uploaded before.
396*d5c09012SAndroid Build Coastguard Worker  DUPLICATE = 2;
397*d5c09012SAndroid Build Coastguard Worker
398*d5c09012SAndroid Build Coastguard Worker  // Too few GPS points.
399*d5c09012SAndroid Build Coastguard Worker  INSUFFICIENT_GPS = 3;
400*d5c09012SAndroid Build Coastguard Worker
401*d5c09012SAndroid Build Coastguard Worker  // No overlap between the time frame of GPS track and the time frame of
402*d5c09012SAndroid Build Coastguard Worker  // video.
403*d5c09012SAndroid Build Coastguard Worker  NO_OVERLAP_GPS = 4;
404*d5c09012SAndroid Build Coastguard Worker
405*d5c09012SAndroid Build Coastguard Worker  // GPS is invalid (e.x. all GPS points are at (0,0))
406*d5c09012SAndroid Build Coastguard Worker  INVALID_GPS = 5;
407*d5c09012SAndroid Build Coastguard Worker
408*d5c09012SAndroid Build Coastguard Worker  // The sequence of photos could not be accurately located in the world.
409*d5c09012SAndroid Build Coastguard Worker  FAILED_TO_REFINE_POSITIONS = 6;
410*d5c09012SAndroid Build Coastguard Worker
411*d5c09012SAndroid Build Coastguard Worker  // The sequence was taken down for policy reasons.
412*d5c09012SAndroid Build Coastguard Worker  TAKEDOWN = 7;
413*d5c09012SAndroid Build Coastguard Worker
414*d5c09012SAndroid Build Coastguard Worker  // The video file was corrupt or could not be decoded.
415*d5c09012SAndroid Build Coastguard Worker  CORRUPT_VIDEO = 8;
416*d5c09012SAndroid Build Coastguard Worker
417*d5c09012SAndroid Build Coastguard Worker  // A permanent failure in the underlying system occurred.
418*d5c09012SAndroid Build Coastguard Worker  INTERNAL = 9;
419*d5c09012SAndroid Build Coastguard Worker
420*d5c09012SAndroid Build Coastguard Worker  // The video format is invalid or unsupported.
421*d5c09012SAndroid Build Coastguard Worker  INVALID_VIDEO_FORMAT = 10;
422*d5c09012SAndroid Build Coastguard Worker
423*d5c09012SAndroid Build Coastguard Worker  // Invalid image aspect ratio found.
424*d5c09012SAndroid Build Coastguard Worker  INVALID_VIDEO_DIMENSIONS = 11;
425*d5c09012SAndroid Build Coastguard Worker
426*d5c09012SAndroid Build Coastguard Worker  // Invalid capture time. Timestamps were from the future.
427*d5c09012SAndroid Build Coastguard Worker  INVALID_CAPTURE_TIME = 12;
428*d5c09012SAndroid Build Coastguard Worker
429*d5c09012SAndroid Build Coastguard Worker  // GPS data contains a gap greater than 5 seconds in duration.
430*d5c09012SAndroid Build Coastguard Worker  GPS_DATA_GAP = 13;
431*d5c09012SAndroid Build Coastguard Worker
432*d5c09012SAndroid Build Coastguard Worker  // GPS data is too erratic to be processed.
433*d5c09012SAndroid Build Coastguard Worker  JUMPY_GPS = 14;
434*d5c09012SAndroid Build Coastguard Worker
435*d5c09012SAndroid Build Coastguard Worker  // IMU (Accelerometer, Gyroscope, etc.) data are not valid. They may be
436*d5c09012SAndroid Build Coastguard Worker  // missing required fields (x, y, z or time), may not be formatted correctly,
437*d5c09012SAndroid Build Coastguard Worker  // or any other issue that prevents our systems from parsing it.
438*d5c09012SAndroid Build Coastguard Worker  INVALID_IMU = 15;
439*d5c09012SAndroid Build Coastguard Worker
440*d5c09012SAndroid Build Coastguard Worker  // Too few IMU points.
441*d5c09012SAndroid Build Coastguard Worker  INSUFFICIENT_IMU = 21;
442*d5c09012SAndroid Build Coastguard Worker
443*d5c09012SAndroid Build Coastguard Worker  // Insufficient overlap in the time frame between GPS, IMU, and other time
444*d5c09012SAndroid Build Coastguard Worker  // series data.
445*d5c09012SAndroid Build Coastguard Worker  INSUFFICIENT_OVERLAP_TIME_SERIES = 22;
446*d5c09012SAndroid Build Coastguard Worker
447*d5c09012SAndroid Build Coastguard Worker  // IMU (Accelerometer, Gyroscope, etc.) data contain gaps greater than 0.1
448*d5c09012SAndroid Build Coastguard Worker  // seconds in duration.
449*d5c09012SAndroid Build Coastguard Worker  IMU_DATA_GAP = 16;
450*d5c09012SAndroid Build Coastguard Worker
451*d5c09012SAndroid Build Coastguard Worker  // The camera is not supported.
452*d5c09012SAndroid Build Coastguard Worker  UNSUPPORTED_CAMERA = 17;
453*d5c09012SAndroid Build Coastguard Worker
454*d5c09012SAndroid Build Coastguard Worker  // Some frames were indoors, which is unsupported.
455*d5c09012SAndroid Build Coastguard Worker  NOT_OUTDOORS = 18;
456*d5c09012SAndroid Build Coastguard Worker
457*d5c09012SAndroid Build Coastguard Worker  // Not enough video frames.
458*d5c09012SAndroid Build Coastguard Worker  INSUFFICIENT_VIDEO_FRAMES = 19;
459*d5c09012SAndroid Build Coastguard Worker
460*d5c09012SAndroid Build Coastguard Worker  // Not enough moving data.
461*d5c09012SAndroid Build Coastguard Worker  INSUFFICIENT_MOVEMENT = 20;
462*d5c09012SAndroid Build Coastguard Worker
463*d5c09012SAndroid Build Coastguard Worker  // Mast is down.
464*d5c09012SAndroid Build Coastguard Worker  MAST_DOWN = 27;
465*d5c09012SAndroid Build Coastguard Worker
466*d5c09012SAndroid Build Coastguard Worker  // Camera is covered.
467*d5c09012SAndroid Build Coastguard Worker  CAMERA_COVERED = 28;
468*d5c09012SAndroid Build Coastguard Worker}
469*d5c09012SAndroid Build Coastguard Worker
470*d5c09012SAndroid Build Coastguard Worker// Additional details to accompany the ProcessingFailureReason enum.
471*d5c09012SAndroid Build Coastguard Worker// This message is always expected to be used in conjunction with
472*d5c09012SAndroid Build Coastguard Worker// ProcessingFailureReason, and the oneof value set in this message should match
473*d5c09012SAndroid Build Coastguard Worker// the FailureReason.
474*d5c09012SAndroid Build Coastguard Workermessage ProcessingFailureDetails {
475*d5c09012SAndroid Build Coastguard Worker  // Only one set of details will be set, and must match the corresponding enum
476*d5c09012SAndroid Build Coastguard Worker  // in ProcessingFailureReason.
477*d5c09012SAndroid Build Coastguard Worker  oneof details {
478*d5c09012SAndroid Build Coastguard Worker    // See InsufficientGpsFailureDetails.
479*d5c09012SAndroid Build Coastguard Worker    InsufficientGpsFailureDetails insufficient_gps_details = 1;
480*d5c09012SAndroid Build Coastguard Worker
481*d5c09012SAndroid Build Coastguard Worker    // See GpsDataGapFailureDetails.
482*d5c09012SAndroid Build Coastguard Worker    GpsDataGapFailureDetails gps_data_gap_details = 2;
483*d5c09012SAndroid Build Coastguard Worker
484*d5c09012SAndroid Build Coastguard Worker    // See ImuDataGapFailureDetails.
485*d5c09012SAndroid Build Coastguard Worker    ImuDataGapFailureDetails imu_data_gap_details = 3;
486*d5c09012SAndroid Build Coastguard Worker
487*d5c09012SAndroid Build Coastguard Worker    // See NotOutdoorsFailureDetails.
488*d5c09012SAndroid Build Coastguard Worker    NotOutdoorsFailureDetails not_outdoors_details = 4;
489*d5c09012SAndroid Build Coastguard Worker
490*d5c09012SAndroid Build Coastguard Worker    // See NoOverlapGpsFailureDetails.
491*d5c09012SAndroid Build Coastguard Worker    NoOverlapGpsFailureDetails no_overlap_gps_details = 5;
492*d5c09012SAndroid Build Coastguard Worker  }
493*d5c09012SAndroid Build Coastguard Worker}
494*d5c09012SAndroid Build Coastguard Worker
495*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#INSUFFICIENT_GPS.
496*d5c09012SAndroid Build Coastguard Workermessage InsufficientGpsFailureDetails {
497*d5c09012SAndroid Build Coastguard Worker  // The number of GPS points that were found in the video.
498*d5c09012SAndroid Build Coastguard Worker  optional int32 gps_points_found = 1;
499*d5c09012SAndroid Build Coastguard Worker}
500*d5c09012SAndroid Build Coastguard Worker
501*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#GPS_DATA_GAP.
502*d5c09012SAndroid Build Coastguard Worker// If there are multiple GPS data gaps, only the one with the largest duration
503*d5c09012SAndroid Build Coastguard Worker// is reported here.
504*d5c09012SAndroid Build Coastguard Workermessage GpsDataGapFailureDetails {
505*d5c09012SAndroid Build Coastguard Worker  // The duration of the gap in GPS data that was found.
506*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Duration gap_duration = 1;
507*d5c09012SAndroid Build Coastguard Worker
508*d5c09012SAndroid Build Coastguard Worker  // Relative time (from the start of the video stream) when the gap started.
509*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Duration gap_start_time = 2;
510*d5c09012SAndroid Build Coastguard Worker}
511*d5c09012SAndroid Build Coastguard Worker
512*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#IMU_DATA_GAP.
513*d5c09012SAndroid Build Coastguard Worker// If there are multiple IMU data gaps, only the one with the largest duration
514*d5c09012SAndroid Build Coastguard Worker// is reported here.
515*d5c09012SAndroid Build Coastguard Workermessage ImuDataGapFailureDetails {
516*d5c09012SAndroid Build Coastguard Worker  // The duration of the gap in IMU data that was found.
517*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Duration gap_duration = 1;
518*d5c09012SAndroid Build Coastguard Worker
519*d5c09012SAndroid Build Coastguard Worker  // Relative time (from the start of the video stream) when the gap started.
520*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Duration gap_start_time = 2;
521*d5c09012SAndroid Build Coastguard Worker}
522*d5c09012SAndroid Build Coastguard Worker
523*d5c09012SAndroid Build Coastguard Worker// Details related to ProcessingFailureReason#NOT_OUTDOORS.
524*d5c09012SAndroid Build Coastguard Worker// If there are multiple indoor frames found, the first frame is recorded here.
525*d5c09012SAndroid Build Coastguard Workermessage NotOutdoorsFailureDetails {
526*d5c09012SAndroid Build Coastguard Worker  // Relative time (from the start of the video stream) when an indoor frame was
527*d5c09012SAndroid Build Coastguard Worker  // found.
528*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Duration start_time = 1;
529*d5c09012SAndroid Build Coastguard Worker}
530*d5c09012SAndroid Build Coastguard Worker
531*d5c09012SAndroid Build Coastguard Worker// Details related to PhotoSequenceProcessingFailureReason#NO_OVERLAP_GPS.
532*d5c09012SAndroid Build Coastguard Workermessage NoOverlapGpsFailureDetails {
533*d5c09012SAndroid Build Coastguard Worker  // Time of first recorded GPS point.
534*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Timestamp gps_start_time = 1;
535*d5c09012SAndroid Build Coastguard Worker
536*d5c09012SAndroid Build Coastguard Worker  // Time of last recorded GPS point.
537*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Timestamp gps_end_time = 2;
538*d5c09012SAndroid Build Coastguard Worker
539*d5c09012SAndroid Build Coastguard Worker  // Start time of video.
540*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Timestamp video_start_time = 3;
541*d5c09012SAndroid Build Coastguard Worker
542*d5c09012SAndroid Build Coastguard Worker  // End time of video.
543*d5c09012SAndroid Build Coastguard Worker  optional google.protobuf.Timestamp video_end_time = 4;
544*d5c09012SAndroid Build Coastguard Worker}
545