Image-ExifTool
view release on metacpan or search on metacpan
lib/Image/ExifTool/Parrot.pm view on Meta::CPAN
},
NOTES => q{
Streaming metadata found in Parrot drone videos. See
L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
specification.
},
P1 => {
Name => 'ParrotV1',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::V1' },
},
P2 => {
Name => 'ParrotV2',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::V2' },
},
P3 => {
Name => 'ParrotV3',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::V3' },
},
E1 => {
Name => 'ParrotTimeStamp',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::TimeStamp' },
},
E2 => {
Name => 'ParrotFollowMe',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::FollowMe' },
},
E3 => {
Name => 'ParrotAutomation',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
},
# MetaType of timed metadata written by ARCore (see forum13653)
'application/arcore-accel' => {
Name => 'ARCoreAccel',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
},
'application/arcore-accel-0' => {
Name => 'ARCoreAccel0',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel0', ByteOrder => 'II' },
},
'application/arcore-gyro' => {
Name => 'ARCoreGyro',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
},
'application/arcore-gyro-0' => {
Name => 'ARCoreGyro0',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro0', ByteOrder => 'II' },
},
'application/arcore-video-0' => {
Name => 'ARCoreVideo',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
},
'application/arcore-custom-event' => {
Name => 'ARCoreCustom',
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreCustom', ByteOrder => 'II' },
},
);
# tags found in the Parrot 'mett' V1 timed metadata (ref 1) [untested]
%Image::ExifTool::Parrot::V1 = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
NOTES => 'Parrot version 1 streaming metadata.',
GROUPS => { 2 => 'Location' },
4 => {
Name => 'DroneYaw',
Format => 'int16s',
ValueConv => '$val / 0x1000 * 180 / 3.14159', # convert from rad to deg
},
6 => {
Name => 'DronePitch',
Format => 'int16s',
ValueConv => '$val / 0x1000 * 180 / 3.14159',
},
8 => {
Name => 'DroneRoll',
Format => 'int16s',
ValueConv => '$val / 0x1000 * 180 / 3.14159',
},
10 => {
Name => 'CameraPan',
Format => 'int16s',
ValueConv => '$val / 0x1000 * 180 / 3.14159',
},
12 => {
Name => 'CameraTilt',
Format => 'int16s',
ValueConv => '$val / 0x1000 * 180 / 3.14159',
},
14 => {
Name => 'FrameView', # (W,X,Y,Z)
Format => 'int16s[4]',
ValueConv => 'my @a = split " ",$val; $_ /= 0x1000 foreach @a; "@a"',
},
22 => {
Name => 'ExposureTime',
Groups => { 2 => 'Camera' },
Format => 'int16s',
ValueConv => '$val / 0x100 / 1000',
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
},
24 => {
Name => 'ISO',
Groups => { 2 => 'Camera' },
Format => 'int16s',
},
26 => {
Name => 'WifiRSSI',
Groups => { 2 => 'Device' },
Format => 'int8s',
PrintConv => '"$val dBm"',
},
27 => {
Name => 'Battery',
Groups => { 2 => 'Device' },
PrintConv => '"$val %"',
},
28 => {
Name => 'GPSLatitude',
Format => 'int32s',
ValueConv => '$val / 0x100000',
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
},
lib/Image/ExifTool/Parrot.pm view on Meta::CPAN
44 => {
Name => 'DistanceFromHome',
Format => 'int32u',
ValueConv => '$val / 0x10000',
},
48 => {
Name => 'SpeedX',
Format => 'int16s',
ValueConv => '$val / 0x100',
},
50 => {
Name => 'SpeedY',
Format => 'int16s',
ValueConv => '$val / 0x100',
},
52 => {
Name => 'SpeedZ',
Format => 'int16s',
ValueConv => '$val / 0x100',
},
54 => {
Name => 'Binning',
Groups => { 2 => 'Device' },
Mask => 0x80,
},
54.1 => {
Name => 'FlyingState',
Groups => { 2 => 'Device' },
Mask => 0x7f,
PrintConv => {
0 => 'Landed',
1 => 'Taking Off',
2 => 'Hovering',
3 => 'Flying',
4 => 'Landing',
5 => 'Emergency',
},
},
55 => {
Name => 'Animation',
Groups => { 2 => 'Device' },
Mask => 0x80,
},
55.1 => {
Name => 'PilotingMode',
Groups => { 2 => 'Device' },
Mask => 0x7f,
PrintConv => {
0 => 'Manual',
1 => 'Return Home',
2 => 'Flight Plan',
3 => 'Follow Me',
},
},
);
# tags found in the Parrot 'mett' V2 timed metadata (ref 1) [untested]
%Image::ExifTool::Parrot::V2 = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
Groups => { 2 => 'Location' },
NOTES => 'Parrot version 2 basic streaming metadata.',
4 => {
Name => 'Elevation',
Notes => 'estimated distance from ground',
Format => 'int32s',
ValueConv => '$val / 0x10000',
PrintConv => 'sprintf("%.3f m", $val)',
},
8 => {
Name => 'GPSLatitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
},
12 => {
Name => 'GPSLongitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
},
16 => {
Name => 'GPSAltitude',
Format => 'int32s',
Mask => 0xffffff00,
ValueConv => '$val / 0x100',
PrintConv => 'sprintf("%.3f m", $val)',
},
16.1 => {
Name => 'GPSSatellites', # (SV count)
Format => 'int32s',
Mask => 0xff,
},
20 => {
Name => 'GPSVelocityNorth', # (m/s)
Format => 'int16s',
ValueConv => '$val / 0x100',
},
22 => {
Name => 'GPSVelocityEast', # (m/s)
Format => 'int16s',
ValueConv => '$val / 0x100',
},
24 => {
Name => 'GPSVelocityDown', # (m/s)
Format => 'int16s',
ValueConv => '$val / 0x100',
},
26 => {
Name => 'AirSpeed', # (m/s)
Format => 'int16s',
RawConv => '$val < 0 ? undef : $val',
ValueConv => '$val / 0x100',
},
28 => {
Name => 'DroneQuaternion', # (W,X,Y,Z)
Format => 'int16s[4]',
ValueConv => 'my @a = split " ",$val; $_ /= 0x4000 foreach @a; "@a"',
},
36 => {
Name => 'FrameView', # (W,X,Y,Z)
Format => 'int16s[4]',
lib/Image/ExifTool/Parrot.pm view on Meta::CPAN
Name => 'ISO',
Groups => { 2 => 'Camera' },
Format => 'int16u',
},
52 => {
Name => 'Binning',
Groups => { 2 => 'Device' },
Mask => 0x80,
},
52.1 => {
Name => 'FlyingState',
Groups => { 2 => 'Device' },
Mask => 0x7f,
PrintConv => {
0 => 'Landed',
1 => 'Taking Off',
2 => 'Hovering',
3 => 'Flying',
4 => 'Landing',
5 => 'Emergency',
6 => 'User Takeoff',
7 => 'Motor Ramping',
8 => 'Emergency Landing',
},
},
53 => {
Name => 'Animation',
Groups => { 2 => 'Device' },
Mask => 0x80,
},
53.1 => {
Name => 'PilotingMode',
Groups => { 2 => 'Device' },
Mask => 0x7f,
PrintConv => {
0 => 'Manual',
1 => 'Return Home',
2 => 'Flight Plan',
3 => 'Follow Me / Tracking', # (same as 'Tracking')
4 => 'Magic Carpet',
5 => 'Move To',
},
},
54 => {
Name => 'WifiRSSI',
Groups => { 2 => 'Device' },
Format => 'int8s',
PrintConv => '"$val dBm"',
},
55 => {
Name => 'Battery',
Groups => { 2 => 'Device' },
PrintConv => '"$val %"',
},
);
# tags found in the Parrot 'mett' V3 timed metadata (ref 1)
%Image::ExifTool::Parrot::V3 = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 2 => 'Location' },
NOTES => 'Parrot version 3 basic streaming metadata.',
4 => {
Name => 'Elevation',
Notes => 'estimated distance from ground',
Format => 'int32s',
ValueConv => '$val / 0x10000',
PrintConv => 'sprintf("%.3f m", $val)',
},
8 => {
Name => 'GPSLatitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
},
12 => {
Name => 'GPSLongitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
},
16 => {
Name => 'GPSAltitude',
Format => 'int32s',
Mask => 0xffffff00,
ValueConv => '$val / 0x100',
PrintConv => 'sprintf("%.3f m", $val)',
},
16.1 => {
Name => 'GPSSatellites', # (SV count)
Format => 'int32s',
Mask => 0xff,
},
20 => {
Name => 'GPSVelocityNorth', # (m/s)
Format => 'int16s',
ValueConv => '$val / 0x100',
},
22 => {
Name => 'GPSVelocityEast', # (m/s)
Format => 'int16s',
ValueConv => '$val / 0x100',
},
24 => {
Name => 'GPSVelocityDown', # (m/s)
Format => 'int16s',
ValueConv => '$val / 0x100',
},
26 => {
Name => 'AirSpeed', # (m/s)
Format => 'int16s',
RawConv => '$val < 0 ? undef : $val',
ValueConv => '$val / 0x100',
},
28 => {
Name => 'DroneQuaternion', # (W,X,Y,Z)
Format => 'int16s[4]',
ValueConv => 'my @a = split " ",$val; $_ /= 0x4000 foreach @a; "@a"',
},
36 => {
Name => 'FrameBaseView', # (W,X,Y,Z without pan/tilt)
Format => 'int16s[4]',
lib/Image/ExifTool/Parrot.pm view on Meta::CPAN
Groups => { 2 => 'Device' },
Format => 'int32u',
Notes => '0-5',
Mask => 0xff,
},
68 => {
Name => 'WifiRSSI',
Groups => { 2 => 'Device' },
Format => 'int8s',
PrintConv => '"$val dBm"',
},
69 => {
Name => 'Battery',
Groups => { 2 => 'Device' },
PrintConv => '"$val %"',
},
70 => {
Name => 'Binning',
Groups => { 2 => 'Device' },
Mask => 0x80,
},
70.1 => {
Name => 'FlyingState',
Groups => { 2 => 'Device' },
Mask => 0x7f,
PrintConv => {
0 => 'Landed',
1 => 'Taking Off',
2 => 'Hovering',
3 => 'Flying',
4 => 'Landing',
5 => 'Emergency',
6 => 'User Takeoff',
7 => 'Motor Ramping',
8 => 'Emergency Landing',
},
},
71 => {
Name => 'Animation',
Groups => { 2 => 'Device' },
Mask => 0x80,
},
71.1 => {
Name => 'PilotingMode',
Groups => { 2 => 'Device' },
Mask => 0x7f,
PrintConv => {
0 => 'Manual',
1 => 'Return Home',
2 => 'Flight Plan',
3 => 'Follow Me / Tracking', # (same as 'Tracking')
4 => 'Magic Carpet',
5 => 'Move To',
},
},
);
# tags found in the Parrot 'mett' E1 timestamp timed metadata (ref 1)
%Image::ExifTool::Parrot::TimeStamp = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
NOTES => 'Parrot streaming metadata timestamp extension.',
GROUPS => { 2 => 'Time' },
4 => {
Name => 'TimeStamp',
Format => 'int64u',
ValueConv => '$val / 1e6',
},
);
# tags found in the Parrot 'mett' E2 follow-me timed metadata (ref 1) [untested]
%Image::ExifTool::Parrot::FollowMe = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 2 => 'Location' },
NOTES => 'Parrot streaming metadata follow-me extension.',
4 => {
Name => 'GPSTargetLatitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
},
8 => {
Name => 'GPSTargetLongitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
},
12 => {
Name => 'GPSTargetAltitude',
Format => 'int32s',
ValueConv => '$val / 0x10000',
},
16 => {
Name => 'Follow-meMode',
Groups => { 2 => 'Device' },
PrintConv => { BITMASK => {
0 => 'Follow-me enabled',
1 => 'Follow-me', # (0=Look-at-me! auggh. see AutomationFlags below)
2 => 'Angle locked',
}},
},
17 => {
Name => 'Follow-meAnimation',
Groups => { 2 => 'Device' },
PrintConv => {
0 => 'None',
1 => 'Orbit',
2 => 'Boomerang',
3 => 'Parabola',
4 => 'Zenith',
},
},
);
# tags found in the Parrot 'mett' E3 automation timed metadata (ref 1)
%Image::ExifTool::Parrot::Automation = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 2 => 'Location' },
NOTES => 'Parrot streaming metadata automation extension.',
4 => {
Name => 'GPSFramingLatitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
},
8 => {
Name => 'GPSFramingLongitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
},
12 => {
Name => 'GPSFramingAltitude',
Format => 'int32s',
ValueConv => '$val / 0x10000',
},
16 => {
Name => 'GPSDestLatitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
},
20 => {
Name => 'GPSDestLongitude',
Format => 'int32s',
ValueConv => '$val / 0x400000',
},
24 => {
Name => 'GPSDestAltitude',
Format => 'int32s',
ValueConv => '$val / 0x10000',
},
28 => {
Name => 'AutomationAnimation',
Groups => { 2 => 'Device' },
PrintConv => {
0 => 'None',
1 => 'Orbit',
2 => 'Boomerang',
3 => 'Parabola',
4 => 'Dolly Slide',
5 => 'Dolly Zoom',
6 => 'Reveal Vertical',
7 => 'Reveal Horizontal',
8 => 'Candle',
9 => 'Flip Front',
10 => 'Flip Back',
11 => 'Flip Left',
12 => 'Flip Right',
13 => 'Twist Up',
14 => 'Position Twist Up',
},
},
29 => {
Name => 'AutomationFlags',
Groups => { 2 => 'Device' },
PrintConv => { BITMASK => {
0 => 'Follow-me enabled',
1 => 'Look-at-me enabled', # (really? opposite sense to Follow-meMode above!)
2 => 'Angle locked',
}},
},
( run in 0.856 second using v1.01-cache-2.11-cpan-39bf76dae61 )