CEA -708 - стандарт для скрытые субтитры для потоков ATSC цифрового телевидения (DTV) в США и Канаде. Он был разработан Electronic Industries Alliance.
В отличие от RLE DVB и субтитров DVD, субтитры CEA-708 имеют низкую полосу пропускания и текстовые, как и соответствующие EIA-608. титры и субтитры EBU телетекста. Однако, отличие от пар байтов EIA-608, субтитры CEA-708 не могут быть модулированы на композитном выходе линии 21 NTSC VBI приемника ATSC и визуализироваться приемником с цифровыми видеокадрами, в том числе включает больше Набор символов Latin-1 и включает заглушки для поддержки полных заголовков UTF-32 и загружаемых шрифтов. Потоки субтитров CEA-708 также могут инкапсулировать пары байтов EIA-608 внутри, что является довольно распространенным использованием.
Субтитры CEA-708 вводятся в видеопотоки MPEG-2 в данные пользователя изображения. Пакеты расположены в порядке изображений и должны быть переставлены так же, как и рамки изображений. Это известно как транспортный поток DTVCC. Этот канал с фиксированной пропускной способностью , который имеет 960 бит / с, обычно выделяемых для обратно совместимых "инкапсулированных" заголовков Строки 21, и 8640 бит / с, выделяемых для заголовков CEA-708, всего 9600 бит / с. с. Стандарт ATSC A / 53 содержит особенности кодирования. Основная форма сигнализации - через дескриптор заголовка PSIP, который указывает язык каждого заголовка и если он отформатирован для «легкого чтения» (3-й уровень для изучающего языка) в PSIP EIT для каждого события и, возможно, в H.222 PMT, только если видео всегда отправляет данные субтитров.
Декодеры субтитров CEA-708 требуются в США в соответствии с требованиями FCC для всех цифровых телевизоров с диагональю 13 дюймов (33 см) или больше. Кроме того, некоторые вещательные компании по правилам FCC требуют субтитров процент их трансляций.
Потоки заголовков передаются с множеством оболочек пакетов вокруг них. Это пользовательские данные изображения, которые содержат данные заголовка, который содержит пакеты cc_data, который содержит пакеты заголовка канала, который содержит служебный блок, содержит потоки заголовков. Эти пакеты подробно развитие в этом разделе. Но сами потоки использования в следующих разделах.
Это разбиение на уровнях основано на эталонной модели протокола OSI :
Уровни OSI | Уровни DTVCC | Комментарии |
---|---|---|
Приложение | Интерпретация | Выдача команд и добавление текста в окнах |
Презентация | Кодирование | Разделение отдельных команд и символов |
Сеанс | Сервис | Пакеты служебного блока |
- | Пакет | Сборка пакета DTVCC из пакетов cc_data |
Транспорт | Внедлеченные пакеты cc_data из видеокадров | |
Сеть | Неиспользуемая | прямая связь |
Ссылка | SMPTE 259M или H.222 или MXF | видеокадры, отделенные от формата канала |
Физический | SDI или 8VSB | , демодулированный из передачи |
В этом разделе будут различные пакеты, уровень кодирования и уровни представления в оставшейся части этого документа.
Они вставляются перед активным видеокадром или видеопакетом SMPTE 259M. Общие видеопакеты - это заголовок изображения, набор параметров изображения и сущность Формат обмена материалами.
Длина | Имя | Тип | Значение |
---|---|---|---|
32 биты | user_data_start_code | шаблонный bslbf | 0x000001B2 |
32 бита | user_identifier | ASCII bslbf | GA94 |
8 бит | код_типа_пользователя | uimsbf | 3 |
X * 8 бит | структура_типа_пользователя | двоичный | в свободной форме |
bslbf: битовая строка, сначала левый бит; uimsbf: целое число без знака, первый старший бит
Длина | Имя | Тип | Значение |
---|---|---|---|
8–16 бит | nal_unit | bslbf с шаблоном | 6 в 8 битах для H.264. 39 из 16 -биты для H.265 |
8 бит | payloadType | uimsbf | 4 |
8 бит | payloadSize | uimsbf | переменная |
8 бит | itu_t_t35_country_code | uimsbf | 181 |
16 бит | itu_t_t35_provider_code | uimsbf | 49 или 47 |
32 бита | ATSC_идентификатор_пользователя. (только для провайдера 49) | ASCII bslbf | GA94 |
8 бит | ATSC1_data_user_data_type_code. (только для провайдера 47 или 49) | uimsbf | 3 |
8 бит | DIRECTV_user_data_length. (только для провайдера 47) | uimsbf | переменная |
X * 8 бит | структура_типа_пользователя | двоичный | произвольная форма |
bslbf: бит строка, сначала левый бит; uimsbf: целое число без знака, первый старший бит
ПРИМЕЧАНИЕ : SEI в зависимости от кодировщика может содержать больше полезных данных, чем только заголовки, поэтому потребуется перемещаться по всем содержащимся внутри типам полезных данных.
Если для itu_t_t35_country_code установлено значение 181, itu_t_t35_provider_code определяет производителей, обслуживаемых в США.
itu_t_t35_provider_code для поддерживаемых производителей в США, когда установлено значение 47, определяет DirecTV user_data, а значение 49 определяет ATSC user_data.
Код ATSC_user_identifier для ATSC1_data - «GA94», а для EBU AFD_data - «DTG1».
Если код ATSC1_user_data_type_code не равен 3 для DTV CC, 4 для SCTE EIA-608, 5 для выбора яркости с амплитудно-импульсной модуляцией SCTE или 6 для штриховых данных EBU, то пакет будет завершен байты 0x0, 0x0, 0x1.
Длина | Имя | Тип | По умолчанию |
---|---|---|---|
16 или 128 бит | ancillary_flag или. ancillary_header | шаблонный bslbf или. 7 uimsbf | 0xFFFF или. меняется |
8 бит | data_id | uimsbf | 97 (0x61) |
8 бит | идентификатор_вторичных_данных | uimsbf | 1 |
8 бит | количество_данных | uimsbf | 78 (0x4E) |
16 бит | cdp_id | uimsbf | 0x9669 |
8 бит | cdp_data_count | uimsbf | 78 (0x4E) |
4 бита | cdp_framing_rate. (30000/1001 = 4) | uimsbf | 4 |
4 бита | cdp_reserved | uimsbf | 15 (0xF) |
1 бит | cdp_timecode_added | flag | 0 |
1 бит | cdp_data_block_added | флаг | 1 |
1 бит | cdp_service_info_added | флаг | 0 |
1 бит | cdp_service_info_start | флаг | 0 |
1 бит | cdp_service_info_changed | флаг | 0 |
1 бит | cdp_service_in fo_end | флаг | 0 |
1 бит | cdp_contains_captions | флаг | 1 |
1 бит | cdp_reserved | flag | 1 |
16 бит | cdp_counter | uimsbf | меняется |
8 бит | cdp_data_section | uimsbf | 0x72 |
X * 8 бит | структура_типа_пользователя | двоичный | в свободной форме |
8 бит | cdp_footer_section | uimsbf | 0x74 |
16 бит | cdp_counter | uimsbf | изменено |
8 бит | cdp_checksum | uimsbf | изменяется |
bslbf: битовая строка, сначала левый бит; uimsbf: целое число без знака, первый старший бит
Эта структура была использована для любого цифрового звука или метаданных, которые должны быть синхронизированы с видеокадром. SDI транспортирует каждые восемь битов в 10-битовом выровненном пакете, в отличие от MXF, выровненного по байтам, а байты вспомогательных флагов заменены 128-битным заголовком. Если cdp_timecode_added - истина, то пятибайтовый раздел временного кода SMPTE вставляется перед cdp_data_section. Если cdp_service_info_added истинно, то после cdp_data_section вставляется двухбайтовый заголовок и семь байтов в список служб для служб заголовков. Для cdp_framing_rate можно задать следующие перечисления: 1 для 24000/1001, 2 для 24, 3 для 25, 4 для 30000/1001, 5 для 30, 6 для 50, 7 для 60000/1001 и 8 для 60 кадров в секунду.
cdp_timecode используется, когда поток данных cdp прерывается (т. Е. Не дополняется), а cdp_service_info используется для добавления дополнительных деталей к метаданным вещания PSIP, таких как языковой код, удобство чтения и широкоэкранное использование.
cdp_checksum - это значение, необходимое для приведения арифметической суммы всего пакета (от первого байта cdp_id до cdp_checksum включительно) по модулю 256 к нулю.
Длина | Имя | Тип | По умолчанию |
---|---|---|---|
1 бит (b7) | флаг_em_data_процесса | flag | 1 |
1 бит (b6) | process_cc_data_flag | flag | 1 |
1 бит (b5) | additional_data_flag | flag | 0 |
5 бит (b0-b4) | cc_count | uimsbf | переменная |
8 бит | em_data. (нет в данных CDP) | uimsbf | 255 |
cc_count * 24 бита | cc_data_pkt's | bslbf | в свободной форме |
8 бит | marker_bits. (нет в данных CDP) | bslbf с шаблоном | 255 |
24+ бит | ATSC_reserved_user_data. (нет в данных CDP) | bslbf | в свободной форме |
Биты маркера и зарезервированные биты должны быть установлены по умолчанию. Если дополнительный_data_flag установлен, то ATSC_reserved_user_data будет в конце пакета, оканчивающимся байтами 0x0,0x0,0x1. Если process_cc_data_flag установлен, cc_data_pkt должны быть проанализированы следующим образом:
В какое-то время в будущем process_em_data_flag укажет, следует ли обрабатывать набор битов em_data. Временное значение еще не было определено в стандарте ATSC a / 53.
Всего 3та:
Длина | Имя | Тип | По умолчанию |
---|---|---|---|
5 бит (b7-b3) | маркерные_биты (все единицы) | шаблонный bslbf | 31 |
1 бит (b2) | cc_valid | флаг | 1 |
2 бита (b1-b0) | cc_type | bslbf | 0 |
8 бит | cc_data_1 | bslbf | DTVCC в свободной форме / EIA-608, байт 1 |
8 бит | cc_data_2 | bslbf | DTVCC в свободной форме / EIA-608, байт 2 |
Если cc_valid не установлен, cc_data_pkt следует считать заполнением и отбрасывать. Если он установлен, cc_type будет одним из четырех значений: NTSC_CC_FIELD_1 = 0, NTSC_CC_FIELD_2 = 1, DTVCC_PACKET_DATA = 2, DTVCC_PACKET_START = 3. 1 поля cc_data должны интерпретироваться как EIA-608 Captions (с учетом 4 заголовков, как это делает EIA-608). Если cc_type равно 3, тогда декодер должен начать сборку пакета заголовка канала с cc_data, как описано ниже, а если cc_type равен 2, он должен добавить cc_data к любому собираемому пакету канала заголовка. Если пакет DTVCC уже собирается и либо установлен cc_valid, либо cc_type равен 3, либо cc_valid очищен, а cc_type равно 2 или 3, то пакет следует считать завершенным.
ПРИМЕЧАНИЕ: В декодированных заголовках пакеты cc_data должны быть повторно собраны в правильном порядке для создания пакетов DTVCC. В стандарте это не ясно, но похоже, что это должно быть в порядке представления кадров, а не в закодированных кадров. Это означает, что в кодировщике пакетов DTVCC, вероятно, должны быть разбиты и вставлены в пользовательские данные изображения как пакеты cc_data в порядке отображения.
ПРИМЕЧАНИЕ: Чтобы избежать этой ошибки в стандарте CEA-708, некоторые кодеры кодируют заголовки только для одного типа кадра, например только P-кадра или только I-кадра, поскольку, если используется только один тип кадра, кадр порядок отображение и кодирования кадров одинаков.
Длина | Имя | Тип | По умолчанию |
---|---|---|---|
2 бита | порядковый_номер | uimsbf | 0 |
6 бит | размер_пакета. (если 0, размер_пакета равен 64) | uimsbf | переменная |
(размер_пакета * 2-1) * 8 битов | данные_пакета | двоичный | произвольный формат |
В данных_пакета существует только один тип пакета. Это называется сервисным блоком. Это дополнительно подразделяет транспортный поток DTVCC на 63 подпотока, каждый из которых включает отдельную услугу субтитров. Служба 1 обозначена как основная служба субтитров, а служба 2 - это служба дополнительных языков. Дескриптор Caption указаны любые другие предлагаемые услуги. Package_size определяет количество двух байтовых блоков, за которыми следуют нечетные блоки, дополненные байтом NULL.
Длина | Имя | Тип | По умолчанию |
---|---|---|---|
3 бита | service_number | uimsbf | 1 |
5 бит | размер_блока | uimsbf | переменная |
2 бита | null_fill. (только если service_number равен 7) | выравнивание по байтам | 0 |
6 бит | расширенный_service_number. (только если service_number равен 7) | uimsbf | переменная |
размер_блока * 8 бит | данные_блока. (когда размер_блока>0) | uimsbf | в свободной форме |
Если service_number равен 7, то добавляется расширенный_service_number и используется вместо service_number. Если block_size равен 0, service_number также должен быть нулевым без наличия block_data. Это называется пустым заголовком служебного блока, который используется для заполнения пакета, когда не отправляются подписи.
Примечание: служебные блоки не могут пересекать границы пакетов канала титров. Это означает, что каждый пакет канала субтитров может быть проанализирован без сохранения состояния служебных блоков.
63 подпотока службы субтитров содержат смешанный командный и текстовый поток, как и Telnet. Существует четыре подгруппы логического кода: CL, GL, CR и GR. Каждый из них имеет одно- и многосимвольные кодовые наборы.
Группа CL: C0 | 0x00-0x1F | Подмножество управляющих кодов ASCII |
Группа CR: C1 | 0x80-0x9F | Заголовок Коды управления |
Группа CL: C2 | 0x1000-0x101F | Расширенные разные коды управления |
Группа CR: C3 | 0x1080-0x109F | Расширенный набор управляющих кодов 2 |
Группа GL: G0 | 0x20-0x7F | Модифицированная версия набора печатных символов ANSI X3.4 (ASCII) |
Группа GR: G1 | 0xA0-0xFF | ISO 8859-1 Символы Latin 1 |
Группа GL: G2 | 0x1020-0x107F | Расширенный набор кодов управления 1 |
GR Группа: G3 | 0x10A0-0x10FF | Будущие символы и значки |
Всякий раз, когда появляется командный символ, любой текст, накопленный в анализаторе, должен быть сброшен. Команда при отсутствии ожидающих команд может потребоваться очистка текста, в наборе команд C0 есть нулевая команда, известная как команда ETX. Также есть две специальные команды: Reset и DelayCancel. Их нужно анализировать с опережением. Выданная ранее команда Delay может быть отменена в любое время с помощью команды DelayCancel, поэтому, как только задержка обнаружена, декодер должен ожидать DelayCancel и искать только DelayCancel. С другой стороны, команда Reset отправляется для выхода из неизвестного состояния декодера, и все данные перед этим должны быть проигнорированы.
0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0a | 0x0b | 0x0c | 0x0d | 0x0e | 0x0f | |
0x00 | NUL | ETX | BS | FF | CR | HCR | ||||||||||
0x10 | EXT1 | P16 |
NUL, BS, FF и CR интерпретируются так же, как в управляющих кодах ASCII. HCR перемещает перо в начало строки и удаляет ее содержимое. FF очищает экран и перемещает положение пера на (0,0). ETX - это команда NULL, закрытая ранее, которая используется для сброса текста в текущем окне, когда нет других команд. EXT1 используется для перехода в таблицы «C2», «C3», «G2» и «G3» для следующего байта. Наконец, P16 может установить для экранирования следующих байтов для китайских и других карт больших символов.
За всеми символами в диапазоне 0x10-0x17, который в настоящее время включает EXT1, следует один байт, необходимо который интерпретировать по-разному. И за всеми символами в диапазоне 0x18-x1f, который в настоящее время включает P16, следуют байта, которые необходимо интерпретировать по-разному. Если декодер сталкивается с одним из них и не знает, что делать, он все равно должен пропустить следующий или два байта, в зависимости от ситуации, прежде чем продолжить.
0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0a | 0x0b | 0x0c | 0x0d | 0x0e | 0x0f | |
0x80 | CW0 | CW1 | CW2 | CW3 | CW4 | CW5 | CW6 | CW7 | CLW | DSW | HDW | TGW | DLW | DLY | DLC | RST |
0x90 | SPA | SPC | SPL | SWA | DF0 | DF1 | DF2 | DF3 | DF4 | DF5 | DF6 | DF7 |
Таблица C1 содержит все формы в настоящее время команды заголовков. Они будут подробно в следующем разделе.
Таблица C2 не содержит команд по состоянию на CEA-708 версии A. Однако, если команда видна в этих наборах кодов, декодер должен пропустить соответствующее количество следующих байтов.
0x00-0x07 | +0 байтов |
0x08-0x0f | +1 байт |
0x10-0x17 | +2 байта |
0x18- 0x1f | +3 байта |
Таблица C3 не содержит команд, начиная с CEA-708 версии A. Однако, если команда видна в этих кодовых наборах, декодер должен пропустить соответствующее количество следующих байтов.
0x80-0x87 | +4 байта |
0x88-0x8f | +5 байтов |
0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0a | 0x0b | 0x0c | 0x0d | 0x0e | 0x0f | |
0x20 | SP | ! | " | # | $ | % | ' | ( | ) | * | + | , | - | . | / | |
0x30 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
0x40 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
0x50 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
0x60 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
0x70 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | MN |
Таблица G0 в большей части из символов ASCII. SP здесь - сокращение от Space. MN - это музыкальная нота, которая заменяет код команды удаления в ASCII и может быть любым из «♩», «♪», «♫» или «♬» в зависимости от производителя приемника.
0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0a | 0x0b | 0x0c | 0x0d | 0x0e | 0x0f | |
0xa0 | NBS | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | ª | « | ¬ | - | ® |  ̄ |
0xb0 | ° | ± | ² | ³ | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ | ¾ | ¿ |
0xc0 | À | Á | Â | Ã | Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í | Î | Ï |
0xd0 | Ð | Ñ | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û | Ü | Ý | Þ | ß |
0xe0 | à | á | â | ã | ä | å | æ | ç | è | é | ê | ë | ì | í | î | ï |
0xf0 | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù | ú | û | ü | ý | þ | ÿ |
G1 Таблица в основном представляет собой набор символов ISO 8859-1 Latin-1. Обратите внимание, что символ 0xa0 - это неразрывный пробел, который следует использовать для предотвращения переноса слов для разделения двух отдельных строк.
0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0a | 0x0b | 0x0c | 0x0d | 0x0e | 0x0f | |
0x20 | TSP | NBTSP | … | Š | Œ | |||||||||||
0x30 | BLK | ' | ' | “ | ” | • | ™ | š | œ | ℠ | Ÿ | |||||
0x40 | ||||||||||||||||
0x50 | ||||||||||||||||
0x60 | ||||||||||||||||
0x70 | ⅛ | ⅜ | ⅝ | ⅞ | │ | ┐ | └ | ─ | ┘ | ┌ |
TSP и NBTSP - это прозрачное пространство и неразрывное прозрачное пространство, соответственно. Таблица G2 содержит разные символы, которые могут использоваться не во всех браузерах. BLK указывает на сплошной блок, который заполняет весь символьный блок сплошным цветом переднего плана.
Таблица G3 содержит только один символ, значок [CC], с квадратными углами. Этот персонаж находится по адресу 0xa0.
bits | Имя команды | Параметры | |
---|---|---|---|
ETX 0x03 | 8 | EndOfText | |
CW0 - CW7 0x80–0x87 | 8 | SetCurrentWindow0– 7 | |
CLW 0x88 | 16 | ClearWindows | растровое изображение окна |
DSW 0x89 | 16 | DisplayWindows | растровое изображение окна |
HDW 0x8A | 16 | HideWindows | растровое изображение окна |
TGW 0x8B | 16 | ToggleWindows | растровое изображение окна |
DLW 0x8C | 16 | DeleteWindows | растровое изображение окна |
DLY 0x8D | 16 | Задержка | десятые доли секунды |
DLC 0x8E | 8 | DelayCancel | |
RST 0x8F | 8 | Сброс | |
SPA 0x90 | 24 | SetPenAttributes | размер пера, шрифт, сценарии, курсив, подчеркивание |
SPC 0x91 | 32 | SetPenColor | цвет переднего плана, непрозрачность переднего плана, цвет фона, непрозрачность фона, цвет края, тип края |
SPL 0x92 | 24 | SetPenLocation | строка, столбец |
SWA 0x97 | 40 | SetWindowAttributes | выравнивание, направление печати, направление прокрутки, перенос слов, эффект изображения, направление эффекта, скорость эффекта. цвет заливки, цвет границы, тип границы, непрозрачность |
DF0 - DF7 0x98–0x9F | 56 | DefineWindow0–7 | приоритет, номер привязки, привязка по вертикали, привязка по горизонтали, количество строк, столбцов, заблокировано, видимый, центрированный, стиль ID |
Команда EndOfText является пустой командой, которая может сброса любого буферизованного текста в текущее окно. Все команды принудительно сбрасывают любой буферизованный текст в текущем окне, поэтому эта команда нужна только тогда, когда нет других ожидающих команд.
SetCurrentWindow сообщает декодеру титров, какое окно описывают следующие команды: SetWindowAttributes, SetPenAttributes, SetPenColor, SetPenLocation. Если указанное еще не было создано с помощью команды DefineWindow, то SetCurrentWindow и свойства окна можно безопасно игнорировать окно.
ClearWindows очищает все окна, показывает в 8-битном растровом изображении окна.
DisplayWindows отображает все окна, быстро в 8-битном растровом изображении окна.
HideWindows скрывает все окна, использует в 8-битном растровом изображении окна.
ToggleWindows скрывает все отображаемые окна и отображает все скрытые окна, используемые в 8-битном растровом изображении окна.
DeleteWindows удаляет все окна, использует в 8-битном растровом изображении окна. Если в текущем режиме указано последнее окно команды SetCurrentWindow, то текущее окно становится неопределенным, и команды окна окна не должны действовать до следующей команды SetCurrentWindow или DefineWindow.
Задержка приостанавливает всю обработку текущей службы, за вспышку DelayCancel и Reset. Период приостановки устанавливается однобайтовым параметром. Параметр указывает задержку в десятых долях секунды, поэтому минимальная задержка составляет 0,1 секунды, максимальная - 25,5 секунды. Задержку в 0 секунд можно игнорировать в декодере, но не следует из кодера. Задержка должна быть отменена, если входной буфер декодера титров переполняется, получено сообщение DelayCancel или Reset или истекает указанное время задержки.
DelayCancel завершает любую активную задержку и возобновляет нормальную обработку команд. DelayCancel следует сканировать во время задержки.
Reset удаляет все окна, отменяет любую активную задержку и очищает буфер перед командой Reset. Сброс следует сканировать во время задержки.
Команда SetPenAttributes указывает, как атрибуты символов должны быть в текущем окне до следующей команды SetPenAttributes. Эта команда имеет следующие параметры:
+ - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + | TXT_TAG | ОФС | ПСЗ | | Я | U | EDTYP | FNTAG | + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + 15 8 7 0 ОФС = смещение; PSZ = размер пера I = курсивный переключатель; U = переключатель подчеркивания EDTYP = тип края; FNTAG = тег шрифта
SetPenColor устанавливает передний план, задний план d, и цвет края для будущего символов. Цвет задается 6 битами, по 2 на синий, зеленый и красный. Биты самого низкого порядка соответствуют синему, следующие два - зеленому, а биты самого высокого порядка - красному. Непрозрачность представлена двумя битами, они представляют собой SOLID = 0, FLASH = 1, TRANSLUCENT = 2 и TRANSPARENT = 3. Цвет края - это цвет обведенных краев текста, но контур имеет ту же непрозрачность, что и передний план, поэтому биты самого высокого порядка третьего байта должны быть очищены. Параметры следующие:
+ - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + | ФОП | F_R | F_G | F_B | | BOP | B_R | B_G | B_B | | 0 | 0 | E_R | E_G | E_B | + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + 23 16 15 8 7 0 ФОП = непрозрачность переднего плана; BOP = непрозрачность фона F_? = компонент цвета переднего плана; B_? = компонент цвета фона E_? = компонент цвета края
SetPenLocation указывает местоположение следующего бита добавляемого текста в текущем окне. У него два параметра: строка и столбец. Если не заблокировано (см. «Определить») и установлен МАЛЕНЬКИЙ шрифт, местоположение может находиться за пределами допустимых окон адресов.
+ - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + | 0 | 0 | 0 | 0 | СТРОКА | | 0 | 0 | КОЛОННА | + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + 15 8 7 0
SetWindowAttributes Устанавливает текущие значения окна. Цвет заливки задается 6 битами, по 2 на синий, зеленый и красный. Биты самого низкого порядка соответствуют синему, следующие два - зеленому, а биты самого высокого порядка - красному. Непрозрачность заливки двумя битами, они предоставляют собой SOLID = 0, FLASH = 1, TRANSLUCENT = 2 и TRANSPARENT = 3. Таким же образом задается цвет границы окна. Однако тип границы разделен на два поля. Их следуетинировать, причем тип границы 01 представляет биты младшего разряда, а тип границы 2 - бит старшего разряда. После объединения тип границы имеет 6 допустимых значений: NONE = 0, RAISED = 1, DEPRESSED = 2, UNIFORM = 3, SHADOW_LEFT = 4 и SHADOW_RIGHT = 5.
+ - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + | ФОП | F_R | F_G | F_B | | BTP | B_R | B_G | B_B | | W | B | PRD | SCD | JST | | EFT_SPD | EFD | DEF | + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + 31 24 23 16 15 8 7 0 FOP = непрозрачность заливки; BTP = младшие биты типа границы; B = верхний бит типа границы F_? = компонент цвета заливки; B_? = компонент цвета границы W = переключатель переноса слов; PRD = направление печати; SCD = направление прокрутки JST = выравнивание; EFT_SPD = скорость эффекта; EFD = направление эффекта; DEF = эффект отображения
Для выравнивания по левому краю декодеры должны отображать часть полученной строки текста при ее получении. Для выравнивания по центру, по правому краю и полного выравнивания декодеры могут отображать любую часть принятой строки текста при ее получении или задерживать выполнение установленной строки текста до достижения индикатора завершения строки. Индикатор завершения строки определяется как получение CR, ETX или любой другой команды, кроме SetPenColor, SetPenAttributes или SetPenLocation, где перо перемещение находится в том же ряду.
Получение символов для отображаемой строки, которая уже содержит текст с выравниванием по центру, правому краю или полным выравниванием, приведет к тому, что строка будет очищена перед отображением нового полученного символа и любых символов. Получение команды согласования, которая изменяет последнее полученное обоснование для данного окна, приведет к очистке окна.
Цвета, рисование текста, эффекты и типы границ можно настроить с помощью атрибутов SetWindowAttributes и SetPenAttributes команды. Однако поставщик заголовков может пожелать использовать предопределенные стандартные стили окна. Набор предопределенных стилей будет жестко сохранен в приемниках. Этот набор предвосхищает наиболее широко используемые типы окон субтитров, чтобы сохранить полосу пропускания канала субтитров за счет устранения необходимости передавать лишние команды SetWindowAttributes и SetPenAttributes .
Предопределенные стили окна и пера можно указать с помощью параметров стиля окна и идентификатора стиля пера в команде DefineWindow .
DefineWindow0-7 создает одно из восьми окон, используемых декодером титров. Эта команда должна периодически посылаться кодировщиком титров даже для уже существующих окон, чтобы только что настроенный декодер титров мог начать отображать титры. При запуске в уже существующем окне стиль пера и стиль окна могут быть оставлены нулевыми, это указывает декодеру не важные текущие стили, если они существуют, и инициализировать оба стиля 1, если окно не существует в его контексте.
+ - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + | 0 | 0 | V | R | C | ПРИОР | | P | VERT_ANCHOR | | HOR_ANCHOR | + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + 47 40 39 32 31 24 В = видимый; R = переключатель блокировки строки; C = переключатель блокировки столбца PRIOR = приоритет; P = относительный переключатель + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + | ANC_ID | ROW_CNT | | 0 | 0 | COL_COUNT | | 0 | 0 | WNSTY | ПНСТИ | + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + 23 16 15 8 7 0 WNSTY = стиль окна; PNSTY = стиль пера
Параметры следующие:
Если не указано, предопределенный размер шрифта является стандартным, смещение нормальное, курсив и подчеркивание не установлено, тип края отсутствует, цвет переднего плана белый, непрозрачность переднего плана сплошная, цвет фона - черный, непрозрачность фона - сплошная, а цвет края - черный.
Если не указано указанное, заданное выравнивание - левое, направление печати слева направо, направление прокрутки - снизу- вверху, перенос слов отключен, эффект отображение мгновенного, направление и скорость, эффект не заданы, цвет заливки черный, непрозрачность заливки сплошная, а тип границы отсутствует.
Иногда может потребоваться выполнение переноса слов в декодере титров. Это может произойти из-за того, что конечный пользователь декодирует заголовок указывает шрифт, отличный от того, который запрашивает кодировщик, или конечный пользователь желает видеть больше текста заголовка, чем обычно. Обратите внимание, что SetWindowAttributes устанавливает флаг переноса слов, если он установлен, это означает, что субтитры написаны с учетом переноса слов, и это может быть обозначено в качестве подсказки декодеру, что перенос слов безопасен. Перенос слов может приготовить для символов возврат каретки, пробела и дефиса, однако как неразрывный пробел (0xA0 в таблице G1), так и неразрывный прозрачный пробел (0x21 в таблице G2) не следует считать безопасными символами. переписать.
Существует девять допустимых индикаторов привязки,.
Они используются, чтобы кодировать заголовка, как расширять текстовое поле, когда текст добавляется в окно заголовка. Окну назначается точка привязки или идентификатор и привязки. Если точка привязки равна 0,0, то окно будет расширяться вниз и вправо от верхнего левого угла области заголовка. Если точка привязки составляет 50%, 50%, а привязки равен 4, окно будет расширяться одинаково во всех направлениях от центра области заголовка.
CEA-708 поддерживает восемь тегов шрифтов: undefined, моноширинный шрифт с засечками, пропорциональный шрифт с засечками, моноширинный без засечек, пропорциональный без засечек, обычный, курсив, прописные буквы. Первый не определен, и его, вероятно, следует избегать. Однако, как бы ни были реализованы эти шрифты, их должно быть возможно выделить и выделить курсивом. Жирные версии не нужны, но должна быть возможность рисовать контур каждой буквы другим цветом и непрозрачностью, чем заливка. Наконец, эти шрифты должны поддерживать надстрочные и подстрочные индексы, а также поддерживать Latin-1 плюс дополнительные символы в CEA-708, такие как символы [CC] и дюжину или около того Unicode символов в этом стандарте. Ниже представлены некоторые примеры шрифтов, подробнее см. Статью Википедии Шрифты.
Пропорциональный шрифт с засечками | |
---|---|
Пропорциональный шрифт без засечек | |
Адресуемая область окна всегда должна находиться в пределах области безопасного заголовка, чтобы все адресные местоположения находились в пределах окна дисплея, если монитор выходит за пределы изображение на непрямоугольном экране. Если видеопоток имеет соотношение сторон 16: 9, адреса должны быть в диапазоне 0..74 для вертикальных адресов и 0..209 для горизонтальных адресов. Если видеопоток имеет соотношение сторон 4: 3, адреса должны быть в диапазоне 0..74 для вертикальных адресов и 0..159 для горизонтальных адресов. Для других компаний следует использовать относительную адресацию, и как вертикальные, так и горизонтальные адреса должны находиться в диапазоне 0..99%.
Размер должен масштабироваться в зависимости от размера окна шрифта. Имея это в виду, строки длиной более 32 символов, не приветствуются даже на экране с исходным сторонением 16: 9, так что пользователь может выбрать шрифты большего размера, чем указано.
Функции блокировки строк и столбцов поддерживаются в стандарте CEA-708-B, но в более поздней версии CEA-708-C предполагалось, что и строки, и столбцы заблокированы. Основные функции следующие:
Всего четыре комбинации 1) Строка заблокирована и столбец заблокирован 2) Строка разблокирована и столбец заблокирован 3) Строка заблокирована и столбец разблокирован 4) Строка разблокирована и столбец разблокирован 4) Строка разблокирована и столбец разблокирован
1. Строка заблокирована и столбец заблокирован: если заблокированы и строки, и столбцы, то размер окна с точки зрения столбцов и строк не может быть увеличен.
Для окна, если количество строк и столбцов определено, скажем, как 3 и 10, тогда текст «СТРОКИ И КОЛОННЫ НЕ ЗАБЛОКИРОВАНЫ НА ВСЕГДА И ВСЕГДА», который появляется в строке 0, выглядит так: ниже (предположим, что перенос слов отключен)
1. СТРОКИ И C 2. 3.
Так как оба заблокированы, текст не может быть расширен за пределы 10 столбцов, а также строка не может быть расширена за пределы строки 0.
2. Строка расширена и столбец заблокирован: в этом случае окно может быть расширено до максимальной строки, может быть расширено в команде определения окна. Тот же текст выше будет выглядеть как ниже
1. СТРОКИ И C 2. OLUMNS 3. НЕ ЗАБЛОКИРОВАНЫ
Строка разблокирована, поэтому текст может быть расширен до количества строк команды определения окна.
3. Строка заблокирована и столбец разблокирован: в этом случае окно можно расширить до количества столбцов. В соответствии со стандартом CEA-708 Максимальное количество столбцов для любого окна равно 32. Тот же текст выглядит так, как показано ниже
1. СТРОКИ И КОЛОННЫ НЕ ЗАБЛОКИРОВАНЫ 2. 3.
Столбец разблокирован, поэтому текст может быть расширен до количества столбцов.
4. Строка разблокирована и столбец разблокирован: в этом случае окно может быть расширено как на строки, так и на столбцы. Тот же самый текст будет выглядеть как ниже
1. СТРОКИ И КОЛОННЫ НЕ БЛОКИРУЮТСЯ 2. НАВСЕГДА И ВСЕГДА И ВСЕГДА
Барселона разблокированы, текст может быть расширен до 32 столбцов, а также до всего строк.