Концепция потока видеоданных
Иллюстрации
Показать всеИзобретение относится к вычислительной технике. Технический результат заключается в обеспечении низкой сквозной задержки. Цифровой носитель данных, хранящий поток видеоданных, имеющий видеоконтент, закодированный в нем, в единицах под-частей изображений видеоконтента, при этом каждая под-часть соответственно закодирована в один или более пакетов полезной нагрузки последовательности пакетов потока видеоданных, при этом последовательность пакетов разделена на последовательность блоков доступа, так что каждый блок доступа собирает пакеты полезной нагрузки, относящиеся к соответствующему изображению видеоконтента, причем последовательность пакетов содержит помещенные в нее пакеты управления таймингом, так что пакеты управления таймингом подразделяют блоки доступа на блоки декодирования, так что по меньшей мере некоторые блоки доступа подразделены на два или более блоков декодирования, при этом каждый пакет управления таймингом сигнализирует время извлечения буфера декодера для блока декодирования, пакеты полезной нагрузки которого следуют за соответствующим пакетом управления таймингом в последовательности пакетов. 10 н. и 7 з.п. ф-лы, 40 ил.
Реферат
Изобретение относится к концепциям потока видеоданных, которые, в частности, выгодны в связи с приложениями с малой задержкой.
HEVC [2] допускает различные средства сигнализации Синтаксиса Высокого Уровня прикладному уровню. Такие средства представляют собой заголовок блока NAL, Наборы Параметров и Сообщения Дополнительной Информации Улучшения (SEI). Последние не используются в процессе декодирования. Другие средства сигнализации Синтаксиса Высокого Уровня происходят из соответствующих спецификаций транспортного протокола, таких как Транспортный Протокол MPEG2 [3] или Транспортный Протокол Реального Времени [4], и их определенных спецификаций полезной нагрузки, например, рекомендаций для H.264/AVC [5], масштабируемого кодирования видеосигнала (SVC) [6] или HEVC [7]. Такие транспортные протоколы могут представить сигнализацию Высокого Уровня, которая использует подобные структуры и механизмы, что и сигнализация Высокого Уровня соответствующей спецификации кодека прикладного уровня, например HEVC [2]. Одним из примеров такой сигнализации является блок NAL Информации Масштабируемости Контента Полезной Нагрузки (PACSI), как описано в [6], который предоставляет дополнительную информацию для транспортного уровня.
Для наборов параметров, HEVC включает в себя Набор Параметров Видео (VPS), который собирает наиболее важную информацию потока, которая должна быть использована прикладным уровнем, в одном и центральном местоположении. В более ранних подходах было необходимо, чтобы эта информация собиралась из нескольких Наборов Параметров и заголовков блоков NAL.
До настоящей заявки статус стандарта по отношению к операциям Буфера Кодированного Изображения (CPB) Гипотетического Эталонного Декодера (HRD) и всего связанного синтаксиса, предоставленного в Наборе Параметров Последовательности (SPS)/Информации Применимости Видео (VUI), Тайминга Изображения SEI, Периода Буферизации SEI, а также определения блока декодирования, описывающего под-изображение и синтаксис Зависимых Слайсов как присутствующих в заголовке слайса, а также Наборы Параметров Изображений (PPS), были следующими.
Для того чтобы позволить операции с малой задержкой CPB на уровне под-изображения, операции под-изображений CPB были предложены и интегрированы в проект стандарта HEVC 7 JCTVC-11003 [2]. Здесь особенно, блок декодирования был определен в разделе 3 в [2] как:
блок декодирования: Блок доступа или подмножество блока доступа. Если SubPicCpbFlag равен 0, блок декодирования представляет собой блок доступа. В противном случае, блок декодирования состоит из одного или более блоков VCL NAL в блоке доступа и связанных не-VCL NAL блоков. Для первого блока VCL NAL в блоке доступа связанные не-VCL NAL блоки являются блоками NAL данных заполнения, если таковые имеются, непосредственно следующими за первым блоком VCL NAL и не-VCL NAL блоками в блоке доступа, которые предшествуют первому блоку VCL NAL. Для блока VCL NAL, который не является первым блоком VCL NAL в блоке доступа, связанные не-VCL NAL блоки являются блоком NAL данных заполнения, если таковые имеются, непосредственно следующим за блоком VCL NAL.
В стандарте, определенном до того времени, «Тайминг удаления блока декодирования и декодирование блока декодирования» было описано и добавлено в Приложение C «Гипотетический Эталонный Декодер». Чтобы сигнализировать тайминг под-изображения, сообщение SEI периода буферизации и сообщение SEI тайминга изображения, а также параметры HRD в VUI были расширены, чтобы поддерживать блоки декодирования в качестве блоков под-изображения.
Синтаксис [2] сообщения SEI периода буферизации показан на Фиг. 1.
Когда NalHrdBpPresentFlag или VclHrdBpPresentFlag равны 1, сообщение SEI периода буферизации может быть связано с любым блоком доступа в битовом потоке, и сообщение SEI периода буферизации будет связано с каждым блоком доступа RAP и с каждым блоком доступа, связанным с сообщением SEI точки восстановления.
Для некоторых применений частое присутствие сообщения SEI периода буферизации может быть желательным.
Период буферизации был задан как набор блоков доступа между двумя объектами сообщения SEI периода буферизации в порядке декодирования.
Семантика была следующая:
seq_parameter_set_id определяет набор параметров последовательности, который содержит атрибуты HRD последовательности. Значение seq_parameter_set_id будет равно значению seq_parameter_set_id в наборе параметров изображения, на который ссылается первичное закодированное изображение, связанное с сообщением SEI периода буферизации. Значение seq_parameter_set_id должно быть в диапазоне от 0 до 31, включительно.
rap_cpb_params_present_flag, равный 1, определяет присутствие синтаксических элементов initial_alt_cpb_removal_delay[ SchedSelIdx ] и initial_alt_cpb_removal_delay_offset[ SchedSelIdx ]. В случае, когда не присутствует, значение rap_cpb_params_present_flag подразумевается равным 0. Когда связанное изображение не является ни изображением CRA, ни изображением BLA, значение rap_cpb_params_present_flag будет равно 0.
initial_cpb_removal_delay[ SchedSelIdx ] и initial_alt_cpb_removal_delay[ SchedSelIdx ] определяют исходные задержки удаления CPB для SchedSelIdx-го CPB. Синтаксические элементы имеют длину в битах, заданную посредством initial_cpb_removal_delay_length_minus1 + 1, и выражены в единицах 90 кГц тактового сигнала. Значения синтаксических элементов не будут равны 0 и не будут превышать 90000 * ( CpbSize[ SchedSelIdx ] ÷ BitRate[ SchedSelIdx ]), временной эквивалент размера CPB в единицах 90 кГц тактового сигнала.
initial_cpb_removal_delay_offset[ SchedSelIdx ] и initial_alt_cpb_removal_delay_offset[ SchedSelIdx ] используются для SchedSelIdx-го CBP для задания исходного времени доставки закодированных блоков данных в CPB. Синтаксические элементы имеют длину в битах, заданную посредством initial_cpb_removal_delay_length_minus1 + 1, и выражены в единицах 90 кГц тактового сигнала. Эти синтаксические элементы не используются декодерами и могут быть нужны лишь для планировщика доставки (HSS).
По всей закодированной видеопоследовательности сумма initial_cpb_removal_delay[ SchedSelIdx ] и initial_cpb_removal_delay_offset[ SchedSelIdx ] должна быть постоянной для каждого значения SchedSelIdx, и сумма initial_alt_cpb_removal_delay[ SchedSelIdx ] и initial_alt_cpb_removal_delay_offset[ SchedSelIdx ] должна быть постоянной для каждого значения SchedSelIdx.
Синтаксис сообщения SEI тайминга изображения из [2] показан на Фиг. 2.
Синтаксис сообщения SEI тайминга изображения был зависим от контента набора параметров последовательности, который является активным для закодированного изображения, связанного с сообщением SEI тайминга изображения. Однако, если сообщению SEI тайминга изображения блока доступа IDR или BLA не предшествует сообщение SEI периода буферизации в том же блоке доступа, активация связанного набора параметров последовательности (и, для изображений IDR или BLA, которые не являются первым изображением в битовом потоке, определение, что закодированное изображение является изображением IDR или изображением BLA) не происходит до декодирования первого закодированного блока NAL слайса закодированного изображения. Поскольку закодированный блок NAL слайса закодированного изображения следует за сообщением SEI тайминга изображения в порядке блока NAL, могут быть случаи, в которых необходимо для декодера хранить RBSP, содержащий сообщение SEI тайминга изображения, до определения параметров параметра последовательности, который будет активен для закодированного изображения, и затем выполнить синтаксический анализ сообщения SEI тайминга изображения.
Присутствие сообщения SEI тайминга изображения в битовом потоке было задано следующим образом:
- Если CpbDpbDelaysPresentFlag равен 1, одно сообщение SEI тайминга изображения будет присутствовать в каждом блоке доступа закодированной видеопоследовательности.
- В противном случае (CpbDpbDelaysPresentFlag равен 0), сообщение SEI тайминга изображения не будет присутствовать в каждом блоке доступа закодированной видеопоследовательности.
Семантика была определена следующим образом:
cpb_removal_delay определяет, сколько тактов синхронизации ждать после удаления из CPB блока доступа, связанного с самым недавним сообщением SEI периода буферизации в предшествующем блоке доступа, перед удалением из буфера данных блока доступа, связанных с сообщением SEI тайминга изображения. Это значение также используется для вычисления самого раннего возможного времени прибытия данных блока доступа в CPB для HSS. Синтаксический элемент представляет собой код фиксированной длины, чья длина в битах задана посредством cpb_removal_delay_length_minus1 + 1. cpb_removal_delay представляет собой остаток от счетчика по модулю 2^(cpb_removal_delay_length_minus1 + 1).
Значение cpb_removal_delay_length_minus1, которое определяет длину (в битах) синтаксического элемента cpb_removal_delay, представляет собой значение cpb_removal_delay_length_minus1, закодированное в наборе параметров последовательности, который является активным для первичного закодированного изображения, связанного с сообщением SEI тайминга изображения, хотя cpb_removal_delay определяет количество тактов синхронизации по отношению ко времени удаления предшествующего блока доступа, содержащего сообщение SEI периода буферизации, который может быть блоком доступа другой закодированной видеопоследовательности.
dpb_output_delay используется для вычисления времени вывода DBP изображения. Он определяет, сколько тактов синхронизации ждать после удаления последнего блока декодирования в блоке доступа из CPB до того, как декодированное изображение будет выведено из DPB.
Изображение не удаляется из DBP в его время вывода, когда оно все еще помечено как «используется для краткосрочной ссылки» или «используется для долгосрочной ссылки».
Только один dpb_putput_delay определяется для декодированного изображения.
Длина синтаксического элемента dpb_output_delay задана в битах посредством dpb_output_delay_length_minus1 + 1. Когда sps_max_dec_pic_buffering[ max_temporal_layers_minus1 ] равно 0, dpb_output_delay shall будет равно 0.
Время вывода, полученное из dpb_output_delay любого изображения, которое выводится из удовлетворяющего времени вывода декодера, должно предшествовать времени вывода, полученному из dpb_output_delay всех изображений в любой последующей закодированной видеопоследовательности в порядке декодирования.
Порядок вывода изображений, установленный значениями этого синтаксического элемента, будет таким же порядком, который установлен значениями PicOrderCntVal.
Для изображений, которые не выводятся процессом «резкого изменения параметров» из-за того, что они предшествуют в порядке декодирования изображению IDR или BLA с no_output_of_prior_pics_flag, равным 1 или подразумевающимся равным 1, моменты времени вывода, полученные из dpb_output_delay, будут увеличивающимися с увеличивающимся значением PicOrderCntVal по отношению ко всем изображениям в одной и той же закодированной видеопоследовательности.
num_decoding_units_minus1 плюс 1 определяет количество блоков декодирования в блоке доступа, с которым связано сообщение SEI тайминга изображения. Значение num_decoding_units_minus1 должно быть в диапазоне от 0 до PicWidthInCtbs * PicHeightInCtbs - 1, включительно.
num_nalus_in_du_minus1[ i ] plus 1 определяет количество блоков NAL в i-м блоке декодирования блока доступа, с которым связано сообщение SEI тайминга изображения. Значение num_nalus_in_du_minus1[ i ] plus 1 должно быть в диапазоне от 0 до PicWidthInCtbs * PicHeightInCtbs - 1, включительно.
Первый блок декодирования блока доступа состоит из первых num_nalus_in_du_minus1[ 0 ] + 1 последовательных блоков NAL в порядке декодирования в блоке доступа. i-й (где i больше, чем 0) блок декодирования блока доступа состоит из num_nalus_in_du_minus1[ i ] + 1 последовательных блоков NAL, непосредственно следующих за последним блоком NAL в предшествующем блоке декодирования блока доступа, в порядке декодирования. В каждом блоке декодирования будет по меньшей мере один блок VCL NAL. Все не-VCL NAL блоки, связанные с блоком VCL NAL, будут включены в тот же блок декодирования.
du_cpb_removal_delay[ i ] задает, сколько тактов синхронизации под-изображения ждать после удаления из CPB первого блока декодирования в блоке доступа, связанном с самым недавним сообщением SEI периода буферизации в предшествующем блоке доступа, перед удалением из CPB i-го блока декодирования в блоке доступа, связанном с сообщением SEI тайминга изображения. Это значение также используется для вычисления самого раннего возможного времени прибытия данных блока декодирования в CPB для HSS. Синтаксический элемент представляет собой код фиксированной длины, чья длина в битах задана посредством cpb_removal_delay_length_minus1 + 1. du_cpb_removal_delay[ i ] представляет собой остаток от счетчика по модулю 2^(cpb_removal_delay_length_minus1 + 1).
Значение cpb_removal_delay_length_minus1, которое определяет длину (в битах) синтаксического элемента du_cpb_removal_delay[ i ], представляет собой значение cpb_removal_delay_length_minus1, закодированное в наборе параметров последовательности, который является активным для закодированного изображения, связанного с сообщением SEI тайминга изображения, хотя du_cpb_removal_delay[ i ] определяет количество тактов синхронизации под-изображения по отношению ко времени удаления первого блока декодирования в предшествующем блоке доступа, содержащем сообщение SEI периода буферизации, который может быть блоком доступа другой закодированной видеопоследовательности.
Некоторая информация содержалась в синтаксисе VUI [2]. Синтаксис параметров VUI из [2] показан на Фиг. 3. Синтаксис параметров HDR из [2] показан на Фиг. 4. Семантика была определена следующим образом:
sub_pic_cpb_params_present_flag, равный 1, определяет, что параметры задержки удаления CPB уровня под-изображения присутствуют, и CPB может работать на уровне блока доступа или уровне под-изображения. sub_pic_cpb_params_present_flag, равный 0, определяет, что параметры задержки удаления CPB уровня под-изображения не присутствуют, и что CPB работает на уровне блока доступа. Когда sub_pic_cpb_params_present_flag не присутствует, его значение подразумевается равным 0.
num_units_in_sub_tick представляет собой количество временных единиц тактового генератора, работающего на частотной временной шкале Гц, которая соответствует одному инкременту (называемому тактом синхронизации под-изображения) счетчика тактов синхронизации под-изображения. num_units_in_sub_tick будет больше, чем 0. Такт синхронизации под-изображения представляет собой минимальный интервал времени, который может быть представлен в закодированных данных, когда sub_pic_cpb_params_present_flag равен 1.
sub_pic_cpb_params_present_flag, равный 1, указывает, что каждый набор параметров изображения, который является активным в закодированной видеопоследовательности, имеет одно и то же значение синтаксических элементов num_tile_columns_minus1, num_tile_rows_minus1, uniform_spacing_flag, column_width[ i ], row_height[ i ] и loop_filter_across_tiles_enabled_flag, когда они присутствуют. tiles_fixed_structure_flag, равный 0, указывает, что синтаксические элементы фрагмента изображения в разных наборах параметров изображения могут иметь, а могут и не иметь одно и то же значение. Когда синтаксический элемент tiles_fixed_structure_flag не присутствует, его значение подразумевается равным 0.
Сигнализация tiles_fixed_structure_flag, равного 1, является гарантией декодеру того, что каждое изображение в закодированной видеопоследовательности имеет одно и то же количество фрагментов изображения, распределенных одинаковым способом, что может быть полезным для выделения рабочей нагрузки в случае многопоточного декодирования.
Данные заполнения в [2] сигнализировались с использованием синтаксиса RBSP данных фильтра, показанного на Фиг. 5.
Гипотетический Эталонный Декодер из [2], используемый для проверки битового потока и соответствия декодера, был определен следующим образом:
Два типа битовых потоков являются предметом проверки соответствия HRD для этой Рекомендации | Международного Стандарта. Первый такой тип битового потока, называемый битовым потоком Типа I, представляет собой поток блоков NAL, содержащий только блоки VCL NAL и блоки NAL данных заполнения для всех блоков доступа в битовом потоке. Второй тип битового потока, называемый битовым потоком Типа II, содержит, в дополнение к блокам VCL NAL и блокам NAL данных заполнения для всех блоков доступа в битовом потоке, по меньшей мере одно из следующего:
- дополнительные не-VCL NAL блоки, отличные от блоков NAL данных заполнения,
- все синтаксические элементы leading_zero_8bits, zero_byte, start_code_prefix_one_3bytes, и trailing_zero_8bits, которые формируют байтовый поток из потока блоков NAL.
Фиг. 6 показывает точки соответствия типов битового потока, проверяемые HRD в [2].
Используются два типа наборов параметров HRD (параметры NAL HRD и параметры VCL HRD). Наборы параметров HRD сигнализируются через информацию применимости видео, которая является частью синтаксической структуры набора параметров последовательности.
Все наборы параметров последовательности и наборы параметров изображения, упомянутые в блоках VCL NAL, и соответствующие сообщения SEI периода буферизации и тайминга изображения должны быть своевременно переданы в HRD либо в битовом потоке, либо с помощью других средств.
Спецификация для «присутствия» не-VCL NAL блоков также удовлетворяется, когда эти блоки NAL (или лишь некоторые из них) передаются в декодеры (или в HRD) с помощью других средств, не определенных этой Рекомендацией | Международным Стандартом. В целях подсчета битов, считаются только соответствующие биты, которые фактически присутствуют в битовом потоке.
В качестве примера, синхронизация не-VCL NAL блока, передаваемого с помощью средств, отличных от присутствия в битовом потоке, вместе с блоками NAL, которые присутствуют в битовом потоке, может быть достигнута путем указания двух точек в битовом потоке, между которыми не-VCL NAL блоки присутствовали бы в битовом потоке, если бы кодер решил передать их в битовом потоке.
Когда контент не-VCL NAL блока передается для применения некоторыми средствами, отличными от присутствия в битовом потоке, представление контента не-VCL NAL блока не требуется для использования того же синтаксиса, определенного в этом приложении.
Следует отметить, что когда информация содержится внутри битового потока, возможно проверить соответствие битового потока требованиям этого подпункта исключительно на основе информации, содержащейся в битовом потоке. Когда информация HRD не присутствует в битовом потоке, как это характерно для всех «автономных» битовых потоков Типа I, соответствие может быть проверено лишь когда данные HRD подаются некоторыми другими средствами, не указанными в этой Рекомендации | Международном Стандарте.
HRD содержит буфер кодированного изображения (CPB), процесс мгновенного декодирования, буфер декодированного изображения (DPB) и кадрирование выходного сигнала, как показано на Фиг. 7.
Размер CPB (количество битов) представляет собой CpbSize[ SchedSelIdx ]. Размер DBP (количество буферов хранения изображения) для временного уровня X представляет собой sps_max_dec_pic_buffering[ X ] для каждого X в диапазоне от 0 до sps_max_temporal_layers_minus1, включительно.
Переменная SubPicCpbPreferredFlag либо задана внешними средствами, или, когда не задана внешними средствами, установлена в 0.
Переменная SubPicCpbFlag получается следующим образом:
SubPicCpbFlag = SubPicCpbPreferredFlag && sub_pic_cpb_params_present_flag
Если SubPicCpbFlag равен 0, CPB работает на уровне блока доступа, и каждый блок декодирования представляет собой блок доступа. В противном случае CPB работает на уровне под-изображения, и каждый блок декодирования представляет собой подмножество блока доступа.
HRD работает следующим образом. Данные, связанные с блоками декодирования, которые прибывают в CPB в соответствии с установленным графиком прибытия, доставляются посредством HSS. Данные, связанные с каждым блоком декодирования, удаляются и мгновенно декодируются посредством процесса мгновенного декодирования в моменты времени удаления CPB. Каждое декодированное изображение помещается в DPB. Декодированное изображение удаляется из DBP в более позднее из времени вывода DPB или времени, когда одно становится больше не нужным для ссылки взаимного прогнозирования.
HRD инициализируется, как указано периодом буферизации SEI. Тайминг удаления блоков декодирования из CPB и тайминг вывода декодированных изображений из DPB указаны в сообщении SEI тайминга изображения. Вся информация тайминга, относящаяся к определенному блоку декодирования, должна прибыть до времени удаления CPB блока декодирования.
HRD используется для проверки соответствия битовых потоков и декодеров.
Тогда как соответствие гарантируется при условии, что все частоты кадров и тактовые генераторы, используемые для генерирования битового потока, в точности соответствуют значениям, сигнализированным в битовом потоке, в реальной системе каждое из этого может меняться от переданного или заданного значения.
Все арифметические операции выполняются с реальными значениями, так что никаких ошибок округления не может распространяться. Например, количество бит в CPB непосредственно перед или после удаления блока декодирования не обязательно является целым числом.
Переменная tc получается следующим образом и называется тактом синхронизации:
tc = num_units_in_tick ÷ time_scale
Переменная tc_sub получается следующим образом и называется тактом синхронизации под-изображения:
tc_sub = num_units_in_sub_tick ÷ time_scale
Следующее определено для выражения ограничений:
- Пусть блок n доступа будет n-м блоком доступа в порядке декодирования, при этом первый блок доступа является блоком 0 доступа.
- Пусть изображение n будет закодированным изображением или декодированным изображением блока n доступа.
- Пусть блок m декодирования будет m-м блоком декодирования в порядке декодирования, при этом первый блок декодирования является блоком 0 декодирования.
В [2] синтаксис заголовка слайса допускает так называемые зависимые слайсы.
Фиг. 8 показывает синтаксис заголовка слайса в [2].
Семантика заголовка слайса была определена следующим образом:
dependent_slice_flag, равный 1, указывает, что значение каждого синтаксического элемента заголовка слайса, который не присутствует, подразумевается равным значению соответствующего синтаксического элемента заголовка слайса в предшествующем слайсе, содержащем блок дерева кодирования, для которого адрес блока дерева кодирования является SliceCtbAddrRS - 1. В случае, когда не присутствует, значение dependent_slice_flag подразумевается равным 0. Значение dependent_slice_flag должно быть равным 0, когда SliceCtbAddrRS равно 0.
slice_address указывает адрес в разрешении детализации слайса, в котором слайс начинается. Длина синтаксического элемента slice_address равна ( Ceil( Log2( PicWidthInCtbs * PicHeightInCtbs ) ) + SliceGranularity ) бит.
Переменная SliceCtbAddrRS, определяющая блок дерева кодирования, в котором начинается слайс в растровом порядке сканирования блока дерева кодирования, получается следующим образом.
SliceCtbAddrRS = ( slice_address >> SliceGranularity )
Переменная SliceCtbAddrZS, определяющая адрес первого блока кодирования в слайсе в минимальной детализации блока кодирования в z-порядке сканирования, получается следующим образом.
SliceCbAddrZS = slice_address
<< ( ( log2_diff_max_min_coding_block_size - SliceGranularity ) << 1 )
Декодирование слайса начинается с самым большим, насколько это возможно, блоком кодирования в координате начала слайса.
first_slice_in_pic_flag указывает, является ли слайс первым слайсом изображения. Если first_slice_in_pic_flag равен 1, переменные SliceCbAddrZS и SliceCtbAddrRS обе устанавливаются в 0, и декодирование начинается с первого блока дерева кодирования в изображении.
pic_parameter_set_id определяет набор параметров изображения в использовании. Значение pic_parameter_set_id должно быть в диапазоне от 0 до 255, включительно.
num_entry_point_offsets определяет номер синтаксического элемента entry_point_offset[ i ] в заголовке слайса. Когда tiles_or_entropy_coding_sync_idc равно 1, значение num_entry_point_offsets должно быть в диапазоне от 0 до ( num_tile_columns_minus1 + 1 ) * ( num_tile_rows_minus1 + 1) - 1, включительно. Когда tiles_or_entropy_coding_sync_idc равно 2, значение num_entry_point_offsets должно быть в диапазоне от 0 до PicHeightInCtbs - 1, включительно. В случае, когда не присутствует, значение num_entry_point_offsets подразумевается равным 0.
Offset_len_minus1 плюс 1 определяет длину, в битах, синтаксических элементов entry_point_offset[ i ].
entry_point_offset[ i ] определяет i-е смещение точки входа, в байтах, и должно быть представлено offset_len_mmusl плюс 1 битами. Закодированные данные слайса после заголовка слайса состоят из num_entry_point_offsets + 1 подмножеств, при этом значения индекса подмножества находятся в диапазоне от 0 до num_entry_point_offsets, включительно. Подмножество 0 состоит из байтов от 0 до entry_point_offset[ 0 ] - 1, включительно, закодированных данных слайса, подмножество k, где k находится в диапазоне от 1 до num_entry_point_offsets - 1, включительно, состоит из байтов от entry_point_offset[ k-1 ] до entry _point_offset[ k ] + entry_point_offset[ k-1 ] - 1, включительно, закодированных данных слайса, и последнее подмножество (с индексом подмножества, равным num_entry_point_offsets) состоит из оставшихся байт закодированных данных слайса.
Когда tiles_or_entropy_coding_sync_idc равно 1, и num_entry_point_offsets больше, чем 0, каждое подмножество должно содержать все закодированные биты ровно одного фрагмента изображения, и количество подмножеств (т.е. значение num_entry_point_offsets + 1) должно быть равно или меньше, чем количество фрагментов изображения в слайсе.
Когда tiles_or_entropy_coding_sync_idc равно 1, каждый слайс должен включать в себя либо подмножество одного фрагмента изображения (в этом случае сигнализация точек входа необязательна), либо целое число полных фрагментов изображения.
Когда tiles_or_entropy_coding_sync_idc равно 2, и num_entry_pomt_offsets больше, чем 0, каждое подмножество k, где k находится в диапазоне от 0 до num_entry_point_offsets - 1, включительно, должно содержать все закодированные биты ровно одной строки блоков дерева кодирования, последнее подмножество (с индексом подмножества, равным num_entry_point_offsets), должно содержать все закодированные биты оставшихся блоков кодирования, включенных в слайс, где оставшиеся блоки кодирования состоят либо из ровно одной строки блоков дерева кодирования, либо из подмножества одной строки блоков дерева кодирования, и количество подмножеств (т.е. значение num_entry_point_offsets + 1) должно быть равно количеству строк блоков дерева кодирования в слайсе, где подмножество одной строки блоков дерева кодирования в слайсе также считается.
Когда tiles_or_entropy_coding_sync_idc равно 2, слайс может включать в себя ряд блоков дерева кодирования и подмножество строки блоков дерева кодирования. Например, если слайс включает в себя две с половиной строки блоков дерева кодирования, количество подмножеств (т.е. значение num_entry_point_offsets + 1) должно быть равно 3.
Фиг. 9 показывает синтаксис RBSP набора параметров изображения в [2], при этом семантика RBSP набора параметров изображения в [2] определена как:
dependent_slice_enabled_flag, равный 1, определяет присутствие синтаксического элемента dependent_slice_flag в заголовке слайса для закодированных изображений, относящихся к набору параметров изображения. dependent_slice_enabled_flag, равный 0, указывает на отсутствие синтаксического элемента dependent_slice_flag в заголовке изображения для закодированных изображений, относящихся к набору параметров изображения. Когда tiles_or_entropy_coding_sync_idc равно 3, значение dependent_slice_enabled_flag должно быть равно 1.
tiles_or_entropy_coding_sync_idc, равное 0, указывает, что должен быть только один фрагмент изображения в каждом изображении, относящемся к набору параметров изображения, не будет никакого определенного процесса синхронизации для контекстных переменных, вызванного до декодирования первого блока дерева кодирования строки блоков дерева кодирования в каждом изображении, относящемся к набору параметров изображения, и значения cabac_independent_flag и dependent_slice_flag для закодированных изображений, относящихся к набору параметров изображения, не должны быть оба равны 1.
Когда cabac_independent_flag и dependent_slice_flag оба равны 1 для слайса, слайс представляет собой энтропийный слайс.
tiles_or_entropy_coding_sync_idc, равное 1, указывает, что может быть больше одного фрагмента изображения в каждом изображении, относящемся к набору параметров изображения, не будет никакого определенного процесса синхронизации для контекстных переменных, вызванного до декодирования первого блока дерева кодирования строки блоков дерева кодирования в каждом изображении, относящемся к набору параметров изображения, и значения cabac_independent_flag и dependent_slice_flag для закодированных изображений, относящихся к набору параметров изображения, не должны быть оба равны 1.
tiles_or_entropy_coding_sync_idc, равное 2, указывает, что должен быть только один фрагмент изображения в каждом изображении, относящемся к набору параметров изображения, определенный процесс синхронизации для контекстных переменных должен быть вызван до декодирования первого блока дерева кодирования строки блоков дерева кодирования в каждом изображении, относящемся к набору параметров изображения, и определенный процесс запоминания для контекстных переменных должен быть вызван после декодирования двух блоков дерева кодирования строки блоков дерева кодирования в каждом изображении, относящемся к набору параметров изображения, и значения cabac_independent_flag и dependent_slice_flag для закодированных изображений, относящихся к набору параметров изображения, не должны быть оба равны 1.
tiles_or_entropy_coding_sync_idc, равное 3, указывает, что должен быть только один фрагмент изображения в каждом изображении, относящемся к набору параметров изображения, не будет никакого определенного процесса синхронизации для контекстных переменных, вызванного до декодирования первого блока дерева кодирования строки блоков дерева кодирования в каждом изображении, относящемся к набору параметров изображения, и значения cabac_independent_flag и dependent_slice_flag для закодированных изображений, относящихся к набору параметров изображения, оба могут быть равны 1.
Когда dependent_slice_enabled_flag shall должно быть равно 0, tiles_or_entropy_coding_sync_idc не должно быть равно 3.
Это требование соответствия битового потока, заключающееся в том, что значение tiles_or_entropy_coding_sync_idc должно быть одним и тем же для всех наборов параметров изображения, которые активированы в закодированной видеопоследовательности.
Для каждого слайса, относящегося к набору параметров изображения, когда tiles_of_entropy_coding_sync_idc равно 2, и первый блок кодирования в слайсе не является первый блоком кодирования в первом блоке дерева кодирования строки блоков дерева кодирования, последний блок кодирования в слайсе должен принадлежать той же строке блоков дерева кодирования, что и первый блок кодирования в слайсе.
num_tile_columns_minus1 плюс 1 определяет количество столбцов фрагментов изображения, разделяющих изображение.
num_tile_rows_minus1 плюс 1 определяет количество строк фрагментов изображения, разделяющих изображение. Когда num_tile_columns_minus1 равно 0, num_tile_rows_minus1 не должно быть равно 0.
uniform_spacing_flag, равный 1, указывает, что границы столбцов и подобным образом границы строк распределены равномерно по изображению. uniform_spacing_flag, равный 0, указывает, что границы столбцов и подобным образом границы строк не распределены равномерно по изображению, но сигнализируются явно с использованием синтаксических элементов column_width[ i ] и row_height[ i ].
column_width[ i ] определяет ширину i-го столбца фрагмента изображения в единицах блоков дерева кодирования.
row_height[ i ] определяет высоту i-й строки фрагмента изображения в единицах блоков дерева кодирования.
Вектор colWidth[ i ] определяет ширину i-го столбца фрагмента изображения в единицах CTB, при этом столбец i находится в диапазоне от 0 до num_tile_columns_minus1, включительно.
Вектор CtbAddrRStoTS[ ctbAddrRS ] определяет преобразование из адреса CTB в растровом порядке сканирования в адрес CTB в порядке сканирования с индексом ctbAddrRS, находящемся в диапазоне от 0 до (picHeightInCtbs * picWidthInCtbs) - 1, включительно.
Вектор CtbAddrTStoRS[ ctbAddrTS ] определяет преобразование из адреса CTB в порядке сканирования фрагментов изображения в адрес CTB в растровом порядке сканирования с индексом ctbAddrTS, находящемся в диапазоне от 0 до (picHeightInCtbs * picWidthInCtbs) - 1, включительно.
Вектор TileId[ ctbAddrTS ] определяет преобразование из адреса CTB в порядке сканирования фрагментов изображения в id фрагмента изображения с ctbAddrTS, находящемся в диапазоне от 0 до (picHeightInCtbs * picWidthInCtbs) - 1, включительно.
Значения colWidth, CtbAddrRStoTS, CibAudrTSloRS и TileId получены путем вызова процесса преобразования растра CTB и сканирования фрагментов изображения, как определено в подпункте 6.5.1, с PicHeightInCtbs and PicWidthInCtbs в качестве входных данных, а выходные данные присваиваются colWidth, CtbAddrRStoTS и TileId.
Значения ColumnWidthInLumaSamples[ i ], определяющие ширину i-го столбца фрагмента изображения в единицах выборки яркости, устанавливаются равными colWidth[ i ] << Log2CtbSize.
Массив MinCbAddrZS[ x ][ y ], определяющий преобразование из местоположения ( x, y ) в единицах минимальных CB в минимальный адрес CB в z-порядке сканирования с x, находящимся в диапазоне от 0 до picWidthInMinCbs - 1, включительно, и y, находящимся в диапазоне от 0 до picHeightInMinCbs - 1, включительно, получен путем вызова процесса инициализации массива Z порядка сканирования, как определено в подпункте 6.5.2, с Log2MinCbSize, Log2CtbSize, PicHeightInCtbs, PicWidthInCtbs, и вектором CtbAddrRStoTS в качестве входных данных, а выходные данные присваиваются MinCbAddrZS.
loop_filter_across_tiles_enabled_flag, равное 1, указывает, что операции внутрицикловой фильтрации выполняются через границы фрагмента изображения. loop_filter_across_tiles_enabled_flag, равное 0, указывает, что операции внутрицикловой фильтрации не выполняются через границы фрагмента изображения. Операции внутрицикловой фильтрации включают в себя операции деблокирующего фильтра, адаптивного смещения образца и адаптивного контурного фильтра. В случае, когда не присутствует, значение loop_filter_across_tiles_ enabled_flag подразумевается равным 1.
cabac_independent_flag, равное 1, определяет, что декодирование CABAC блоков кодирования в слайсе независимо от любого состояния ранее декодированного слайса. cabac_independent_flag, равное 0, определяет, что декодирование CABAC блоков кодирования в слайсе зависит от состояний ранее декодированного слайса. В случае, когда не присутствует, значение cabac_independent_flag подразумевается равным 0.
Процесс получения для доступности блока кодирования с минимальным адресом блока кодирования был описан следующим образом:
Входные данные для этого процесса следующие
- минимальный адрес minCbAddrZS блока кодирования в z-порядке сканирования
- текущий минимальный адрес currMinCBAddrZS блока кодирования в z-порядке сканирования
Выходными данными этого процесса является доступность блока кодирования с минимальным адресом cbAddrZS блока кодирования в z-порядке сканирования cbAvailable.
Следует отметить, что значение доступности определяется, когда процесс вызывается.
Следует отметить, что любой блок кодирования, вне зависимости от его размера, связан с минимальным адресом блока кодирования, который представляет собой адрес блока кодирования с минимальным разрмером блока кодирования в z-порядке сканирования.
- Если одно или более из следующих условий верно, cbAvailable устанавливается в ЛОЖНО.
- minCbAddrZS меньше, чем 0
- minCbAddrZS больше, чем currMinCBAddrZS
- блок кодирования с минимальным адресом minCBAddrZS блока кодирования принадлежит другому слайсу, чем блок кодирования с текущим минимальным адресом currMinCBAddrZS блока кодирования, и dependent_slice_flag слайса, содержащего блок кодирования с текущим минимальным адресом currMinCBAddrZS блока кодирования, равен 0.
- блок кодирования с минимальным адресом minCBAddrZS блока кодирования содержится в другом фрагменте изображения, чем блок кодирования с текущим минимальным адресом currMinCBAddrZS блока кодирования.
- В противном случае, cbAvailable устанавливается в ИСТИННО.
Процесс синтаксического анализа CABAC для данных слайса в [2] был следующим:
Процесс вызывается при синтаксическом анализе синтаксических элементов с дескриптором ae(v).
Входными данными для этого процесса являются запрос значения синтаксического элемента и значения ранее синтаксически проанализированных синтаксических элементов.
Выходные данные этого процесса представляют собой значение синтаксического элемента.
При запуске синтаксического анализа данных слайса вызывается процесс инициализации процесса синтаксического анализа CABAC.
Минимальный адрес блока кодирования блока дерева кодирования, содержащего пространственный соседний блок T (Фиг. 10a), ctbMinCbAddrT, получается с использованием местоположения ( x0, y0 ) верхней левой выборки яркости текущего блока дерева кодирования следующим образом.
x = x0 + 2 << Log2CtbSize – 1
y = y0 - 1
ctbMinCbAddrT = MinCbAddrZS[ x >> Log2MinCbSize ][ y >> Log2MinCbSize ]
Переменная availableFlagT получена путем вызова процесса получения доступности блока кодирования с CtbMinCbAddrT в качестве входных данных.
При запуске синтаксического анализа дерева кодирования применяются следующие упорядоченные шаги.
1. Движок арифметического декодирования инициализируется следующим образом.
- Если CtbAddrRS равно slice_address, dependent_slice_flag равен 1, и entropy_coding_reset_flag равно 0, применяется следующее.
- Вызывается процесс синхронизации процесса синтаксического анализа CABAC с TableStateIdxDS и TableMPSValDS в качестве входных данных.
- Вызывается процесс декодирования для двоичных решений перед вызовом завершения, за котор