네트워크

[QTFF] Atoms

하늘_ 2012. 11. 9. 23:00

 

Atoms

 

QuickTime file 에서의 기본적인 데이터 단위는 atom 이다. 각각의 atom 은 다른 data 들에 앞서서 size 와 type field 들을 포함하고 있다. size field 는 size 와 type field 들을 포함하여 atom 에 있는 총 바이트수를 표시하고, type field 는 atom 에 저장된 데이타의 타입과 데이터의 포맷(data format 은 암시에 의하여(by impilcation))을 명시한다. 어느 경우에는 size 와 type field 들이 version field 와 flags field 에 따라 나오기도 한다. 이러한 version, flags field 들을 포함한 atom 을 두고 종종 full atom 이라 부르기도 한다.

 

Note : 이 문서에서 서술된 atom 은 MPEG-4 와 Motion JPEG-2000 을 위한 ISO 사양(specifications) 에서 서술된 box 와 기능적으로 동일하다. 그리고 또한 이런 사양에서 정의된 full box 와 version 과 flags fields 를 포함한 atom (즉, full atom) 과 기능적으로 동일하다.

 

atom type 들은 전형적으로 ASCII code 4 글자로 번역될 수 있는 32-bit unsigned int 로 명시된다. (Apple, inc. 는 전부 소문자들로 이루어진 모든 4 글자 코드에 대해 법적 권리를 가지고 있다.) 만약 다른 언급이 없으면(Unless otherwise stated), QuickTime movie 의 모든 데이터들은 네트워크 바이트 ordering 으로 일반적으로 알려져있는 big-endian (MSB 가 가장 먼저 저장되고, 가장 먼저 전송되는) 으로 저장된다.

 

atom 은 본질적으로 계층구조를 갖고있다. 이 말은 즉슨, 하나의 atom 이 또 다른 것들을 포함할 가능성이 있는 다른 atom 들을 포함할 수 있다. 이런 계층구조는 종종 부모, 자식, 형제(siblings), 손주(grandchildren), 등등으로 표현되기도 한다. 다른 atom 을 포함하는 atom 을 container atom 이라고 부르며, parent atom 은 계층구조에서 주어진 atom 에서 정확히 한 단계 위의 container atom 을 가리킨다.

 

다른 atom 들을 포함하지 않는 atom 은 leaf atom 이라고 부른다. 이 leaf atom 은 전형적으로 하나 또는 더 많은 필드나 테이블(tables)로서의 data 를 포함한다. 하지만 어떤 몇몇의 leaf atom 들은 flags 나 placeholders 처럼 행동하고, size 와 type fields 외에는 어떠한 정보도 갖지 않는다.

 

given atom 에 저장된 데이타의 포맷은 항상 혼자서 atom 의 type field 에 의해 결정될 수 없다.; parent atom 의 타입 또한 중요할 수도 있다. 다른 말로, given atom 타입은 parent atom 에 의존하는 다른 종류의 정보들을 포함할 수 있다. 예를 들어 movie atom 안에 있는 profile atom 은 the movie 에 대한 정보들을 포함한다. 반면에 profile atom 이 track atom 안에 있다면, profile atom 은 트랙에 대한 정보들을 포함하게된다.

 

 

 

- Atom Layout

 

A sample atom

오른쪽 그림 1-1 (Figure 1-1 A sample atom) 에서 보여지는 leaf atom 은 간단히 오프셋에 의해 접근가능한 a series of data fields 를 포함한다.

 

Container Atom들 안에 있는 Atom들은 이 문서 내부에서 따로 특별하게 어떤 순서를 언급하지 않는한, 일반적으로 어떤 특정한 순서(order)을 갖지 않는다. 하나의 예를 들자면, 무조건 handle 하는 data 의 앞(before)부분에 위치해야하는 handler description atom 이 있다.

 

예를 들어, media handler description atom 은 media information atom 앞에(before) 위치해야하고, data handler description atom 은 data information atom 앞에(before) 위치해야한다.

 

 

 

- Atom Structure

 

Atom data 다음에 따라오는 Atom 들은 header 들로 구성되어 있다. header 는 atom의 크기를 bytes 단위로 갖는 atom의 크기필드, 그것의 타입을 갖는 atom의 타입필드를 갖는다. 또한 large atom을 64-bit integer 값으로 갖는 extended size field 도 포함하고 있다. 만약에 이 extended 필드가 존재한다면, 크기필드의 값은 1로 설정되어있을것이다. atom의 실질적인 크기는 8 바이트(minimum size of the type and size fields)보다 작은 값을 가지지 않는다. (최소 8 바이트이다.) 

 

몇 atom 들은 또한 version, flag fields 도 포함한다. 이들은 종종 full atoms 라고 불린다. flag 와 version field들은 이 문서 내부의 atom header의 부분으로 처리되지는 않는다. 그들은 full atoms 을 포함하는 각 atom type 에 특화된 (specific to each atom type) data fields 로 간주된다. (? : they are treated as data fields specific to each atom type that contains them.) 이러한 필드들은 따로 특별한 상황이 아니면, 항상 0 값으로 세팅되어있어야한다.

 

atom header 는 다음 필드들로 구성되어 있다.

 

Atom size

 

atom 의 컨텐츠(다른 포함된 atom들을 포함해서)들과, atom 의 헤더를 포함한 atom 의 크기를 가리키는 32-bis integer 이다. 일반저긍로 size field 는 32-bit unsigned integer 로 표현된 실제의 bytes 단위의 atom 크기를 포함한다. 하지만 size field 는 atom 크기를 정하는데 사용되는 다른 대안의 방법을 지칭하는 특별한 값을 가질수도 있다. (이 특별한 값은 일반적으로 media data atom ('mdat') 에만 사용된다.)

 

두 특별한 값은 사이즈 필드에서 유효한 값들이다 :

 

0 : 오직 top-level atom 만을 위해 허락된 값으로, 파일안에 마지막 atom 을 가리키고, 파일의 끝에서 확장된 것을 가르켜준다. 

(? : , designates the last atom in the file and indicates that the atom extends to the end of file.)

 

1 : 실제 크기는 extended size field 에 존재한다는 뜻이다. extended size field 는 type field 를 따르는 선택적인(optional) 64-bit filed 이다.

 

This accommodates media data atoms that contain more than 2^32 bytes.

이것은 2^32 바이트보다 더 많은것을 포함하는 media data atoms 를 수용한다. 

아래 Figure 1-2 는 어떻게 atom 의 크기를 계산하는지에 대해 나와있다.

 

Calculating atom sizes