DirectShow 보유 AVI 파일 포맷 AVI RIFF 파일의 레퍼런스   [목차열람] [주소복사] [슬롯비우기]
AVI RIFF 파일의 레퍼런스
 
Microsoft DirectX 9.0

AVI RIFF 파일의 레퍼런스

Microsoft AVI 파일 포맷은, 오디오/비디오 순서의 캡춰, 편집, 재생을 실시하는 애플리케이션으로 사용되는 RIFF 파일 사양이다. 일반적으로, AVI 파일에는 다른 종류의 데이터의 스트림이 복수 포함된다. 대부분의 AVI 순서는, 오디오 스트림과 비디오 스트림의 양쪽 모두를 사용한다. 단순한 AVI 순서에서는, 비디오 데이터만을 사용해, 오디오 스트림은 필요로 하지 않는다.

여기에서는, OpenDML AVI 파일 포맷 extension에 대해서는 설명하지 않는다. 이러한 확장의 더 자세한 정보는, 「OpenDML AVI File Format Extensions」(OpenDML AVI M-JPEG File Format Subcommittee 편)을 참조할것.

FOURCC

FOURCC (4 문자 코드)란, 4 개의 ASCII 문자를 연결해 생성 한 32 비트의 부호 없음 정수이다. 예를 들어, FOURCC 의 'abcd'는, little endian 시스템에서는 0x64636261 로 나타낸다. FOURCC 에서는 공백 문자를 포함할 수가 있으므로, ' abc'는 유효한 FOURCC 이다. AVI 파일 포맷은 FOURCC 코드를 사용해, 스트림 타입, 데이타체크, 인덱스 엔트리, 그 외의 정보를 식별한다.

RIFF 파일 포맷

AVI 파일 포맷은, RIFF (resource interchange file format) 문서 포맷에 근거하고 있다. RIFF 파일은, RIFF 헤더와 그 뒤로 계속되는 0 개 이상의리스트체크로 구성되어 있다.

설명의 후반으로는, 다음 표기를 사용해 RIFF 체크를 기술한다.

ckID ( ckData )

여기서, 체크사이즈는 비명시이다. 이 표기를 사용해, 리스트는 다음과 같이 나타낸다.

'LIST' ( listType ( listData ) )

옵션의 요소는, 외모로 둘러싸인다. [ optional element ]

AVI RIFF 포맷

AVI 파일은, RIFF 헤더내의 FOURCC 'AVI '에 의해 식별된다. 모든 AVI 파일에는, 2 개의 필수의 LIST 체크가 포함되어 있어 각각이 스트림과 스트림 데이터의 포맷을 정의하고 있다. AVI 파일에는 인젝스체크가 포함되는 경우도 있다. 인젝스체크는 파일내에서의 데이타체크의 위치를 지정한다. 이러한 요소를 포함한 AVI 파일은, 다음과 같은 포맷을 갖는다.

RIFF ('AVI '
      LIST ('hdrl' ... )
      LIST ('movi' ... )
      ['idx1' (<AVI Index>) ]
     )

'hdrl'리스트는 데이터의 포맷을 정의해, 이것은 최초의 필수 LIST 체크이다. 'movi'리스트는 AVI 순서의 데이터를 포함해, 이것은 2 번째의 필수 LIST 체크이다. 'idx1'리스트에는, 인덱스가 포함되어 있다. AVI 파일은, 이 3 개의 구성 요소를 적절한 순서로 포함할 필요가 있다.

   OpenDML 확장은, FOURCC 'indx'로 식별되는 다른 타입의 인덱스를 정의한다.

'hdrl'리스트 및 'movi'리스트는, 그 데이터에 대해서 사브체크를 사용한다. 다음의 예로, 이러한 리스트를 완성시키는데 필요한 체크를 추가한 AVI RIFF 포맷을 나타낸다.

RIFF ('AVI '
      LIST ('hdrl'
            'avih'(<Main AVI Header>)
            LIST ('strl'
                  'strh'(<Stream header>)
                  'strf'(<Stream format>)
                  [ 'strd'(<Additional header data>) ]
                  [ 'strn'(<Stream name>) ]
                  ...
                 )
             ...
           )
      LIST ('movi'
            {SubChunk | LIST ('rec '
                              SubChunk1
                              SubChunk2
                              ...
                             )
               ...
            }
            ...
           )
      ['idx1' (<AVI Index>) ]
     )

AVI 메인 헤더

'hdrl'리스트는 AVI 메인 헤더로 시작되어, 이 메인 헤더는 'avih'체크에 포함되어 있다. 메인 헤더에는, 파일내의 스트림수, AVI 순서의 폭과 높이 등, AVI 파일 전체에 관한 글로벌 정보가 포함된다. 메인헤더 체크는,AVIMAINHEADER 구조체로 구성되어 있다.

AVI 스트림 헤더

메인 헤더의 다음에는, 1 개 이상의 'strl'리스트가 계속된다. 'strl'리스트는 각 데이터 스트림 마다 필요하다. 각 'strl'리스트에는, 파일내의 단일의 스트림에 관한 정보가 포함되어 스트림헤더 체크 ('strh')와 스트림포맛트체크 ('strf')가 반드시 포함된다. 게다가'strl'리스트에는, 스트림헤더 데이타체크 ('strd')와 스트림명 체크 ('strn')가 포함되는 경우가 있다.

스트림헤더 체크 ('strh')는,AVISTREAMHEADER 구조체로 구성되어 있다.

스트림포맛트체크 ('strf')는, 스트림헤더 체크의 뒤에 이어 기술할 필요가 있다. 스트림포맛트체크는, 스트림내의 데이터의 포맷을 기술한다. 이 체크에 포함되는 데이터는, 스트림 타입에 따라서 다르다. 비디오 스트림의 경우, 이 정보는 필요에 따라서 팔레트 정보를 포함한 BITMAPINFO 구조체이다. 오디오 스트림의 경우, 이 정보는 WAVEFORMATEX 구조체이다.

스트림 헤더 데이터 ('strd') 체크가 존재하는 경우, 이 체크는 스트림포맛트체크의 뒤로 계속된다. 이 체크의 포맷과 내용은, CODEC 드라이버에 의해 정의된다. 보통, 드라이버는 이 정보를 구성에 사용한다. AVI 파일을 읽고 쓰기하는 애플리케이션은, 이 정보를 해석할 필요는 없다. 메모리 블록으로서 드라이버와의 사이에 단지 정보를 교환하는 것만으로 있다.

옵션의 'strn'체크에는, 스트림을 기술하는 NULL 로 끝나는 텍스트 캐릭터 라인이 포함되어 있다.

'hdrl'리스트내의 스트림 헤더는, 'strl'체크의 순서에 따라 'movi'리스트내의 스트림 데이터와 관련지을 수 있다. 최초의 'strl'체크는 스트림 0 에 대응해, 2 번째의 체크는 스트림 1 에 대응해, 이하와 같이 계속된다.

스트림 데이터 ('movi'리스트)

헤더 정보의 다음에 계속되는 것은, 스트림내의 실제의 데이터, 즉, 비디오 프레임 및 오디오 샘플을 포함한 'movi'리스트이다. 데이타체크는 'movi'리스트내에 직접 기술하는 경우와'rec '에 그룹화 하는 경우가 있다. 'rec '의 그룹화는, 그룹화 한 체크는 한 번에 읽어낼 필요가 있는 것을 의미해, CD-ROM 로부터 재생하기 위해서 인터리브 된 파일의 경우에만 사용된다.

각 데이타체크를 식별하는 FOURCC 는, 2 자리수의 스트림 번호와 그 후에 계속되는, 체크내의 정보의 종류를 정의하는 2 문자 코드로 구성되어 있다.

2 문자 코드 설명
db 비압축 비디오 프레임
dc 압축 비디오 프레임
pc 팔레트의 변경
wb 오디오 데이터

예를 들어, 스트림 0 에 오디오가 포함되는 경우, 그 스트림의 데이타체크는 FOURCC '00wb'를 갖는다. 스트림 1 에 비디오가 포함되는 경우, 그 스트림의 데이타체크는 FOURCC '01db'또는 '01dc'를 갖는다. 비데오데이타체크는, 새로운 팔레트 엔트리도 정의해, AVI 순서로 팔레트를 갱신한다. 각 팔레트의 변경 체크 ('xxpc')에는,AVIPALCHANGE 구조체가 포함되어 있다. 스트림으로 팔레트의 변경이 포함되는 경우, 그 스트림에 대해서,AVISTREAMHEADER 구조체의 dwFlags 멤버의 AVISF_VIDEO_PALCHANGES 플래그를 설정한다.

텍스트 스트림은, 임의의 2 문자 코드를 사용할 수 있다.

AVI 인덱스 엔트리

옵션의 인덱스 ('idx1') 체크는, 'movi'리스트의 다음에 기술할 수 있다. 인덱스에는, 데이타체크의 리스트와 파일내에서의 그 위치가 포함되어 있다. 인덱스는,AVIOLDINDEX 구조체로 구성되어'rec '체크를 포함한, 각 데이타체크의 엔트리가 포함되어 있다. 파일에 인덱스가 포함되는 경우,AVIMAINHEADER 구조체의 dwFlags 멤버에 있는 AVIF_HASINDEX 플래그를 설정한다.

그 외의 데이타체크

데이터는, 필요에 따라서 'JUNK'체크를 삽입해, AVI 파일에 정렬시킬 수가 있다. 애플리케이션은, 'JUNK'체크의 내용을 무시할 필요가 있다.

참조

↑TOP