RIFF

Материал из Википедии — свободной энциклопедии

RIFF (

AVI (видео), WAV (аудио), RMI (MIDI
-треки).

Формат RIFF использует порядок байтов little-endian (младший байт идёт первым). Для машин с форматом данных big-endian предлагался формат RIFX, однако из-за существенно меньшей в бытовом секторе популярности компьютеров с таким форматом данных RIFX не прижился, и в настоящее время формат RIFF воспроизводится и на машинах с big-endian порядком байтов.

Изначально RIFF имел принципиальное ограничение размера данных в 4 ГБ (точнее, максимальный размер файла байт). В силу особенностей ряда популярных

European Broadcasting Union
.

Формат RIFF разработан в 1991 году компаниями Microsoft и IBM на основе формата IFF, разработанного компанией Electronic Arts в 1985 году, для little-endian компьютеров.

chunk

Основной концепцией RIFF-формата является chunk — блок данных, состоящий из трёх полей:

тип поля имя поля содержимое поля
FourCC ckID идентификатор типа содержимого chunk'а
DWORD ckSize размер данных chunk'а
BYTE[] ckData данные chunk'а

Если chunk содержит нечётное количество байтов, то в конец поля данных добавляется один байт 00h. Таким образом, размер chunk’а всегда равен чётному числу байтов.

FourCC

FourCC (от англ. Four-Character Code) — четырёхсимвольный код-идентификатор видеокодеков, форматов сжатия, цветов или (пиксельных) размеров изображения, используемых в медиафайлах. Применительно к RIFF — это ckID (идентификаторы chunk’ов) и типы форм. Применительно к видеопотоку — это идентификатор кодека (например, «XVID», «DIV3», «MP43»). FourCC занимает 4 байта; это размер 32-битного числа, так что иногда FourCC записывают в виде числа (представления числа в ASCII little-endian).

Например:

FourCC число (шестнадцатеричное) число (десятичное)
'RIFF' 0x46464952 1179011410
'AVI ' 0x20495641 541677121
'DIVX' 0x58564944 1482049860
'idx1' 0x31786469 829973609

Два типа chunk’ов RIFF и LIST могут содержать внутри себя вложенные chunk’и. Весь файл представляет собою единый RIFF-chunk (это одна из причин ограничения размера файла).

ckID для chunk’ов самого формата RIFF всегда записываются большими буквами ASCII. В chunk’ах внутренних форматов (использующих RIFF), таких как AVI или WAV, ckID записывается маленькими буквами. Если ckID содержит две или три буквы, недостающие до 4 символов байты заменяются пробелами (AVI → 'AVI ').

Форма записи

Для удобства записи в спецификациях используется следующая форма записи формата chunk’а:

ckID(<formType> ck)

Например, запись для AVI-файла: RIFF('AVI ' LIST('hdrl' avi_header) LIST ('movi' movi) [idx1]). (Квадратные скобки указывают на необязательность элемента.)

Стандартные chunk’и

RIFF

«RIFF» DWORD:SIZE DWORD:FOURCC BYTE[]:DATA

Chunk с ckID = 'RIFF' имеет следующую структуру ckData:

тип поля имя поля комментарий к полю
FourCC FormType тип содержимого
BYTE[] ck содержимое

Наиболее распространённые типы FourCC:

  • 'AVI ' — AVI: содержат видео- и аудиоинформацию.
  • 'WAVE' — WAV: содержит звуковую информацию
  • 'RMID' — RMI: содержит музыку в формате MIDI

Другие типы:

  • 'RDIB' — англ. RIFF Device Independent Bitmap формат хранения изображений
  • 'RMMP' — англ. RIFF Multimedia Movie File
  • 'PAL ' — англ. Palette Format

LIST

Chunk LIST имеет формат, аналогичный RIFF, первые 4 байта содержат ListType (тип вложенного chunk’а), далее до конца чанка следуют вложенные chunk’и. В рамках формата AVI внутри LIST содержатся chunk’и с заголовком файла, заголовками потоков. Так же chunk LIST используется для хранения информации о содержимом.

JUNK и PAD

Для выравнивания блоков данных по размеру сектора на носителе для обеспечения скорости перемотки и доступа существуют два chunk’а: JUNK и PAD, которые «ничего не значат» и пропускаются программами воспроизведения. Изначально предполагалось, что при создании файла эти chunk’и будут просто заполнены нулями, однако некоторые программы редактирования видео хранят там свою

Virtual Dub
).

Запись chunk’ов в сокращённой нотации:

JUNK (filler) PAD (filler)

INFO

INFO — специальный ListType для хранения информации о содержимом файла. INFO не влияет на то, как программы работают с файлом, эта информация (большей частью) показывается пользователю. Назначение INFO подобно назначению mp3-тегов.

Список chunk’ов для INFO:

  • IARL (англ. Archival Location) — место архивного хранения документа (практически не используется)
  • IART (англ. Artist) — список авторов произведения (стандартный тег, отображается практически во всех плеерах).
  • ICMS (англ. Commissioned) — список лиц, предоставивших содержимое файла (не используется)
  • ICMT (англ. Comments) — комментарий (отображается практически во всех плеерах)
  • ICOP (англ. Copyright) — информация об авторских правах.
  • ICRD (англ. Creation date) — дата создания оригинального произведения. Формат YYYY-MM-DD (редко используется).
  • ICRP (англ. Cropped) — данные об обрезке произведения (не используется).
  • IDIM (англ. Dimensions) — физические размеры оригинала (не используется).
  • IDPI (англ. Dots Per Inch) — DPI оригинала (не используется)
  • IENG (англ. Engineer) — фамилии лиц, создававших файл (не используется).
  • IGNR (англ. Genre) — жанр (частично поддерживается)
  • IKEY (англ. Keywords) — список ключевых слов, относящихся к произведению (не используется)
  • ILGT (англ. Lightness) — степень освещённости оригинала (зависит от оборудования оцифровки) (не используется).
  • IMED (англ. Medium) — тип носителя оригинала (не используется)
  • INAM (англ. Name) — название произведения. Существуют разногласия о том, следует ли использовать INAM или ISBJ для сохранения заголовка произведения (стандартный тег, поддерживается и часто используется)
  • IPLT (англ. Palette Setting) — количество цветов при оцифровке (не используется).
  • IPRD (англ. Product) — заголовок продукта, для которого в оригинале предназначалось произведение (не используется)
  • ISBJ (англ. Subject) — описывает содержимое файла. Периодически, наравне с INAM, используется для хранения заголовка (используется)
  • ISFT (англ. Software) — ПО, использованное для создания файла. Обычно автоматически заполняется программами по редактированию, но не отображается в списке тегов (используется)
  • ISHP (англ. Sharpness) — необходимый уровень резкости для воссоздания произведения (не используется)
  • ISRC (англ. Source) — название организации, предоставившей произведение (не используется)
  • ISRF (англ. Source Form) — форма оригинального произведения (бумага/слайд и т. д.) (не используется)
  • ITCH (англ. Technician) — специалист, производивший оцифровку (не используется)

Ссылки