Skip to content

Commit 32ab273

Browse files
committed
Revert "feat: Support GoPRO GPS as a separate CAMM sample entry (#710)"
This reverts commit 65ca1ec. Reason: Accidentally merged this PR ;(
1 parent 83c6152 commit 32ab273

5 files changed

Lines changed: 176 additions & 596 deletions

File tree

mapillary_tools/camm/camm_builder.py

Lines changed: 62 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import io
22
import typing as T
33

4-
from .. import geo, types
4+
from .. import geo, telemetry, types
55
from ..mp4 import (
66
construct_mp4_parser as cparser,
77
mp4_sample_parser as sample_parser,
@@ -11,11 +11,62 @@
1111
from . import camm_parser
1212

1313

14-
def _build_camm_sample(measurement: camm_parser.TelemetryMeasurement) -> bytes:
15-
for sample_entry_cls in camm_parser.SAMPLE_ENTRY_CLS_BY_CAMM_TYPE.values():
16-
if sample_entry_cls.serializable(measurement):
17-
return sample_entry_cls.serialize(measurement)
18-
raise ValueError(f"Unsupported measurement type {type(measurement)}")
14+
TelemetryMeasurement = T.Union[
15+
geo.Point,
16+
telemetry.TelemetryMeasurement,
17+
]
18+
19+
20+
def _build_camm_sample(measurement: TelemetryMeasurement) -> bytes:
21+
if isinstance(measurement, geo.Point):
22+
return camm_parser.CAMMSampleData.build(
23+
{
24+
"type": camm_parser.CAMMType.MIN_GPS.value,
25+
"data": [
26+
measurement.lat,
27+
measurement.lon,
28+
-1.0 if measurement.alt is None else measurement.alt,
29+
],
30+
}
31+
)
32+
elif isinstance(measurement, telemetry.AccelerationData):
33+
# Accelerometer reading in meters/second^2 along XYZ axes of the camera.
34+
return camm_parser.CAMMSampleData.build(
35+
{
36+
"type": camm_parser.CAMMType.ACCELERATION.value,
37+
"data": [
38+
measurement.x,
39+
measurement.y,
40+
measurement.z,
41+
],
42+
}
43+
)
44+
elif isinstance(measurement, telemetry.GyroscopeData):
45+
# Gyroscope signal in radians/seconds around XYZ axes of the camera. Rotation is positive in the counterclockwise direction.
46+
return camm_parser.CAMMSampleData.build(
47+
{
48+
"type": camm_parser.CAMMType.GYRO.value,
49+
"data": [
50+
measurement.x,
51+
measurement.y,
52+
measurement.z,
53+
],
54+
}
55+
)
56+
elif isinstance(measurement, telemetry.MagnetometerData):
57+
# Ambient magnetic field.
58+
return camm_parser.CAMMSampleData.build(
59+
{
60+
"type": camm_parser.CAMMType.MAGNETIC_FIELD.value,
61+
"data": [
62+
measurement.x,
63+
measurement.y,
64+
measurement.z,
65+
],
66+
}
67+
)
68+
else:
69+
raise ValueError(f"unexpected measurement type {type(measurement)}")
1970

2071

2172
def _create_edit_list_from_points(
@@ -70,19 +121,16 @@ def _create_edit_list_from_points(
70121

71122
def _multiplex(
72123
points: T.Sequence[geo.Point],
73-
measurements: T.Optional[T.List[camm_parser.TelemetryMeasurement]] = None,
74-
) -> T.List[camm_parser.TelemetryMeasurement]:
75-
mutiplexed: T.List[camm_parser.TelemetryMeasurement] = [
76-
*points,
77-
*(measurements or []),
78-
]
124+
measurements: T.Optional[T.List[telemetry.TelemetryMeasurement]] = None,
125+
) -> T.List[TelemetryMeasurement]:
126+
mutiplexed: T.List[TelemetryMeasurement] = [*points, *(measurements or [])]
79127
mutiplexed.sort(key=lambda m: m.time)
80128

81129
return mutiplexed
82130

83131

84132
def convert_telemetry_to_raw_samples(
85-
measurements: T.Sequence[camm_parser.TelemetryMeasurement],
133+
measurements: T.Sequence[TelemetryMeasurement],
86134
timescale: int,
87135
) -> T.Generator[sample_parser.RawSample, None, None]:
88136
for idx, measurement in enumerate(measurements):
@@ -235,7 +283,7 @@ def create_camm_trak(
235283

236284
def camm_sample_generator2(
237285
video_metadata: types.VideoMetadata,
238-
telemetry_measurements: T.Optional[T.List[camm_parser.TelemetryMeasurement]] = None,
286+
telemetry_measurements: T.Optional[T.List[telemetry.TelemetryMeasurement]] = None,
239287
):
240288
def _f(
241289
fp: T.BinaryIO,

0 commit comments

Comments
 (0)