카메라 모션 메타데이터 사양

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">

이 페이지에서는 MP4 파일을 삽입할 수 있는 사양을 설명합니다. 동영상 캡처 중 카메라 모션에 대한 메타데이터입니다. 동영상을 캡처하는 기기에는 일반적으로 캡처에 관한 추가 정보를 제공할 수 있는 센서입니다. 예를 들면 다음과 같습니다.

  • 휴대전화에는 일반적으로 자이로스코프, 가속도계, 자기계, GPS용 센서가 있습니다.
  • 센서 퓨전을 사용하면 기기의 3DoF (자유도) 포즈를 추적할 수 있습니다.
  • 동시 현지화 및 매핑 (SLAM)을 사용하여 6도 자유도를 추적할 수 있음 (6DoF) 자세 (예: Tango)
  • 노출 정보는 스캔별 모션을 보간하는 데 사용할 수 있습니다.

이 메타데이터는 다양한 애플리케이션에서 고급 후처리를 위해 동영상에 저장할 수 있습니다. 예를 들면 다음과 같습니다.

  • 프레임 수준 회전 정보를 사용하여 동영상을 흔들림 없이 보정할 수 있으며 스캔라인 수준의 모션 데이터를 사용하여 롤링 셔터 효과를 줄일 수 있습니다.
  • IMU 판독값 및 파생된 3DoF 포즈는 IMU와 카메라 간의 시간 정렬과 기하학적 정렬을 평가하는 데 사용할 수 있습니다.

아래 섹션에서는 새 샘플이 포함된 CAMM (CAmera Motion Metadata) 트랙을 지정합니다. 엔트리를 호출합니다.

샘플 항목

동영상 파일에는 커스텀 메타데이터를 나타내는 다음과 같은 샘플 입력 상자가 포함되어야 합니다. 트랙을 사용하고 트랙의 subComponentTypemeta로 설정해야 합니다.

Camera Motion Metadata Sample Entry (camm)

Definition
Box Type: camm
Container: stsd
A sample entry indicating the data track that saves the camera motion.

Syntax
aligned(8) class CameraMotionMetadataSampleEntry extends SampleEntry('camm') {
}
  

데이터 형식

메타데이터 트랙에는 다음과 같은 형식으로 된 메타데이터 샘플 스트림이 포함됩니다.

필드 단위 설명
uint16 reserved;
예약되었습니다. 0이어야 합니다.
uint16 type;
데이터 패킷의 유형입니다 (아래 참고). 각 패킷에는 한 가지 유형의 데이터가 있습니다.
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

로컬 카메라 좌표에서 세계 좌표계로의 회전을 나타내는 라디안 단위의 각도 축 방향입니다. 세계 좌표계는 애플리케이션에서 정의합니다.

M을 각도 축 벡터에 해당하는 3x3 회전 행렬이라고 가정합니다. 로컬 좌표계의 모든 광선 X의 경우 세계 좌표의 광선 방향은 M * X입니다.

이 정보는 기기에서 3DoF 센서 퓨전을 실행하여 얻을 수 있습니다. IMU 판독값을 통합한 후에는 통합된 전역 방향만 기록하면 됩니다.

세 개의 값은 각도 축 벡터를 나타내며, 라디안 단위의 회전 각도는 벡터의 길이로, 회전 축은 정규화된 벡터로 지정됩니다.

인코딩된 표현은 float[3] angle_axis := angle_radians * normalized_axis_vec3를 사용하여 축과 각도에서 만들 수 있습니다. 양의 각도는 축을 중심으로 한 시계 반대 방향 회전을 나타냅니다.

인코딩된 표현은 float[3] axis := normalize(axis_angle)float angle_radians := length(angle_axis)을 사용하여 축과 각도로 다시 변환될 수 있습니다.

  case 1:
    int32 pixel_exposure_time;
    int32 rolling_shutter_skew_time;
  break;
          
나노초

이 메타데이터는 동영상 프레임당 적용됩니다. 이 메타데이터의 프레젠테이션 시간 (PTS)은 동영상 프레임에서 처음 사용된 스캔라인의 노출이 시작되는 지점입니다.

pixel_exposure_time_ns는 단일 픽셀의 노출 시간입니다. 나노초와 rolling_shutter_skew_time_ns가 자동으로 측정됩니다. 또한 스캔 행별 메타데이터를 보간할 수 있습니다.

해당 프레임의 PTS는 pts_of_this_metadatapts_of_this_metadata + Pixel_exposure_time_ns + roll_shutter_skew_time_ns에 있는.

이 정보가 저장되지 않으면 기기는 프레임 노출의 중앙에 오도록 동영상 프레임의 PTS를 조정합니다.

  case 2:
    float gyro[3];
  break;
          
라디안/초

카메라의 XYZ 축 주변에서 라디안/초 단위의 자이로스코프 신호입니다. 순환게재 양의 값으로 설정합니다.

IMU 좌표계와 카메라 간의 관계를 정의하는 애플리케이션 좌표계입니다. 가능한 경우 위치를 맞추는 것이 좋습니다.

초기 자이로 판독값은 드라이버가 정의한 IMU 좌표계에 있습니다. 카메라 좌표계로 변환하려면 적절한 변환이 필요합니다.

Android Sensor.TYPE_GYROSCOPE를 참고하세요.

  case 3:
    float acceleration[3];
  break;
          
미터/초^2

카메라의 XYZ 축을 따라 미터/초^2 단위로 측정한 가속도계입니다.

IMU 좌표계와 카메라 간의 관계를 정의하는 애플리케이션 좌표계입니다. 가능한 경우 위치를 맞추는 것이 좋습니다.

Android 센서를 참고하세요.TYPE_ACCELEROMETER

  case 4:
    float position[3];
  break;
          

카메라의 3D 위치입니다. 3D 위치와 각도 축 회전을 함께 사용하여 6DoF 포즈가 포함되며, 애플리케이션에서 정의한 공통의 좌표에 위치합니다. 있습니다.

이 정보는 기기에서 6DoF 추적을 실행하여 얻을 수 있습니다.

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          

샘플의 최소 GPS 좌표입니다.

<ph type="x-smartling-placeholder">
  case 6:
    double time_gps_epoch;
    int gps_fix_type;
    double latitude;
    double longitude;
    float altitude;
    float horizontal_accuracy;
    float vertical_accuracy;
    float velocity_east;
    float velocity_north;
    float velocity_up;
    float speed_accuracy;
  break;
          
seconds

degrees
degrees
meters
meters
meters
meters/seconds
meters/seconds
meters/seconds
meters/seconds
          

time_gps_epoch - 측정이 수행된 GPS 에포크 이후의 시간입니다.

gps_fix_type - 0 ( 수정 없음), 2 (2D 수정), 3 (3D 수정)

latitude - 위도(도)

경도 - 경도(도)

고도 - WGS-84 타원체보다 높은 높이

horizontal_accuracy - 수평 (위도/경도) 정확도

vertical_accuracy - 수직 (고도) 정확도

velocity_east - 동쪽 방향의 속도

velocity_north - 북쪽 방향의 속도

velocity_up - 위쪽 방향의 속도

speed_accuracy - 속도 정확도

<ph type="x-smartling-placeholder">
  case 7:
    float magnetic_field[3];
  break;
          
마이크로테슬라

주변 자기장

Android Sensor.TYPE_MAGNETIC_FIELD을 참고하세요.

}

참고

  • 위의 모든 데이터 유형을 포함하는 MP4 파일당 하나의 CAMM 트랙만 있어야 합니다. 혼합하여 사용할 수 있습니다.
  • 사례 5와 6의 GPS 샘플은 센서에 의해 생성된 원시 값이어야 합니다. 외부 IP 주소 없이도 GPS 변경이 없을 때 보간되거나 반복됩니다.
  • 좌표계는 오른쪽에 있습니다. X로 정의되는 카메라 좌표계 Z가 오른쪽을 가리키고, Y가 아래쪽을 가리키고, Z가 앞으로 가리키고 있음을 의미합니다. 전역 변수의 Y축은 좌표계는 중력 벡터를 따라 아래를 향해야 합니다.
  • IMU 판독값은 일반적으로 별도의 IMU 좌표계에 있으며, 두 좌표계가 다른 경우 카메라 좌표계에 매핑합니다.
  • 모든 필드는 little-endian (가장 중요한 바이트 우선)이고 32비트 부동 소수점입니다. 포인트는 IEEE 754-1985 형식입니다.
  • 동영상 프레임과 메타데이터를 정확하게 동기화하기 위해 동영상 프레임의 PTS는 노출의 중앙에 위치해야 합니다 (노출 메타데이터에서 추론할 수도 있음).
  • 이 데이터를 다중화하는 애플리케이션은 데이터를 얻기 위해 충분한 시간 척도를 선택해야 합니다. 정확한 PTS입니다.

잠재적 문제

  • 이 설계는 데이터 샘플당 하나의 패킷만 허용합니다. 삽입된 기기에 쓰기 문제가 발생할 수 있습니다. 매우 높은 주파수 패킷은 I/O 압력과 헤더 크기를 증가시키기 때문입니다. (예: stscstsz Atom) 패킷 크기가 다양한 경우.
  • 지연 시간이 다른 여러 유형의 데이터를 혼합하면 PTS가 두 단계를 모두 진행할 수 있습니다. 수신 대기하고 역방향으로 순환할 수 있습니다 그러나 이러한 문제를 단조로운 순서로 작성한다는 것을 의미합니다.