4CC

FourCC

FourCC('4 문자 코드')는 데이터 형식을 일의로 식별하기 위해 사용되는4 바이트의 시퀀스입니다(일반적으로 ASCII).는 기존 Mac OS에서 사용되는 OSType 또는 ResType 메타데이터 시스템에서 유래되었으며 Amiga/Electronic Arts Interchange 파일 형식 및 파생 모델에 채택되었습니다.이 아이디어는 나중에 QuickTime DirectShow에서 압축된 데이터 유형을 식별하는 데 재사용되었습니다.

역사

1984년, 매킨토시 OS의 가장 초기 버전인 애플 시스템 1이 출시되었습니다.파일 형식, 작성자(애플리케이션) 정보, 포크 등의 메타데이터 필드와 함께 단일 수준의 Macintosh File System을 사용하여 추가 리소스를 저장합니다.이 필드들은 모두 OSType이라고 불리는 4글자 코드입니다.데이터 자체를 변경하지 않고 이 정보를 변경할 수 있어 해석이 가능했다.모든 종류의 [1][2]데이터에 대한 유형 태그로 동일한 코드가 시스템 전체에서 사용되었습니다.

1985년 Electronic Arts는 원래 Amiga에서 사용하기 위해 고안된 IFF(Interchange File Format) 메타 포맷(family of file format)을 도입했습니다.이러한 파일은 임의 데이터를 포함할 수 있는 일련의 "청크"로 구성되었으며, 각 청크 앞에 4바이트 ID가 붙습니다.IFF 사양은 FourCC 아이디어의 기원은 [3]애플에 있다고 명시하고 있습니다.

IFF는 AIFF 파일용 Apple RIFF 파일용 Microsoft다수의 개발자에 의해 채택되었습니다(AVI 및 WAV 파일 형식의 기반으로 사용되었습니다).애플은 이 코드들 중 많은 것을 OSType이라고 불렀다.Microsoft 및 Windows 개발자는 4바이트 식별자를 4CC 또는 4문자 코드라고 부릅니다.마이크로소프트는 DirectX, 특히 DirectShow 및 DirectX Graphics에서 사용되는 데이터 형식을 식별하기 위해 4개의 CC 코드를 채택했습니다.

Apple 시스템의 경우

Mac OS X Panter 이후 OSType 시그니처는 Uniform Type Identifier를 판별하기 위해 검사할 수 있는 여러 소스 중 하나이며 프라이머리 데이터 타입 시그니처로 사용되지 않게 되었습니다.Mac OS X(macOS)는 파일 이름 확장자를 사용하여 파일 형식에 라벨을 붙이는 구어체 규칙을 선호합니다.변경 당시, 이 변경은 나이 든 사용자들 사이에서 큰 논쟁의 원인이었다.그들은 애플이 파일 이름에 메타데이터를 배치하는 보다 원시적인 방법으로 되돌아가고 있다고 믿었다.

파일 시스템 관련 유형 코드는 특정 소프트웨어, 특히 개발자 도구의 일부로 /Developer/Tools에 설치된 MacOS 명령줄 도구 GetFileInfo 및 SetFile 또는 이전 Mac에서 [4][5]사용할 수 있는 ResEdit 유틸리티를 사용하여 사용자가 쉽게 조작할 수 없습니다.

기술적 세부사항

바이트 시퀀스는 보통 ASCII 인쇄 가능 문자로 제한되며 공백 문자는 짧은 시퀀스를 채우기 위해 예약됩니다.파일 확장자와 달리 대소문자를 구분합니다.4CC는 16진수(예를 들어 'avc1'[6][7][8]의 경우 '0x31637661')로 인코딩되기도 하고 사람이 읽을 수 있는 방식으로 인코딩되기도 합니다(예를 들어 'mp4a').그러나 일부 FourCC에는 인쇄 불가능한 문자가 포함되어 있어 특별한 표시 포맷이 없으면 사람이 읽을 수 없습니다.예를 들어 10비트 Y'CbCr 4:2:2 비디오에는 ffmpeg로 표시되는 ('Y', '3', '10')[9]의 FourCC가 포함될 수 있습니다.

4바이트 식별자는 사람이 읽을 수 있는 니모닉 특성을 가진 4개의 문자로 구성될 수 있지만 32비트 시스템의 정수에 대해 일반적으로 할당된 4바이트 메모리 공간에 여전히 적합하기 때문에 유용합니다(, 엔디안 문제로 인해 읽기 어려울 수 있음).따라서 코드는 프로그램 코드에서 정수로 효율적으로 사용될 수 있을 뿐만 아니라 검사 시 바이너리 데이터 스트림에서 신호를 제공할 수 있습니다.

컴파일러 지원

FourCC는 기본 ASCII 문자 시퀀스에 상대적인 빅엔디안으로 작성되므로 문자열로 읽으면 올바른 바이트 순서로 표시됩니다.GCC를 포함한 많은 C 컴파일러는 최하위 바이트로 오른쪽 정렬하는 멀티 문자 리터럴 동작을 정의하고 있습니다.이것에 의해,'1234'된다0x31323334ASCII로 표시됩니다.[10]이것은 OSType용 Mac OS 프로그래머가 사용하는 FourCC 코드를 작성하는 일반적인 방법입니다.(클래식 Mac OS는 빅 엔디안에서만 사용되었습니다.)

little-endian 머신에서는 결과를 올바르게 만들기 위해 이 값에 대한 바이트 스왑이 필요합니다.위에서 avc1의 예를 들어 리터럴이지만'avc1'은 이미 정수 값 0x61766331로 변환되었습니다. 리틀 엔디안 기계는 바이트 순서를 반대로 하여 31 63 76 61로 값을 저장합니다.올바른 바이트 시퀀스 61 76 63 31을 생성하기 위해 사전 스왑된 값 0x31637661이 사용됩니다.

일반적인 용도

FourCC의 가장 잘 알려진 사용법 중 하나는 AVI 파일 의 비디오코덱 또는 비디오코딩 포맷을 식별하는 것입니다.일반적인 식별자에는 DIVX, XVIDH264있습니다.오디오 코딩 포맷의 경우 AVI 및 WAV 파일은 보통 16진수(MP3의 경우 0055 등)로 기술된2 바이트 식별자를 사용합니다.QuickTime 파일에서는 이러한 2바이트 식별자 앞에 문자 "ms"가 붙어 4글자 코드를 형성합니다.RealMedia 파일도 4글자 코드를 사용하지만 실제 사용되는 코드는 AVI 또는 QuickTime 파일에서 발견되는 코드와 다릅니다.

4바이트 ID 개념을 사용하는 다른 파일 형식으로는 Standard MIDI File(SMF; 표준 MIDI 파일), PNG 이미지 파일 형식, 3DS(3D Studio Max) 메시 파일 형식 및 ICC 프로파일 형식이 있습니다.

OSType의 다른 용도는 다음과 같습니다.

  • AppleEvents에서 레코드 필드 ID, 이벤트 유형 및 클래스 ID로 지정
  • Component Manager에서 구성 요소를 식별하기 위해
  • QuickTime 동영상 및 이미지 파일 형식에서 "atom" ID로 지정
  • 로컬리제이션에 의존하지 않는 방법으로 폴더 관리자에서 표준 폴더를 식별할 수 있습니다.
  • QuickDraw GX에서는 gxTag 유형으로 사용되었으며 Collection Manager에서는 수집 항목 유형으로도 사용되었습니다.
  • QuickTime과 같은 특정 라이브러리에서 오류 코드로 사용됩니다.

4 문자 코드는, 파일 형식 이외의 애플리케이션에서도 사용됩니다.다음은 예를 제시하겠습니다.

  • ACPI ID[11] 레지스트리의 벤더용 UEFI 포럼
  • ACPI 사양에서는, ACPI Source Language(ASL; 소스 언어)로 4 문자의 식별자를 정의합니다.
  • Synopsys를 통해 IP(DesignWare 컬렉션) 레지스터를 통해 컴포넌트 ID를 알 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ The Type/Creator Database
  2. ^ "Signatures of Macintosh Files". Logiciels & Services Duhem. Retrieved December 1, 2015.
  3. ^ Morrison, Jerry (January 14, 1985). ""EA IFF 85" Standard for Interchange Format Files". Electronic Arts.
  4. ^ "GetFileInfo", Darwin reference (man page), Apple
  5. ^ "SetFile", Darwin reference (man page), Apple
  6. ^ online-metadata.com. "What Is A Codec Tag?". What Is A Codec Tag?. Retrieved June 9, 2019.
  7. ^ "git.videolan.org Git - ffmpeg.git/blob - libavformat/isom.c". git.videolan.org. Retrieved June 9, 2019.
  8. ^ "FFmpeg/FFmpeg search". GitHub. Retrieved June 9, 2019.
  9. ^ "FFmpeg: libavcodec/raw.c Source File". ffmpeg.org. Retrieved June 9, 2019.
  10. ^ "The C Preprocessor: Implementation-defined behavior". gcc.gnu.org.
  11. ^ "ACPI ID Registry". uefi.org.

일반 참고 자료