Область техники, к которой относится изобретение
В общем, настоящее раскрытие описывает технологии для многослойных битовых видеопотоков при кодировании видео. Более конкретно, настоящее раскрытие описывает технологии устранения избыточности при параметрах сигнализации, соответствующих слоям в многослойном битовом потоке при кодировании видео.
Уровень техники
Объем видеоданных, необходимых для отображения даже относительно короткого видео, может быть значительным, что может привести к трудностям в тех случаях, когда данные должны передаваться в потоковом режиме или передаваться иным образом по сети связи с ограниченной пропускной способностью. Таким образом, видеоданные, как правило, сжимаются перед передачей по современным телекоммуникационным сетям. Размер видео также может быть проблемой, когда видео хранится в запоминающем устройстве, так как ресурсы памяти могут быть ограничены. Устройства для сжатия видео часто используют программное обеспечение и/или аппаратные средства в источнике для кодирования видеоданных перед передачей или хранением, тем самым уменьшая количество данных, необходимых для представления цифровых видеоизображений. Затем сжатые данные принимаются в пункте назначения устройством для распаковки видео, которое декодирует видеоданные. При ограниченных сетевых ресурсах и постоянно растущих требованиях к более высокому качеству видео желательны улучшенные технологии сжатия и распаковки, которые улучшают коэффициент сжатия практически без ущерба для качества изображения.
Раскрытие сущности изобретения
Первый аспект относится к способу декодирования, реализуемому видеодекодером и содержащему: прием, видеодекодером, битового подпотока, имеющего набор параметров последовательности (SPS) с синтаксической структурой буфера декодированных изображений (DPB) для набора слоев вывода (OLS) с одним единственным слоем; получение, видеодекодером, синтаксической структуры DPB для OLS с одним слоем из SPS; и декодирование, видеодекодером, изображения одного единственного слоя с использованием синтаксической структуры DPB для получения декодированного изображения.
Способ предусматривает технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой синтаксическая структура DPB обозначается как dpb_parameters().
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, где один единственный слой является i-м слоем, и где OLS является i-м OLS.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой синтаксическая структура DPB присутствует в i-й синтаксической структуре dpb_parameters() в SPS.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой битовый подпоток не включает в себя набор параметров видео (VPS).
В качестве варианта в любом из предыдущих аспектов другая реализация аспекта предусматривает сохранение декодированного изображения в DPB перед отображением.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой на SPS ссылается один единственный слой в OLS.
В качестве варианта в любом из предыдущих аспектов другая реализация аспекта предусматривает отображение декодированного изображения на дисплее электронного устройства.
Второй аспект относится к способу кодирования, реализуемому видеокодером, причем способ содержит: выработку, видеокодером, набора параметров видео (VPS) и набора параметров последовательности (SPS), где VPS включает в себя список синтаксических структур буфера декодированных изображений (DPB) для всех наборов слоев вывода (OLS), и где SPS включает в себя синтаксическую структуру DPB для каждого OLS, имеющего один единственный слой; кодирование, видеокодером, VPS и SPS в битовый видеопоток; и сохранение, видеокодером, битового видеопотока для передачи в видеодекодер.
Способ предусматривает технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, где VPS включает в себя индекс для списка синтаксических структур DPB, и где индекс обозначается как vps_ols_dpb_params_idx[ i ].
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой значение vps_ols_dpb_params_idx[ i ] находится в диапазоне от нуля до общего количества синтаксических структур DPB в VPS.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой VPS включает в себя vps_num_dpb_params_minus1, и где vps_num_dpb_params_minus1 плюс 1 указывает общее количество синтаксических структур DPB в VPS.
В качестве варианта в любом из предыдущих аспектов другая реализация аспекта предусматривает извлечение битового подпотока из битового потока, причем битовый подпоток включает в себя SPS из битового потока, но не включает в себя VPS из битового потока.
В качестве варианта в любом из предыдущих аспектов другая реализация аспекта предусматривает передачу битового подпотока в видеодекодер.
Третий аспект относится к устройству декодирования, содержащему: приемник, выполненный с возможностью приема битового подпотока, имеющего набор параметров последовательности (SPS) с синтаксической структурой буфера декодированных изображений (DPB) для набора слоев вывода (OLS) с одним единственным слоем; и процессор, подключенный к памяти, причем процессор выполнен с возможностью исполнения инструкций, которые предписывают устройству декодирования: установить количество слоев в OLS на значение, равное единице, на основании того, что OLS имеет один единственный слой; получить синтаксическую структуру DPB для OLS с одним слоем из SPS, когда количество слоев в OLS равно единице; и декодировать изображение одного единственного слоя с использованием синтаксической структуры DPB для получения декодированного изображения.
Устройство декодирования предоставляет технологии, обеспечивающие включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, где синтаксическая структура DPB обозначается как dpb_parameters(), где одним единственным слоем является i-й слой, и где OLS является i-м OLS.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой синтаксическая структура DPB присутствует в i-й синтаксической структуре dpb_parameters() в SPS.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой битовый подпоток не включает в себя набор параметров видео (VPS).
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой на SPS ссылается один единственный слой в OLS.
В качестве варианта в любом из предыдущих аспектов другая реализация аспекта предусматривает дисплей, выполненный с возможностью отображения декодированного изображения.
Четвертый аспект относится к устройству кодирования, содержащему: память, содержащую инструкции; процессор, подключенный к памяти, причем процессор выполнен с возможностью реализации инструкций, которые предписывают устройству кодирования: выработать набор параметров видео (VPS) и набор параметров последовательности (SPS), где VPS включает в себя список буферов декодированных изображений (DPB). ) синтаксические структуры для всех наборов слоев вывода (OLS), где SPS включает в себя синтаксическую структуру DPB для каждого OLS, имеющего один единственный слой; и кодировать VPS и SPS в битовый видеопоток; и передатчик, подключенный к процессору, причем передатчик выполнен с возможностью передачи битового видеопотока в видеодекодер.
Устройство кодирования предусматривает технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, где VPS включает в себя индекс для списка синтаксических структур DPB, и где индекс обозначается как vps_ols_dpb_params_idx[ i ].
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой значение vps_ols_dpb_params_idx[ i ] находится в диапазоне от нуля до общего количества синтаксических структур DPB в VPS.
В качестве варианта в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой VPS включает в себя vps_num_dpb_params_minus1, и где vps_num_dpb_params_minus1 плюс 1 указывает общее количество синтаксических структур DPB в VPS.
Пятый аспект относится к устройству кодирования. Устройство кодирования включает в себя приемник, выполненный с возможностью приема изображения для кодирования или приема битового потока для декодирования; передатчик, подключенный к приемнику, причем передатчик выполнен с возможностью передачи битового потока в декодер или передачи декодированного изображения в дисплей; память, подключенную по меньшей мере к одному из: приемника или передатчика, причем память выполнена с возможностью хранения инструкций; и процессор, подключенный к памяти, причем процессор выполнен с возможностью исполнения инструкций, хранящихся в памяти, для выполнения любого из способов, раскрытых в данном документе.
Устройство кодирования предусматривает технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
В качестве варианта в любом из предыдущих аспектов другая реализация аспекта предусматривает дисплей, выполненный с возможностью отображения декодированного изображения.
Шестой аспект относится к системе. Система включает в себя кодер; и декодер, взаимодействующий с кодером, причем кодер или декодер включает в себя устройство декодирования, устройство кодирования или устройство кодирования, раскрытые в данном документе.
Система предусматривает технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
Седьмой аспект относится к средству кодирования. Средство кодирования включает в себя средство приема, выполненное с возможностью приема изображения для кодирования или приема битового потока для декодирования; средство передачи, подключенное к средству приема, причем средство передачи выполнено с возможностью передачи битового потока в средство декодирования или передачи декодированного изображения в средство отображения; средство хранения, подключенное по меньшей мере к одному из: средства приема или средства передачи, причем средство хранения выполнено с возможностью хранения инструкций; и средство обработки, подключенное к средству хранения, причем средство обработки выполнено с возможностью исполнения инструкций, хранящихся в средстве хранения, для выполнения любого из способов, раскрытых в данном документе.
Средство кодирования предусматривает технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
В целях ясности любой из вышеизложенных вариантов осуществления может быть объединен с любым одним или несколькими другими вышеизложенными вариантами осуществления для создания нового варианта осуществления в пределах объема настоящего раскрытия.
Эти и другие признаки станут более понятными из последующего подробного описания, рассматриваемого совместно с сопроводительными чертежами и формулой изобретения.
Краткое описание чертежей
Для более полного понимания настоящего раскрытия теперь делается ссылка на последующее краткое описание, приведенное совместно с сопроводительными чертежами и подробным описанием, в котором одинаковые ссылочные позиции обозначают одинаковые части.
Фиг. 1 - блок-схема последовательности операций примерного способа кодирования видеосигнала.
Фиг. 2 - схематичное представление примерной системы кодирования и декодирования (кодека) для кодирования видео.
Фиг. 3 - схематичное представление, иллюстрирующее примерный видеокодер.
Фиг. 4 - схематичное представление, иллюстрирующее примерный видеодекодер.
Фиг. 5 - пример многослойного кодирования для пространственной масштабируемости.
Фиг. 6 - пример многослойного кодирования с использованием наборов слоев вывода (OLS).
Фиг. 7 - вариант осуществления битового видеопотока.
Фиг. 8 - вариант осуществления способа декодирования кодированного битового видеопотока.
Фиг. 9 - вариант осуществления способа кодирования кодированного битового видеопотока.
Фиг. 10 - схематичное представление устройства для кодирования видео.
Фиг. 11 - схематичное представление варианта осуществления средства кодирования.
Осуществление изобретения
Прежде всего, следует отметить, что, хотя иллюстративная реализация одного или более вариантов осуществления представлена ниже, раскрытые системы и/или способы могут быть реализованы с использованием любого количества технологий, известных в настоящее время или уже существующих. Настоящее раскрытие никоим образом не должно быть ограничено иллюстративными реализациями, чертежами и технологиями, проиллюстрированными ниже, включая иллюстративные конструкции и реализации, проиллюстрированные и описанные в данном документе, но может быть изменено в пределах объема прилагаемой формулы изобретения вместе с их полным объемом эквивалентов.
Приведенные ниже термины определяются следующим образом, если они не используются в данном контексте в противоположном контексте. В частности, следующие определения предназначены для обеспечения дополнительной ясности настоящего раскрытия. Однако термины могут быть описаны по-разному в разных контекстах. Соответственно, приведенные ниже определения следует рассматривать как дополнение и не следует рассматривать как ограничение любых других определений описаний, представленных для таких терминов в данном документе.
Битовый поток - это последовательность битов, включающая в себя видеоданные, которые сжимают для передачи между кодером и декодером. Кодер - это устройство, которое выполнено с возможностью использования процессов кодирования для сжатия видеоданных в битовый поток. Декодер - это устройство, которое выполнено с возможностью использования процессов декодирования для восстановления видеоданных из битового поток для отображения. Изображение представляет собой массив выборок яркости и/или массив выборок цветности, которые создают кадр или его область. Изображение, которое кодируется или декодируется, для ясности обсуждения может называться текущим изображением. Опорное изображение представляет собой изображение, которое содержит опорные выборки, которые можно использовать при кодировании других изображений по ссылке в соответствии с межкадровым предсказанием и/или межслойным предсказанием. Список опорных изображений представляет собой список опорных изображений, используемых для межкадрового предсказания и/или межслойного предсказания. Некоторые системы кодирования видео используют два списка опорных изображений, которые можно обозначить как список 1 (один) опорных изображений и список 0 (ноль) опорных изображений. Структура списка опорных изображений представляет собой адресуемую синтаксическую структуру, которая содержит несколько списков опорных изображений.
Межкадровое предсказание представляет собой механизм кодирования выборок текущего изображения путем ссылки на указанные выборки в опорном изображении, которое отличается от текущего изображения, где опорное изображение и текущее изображение находятся в одном и том же слое. Запись структуры списка опорных изображений представляет собой адресуемую ячейку в структуре списка опорных изображений, которая указывает опорное изображение, ассоциированное со списком опорных изображений.
Заголовок среза является частью кодированного среза, содержащего элементы данных, относящиеся ко всем видеоданным в тайле, представленном в срезе. Набор параметров изображения (PPS) представляет собой набор параметров, который содержит данные, относящиеся ко всему изображению. Более конкретно, PPS представляет собой синтаксическую структуру, содержащую синтаксические элементы, которые применяются к нулевому или более полным кодированным изображениям, что определяется синтаксическим элементом, находящимся в каждом заголовке изображения. Набор параметров последовательности (SPS) представляет собой набор параметров, который содержит данные, относящиеся к последовательности изображений. Единица доступа (AU) представляет собой набор из одного или более кодированных изображений, ассоциированных с одним и тем же временем отображения (например, одним и тем же счетчиком очередности изображений) для вывода из буфера декодированных изображений (DPB) (например, для отображения пользователю). Разделитель единиц доступа (AUD) представляет собой индикатор или структуру данных, используемую для указания начала AU или границы между AU. Декодированная видеопоследовательность является последовательностью изображений, восстановленных декодером при подготовке к отображению пользователю.
Единица слоя сетевой абстракции (NAL) представляет собой синтаксическую структуру, содержащую данные в виде необработанных полезных данных последовательности байтов (RBSP), указатель типа данных и чередующиеся по желанию байты предотвращения эмуляции. Единица NAL слоя кодирования видео (VCL) представляет собой единицу NAL, кодированную таким образом, чтобы она содержала видеоданные, такие как кодированный срез изображения. Единица NAL без VCL представляет собой единицу NAL, которая содержит данные, не относящиеся к видео, такие как синтаксис и/или параметры, которые поддерживают декодирование видеоданных, выполнение проверки на соответствие или другие операции. Слой представляет собой набор единиц NAL VCL, которые совместно используют заданную характеристику (например, общее разрешение, частоту кадров, размер изображения и т.д.), и ассоциированные единицы NAL без VCL. Единицы NAL VCL слоя могут совместно использовать конкретное значение идентификатора слоя заголовка единицы NAL (nuh_layer_id). Кодированное изображение представляет собой кодированное представление изображения, содержащее единицы NAL VCL с конкретным значением идентификатора слоя заголовка единицы NAL (nuh_layer_id) в единице доступа (AU) и содержащее все единицы дерева кодирования (CTU) изображения. Декодированное изображение представляет собой изображение, полученное путем применения процесса декодирования к кодированному изображению.
Набор слоев вывода (OLS) - это набор слоев, для которого один или более слоев задаются в виде одного или более слоев вывода. Слой вывода представляет собой слой, предназначенный для вывода (например, на дисплей). Нулевой (0-й) OLS - это OLS, который содержит только нижний слой (слой с идентификатором нижнего слоя) и, следовательно, содержит только слой вывода. Количество слоев в OLS может быть обозначено синтаксическим элементом, обозначенным NumLayersInOLS. Набор параметров видео (VPS) представляет собой блок данных, который содержит параметры, относящиеся ко всему видео. Межслойное предсказание представляет собой механизм кодирования текущего изображения в текущем слое путем ссылки на опорное изображение в ссылочном слое, где текущее изображение и опорное изображение включены в одну и ту же AU, и опорный слой включает в себя более низкий nuh_layer_id, чем текущий слой.
Профиль представляет собой определенный набор инструментов кодирования, используемых для создания совместимого или соответствующего битового потока. Каждый профиль определяет подмножество алгоритмических функций и ограничений, которые должны поддерживаться всеми декодерами, соответствующими этому профилю. Ранги и уровни - это ограничения, которые определяют битовый поток с точки зрения максимальной скорости передачи данных, максимальной частоты дискретизации яркости, максимального размера изображения яркости, минимальной степени сжатия, максимального количества разрешенных срезов и максимального количества разрешенных тайлов. Нижние слои ограничены в большей степени, чем более высокие слои, и более низкие слои ограничены в большей степени, чем более высокие уровни. Параметры профиля, ранга и уровня (PTL) представляют собой синтаксическую структуру, предоставляющую информацию о профиле, ранге и/или уровне.
Масштабируемый во времени битовый поток представляет собой битовый поток, закодированный в множестве слоев, обеспечивающих различное временное разрешение/частоту кадров (например, каждый слой кодируется для поддержки разной частоты кадров). Подслой представляет собой масштабируемый во времени слой масштабируемого во времени битового потока, включающего в себя единицы NAL VCL с конкретным значением временного идентификатора и ассоциированные единицы NAL без VCL. Например, временной подслой - это слой, который содержит видеоданные, ассоциированные с заданной частотой кадров. Представлением подслоя является подмножество битового потока, содержащего единицы NAL конкретного подслоя и более низких подслоев. Таким образом, один или более временных подслоев могут быть объединены для достижения представления подслоя, которое может быть декодировано для получения видеопоследовательности с заданной частотой кадров. Индекс OLS - это индекс, который однозначно идентифицирует соответствующий OLS. Временной идентификатор (ID) - это элемент данных, указывающий, что данные соответствуют временному местоположению в видеопоследовательности. Процесс извлечения битового подпотока представляет собой процесс, который удаляет единицы NAL из битового потока, которые не принадлежат целевому набору, как это определено целевым индексом OLS и целевым наивысшим временным идентификатором. Результатом процесса извлечения битового подпотока является выходной битовый подпоток, содержащий единицы NAL из битового потока, которые являются частью целевого набора.
Гипотетический опорный декодер (HRD) представляет собой модель декодера, работающую в кодере, который проверяет изменчивость битовых потоков, создаваемых процессом кодирования, для проверки на соответствие заданным ограничениям. Тест на соответствие битового потока - это тест для определения того, соответствует ли кодированный битовый поток стандарту, такому как универсальное кодирование видео (VVC). Параметры HRD представляют собой синтаксические элементы, которые инициируют и/или определяют рабочие условия HRD. Параметры HRD на уровне последовательности представляют собой параметры HRD, которые применяются ко всей кодированной видеопоследовательности. Максимальный временной идентификатор (ID) HRD (hrd_max_tid[ i ]) указывает временной ID представления верхнего слоя, для которого параметры HRD содержатся в i-м наборе параметров HRD OLS. Синтаксическая структура общих параметров HRD (general_hrd_parameters) представляет собой синтаксическую структуру, которая содержит параметры HRD на уровне последовательности. Рабочая точка (OP) - это временное поднабор OLS, который идентифицируется индексом OLS и наибольшим временным ID. Тестируемая OP (targetOp) - это OP, выбранная для тестирования на соответствие в HRD. Целевой OLS - это OLS, выбранный для извлечения из битового потока. Флаг наличия параметров HRD единицы декодирования (decoding_unit_hrd_params_present_flag) является флагом, который указывает то, действуют ли соответствующие параметры HRD на уровне единицы декодирования (DU) или на уровне AU. Буфер кодированных изображений (CPB) представляет собой буфер обратного магазинного типа в HRD, который содержит кодированные изображения в порядке декодирования для использования во время проверки на соответствие битового потока. Буфер декодированных изображений (DPB) представляет собой буфер для хранения декодированных изображений для ссылки, переупорядочивания вывода и/или задержки вывода.
Параметры буфера декодированных изображений (DPB) представляют собой синтаксическую структуру, которая обеспечивает размер DPB и в качестве варианта информацию о максимальном количестве переупорядочений изображений и максимальной задержке. Информация о максимальном количестве переупорядочений изображений и максимальной задержке может обобщенно обозначаться аббревиатурой MRML.
В данном документе используются следующие сокращения: блок дерева кодирования (CTB), единица дерева кодирования (CTU), единица кодирования (CU), кодированная видеопоследовательность (CVS), объединенная группа экспертов по видео (JVET), набор тайлов с ограничением по движению (MCTS), максимальная единица передачи (MTU), слой сетевой абстракции (NAL), счетчик очередности изображений (POC), набор параметров изображения (PPS), необработанные полезные данные последовательности байтов (RBSP), набор параметров последовательности (SPS), универсальное кодирование видео (VVC) и рабочий проект (WD).
На фиг. 1 показана блок-схема последовательности операций примерного способа 100 кодирования видеосигнала. В частности, видеосигнал кодируется в кодере. Процесс кодирования сжимает видеосигнал, используя различные механизмы, чтобы уменьшить размер видеофайла. Меньший размер файла позволяет передавать сжатый видеофайл пользователю, уменьшая при этом ассоциированные с этим издержки на полосу пропускания. Затем декодер декодирует сжатый видеофайл, чтобы восстановить исходный видеосигнал для отображения конечному пользователю. Процесс декодирования, как правило, повторяет процесс кодирования, что позволяет декодеру последовательно восстанавливать видеосигнал.
На этапе 101 видеосигнал вводится в кодер. Например, видеосигнал может быть несжатым видеофайлом, хранящимся в памяти. В качестве другого примера, видеофайл может быть захвачен устройством видеозахвата, таким как видеокамера, и кодирован для поддержки прямой потоковой передачи видео. Видеофайл может включать в себя как компонент аудио, так и компонент видео. Компонент видео содержит ряд кадров изображения, которые при последовательном просмотре создают визуальное впечатление движения. Кадры содержат пиксели, которые выражены с точки зрения света, называемого в данном документе компонентами яркости (или выборками яркости), и цвета, который упоминается как компоненты цветности (или выборки цвета). В некоторых примерах кадры могут также содержать значения глубины для поддержки трехмерного просмотра.
На этапе 103 видео разделяется на блоки. Разделение включает в себя разделение пикселей в каждом кадре на квадратные и/или прямоугольные блоки для сжатия. Например, в высокоэффективном кодировании видео (HEVC) (также известном как H.265 и MPEG-H часть 2) кадр может быть сначала разделен на единицы дерева кодирования (CTU), которые представляют собой блоки заданного размера (например, шестьдесят четыре пикселя на шестьдесят четыре пикселя). CTU содержат как выборки яркости, так и выборки цветности. Деревья кодирования могут использоваться для разделения CTU на блоки, и затем для рекурсивного подразделения блоков до тех пор, пока не будут достигнуты конфигурации, поддерживающие дальнейшее кодирование. Например, компоненты яркости кадра могут разделяться до тех пор, пока отдельные блоки не будут содержать относительно однородные значения света. Кроме того, компоненты цветности кадра могут разделяться до тех пор, пока отдельные блоки не будут содержать относительно однородные значения цвета. Соответственно, механизмы разделения различаются в зависимости от содержания видеокадров.
На этапе 105 используются различные механизмы сжатия для сжатия блоков изображения, разделенных на этапе 103. Например, может использоваться межкадровое предсказание и/или внутрикадровое предсказание. Межкадровое предсказание предназначено для использования того факта, что объекты в общей сцене имеют тенденцию появляться в виде следующих друг за другом кадрах. Соответственно, блок, изображающий объект в опорном кадре, не нужно повторно описывать в соседних кадрах. В частности, объект, такой как таблица, может оставаться в постоянной позиции в течение нескольких кадров. Следовательно, таблица описывается один раз, и соседние кадры могут ссылаться на опорный кадр. Механизмы сопоставления шаблонов могут использоваться для сопоставления объектов в нескольких кадрах. Кроме того, движущиеся объекты могут быть представлены в нескольких кадрах, например, из-за движения объекта или движения камеры. В качестве конкретного примера видео может показывать автомобиль, который движется на экране в течение нескольких кадров. Для описания такого движения можно использовать векторы движения. Вектор движения - это двумерный вектор, обеспечивающий смещение координат объекта в кадре до координат объекта в опорном кадре. Таким образом, межкадровое предсказание позволяет кодировать блок изображения в текущем кадре как набор векторов движения, указывающих смещение от соответствующего блока в опорном кадре.
При внутрикадровом предсказании блоки кодируются в общем кадре. Внутрикадровое предсказание использует тот факт, что компоненты яркости и цветности имеют тенденцию группироваться в кадре. Например, участок зелени в части дерева имеет тенденцию располагаться рядом с аналогичными участками зелени. Внутрикадровое предсказание использует несколько режимов направленного предсказания (например, тридцать три в HEVC), планарный режим и режим постоянного тока (DC). Направленные режимы указывают, что текущий блок является аналогичным/таким же, как выборки соседнего блока в соответствующем направлении. Планарный режим указывает то, что последовательность блоков по строкам/столбцам (например, в плоскости) может быть интерполирована на основе соседних блоков на краях строки. Планарный режим по существу указывает на плавный переход света/цвета по строке/столбцу за счет использования относительно постоянного наклона при изменении значений. Режим DC используется для сглаживания границ и указывает то, что блок является аналогичным/таким же, как среднее значение, ассоциированное с выборками всех соседних блоков, ассоциированных с угловыми направлениями режимов направленного предсказания. Соответственно, блоки внутрикадрового предсказания могут представлять блоки изображений как различные относительные значения режима предсказания вместо фактических значений. Кроме того, блоки межкадрового предсказания могут представлять блоки изображений как значения векторов движения вместо фактических значений. Так или иначе, в некоторых случаях блоки предсказания могут не точно представлять блоки изображений. Любые различия сохраняются в остаточных блоках. Преобразования могут быть применены к остаточным блокам для дальнейшего сжатия файла.
На этапе 107 могут применяться различные технологии фильтрации. В HEVC фильтры применяются в соответствии со схемой внутриконтурной фильтрации. Предсказание на блочной основе, рассмотренное выше, может привести к созданию блочных изображений в декодере. Кроме того, схема предсказания на блочной основе позволяет кодировать блок, и затем восстанавливать кодированный блок для последующего использования в качестве опорного блока. Схема внутриконтурной фильтрации итеративно применяет к блокам/кадрам фильтры подавления шума, деблокирующие фильтры, адаптивные контурные фильтры и фильтры адаптивного смещения выборок (SAO). Эти фильтры уменьшают такие артефакты блокировки для того, чтобы можно было точно восстановить кодированный файл. Кроме того, эти фильтры уменьшают артефакты в восстановленных опорных блоках, так что артефакты с меньшей вероятностью создают дополнительные артефакты в последующих блоках, которые кодируются на основе восстановленных опорных блоков.
После того, как видеосигнал был разделен, сжат и отфильтрован, результирующие данные кодируются в битовый поток на этапе 109. Битовый поток включает в себя данные, рассмотренные выше, а также любые данные сигнализации, необходимые для поддержки надлежащего восстановления видеосигнала в декодере. Например, такие данные могут включать в себя данные разделения, данные предсказания, остаточные блоки и различные флаги, предоставляющие декодеру инструкции по кодированию. Битовый поток может храниться в памяти для передачи в декодер по запросу. Битовый поток может быть также широковещательно и/или многоадресно передан в множество декодеров. Создание битового потока является итеративным процессом. Соответственно, этапы 101, 103, 105, 107 и 109 могут выполняться непрерывно и/или одновременно во многих кадрах и блоках. Порядок, показанный на фиг. 1, представлен для ясности и простоты обсуждения и не предназначен для ограничения процесса кодирования видео определенным порядком.
Декодер принимает битовый потока и начинает процесс декодирования на этапе 111. В частности, декодер использует схему энтропийного декодирования для преобразования битового потока в соответствующий синтаксис и видеоданные. Декодер использует синтаксические данные из битового потока для определения разделов для кадров на этапе 111. Разделение должно совпадать с результатами разделения блоков на этапе 103. Теперь будет описано энтропийное кодирование/декодирование, используемое на этапе 111. В процессе сжатия кодер делает выбор из различных вариантов, например, выбирает схемы разделения блоков из нескольких возможных вариантов на основе пространственного позиционирования значений во входном(ых) изображении(ях). Сигнализация точного выбора может использовать большое количество бинов. В используемом в данном документе значении бин представляет собой двоичное значение, которое обрабатывается как переменная (например, битовое значение, которое может изменяться в зависимости от контекста). Энтропийное кодирование позволяет кодеру отбрасывать любые варианты, которые явным образом не подходят для конкретного случая, оставляя набор допустимых вариантов. Затем каждому допустимому варианту присваивается кодовое слово. Длина кодовых слов зависит от количества допустимых вариантов (например, один бин для двух вариантов, два бина для трех-четырех вариантов и т.д.). Затем кодер кодирует кодовое слово для выбранного варианта. Эта схема уменьшает размер кодовых слов, так как кодовые слова настолько велики, насколько это необходимо, чтобы однозначно указывать выбор из небольшого подмножества допустимых вариантов, в отличие от однозначного указания выбора из потенциально большого набора всех возможных вариантов. Затем декодер декодирует выбранный вариант, определяя набор допустимых опций аналогично кодеру. Определив набор допустимых вариантов, декодер может считать кодовое слово и определить выбор, сделанный кодером.
На этапе 113 декодер выполняет блочное декодирование. В частности, декодер использует обратные преобразования для выработки остаточных блоков. Затем декодер использует остаточные блоки и соответствующие блоки предсказания для восстановления блоков изображения в соответствии с разделением. Блоки предсказания могут включать в себя как блоки внутрикадрового предсказания, так и блоки межкадрового предсказания, выработанные кодером на этапе 105. Блоки восстановленного изображения затем помещаются в кадры восстановленного видеосигнала в соответствии с данными разделения, определенными на этапе 111. Синтаксис на этапе 113 также может быть обозначен в битовом потоке с помощью энтропийного кодирования, как обсуждалось выше.
На этапе 115 выполняется фильтрация кадров восстановленного видеосигнала способом, аналогичным этапу 107 в кодере. Например, фильтры подавления шума, фильтры устранения блочности, адаптивные контурные фильтры и фильтры SAO могут применяться к кадрам для удаления артефактов блочности. Как только кадры отфильтрованы, видеосигнал может быть выведен на дисплей на этапе 117 для просмотра конечным пользователем.
На фиг. 2 показано схематичное представление примерной системы 200 кодирования и декодирования (кодека) для кодирования видео. В частности, система 200 кодирования/декодирования обеспечивает функциональные возможности для поддержки реализации способа 100 функционирования. Система 200 кодирования/декодирования обобщена для отображения компонентов, используемых как в кодере, так и в декодере. Система 200 кодирования/декодирования принимает и разделяет видеосигнал, как описано в отношении этапов 101 и 103 в способе 100 функционирования, в результате чего получается разделенный видеосигнал 201. Затем система 200 кодирования/декодирования сжимает разделенный видеосигнал 201 в кодированный битовый поток, действуя в качестве кодера, как описано в отношении этапов 105, 107 и 109 в способе 100. При работе в качестве декодера система 200 кодирования/декодирования вырабатывает выходной видеосигнал из битового потока, как описано в отношении этапов 111, 113, 115 и 117 в способе 100 функционирования. Система 200 кодирования/декодирования включает в себя компонент 211 общего управления кодером, компонент 213 преобразования с масштабированием и квантования, компонент 215 внутрикадровой оценки, компонент 217 внутрикадрового предсказания, компонент 219 компенсации движения, компонент 221 оценки движения, компонент 229 масштабирования и обратного преобразования, компонент 227 анализа управления фильтром, компонент 225 внутриконтурных фильтров, компонент 223 буфера декодированных изображений и компонент 231 форматирования заголовка и контекстно-адаптивного двоичного арифметического кодирования (CABAC). Такие компоненты соединены так, как показано на чертеже. На фиг. 2 черные линии указывают перемещение данных, подлежащих кодированию/декодированию, и пунктирные линии указывают перемещение управляющих данных, которые управляют работой других компонентов. Все компоненты системы 200 кодирования/декодирования могут присутствовать в кодере. Декодер может включать в себя подмножество компонентов системы 200 кодирования/декодирования. Например, декодер может включать в себя компонент 217 внутрикадрового предсказания, компонент 219 компенсации движения, компонент 229 масштабирования и обратного преобразования, компонент 225 внутриконтурных фильтров, и компонент 223 буфера декодированных изображений. Теперь эти компоненты будут описаны.
Разделенный видеосигнал 201 представляет собой захваченную видеопоследовательность, которая была разделена на блоки пикселей с помощью дерева кодирования. Дерево кодирования использует различные режимы разделения для разделения блока пикселей на более мелкие блоки пикселей. Затем эти блоки можно разделить на еще более мелкие блоки. Блоки могут называться узлами дерева кодирования. Более крупные родительские узлы разделяются на более мелкие дочерние узлы. Количество раз, когда узел подразделяется, называется глубиной узла/дерева кодирования. В некоторых случаях разделенные блоки могут быть включены в единицы кодирования (CU). Например, CU может быть частью CTU, которая содержит блок яркости, блок(и) красной разностной цветности (Cr) и блок(и) синей разностной цветности (Cb) вместе с соответствующими синтаксическими инструкциями для КР. Режимы разделения могут включать в себя двоичное дерево (BT), троичное дерево (TT) и квадродерево (QT), используемые для разделения узла на два, три или четыре дочерних узла, соответственно, различной формы в зависимости от используемых режимов разделения. Разделенный видеосигнал 201 направляется в компонент 211 общего управления кодером, компонент 213 преобразования с масштабированием и квантования, компонент 215 внутрикадровой оценки, компонент 227 анализа управления фильтром и компонент 221 оценки движения для сжатия.
Компонент 211 общего управления кодером выполнен с возможностью принятия решений, ассоциированных с кодированием изображений видеопоследовательности в битовый поток в соответствии с ограничениями приложения. Например, компонент 211 общего управления кодером управляет оптимизацией размер битовой скорости/битового потока в зависимости от качества восстановления. Такие решения могут приниматься на основе наличия дискового пространства/пропускной способности и запросов разрешения изображения. Компонент 211 общего управления кодером также управляет использованием буфера в свете скорости передачи, чтобы смягчить проблемы очищения и переполнения буфера. Чтобы справиться с этими проблемами, компонент 211 общего управления кодером управляет разделением, предсказанием и фильтрацией с помощью других компонентов. Например, компонент 211 общего управления кодером может динамически увеличивать сложность сжатия для увеличения разрешения и увеличения использования полосы пропускания или уменьшать сложность сжатия для уменьшения разрешения и использования полосы пропускания. Следовательно, компонент 211 общего управления кодером управляет другими компонентами системы 200 кодирования/декодирования, чтобы сбалансировать качество восстановления видеосигнала с проблемами скорости передачи битов. Компонент 211 общего управления кодером создает управляющие данные, которые управляют работой других компонентов. Управляющие данные также направляются в компонент 231 форматирования заголовка и CABAC для кодирования в битовый поток для сигнализации параметров для декодирования в декодере.
Разделенный видеосигнал 201 также отправляется в компонент 221 оценки движения и компонент 219 компенсации движения для межкадрового предсказания. Кадр или часть разделенного видеосигнала 201 может быть разделена на множество видеоблоков. Компонент 221 оценки движения и компонент 219 компенсации движения выполняют межкадровое кодирование с предсказанием принятого видеоблока относительно одного или более блоков в одном или более опорных кадрах для обеспечения временного предсказания. Система 200 кодирования/декодирования может выполнять несколько проходов кодирования, например, для выбора соответствующего режима кодирования для каждого блока видеоданных.
Компонент 221 оценки движения и компонент 219 компенсации движения могут быть в высокой степени интегрированы, но проиллюстрированы отдельно для концептуальных целей. Оценка движения, выполняемая компонентом 221 оценки движения, представляет собой процесс выработки векторов движения, в котором оценивается движение для видеоблоков. Например, вектор движения может указывать смещение кодированного объекта относительно блока предсказания. Блок предсказания - это блок, который точно соответствует кодируемому блоку с точки зрения разности пикселей. Блок предсказания также может упоминаться как опорный блок. Такая разность пикселей может быть определена с помощью суммы абсолютной разности (SAD), суммы квадратов разностей (SSD) или другими показателями разности. HEVC использует несколько кодированных объектов, включая CTU, блоки дерева кодирования (CTB) и CU. Например, CTU можно разделить на CTB, которые затем можно разделить на CB для включения в CU. CU может быть закодирована как единица предсказания (PU), содержащая данные предсказания, и/или единицу преобразования (TU), содержащую преобразованные остаточные данные для CU. Компонент 221 оценки движения вырабатывает векторы движения, PU и TU, используя анализ характеристики «скорость-искажение» как часть процесса оптимизации характеристики «скорость-искажение». Например, компонент 221 оценки движения может определить несколько опорных блоков, множество векторов движения и т.д. для текущего блока/кадра и может выбирать опорные блоки, векторы движения и т.д., имеющие наилучшие характеристики «скорость-искажение». Наилучшие характеристики «скорость-искажение» уравновешивают качество восстановления видео (например, объем потерь данных при сжатии) с эффективностью кодирования (например, размер окончательного кодирования).
В некоторых примерах система 200 кодирования/декодирования может вычислять значения для позиций субцелых пикселей опорных изображений, сохраненных в компоненте 223 буфера декодированных изображений. Например, система 200 кодирования/декодирования видео может интерполировать значения позиций четверти пикселей, позиции одной восьмой пикселей или другие позиции дробных пикселей опорного изображения. Таким образом, компонент 221 оценки движения может выполнять поиск движения относительно позиций целых пикселей и позиций дробных пикселей и выводить вектор движения с точностью до дробных пикселей. Компонент 221 оценки движения вычисляет вектор движения для PU видеоблока в межкадровом кодированном срезе путем сравнения позиции PU с позицией блока предсказания опорного изображения. Компонент 221 оценки движения выводит вычисленный вектор движения в виде данных движения для форматирования заголовка, и компонент 231 CABAC для кодирования и движения к компоненту 219 компенсации движения.
Компенсация движения, выполняемая компонентом 219 компенсации движения, может включать выборку или выработку блока предсказания на основе вектора движения, определенного компонентом 221 оценки движения. Опять же, в некоторых примерах компонент 221 оценки движения и компонент 219 компенсации движения могут быть функционально интегрированы. После приема вектора движения для PU текущего видеоблока компонент 219 компенсации движения может определить местонахождение блока предсказания, на который указывает вектор движения. Затем формируется остаточный видеоблок путем вычитания значений пикселей блока предсказания из значений пикселей текущего кодируемого видеоблока, формируя значения разности пикселей. В общем, компонент 221 оценки движения выполняет оценку движения относительно компонентов яркости, и компонент 219 компенсации движения использует векторы движения, вычисленные на основе компонентов яркости как для компонентов цветности, так и для компонентов яркости. Блок предсказания и остаточный блок направляются в компонент 213 преобразования с масштабированием и квантования.
Разделенный видеосигнал 201 также отправляется в компонент 215 внутрикадровой оценки и компонент 217 внутрикадрового предсказания. Как и в случае компонента 221 оценки движения и компонента 219 компенсации движения, компонент 215 внутрикадровой оценки и компонент 217 внутрикадрового предсказания могут быть сильно интегрированы, но они проиллюстрированы по отдельности для концептуальных целей. Компонент 215 внутрикадровой оценки и компонент 217 внутрикадрового предсказания внутрикадрово предсказывают текущий блок относительно блоков в текущем кадре в качестве альтернативы межкадровому предсказанию, выполняемому компонентом 221 оценки движения и компонентом 219 компенсации движения между кадрами, как описано выше. В частности, компонент 215 внутрикадровой оценки определяет режим внутрикадрового предсказания, который используется для кодирования текущего блока. В некоторых примерах компонент 215 внутрикадровой оценки выбирает соответствующий режим внутрикадрового предсказания для кодирования текущего блока из нескольких протестированных режимов внутрикадрового предсказания. Выбранные режимы внутрикадрового предсказания затем направляются в компонент форматирования заголовка и CABAC 231 для кодирования.
Например, компонент 215 внутрикадровой оценки вычисляет значения скорости-искажения, используя анализ характеристики «скорость-искажение» для различных протестированных режимов внутрикадрового предсказания и выбирает режим внутрикадрового предсказания, имеющий наилучшие характеристики скорости-искажения среди протестированных режимов. Как правило, анализ характеристики «скорость-искажение» определяет степень искажения (или ошибки) между кодированным блоком и исходным некодированным блоком, который был закодирован для получения кодированного блока, а также битовой скорости (например, количества битов), используемой для получения кодированного блока. Компонент 215 внутрикадровой оценки вычисляет соотношения из искажений и скоростей для различных кодированных блоков, чтобы определить, какой режим внутрикадрового предсказания демонстрирует наилучшее значение скорости-искажения для блока. В дополнение к этому, компонент 215 внутрикадровой оценки может быть выполнен с возможностью кодирования блоков глубины карты глубины с использованием режима моделирования глубины (DMM) на основе оптимизации характеристики «скорость-искажение» (RDO).
Компонент 217 внутрикадрового предсказания может вырабатывать остаточный блок из блока предсказания на основе выбранных режимов внутрикадрового предсказания, определенных компонентом 215 внутрикадровой оценки, когда он реализован в кодере, или считывать остаточный блок из битового потока в случае реализации в декодере. Остаточный блок включает в себя разность значений между блоком предсказания и исходным блоком, представленным в виде матрицы. Затем остаточный блок направляется компоненту 213 преобразования с масштабированием и квантования. Компонент 215 внутрикадровой оценки и компонент 217 внутрикадрового предсказания могут работать как с компонентами яркости, так и с компонентами цветности.
Компонент 213 преобразования с масштабированием и квантования выполнен с возможностью дополнительного сжатия остаточного блока. Компонент 213 преобразования с масштабированием и квантования применяет преобразование, такое как дискретное косинусное преобразование (DCT), дискретное синусоидальное преобразование (DST) или концептуально аналогичное преобразование, к остаточному блоку, создавая видеоблок, содержащий остаточные значения коэффициентов преобразования. Кроме того, можно также использовать вейвлет-преобразования, целочисленные преобразования, преобразования поддиапазонов или другие типы преобразований. Преобразование позволяет преобразовать информацию остатка из области пиксельных значений в область преобразования, такую как частотная область. Компонент 213 преобразования с масштабированием и квантования также выполнен с возможностью масштабирования преобразованной остаточной информации, например, на основе частоты. Такое масштабирование включает применение коэффициента масштабирования к остаточной информации таким образом, чтобы информация о разных частотах квантовалась с разной степенью детализации, что может повлиять на конечное визуальное качество восстановленного видео. Компонент 213 преобразования с масштабированием и квантования также выполнен с возможностью квантования коэффициентов преобразования для дальнейшего снижения скорости передачи битов. Процесс квантования позволяет уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования может быть изменена посредством регулировки параметра квантования. В некоторых примерах компонент 213 преобразования с масштабированием и квантования может затем выполнять сканирование матрицы, включающей в себя квантованные коэффициенты преобразования. Квантованные коэффициенты преобразования направляются в компонент форматирования заголовка и CABAC 231 для кодирования в битовый поток.
Компонент 229 масштабирования и обратного преобразования применяет обратную операцию компонента 213 преобразования с масштабированием и квантования для поддержки оценки движения. Компонент 229 масштабирования и обратного преобразования применяет обратное масштабирование, преобразование и/или квантование для восстановления остаточного блока в пиксельной области, например, для последующего использования в качестве опорного блока, который может стать блоком предсказания для другого текущего блока. Компонент 221 оценки движения и/или компонент 219 компенсации движения могут вычислять опорный блок путем добавления остаточного блока обратно к соответствующему блоку предсказания для использования при оценке движения более позднего блока/кадра. К восстановленным опорным блокам применяются фильтры для устранения артефактов, возникающих во время масштабирования, квантования и преобразования. В противном случае такие артефакты могут вызвать неточное предсказание (и создать дополнительные артефакты) при предсказании последующих блоков.
Компонент 227 анализа управления фильтром и компонент 225 внутриконтурных фильтров применяют фильтры к остаточным блокам и/или к восстановленным блокам изображения. Например, преобразованный остаточный блок из компонента 229 масштабирования и обратного преобразования может быть объединен с соответствующим блоком предсказания из компонента 217 внутрикадрового предсказания и/или компонента 219 компенсации движения для восстановления исходного блока изображения. Затем фильтры могут быть применены к восстановленному блоку изображения. В некоторых примерах вместо этого фильтры могут применяться к остаточным блокам. Как и в случае с другими компонентами, показанными на фиг. 2, компонент 227 анализа управления фильтром и компонент 225 внутриконтурных фильтров в высокой степени интегрированы и могут быть реализованы вместе, но изображены отдельно для концептуальных целей. Фильтры, применяемые к восстановленным опорным блокам, применяются к конкретным областям пространства и включают в себя несколько параметров для регулировки применения таких фильтров. Компонент 227 анализа управления фильтром анализирует восстановленные опорные блоки, чтобы определить то, где такие фильтры должны применяться, и устанавливает соответствующие параметры. Такие данные направляются в компонент 231 форматирования заголовка и CABAC в качестве данных управления фильтром для кодирования. Компонент 225 внутриконтурных фильтров применяет такие фильтры на основе данных управления фильтром. Фильтры могут включать в себя фильтр устранения блочности, фильтр подавления шума, фильтр SAO и адаптивный контурной фильтр. В зависимости от примера такие фильтры могут применяться в пространственной/пиксельной области (например, к восстановленному блоку пикселей) или в частотной области.
При работе в качестве кодера отфильтрованный восстановленный блок изображения, остаточный блок и/или блок предсказания сохраняются в компоненте 223 буфера декодированных изображений для последующего использования при оценке движения, как обсуждалось выше. При работе в качестве декодера компонент 223 буфера декодированных изображений сохраняет и пересылает восстановленные и отфильтрованные блоки в дисплей как часть выходного видеосигнала. Компонент 223 буфера декодированных изображений может быть любым запоминающим устройством, способным хранить блоки предсказания, остаточные блоки и/или блоки восстановленного изображения.
Компонент 231 форматирования заголовка и CABAC принимает данные из различных компонентов системы 200кодирования/декодирования и кодирует такие данные в кодированный битовый поток для передачи в декодер. В частности, компонент 231 форматирования заголовка и CABAC вырабатывает различные заголовки для кодирования данных управления, таких как общие данные управления и данные управления фильтром. Кроме того, данные предсказания, включая данные внутрикадрового предсказания и движения, а также остаточные данные в виде данных квантованных коэффициентов преобразования, кодируются полностью в битовый поток. Окончательный битовый поток включает в себя всю информацию, необходимую декодеру для восстановления исходного разделенного видеосигнала 201. Такая информация может также включать в себя таблицы индексов внутрикадрового режима предсказания (также называемые таблицами сопоставления кодовых слов), определения контекстов кодирования для различных блоков, указания наиболее вероятных режимов внутрикадрового предсказания, указание информации раздела и т.д. Такие данные могут быть закодированы с применением энтропийного кодирования. Например, информация может быть закодирована с использованием контекстно-адаптивного кодирования переменной длины (CAVLC), CABAC, основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), вероятностного межкадрового энтропийного кодирования (PIPE) или другого способа энтропийного кодирования. После энтропийного кодирования кодированный битовый поток может быть передан в другое устройство (например, видеодекодер) или заархивирован для последующей передачи или извлечения.
На фиг. 3 показана блок-схема, иллюстрирующая примерный видеокодер 300. Видеокодер 300 может использоваться для реализации функций кодирования системы 200 кодирования/декодирования и/или реализации этапов 101, 103, 105, 107 и/или 109 способа 100 функционирования. Кодер 300 разделяет входной видеосигнал, в результате чего получается разделенный видеосигнал 301, который по существу аналогичен разделенному видеосигналу 201. Затем разделенный видеосигнал 301 сжимается и кодируется в битовый поток компонентами кодера 300.
В частности, разделенный видеосигнал 301 направляется в компонент 317 внутрикадрового предсказания для внутрикадрового предсказания. Компонент 317 внутрикадрового предсказания может быть по существу аналогичен компоненту 215 внутрикадровой оценки и компоненту 217 внутрикадрового предсказания. Разделенный видеосигнал 301 также направляется в компонент 321 компенсации движения для межкадрового предсказания на основе опорных блоков в компоненте 323 буфера декодированных изображений. Компонент 321 компенсации движения может быть по существу аналогичен компоненту 221 оценки движения и компоненту 219 компенсации движения. Блоки предсказания и остаточные блоки из компонента 317 внутрикадрового предсказания и компонента 321 компенсации движения направляются в компонент 313 преобразования и квантования для преобразования и квантования остаточных блоков. Компонент 313 преобразования и квантования может быть по существу аналогичен компоненту 213 преобразования с масштабированием и квантования. Преобразованные и квантованные остаточные блоки и соответствующие блоки предсказания (вместе с соответствующими управляющими данными) направляются в компонент 331 энтропийного кодирования для кодирования в битовый поток. Компонент 331 энтропийного кодирования может быть по существу аналогичен компоненту 231 форматирования заголовка и CABAC.
Преобразованные и квантованные остаточные блоки и/или соответствующие блоки предсказания также направляются из компонента 313 преобразования и квантования в компонент 329 обратного преобразования и квантования для восстановления в опорные блоки для использования компонентом 321 компенсации движения. Компонент 329 обратного преобразования и квантования может быть по существу аналогичен компоненту 229 масштабирования и обратного преобразования. Внутриконтурные фильтры в компоненте 325 внутриконтурных фильтров также применяются к остаточным блокам и/или восстановленным опорным блокам, в зависимости от примера. Компонент 325 внутриконтурных фильтров может быть по существу аналогичен компоненту 227 анализа управления фильтром и компоненту 225 внутриконтурных фильтров. Компонент 325 внутриконтурных фильтров может включать в себя множество фильтров, как описано в отношении компонента 225 внутриконтурных фильтров. Отфильтрованные блоки затем сохраняются в компоненте 323 буфера декодированных изображений для использования в качестве опорных блоков компонентом 321 компенсации движения. Компонент 323 буфера декодированных изображений может быть по существу аналогичен компоненту 223 буфера декодированных изображений.
На фиг. 4 показана блок-схема, иллюстрирующая примерный видеодекодер 400. Видеодекодер 400 может использоваться для реализации функций декодирования системы 200 кодирования/декодирования и/или реализации этапов 111, 113, 115 и/или 117 способа 100 функционирования. Декодер 400 принимает битовый поток, например, из кодера 300, и вырабатывает восстановленный выходной видеосигнал на основе битового потока для отображения конечному пользователю.
Битовый поток принимается компонентом 433 энтропийного декодирования. Компонент 433 энтропийного декодирования выполнен с возможностью реализации схемы энтропийного декодирования, такой как кодирование CAVLC, CABAC, SBAC, PIPE или другие технологии энтропийного кодирования. Например, компонент 433 энтропийного декодирования может использовать информацию заголовка для предоставления контекста для интерпретации дополнительных данных, кодированных как кодовые слова в битовый поток. Декодированная информация включает в себя любую требуемую информацию для декодирования видеосигнала, такую как общие данные управления, данные управления фильтром, информацию разделения, данные движения, данные предсказания и квантованные коэффициенты преобразования из остаточных блоков. Квантованные коэффициенты преобразования направляются в компонент 429 обратного преобразования и квантования для восстановления в остаточные блоки. Компонент 429 обратного преобразования и квантования может быть аналогичен компоненту 329 обратного преобразования и квантования.
Восстановленные остаточные блоки и/или блоки предсказания направляются в компонент 417 внутрикадрового предсказания для восстановления в блоки изображений на основе операций внутрикадрового предсказания. Компонент 417 внутрикадрового предсказания может быть аналогичен компоненту 215 внутрикадровой оценки и компоненту 217 внутрикадрового предсказания. В частности, компонент 417 внутрикадрового предсказания использует режимы предсказания для обнаружения опорного блока в кадре и применяет остаточный блок к результату для восстановления внутрикадрово предсказанных блоков изображения. Восстановленные внутрикадрово предсказанные блоки изображения, и/или остаточные блоки и соответствующие данные межкадрового предсказания направляются в компонент 423 буфера декодированных изображений через компонент 425 внутриконтурных фильтров, который может быть по существу аналогичен компоненту 223 буфера декодированных изображений и в компонент 225 внутриконтурных фильтров, соответственно. Компонент 425 внутриконтурных фильтров фильтрует восстановленные блоки изображений, остаточные блоки и/или блоки предсказания, и такая информация сохраняется в компоненте 423 буфера декодированных изображений. Восстановленные блоки изображений из компонента 423 буфера декодированных изображений направляются в компонент 421 компенсации движения для межкадрового предсказания. Компонент 421 компенсации движения может быть по существу аналогичен компоненту 221 оценки движения и/или компоненту 219 компенсации движения. В частности, компонент 421 компенсации движения использует векторы движения из опорного блока для формирования блока предсказания и применяет остаточный блок к результату для восстановления блока изображения. Результирующие восстановленные блоки также могут быть перенаправлены через компонент 425 внутриконтурных фильтров в компонент 423 буфера декодированных изображений. Компонент 423 буфера декодированных изображений продолжает хранить дополнительные восстановленные блоки изображений, которые могут быть восстановлены в кадры с использованием информации разделения. Такие кадры также могут быть помещены в последовательность. Последовательность выводится на дисплей в виде восстановленного выходного видеосигнала.
Принимая во внимание вышеизложенное, технологии сжатия видео выполняют пространственное (внутрикадровое) предсказание и/или временное (межкадровое) предсказание для уменьшения или устранения избыточности, присущей видеопоследовательностям. Для кодирования видео на блочной основе видеосрез (то есть видеоизображение или часть видеоизображения) может быть разделен на видеоблоки, которые также могут называться древовидными блоками, блоками дерева кодирования (CTB), единицами дерева кодирования (CTU), единицами кодирования (CU) и/или узлами кодирования. Видеоблоки во внутрикадрово кодированном (I) срезе изображения кодируются с использованием пространственного предсказания по отношению к опорным выборкам в соседних блоках одного и того же изображения. Видеоблоки во межкадрово кодированном (P или B) срезе изображения могут использовать пространственное предсказание по отношению к опорным выборкам в соседних блоках в одном и том же изображении или временное предсказание по отношению к опорным выборкам в других опорных изображениях. Изображения могут упоминаться как кадры, и опорные изображения могут упоминаться как опорные кадры. POC представляет собой переменную, ассоциированную с каждым изображением, которая однозначно идентифицирует ассоциированное изображение среди всех изображений в видеопоследовательности кодированного слоя (CLVS), указывает то, когда соответствующее изображение должно быть выведено из DPB, и указывает позицию ассоциированного изображения в порядке вывода относительно позиций очередности вывода других изображений в одной и той же CLVS, которые должны выводиться из DPB. Флаг представляет собой переменную или однобитовый синтаксический элемент, который может принимать одно из двух возможных значений: 0 и 1.
Пространственное или временное предсказание приводит к блоку предсказания для блока, подлежащего кодированию. Остаточные данные представляют собой разность в пикселях между исходным кодируемым блоком и предсказываемым блоком. Межкадрово предсказанный блок кодируется в соответствии с вектором движения, который указывает на блок опорных выборок, образующих блок предсказания, и остаточными данными, указывающими разность между кодированным блоком и предсказываемым блоком. Внутрикадрово предсказанный блок кодируется в соответствии с режимом внутрикадрового предсказания и остаточными данными. Для дальнейшего сжатия остаточные данные могут быть преобразованы из пиксельной области в область преобразования, в результате чего получаются остаточные коэффициенты преобразования, которые затем можно квантовать. Квантованные коэффициенты преобразования, первоначально размещенные в двумерном массиве, могут быть просканированы для того, чтобы получить одномерный вектор коэффициентов преобразования, и для достижения еще большего сжатия можно применять энтропийное кодирование.
Сжатие изображений и видео развивалось быстрыми темпами, что привело к появлению различных стандартов кодирования. Такие стандарты кодирования видео включают в себя ITU-T H.261, группу экспертов по движущимся изображениям (MPEG)-1 международной организации по стандартизации/международной электротехнической комиссии (ISO/IEC) часть 2, ITU-T H.262 или ISO/IEC MPEG-2 часть 2, ITU-T H.263, ISO/IEC MPEG-4 часть 2, усовершенствованное кодирование видео (AVC), также известное как ITU-T H.264 или ISO/IEC MPEG-4 часть 10, и высокоэффективное кодирование видео (HEVC), также известное как ITU-T H.265 или MPEG-H часть 2. AVC включает в себя такие расширения, как масштабируемое кодирование видео (SVC), кодирование многоракурсного видео (MVC) и кодирование многоракурсного видео плюс глубины (MVC+D), и трехмерное (3D) AVC (3D-AVC). HEVC включает в себя такие расширения, как масштабируемое HEVC (SHVC), многоракурсное HEVC (MV-HEVC) и 3D HEVC (3D-HEVC).
Существует также новый стандарт кодирования видео, называемый универсальным кодированием видео (VVC), который разрабатывается объединенной группой экспертов по видео (JVET) ITU-T и ISO/IEC. Хотя стандарт VVC имеет несколько рабочих проектов, в частности, в данном документе упоминается один рабочий проект (WD) VVC, а именно B. Bross, J. Chen, and S. Liu, “Versatile Video Coding (Draft 5),” JVET-N1001-v3, 13th JVET Meeting, March 27, 2019 (VVC Draft 5).
Масштабируемость при кодировании видео обычно поддерживается за счет использования технологий многослойного кодирования. Многослойный битовый поток содержит базовый слой (BL) и один или более слоев расширения (EL). Примеры масштабируемости включают в себя пространственную масштабируемость, масштабируемость качества/отношения сигнал-шум (SNR), многоракурсную масштабируемость и т.д. Когда используется технология многослойного кодирования, изображение или его часть могут быть закодированы (1) без использование опорного изображения, то есть с использованием внутрикадрового предсказания; (2) путем обращения к опорным изображениям, которые находятся в том же самом слое, то есть с использованием межкадрового предсказания; или (3) путем обращения к опорным изображениям, которые находятся в другом(их) слое(ях), то есть с использованием межслойного предсказания. Опорное изображение, используемое для межслойного предсказания текущего изображения, называется межслойным опорным изображением (ILRP).
На фиг. 5 показано схематичное представление, иллюстрирующее пример предсказания 500 на основе слоя, например, как это выполняется для определения векторов движения (MV) на этапе 105 сжатия блока, этапе 113 декодирования блока, компоненте 221 оценки движения, компоненте 219 компенсации движения, компоненте 321 компенсации движения и/или компоненте 421 компенсации движения. Предсказание 500 на основе слоя совместимо с однонаправленным межкадровым предсказанием и/или двунаправленным межкадровым предсказанием, но также выполняется между изображениями в разных слоях.
Предсказание 500 на основе слоев применяется между изображениями 511, 512, 513 и 514 и изображениями 515, 516, 517 и 518 в разных слоях. В показанном примере изображения 511, 512, 513 и 514 являются частью слоя N+1 532, и изображения 515, 516, 517 и 518 являются частью слоя N 531. Слой, такой как слой N 531 и/или слой N+1 532, представляет собой группу изображений, ассоциированных с аналогичным значением характеристики, такой как аналогичный размер, качество, разрешение, отношение сигнал/шум, возможности и т.д. В показанном примере слой N+1 532 ассоциируется с размером изображения, большим чем у слоя N 531. Соответственно, в этом примере изображения 511, 512, 513 и 514 в слое N+1 532 имеют больший размер изображения (например, большую высоту и ширину и, следовательно, больше выборок), чем у изображений 515, 516, 517 и 518 в слое N 531. Однако такие изображения могут быть разделены между слоем N+1 532 и слоем N 531 по другим характеристикам. Хотя показаны только два слоя, слой N+1 532 и слой N 531, набор изображений может быть разделен на любое количество слоев на основе ассоциированных характеристик. Слой N+1 532 и слой N 531 также могут обозначаться ID слоя. ID слоя - это элемент данных, который ассоциируется с изображением и указывает то, что изображение является частью указанного слоя. Соответственно, каждое изображение 511-518 может ассоциироваться с соответствующим ID слоя, чтобы указать то, какой слой N+1 532 или слой N 531 включает в себя соответствующее изображение.
Изображения 511-518 в разных слоях 531-532 выполнены с возможностью отображения в альтернативном варианте. Таким образом, изображения 511-518 в разных слоях 531-532 могут совместно использовать один и тот же временной идентификатор (ID) и могут быть включены в одну и ту же AU. Используемый в данном документе термин AU представляет собой набор из одного или более кодированных изображений, ассоциированных с одним и тем же временем отображения для вывода из DPB. Например, декодер может декодировать и отображать изображение 515 в текущий момент времени отображения, если требуется изображение меньшего размера, или декодер может декодировать и отображать изображение 511 в текущий момент времени отображения, если требуется изображение большего размера. Таким образом, изображения 511-514 в верхнем слое N+1 532 содержат по существу те же данные изображения, что и соответствующие изображения 515-518 в нижнем слое N 531 (несмотря на разницу в размере изображения). В частности, изображение 511 содержит по существу те же данные изображения, что и изображение 515, изображение 512 содержит по существу те же данные изображения, что и изображение 516 и т.д.
Изображения 511-518 могут быть закодированы путем ссылки на другие изображения 511-518 в одном и том же слое N 531 или N+1 532. Кодирование изображения со ссылкой на другое изображение в одном и том же слое приводит к межкадровому предсказанию 523, которое совместим с однонаправленным межкадровым предсказанием и/или двунаправленным межкадровым предсказанием. Межкадровое предсказание 523 показано сплошными стрелками. Например, изображение 513 может быть закодировано с использованием межкадрового предсказания 523 с использованием одного или двух изображений 511, 512 и/или 514 в слое N+1 532 в качестве ссылки, где одно изображение используется в качестве ссылки для однонаправленного межкадрового предсказания, и/или два изображения используются в качестве ссылки для двунаправленного межкадрового предсказания. Кроме того, изображение 517 может быть закодировано с применением межкадрового предсказания 523 с использованием одного или двух изображений 515, 516 и/или 518 в слое N 531 в качестве ссылки, где одно изображение используется в качестве ссылки для однонаправленного межкадрового предсказания, и/или два изображения используются в качестве ссылки для двунаправленного межкадрового предсказания. Когда при выполнении межкадрового предсказания 523 изображение используется в качестве опорного изображения для другого изображения в одном и том же слое, это изображение может упоминаться как опорное изображение. Например, изображение 512 может быть опорным изображением, используемым для кодирования изображения 513 в соответствии с межкадровым предсказанием 523. Межкадровое предсказание 523 также может упоминаться как внутрислойное предсказание в многослойном контексте. Таким образом, межкадровое предсказание 523 представляет собой механизм кодирования выборок текущего изображения путем ссылки на указанные выборки в опорном изображении, которое отличается от текущего изображения, где опорное изображение и текущее изображение находятся в одном слое.
Изображения 511-518 можно также закодировать путем ссылки на другие изображения 511-518 в других слоях. Этот процесс известен как межслойное предсказание 521 и показан пунктирными стрелками. Межслойное предсказание 521 представляет собой механизм кодирования выборок текущего изображения путем ссылки на указанные выборки в опорном изображении, где текущее изображение и опорное изображение находятся в разных слоях и, следовательно, имеют разные ID слоя. Например, изображение в нижнем слое N 531 может использоваться в качестве опорного изображения для кодирования соответствующего изображения в верхнем слое N+1 532. В качестве конкретного примера изображение 511 может быть закодировано путем ссылки на изображение 515 в соответствии с межслойным предсказанием 521. В таком случае изображение 515 используется как межслойное опорное изображение. Межслойное опорное изображение является опорным изображением, используемым для межслойного предсказания 521. В большинстве случаев межслойное предсказание 521 ограничено таким образом, чтобы текущее изображение, такое как изображение 511, могло использовать только межслойные опорные изображения, которые включены в одну и ту же AU и находятся в нижнем слое, таком как изображение 515. Когда доступно несколько слоев (например, более двух), межслойное предсказание 521 может кодировать/декодировать текущее изображение на основе нескольких межслойных опорных изображениях на более низких слоях, чем текущее изображение.
Видеокодер может использовать многослойную видеопоследовательность 500 для кодирования изображений 511-518 с помощью множества различных комбинаций и/или перестановок межкадрового предсказания 523 и межслойного предсказания 521. Например, изображение 515 может быть закодировано в соответствии с межкадровым предсказанием. Затем изображения 516-518 могут быть закодированы в соответствии с межкадровым предсказанием 523 с использованием изображения 515 в качестве опорного изображения. Кроме того, изображение 511 может быть закодировано в соответствии с межслойным предсказанием 521 с использованием изображения 515 в качестве межслойного опорного изображения. Затем изображения 512-514 могут быть закодированы в соответствии с межкадровым предсказанием 523 с использованием изображения 511 в качестве опорного изображения. Таким образом, опорное изображение может служить как однослойным опорным изображением, так и межслойным опорным изображением для различных механизмов кодирования. Кодируя N+1 532 изображений верхнего слоя на основе N 531 изображений нижнего слоя, верхний слой N+1 532 может избежать использования внутрикадрового предсказания, которое имеет гораздо более низкую эффективность кодирования, чем межкадровое предсказание 523 и межслойное предсказание 521. Таким образом, низкая эффективность кодирования внутрикадрового предсказания может быть ограничена изображениями наименьшего/самого низкого качества и, следовательно, ограничена кодированием наименьшего количества видеоданных. Изображения, используемые в качестве опорных изображений и/или межслойных опорных изображений, могут быть указаны в записях списка(ов) опорных изображений, содержащегося(ихся) в структуре списка опорных изображений.
Каждая AU 506, показанная на фиг. 5, может содержать несколько изображений. Например, одна AU 506 может содержать изображения 511 и 515. Другая AU 506 может содержать изображения 512 и 516. Фактически каждая AU 506 представляет собой набор из одного или более кодированных изображений, ассоциированных с одним и тем же временем отображения (например, с одним и тем же временным ID) для вывода из буфера декодированных изображений (DPB) (например, для отображения пользователю). Каждая AUD 508 является индикатором или структурой данных, используемой для указания начала AU (например, AU 508) или границы между AU.
Предыдущие семейства кодирования видео H.26x обеспечивали поддержку масштабируемости в отдельном(ых) профиле(ях) из профиля(ей) для однослойного кодирования. Масштабируемое кодирование видео (SVC) - это масштабируемое расширение AVC/H.264, которое обеспечивает поддержку для пространственно-временной масштабируемости и масштабируемости качества. Для SVC в каждом макроблоке (MB) в изображениях EL сигнализируется флаг для указания того, предсказывается ли MB EL с использованием совмещенного блока из нижнего слоя. Предсказание из совмещенного блока может включать в себя текстуру, векторы движения и/или режимы кодирования. Реализации SVC не могут напрямую повторно использовать немодифицированные реализации AVC в своей конструкции. Синтаксис макроблока EL SVC и процесс декодирования отличаются от синтаксиса H.264/AVC и процесса декодирования.
Масштабируемый HEVC (SHVC) является расширением стандарта HEVC/H.265, которое обеспечивает поддержку пространственной масштабируемости и масштабируемости качества, многоракурсный HEVC (MV-HEVC) является расширением HEVC/H.265, которое обеспечивает поддержку нескольких многоракурсной масштабируемости, и 3D HEVC (3D-HEVC) является расширением HEVC/H.264, которое обеспечивает поддержку кодирования трехмерного (3D) видео, которое является более совершенным и эффективным, чем MV-HEVC. Следует отметить, что временная масштабируемость включена как неотъемлемая часть однослойного кодека HEVC. В проекте многослойного расширения HEVC используется идея, согласно которой декодированные изображения, используемые для межслойного предсказания, поступают только из одной и той же единицы доступа (AU) и обрабатываются как долгосрочные опорные изображения (LTRP), и им назначаются опорные индексы в списке(ах) опорных изображений наряду с другими временными опорными изображениями в текущем слое. Межслойное предсказание (ILP) достигается на уровне единицы предсказания (PU) путем установки значения опорного индекса для ссылки на межслойное опорное изображение (изображения) в списке(ах) опорных изображений.
Примечательно, что функции передискретизации опорного изображения и пространственного масштабирования требуют повторной выборки опорного изображения или его части. Передискретизация опорного изображения (RPR) может быть реализована либо на уровне изображения, либо на уровне блока кодирования. Однако, когда RPR упоминается как функция кодирования, она представляет собой функции однослойного кодирования. Даже в этом случае возможно или даже предпочтительно с точки зрения разработки кодека использовать один и тот же фильтр передискретизации как для функции RPR однослойного кодирования, так и для функции пространственной масштабируемости для многослойного кодирования.
На фиг. 6 показан пример предсказания 600 на основе слоев с использованием наборов слоев вывода (OLS), например, как это выполняется для определения MV на этапе 105 сжатия блока, этапа 113 декодирования блока, компонента 221 оценки движения, компонента 219 компенсации движения, компонента 321 компенсации движения и/или компонента 421 компенсации движения. Предсказание 600 на основе слоев совместимо с однонаправленным межкадровым предсказанием и/или двунаправленным межкадровым предсказанием, но также выполняется между изображениями в разных слоях. Предсказание на основе слоев, показанных на фиг. 6, аналогично показанному на фиг. 5. Поэтому для краткости полное описание предсказания на основе слоев не повторяется.
Некоторые из слоев в кодированной видеопоследовательности (CVS) 690, показанной на фиг. 6, включены в OLS. OLS - это набор слоев, для которых один или более слоев указаны в качестве слоев вывода. Слой вывода представляет собой слой вывода OLS. На фиг. 6 показаны три различных OLS, а именно OLS 1, OLS 2 и OLS 3. Как показано, OLS 1 включает в себя слой N 631 и слой N+1 632. OLS 2 включает в себя слой N 631, слой N+1 632, слой N+2. 633 и слой N+3 634. OLS 3 включает в себя слой N 631. То есть OLS 3 включает в себя один единственный слой. В практических приложениях другие OLS также могут содержать один единственный слой. Несмотря на то, что показаны три OLS, в практических приложениях может использоваться разное количество OLS. Другие слои, такие как слой N+4 635, не включены в проиллюстрированные OLS (например, OLS 1, 2 и 3), но доступны для включения в другие OLS.
Каждый из различных OLS может содержать любое количество слоев. Различные OLS вырабатываются с целью согласования возможностей кодирования различных устройств, имеющих различные возможности кодирования. Например, OLS 3, который содержит один единственный слой, может быть создан для работы с мобильным телефоном с относительно ограниченными возможностями кодирования. С другой стороны, OLS 2, который содержит четыре слоя, может быть создан для работы с телевизором с большим экраном, который способен декодировать более высокие слои, чем мобильный телефон. OLS 1, который содержит два слоя, может быть создан для работы с персональным компьютером, портативным компьютером или планшетным компьютером, которые могут декодировать более высокие слои, чем мобильный телефон, но не могут декодировать самые высокие слои, такие как телевизор с большим экраном.
Все слои, показанные на фиг. 6, могут быть независимыми друг от друга. То есть каждый слой может быть закодирован без использования межслойного предсказания (ILP). В этом случае слои называются слоями одновременной передачи. Один или более слоев, показанных на фиг. 6, также могут быть закодированы с использованием ILP. О том, являются ли слои слоями одновременной передачи, или закодированы ли некоторые из слоев с использованием ILP, сигнализирует флаг в наборе параметров видео (VPS), который будет более подробно обсуждаться ниже. Когда некоторые слои используют ILP, отношения зависимости слоев между слоями также сигнализируются в VPS.
В варианте осуществления, когда слои являются слоями одновременной передачи, для декодирования и вывода выбирается один единственный слой. В варианте осуществления, когда некоторые слои используют ILP, все слои (например, весь битовый поток) задаются для декодирования, и определенные слои среди слоев задаются как слои вывода. Слой или слои вывода могут быть, например, 1) только самым высоким слоем, 2) всеми слоями или 3) самым высоким слоем плюс набор указанных нижних слоев. Например, когда самый высокий слой плюс набор указанных нижних слоев назначаются для вывода флагом в VPS, выводятся слой N+3 634 (который является самым высоким слоем) и слои N 631 и N+1 632 (которые ниже слои) из OLS 2.
Как показано на фиг. 6, каждый слой состоит из любого количества изображений. Например, слой N 631 включает в себя изображения 615-618, слой N+1 632 включает в себя изображения 611-614, слой N+2 633 включает в себя изображения 641-644, слой N+3 634 включает в себя изображения 651-654, и слой N+4 635 включает в себя изображения 661-664.
Стандарты кодирования видео, такие как HEVC, SHVC, MV-HEVC и VVC, определяют и сигнализируют профиль, ранг и уровень. Профили, ранги и уровни определяют ограничения на битовые потоки и, следовательно, ограничивают возможности, необходимые для декодирования битовых потоков. Профили, ранги и уровни также могут использоваться для указания точек функциональной совместимости между отдельными реализациями декодера. Профиль - это определенный набор инструментов кодирования, используемых для создания совместимого или соответствующего битового потока. Каждый профиль определяет подмножество алгоритмических функций и ограничений, которые должны поддерживаться всеми декодерами, соответствующими этому профилю.
Уровень представляет собой набор ограничений для битового потока (например, максимальную частоту дискретизации яркости, максимальную скорость передачи битов для разрешения и т.д.). То есть уровень представляет собой набор ограничений, указывающих требуемую производительность декодера для воспроизведения битового потока заданного профиля.
Уровни разделены на два ранга: основной и высокий. Основной ранг является более низким рангом, чем высокий ранг. Ранги были созданы для работы с приложениями, которые различаются максимальной скоростью передачи данных. Основной ранг был разработан для большинства приложений, в то время как высокий ранг был разработан для очень требовательных приложений. Набор ограничений и/или рангов, соответствующих уровням, может упоминаться здесь как информация уровня.
Каждый уровень ранга определяет набор ограничений на значения, которые могут принимать синтаксические элементы конкретного стандарта (например, HEVC, VVC). Один и тот же набор определений ранга и уровня используется со всеми профилями, но отдельные реализации могут поддерживать другой ранг, и внутри ранга другой уровень для каждого поддерживаемого профиля. Для любого заданного профиля уровень ранга обычно соответствует конкретной вычислительной нагрузке декодера и возможностям памяти.
При использовании стандарта HEVC показательный пример уровней и рангов для различных профилей представлен в ниже таблице 1.
Таблица 1
(1000 бит/сек)
4:4:4 16 Внутренний профиль
(1000 бит/сек)
(MaxDPBsize)
Параметры профиля, ранга и уровня (PTL) представляют собой синтаксическую структуру (например, i-ю синтаксическую структуру profile_tier_level()), которая обеспечивает профиль, ранг и/или уровень, как указано в таблице выше. Параметры буфера декодированных изображений (DPB) представляют собой синтаксическую структуру (например, i-ю синтаксическую структуру dpb_parameters()), которая обеспечивает размер DPB, в качестве варианта максимальное количество переупорядочений изображений и информацию о максимальной задержке. Максимальное количество переупорядочений изображений и информация о максимальной задержке могут совместно обозначаться аббревиатурой MRML. Параметры HRD представляют собой синтаксическую структуру (например, i-ую синтаксическую структуру ols_timing_hrd_parameters()), которая инициализирует и/или определяет рабочие условия HRD. Дополнительные подробности и особенности, касающиеся одного или более параметров PTL, параметров DPB и параметров HRD, представлены ниже.
В варианте осуществления максимальное количество переупорядочений изображений обозначается как dpb_max_num_reorder_pics[ i ], который указывает максимально допустимое количество изображений OLS, которые могут предшествовать любому изображению в OLS в порядке декодирования и следовать за этим изображением в порядке вывода, когда значение Htid равно i. Значение dpb_max_num_reorder_pics[ i ] должно находиться в диапазоне от 0 до dpb_max_dec_pic_buffering_minus1[ i ] включительно. Когда i больше 0, dpb_max_num_reorder_pics[ i ] должно быть больше или равно dpb_max_num_reorder_pics[i - 1]. Когда dpb_max_num_reorder_pics[ i ] отсутствует для i в диапазоне от 0 до MaxSubLayersMinus1 - 1 включительно, из-за того, что флаг subLayerInfoFlag равен 0, предполагается, что он равен dpb_max_num_reorder_pics[ MaxSubLayersMinus1 ]. Htid - это переменная, которая идентифицирует самый высокий временной подслой, подлежащий декодированию.
dpb_max_dec_pic_buffering_minus1[ i ] плюс 1 указывает максимальный требуемый размер DPB в единицах буферов хранения изображений, когда значение Htid равно i. Значение dpb_max_dec_pic_buffering_minus1[ i ] должно находиться в диапазоне от 0 до MaxDpbSize - 1 включительно, где MaxDpbSize соответствует подпункту A.4.2 стандарта VVC. Когда i больше 0, dpb_max_dec_pic_buffering_minus1[ i ] должно быть больше или равно dpb_max_dec_pic_buffering_minus1[i - 1]. Когда dpb_max_dec_pic_buffering_minus1[ i ] отсутствует для i в диапазоне от 0 до MaxSubLayersMinus1 - 1 включительно, из-за того, что флаг subLayerInfoFlag равен 0, предполагается, что он равен dpb_max_dec_pic_buffering_minus1[ MaxSubLayersMinus1 ].
В варианте осуществления информация максимальная задержка обозначается как dpb_max_latency_increase_plus1[ i ]. Параметр dpb_max_latency_increase_plus1[ i ], не равный 0, используется для вычисления значения MaxLatencyPictures[ i ], которое указывает максимальное количество изображений в OLS, которые могут предшествовать любому изображению в OLS в порядке вывода и следовать за этим изображением в порядке декодирования, когда значение Htid равно i.
MaxLatencyPictures[ i ] = dpb_max_num_reorder_pics[ i ] + dpb_max_latency_increase_plus1[ i ] - 1.
Синтаксические структуры DPB (также известные как параметры DPB) для описанных выше OLS включаются в VPS битового потока. К сожалению, сигнализация всех этих синтаксических структур DPB в VPS неэффективна, когда OLS содержит один единственный слой (например, OLS 3, показанный на фиг. 6).
В данном документе раскрыты технологии, которые обеспечивают включение параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
На фиг. 7 показан вариант осуществления битового видеопотока 700. Используемый в данном документе битовый видеопоток 700 может также называться кодированным битовым видеопотоком, битовым потоком или их вариантами. Как показано на фиг. 7, битовый поток 700 включает в себя набор 704 параметров видео (VPS), набор 706 параметров последовательности (SPS), набор 708 параметров изображения (PPS), заголовок 712 среза и данные 720 изображения. Каждый из VPS 704, SPS 706 и PPS 708 может обобщенно называться набором параметров. В варианте осуществления другие наборы параметров и/или заголовки, не показанные на фиг. 7, также могут быть включены в битовый поток 700.
VPS 704 включает в себя зависимость декодирования или информацию для построения набора опорных изображений улучшающих слоев. VPS 704 обеспечивает общую перспективу или вид масштабируемой последовательности, включая типы предоставляемых рабочих точек, профиль, ранг и уровень рабочих точек, и некоторые другие высокоуровневые свойства битового потока 700, которые можно использовать в качестве основы для согласования сеанса и выбора содержания и т.д.
В варианте осуществления VPS 704 включает в себя список синтаксических структур 780 DPB для всех OLS. В варианте осуществления каждая из синтаксических структур DPB в списке синтаксических структур 780 DPB обозначается как dpb_parameters(). VPS 704 также включает в себя синтаксическую структуру vps_ols_dpb_params_idx[ i ] 782. Синтаксическая структура vps_ols_dpb_params_idx[ i ] 782 указывает индекс синтаксической структуры DPB, который применяется к i-му OLS. То есть каждое значение индекса соответствует одной из синтаксических структур DPB в списке. Например, значение индекса 1 в списке соответствует dpb_parameters () для OLS 1, значение индекса 2 соответствует dpb_parameters() для OLS 2, и значение индекса 3 соответствует dpb_parameters() для OLS 3.
Значение vps_ols_dpb_params_idx[ i ], при его наличии, находится в диапазоне от 0 до VpsNumDpbParams - 1 включительно.
Синтаксический элемент vps_num_dpb_params_minus1 781 указывает количество синтаксических структур dpb_parameters() в VPS 704. Значение vps_num_dpb_params_minus1 781 находится в диапазоне от нуля до менее чем общего количества многослойных OLS, которое может быть обозначено как NumMultiLayerOlss.
Переменная VpsNumDpbParams - 1 получается видеодекодером (то есть переменная не сигнализируется в битовом потоке) на основе синтаксического элемента vps_num_dpb_params_minus1 781, который сигнализируется в битовом потоке.
В варианте осуществления переменная VpsNumDpbParams - 1 получается следующим образом.
if( vps_each_layer_is_an_ols_flag )
VpsNumDpbParams = 0 … (34)
else
VpsNumDpbParams = vps_num_dpb_params_minus1 + 1
Переменная VpsNumDpbParams - 1 плюс 1 указывает количество синтаксических структур DPB в VPS 704. Например, когда значение VpsNumDpbParams - 1 равно двум, количество синтаксических структур DPB в VPS 704 равно трем (2+1=3).
В варианте осуществления VPS 704 включает в себя флаг 783 наличия DPB, который может быть обозначен как vps_sublayer_dpb_params_present_flag, используемый для управления наличием синтаксических элементов dpb_max_dec_pic_buffering_minus1[ j ], dpb_max_num_reorder_pics[ j ] и dpb_max_latency_increase_plus1[ j ] в синтаксических структурах dpb_parameters() в VPS для j в диапазоне от 0 до vps_dpb_max_tid[ i ] - 1 включительно, когда vps_dpb_max_tid[ i ] больше 0. Если значение vps_sub_dpb_params_info_present_flag отсутствует, предполагается, что оно равно 0.
SPS 706 содержит данные, которые являются общими для всех изображений в последовательности изображений (SOP). SPS 706 представляет собой синтаксическую структуру, содержащую синтаксические элементы, которые применяются к нулевой или более полной CLVS, что определяется содержанием синтаксического элемента, обнаруженного в PPS, на который ссылается синтаксический элемент, обнаруженный в заголовке каждого изображения.
В варианте осуществления параметры dpb_parameters(), которые применяются к i-ому OLS 784, присутствуют в SPS 706, на который ссылается слой в i-ом OLS, когда i-ый OLS является однослойным OLS. То есть для однослойной OLS (например, для OLS 2, показанного на фиг. 6) применяемая синтаксическая структура dpb_parameters() присутствует в SPS, на которую ссылается слой в OLS.
На основании вышеизложенного следует понимать, что когда OLS является однослойным OLS (например, OLS содержит один единственный слой), dpb_parameters(), которые применяются к i-ому OLS 784, присутствуют как в SPS 706, так и в VPS 704 (то есть синтаксическая структура DPB, которая применяется к i-му OLS, является одной из синтаксических структур DPB, включенных в структуры 780 DPB). Более того, параметры dpb_parameters(), которые применяются к i-му OLS 784 в SPS 706, идентичны параметрам dpb_parameters(), которые применяются к i-му OLS 784 в VPS 704.
В отличие от SPS 706, PPS 708 содержит данные, которые являются общими для всего изображения. PPS 708 представляет собой синтаксическую структуру, содержащую синтаксические элементы, которые применяются к нулевым или более полным кодированным изображениям. Заголовок 712 среза является частью кодированного среза, содержащего элементы данных, относящиеся ко всем видеоданным в тайле, представленном в срезе. Заголовок 712 среза содержит параметры, которые специфичны для каждого среза в изображении. Таким образом, может быть один заголовок 712 среза на срез в видеопоследовательности. Заголовок 712 среза может содержать информацию о типе среза, счетчики очередности изображений (POC), списки опорных изображений (RPL), весовые коэффициенты предсказания, точки ввода тайлов или параметры деблокирования. Заголовок 712 среза также может называться заголовком группы тайлов и/или заголовком изображения (PH).
В варианте осуществления VPS 704 и/или SPS 706 содержат следующий синтаксис и семантику SPS для реализации одного или более вариантов осуществления, раскрытых в данном документе.
Синтаксис VPS включает в себя следующее.
vps_sub_layer_dpb_params_present_flag )
Синтаксис необработанных полезных данных последовательности байтов (RBSP) SPS включает в себя следующее.
Синтаксис DPB включает в себя следующее.
i <= maxSubLayersMinus1; i++ ) {
Синтаксис параметров HRD включает в себя синтаксис общих параметров HRD, синтаксис параметров HRD OLS и синтаксис параметров HRD подслоя.
Синтаксис общих параметров HRD включает в себя следующее.
Синтаксис параметров HRD OLS включает в себя следующее.
Синтаксис параметров HRD подслоя включает в себя следующее.
Семантика VPS представлена следующим образом.
vps_max_layers_minus1 плюс 1 указывает максимально допустимое количество слоев в каждой CVS, ссылающейся на VPS.
vps_max_sub_layers_minus1 плюс 1 указывает максимальное количество временных подслоев, которые могут присутствовать в каждой CVS, ссылающейся на VPS. Значение vps_max_sub_layers_minus1 должно находиться в диапазоне от 0 до 7 включительно.
Флаг vps_all_layers_same_num_sub_layers_flag, равный 1, указывает то, что количество временных подслоев является одинаковым для всех слоев в каждой CVS, ссылающейся на VPS. Флаг vps_all_layers_same_num_sub_layers_flag, равный 0, указывает то, что слои в каждой CVS, ссылающейся на VPS, могут иметь или не иметь одинаковое количество временных подслоев. Если он отсутствует, предполагается, что значение vps_all_layers_same_num_sub_layers_flag равно 1.
Флаг vps_all_independent_layers_flag, равный 1, указывает то, что все слои в CVS кодируются независимым образом без использования межслойного предсказания. Флаг vps_all_independent_layers_flag, равный 0, указывает то, что один или более слоев в CVS могут использовать межслойное предсказание. Если он отсутствует, значение vps_all_independent_layers_flag считается равным 1. Когда значение vps_all_independent_layers_flag равно 1, значение vps_independent_layer_flag[ i ] предполагается равным 1. Когда значение vps_all_independent_layers_flag равно 0, значение vps_independent_layer_flag[ 0 ] считается равным 1.
Флаг vps_direct_dependency_flag[ i ][ j ], равный 0, указывает то, что слой с индексом j не является слоем прямой ссылки для слоя с индексом i. Флаг vps_direct_dependency_flag [ i ][ j ], равный 1, указывает то, что слой с индексом j является слоем прямой ссылки для слоя с индексом i. Когда vps_direct_dependency_flag[ i ][ j ] отсутствует для i и j в диапазоне от 0 до vps_max_layers_minus1 включительно, предполагается, что он равен 0.
Переменная DirectDependentLayerIdx[ i ][ j ], указывающая j-й непосредственно зависимый слой от i-го слоя, и переменная LayerUsedAsRefLayerFlag[ j ], указывающая то, используется ли слой с индексом j слоя в качестве флага ссылочного слоя любым другим слоем, получаются следующим образом:
for( i = 0; i <= vps_max_layers_minus1; i++ )
LayerUsedAsRefLayerFlag[ j ] = 0
for( i = 1; i < vps_max_layers_minus1; i++ )
if( !vps_independent_layer_flag[ i ] )
for( j = i - 1, k = 0; j >= 0; j- - )
if( vps_direct_dependency_flag[ i ][ j ] ) {
DirectDependentLayerIdx[ i ][ k++ ] = j
LayerUsedAsRefLayerFlag[ j ] = 1
}
Переменная GeneralLayerIdx[ i ], указывающая индекс слоя с nuh_layer_id, равным vps_layer_id[ i ], получается следующим образом:
for( i = 0; i <= vps_max_layers_minus1; i++ )
GeneralLayerIdx[ vps_layer_id[ i ] ] = i
Флаг each_layer_is_an_ols_flag, равный 1, указывает то, что каждый набор слоев вывода содержит только один слой, и каждый слой в битовом потоке непосредственно является набором слоев вывода, причем единственный включенный слой является единственным слоем вывода. Флаг each_layer_is_an_ols_flag, равный 0, указывает то, что набор слоев вывода может содержать более одного слоя. Если значение vps_max_layers_minus1 равно 0, предполагается, что значение each_layer_is_an_ols_flag равно 1. В противном случае, когда значение vps_all_independent_layers_flag равно 0, предполагается, что значение each_layer_is_an_ols_flag предполагается равно 0.
ols_mode_idc, равный 0, указывает то, что общее количество OLS, заданных VPS, равно vps_max_layers_minus1 + 1, i-й OLS включает в себя слои с индексами слоев от 0 до i включительно, и для каждого OLS выводится только верхний слой в OLS. ols_mode_idc, равный 1, указывает то, что общее количество OLS, заданных VPS, равно vps_max_layers_minus1 + 1, i-й OLS включает в себя слои с индексами слоев от 0 до i включительно, и для каждого OLS выводятся все слои в OLS. ols_mode_idc, равный 2, указывает то, что общее количество OLS, заданное VPS, сигнализируется в явном виде, и для каждого OLS выводятся верхний слой и просигнализированный в явном виде набор нижних слоев в OLS. Значение ols_mode_idc должно находиться в диапазоне от 0 до 2 включительно. Значение 3 ols_mode_idc зарезервировано для будущего использования ITU-T | ISO/IEC. Когда vps_all_independent_layers_flag равно 1, и each_layer_is_an_ols_flag равно 0, предполагается, что значение ols_mode_idc равно 2.
num_output_layer_sets_minus1 плюс 1 указывает общее количество OLS, заданное VPS, когда ols_mode_idc равно двум.
Переменная TotalNumOlss, указывающая общее количество OLS, заданных VPS, получается следующим образом.
if( vps_max_layers_minus1 = = 0 )
TotalNumOlss = 1
else if( each_layer_is_an_ols_flag | | ols_mode_idc = = 0 | | ols_mode_idc = = 1 )
TotalNumOlss = vps_max_layers_minus1 + 1
else if( ols_mode_idc = = 2 )
TotalNumOlss = num_output_layer_sets_minus1 + 1
layer_included_flag[ i ]][ j ] указывает то, включен ли j-й слой (то есть слой с nuh_layer_id, равным vps_layer_id[ j ]) в i-й OLS, когда ols_mode_idc равен 2. layer_included_flag[ i ][ j ], равный 1, указывает то, что j-й слой включен в i-й OLS. layer_included_flag[ i ][ j ], равный 0, указывает то, что j-й слой не включен в i-й OLS.
] Переменная NumLayersInOls[ i ], задающая количество слоев в i-ом OLS, и переменная LayerIdInOls[ i ][ j ], задающая значение nuh_layer_id j-го слоя в i-ом OLS, получаются следующим образом.
NumLayersInOls[ 0 ] = 1
LayerIdInOls[ 0 ][ 0 ] = vps_layer_id[ 0 ]
for( i = 1, i < TotalNumOlss; i++ ) {
if( each_layer_is_an_ols_flag ) {
NumLayersInOls[ i ] = 1
LayerIdInOls[ i ][ 0 ] = vps_layer_id[ i ]
} else if( ols_mode_idc = = 0 | | ols_mode_idc = = 1 ) {
NumLayersInOls[ i ] = i + 1
for( j = 0; j < NumLayersInOls[ i ]; j++ )
LayerIdInOls[ i ][ j ] = vps_layer_id[ j ]
} else if( ols_mode_idc = = 2 ) {
for( k = 0, j = 0; k <= vps_max_layers_minus1; k++ )
if( layer_included_flag[ i ][ k ] )
LayerIdInOls[ i ][ j++ ] = vps_layer_id[ k ]
NumLayersInOls[ i ] = j
}
}
Переменная OlsLayeIdx[ i ][ j ], задающая индекс слоя OLS слоя с nuh_layer_id, равным LayerIdInOls[ i ][ j ], получается следующим образом.
for( i = 0, i < TotalNumOlss; i++ )
for j = 0; j < NumLayersInOls[ i ]; j++ )
OlsLayeIdx[ i ][ LayerIdInOls[ i ][ j ] ] = j
Нижний слой в каждом OLS должен быть независимым слоем. Другими словами, для каждого i в диапазоне от 0 до TotalNumOlss - 1 включительно значение vps_independent_layer_flag[GeneralLayerIdx[LayerIdInOls[ i ][ 0 ]]] должно быть равно 1.
Каждый слой должен быть включен по меньшей мере в один OLS, заданный VPS. Другими словами, для каждого слоя с конкретным значением nuh_layer_id nuhLayerId, равным единице из vps_layer_id[ k ] для k в диапазоне от нуля до vps_max_layers_minus1 включительно, должна быть как минимум одна пара значений i и j, где i находится в диапазоне от нуля до TotalNumOlss - 1 включительно, и j находится в диапазоне NumLayersInOls[ i ] - 1 включительно, так что значение LayerIdInOls[ i ][ j ] равно nuhLayerId.
Любой слой в OLS должен быть слоем вывода OLS или ссылочным слоем (прямым или косвенным) слоя вывода OLS.
vps_output_layer_flag[ i ][ j ] указывает то, выводится ли j-й слой в i-ом OLS, когда значение ols_mode_idc равно 2. vps_output_layer_flag[ i ], равный единице, указывает то, что выводится j-й слой в i-ом OLS. vps_output_layer_flag[ i ], равный 0, указывает то, что j-й слой в i-м OLS не выводится. Когда значение vps_all_independent_layers_flag равно 1, и ach_layer_is_an_ols_flag равно 0, предполагается, что значение vps_output_layer_flag[ i ] равно 1.
Переменная OutputLayerFlag[ i ][ j ], для которой значение 1 указывает то, что выводится j-й слой в i-м OLS, и значение 0 указывает то, что j-й слой в i-м OLS не выводится, получается следующим образом:
for( i = 0, i < TotalNumOlss; i++ ) {
OutputLayerFlag[ i ][ NumLayersInOls[ i ] - 1 ] = 1
for( j = 0; j < NumLayersInOls[ i ] - 1; j++ )
if( ols_mode_idc[ i ] = = 0 )
OutputLayerFlag[ i ][ j ] = 0
else if( ols_mode_idc[ i ] = = 1 )
OutputLayerFlag[ i ][ j ] = 1
else if( ols_mode_idc[ i ] = = 2 )
OutputLayerFlag[ i ][ j ] = vps_output_layer_flag[ i ][ j ]
}
Примечание. 0-ой OLS содержит только нижний слой (слой с nuh_layer_id, равным vps_layer_id[ 0 ]), и для 0-го OLS выводится только включенный слой.
vps_num_ptls указывает количество синтаксических структур profile_tier_level() в VPS.
Флаг pt_present_flag[ i ], равный 1, указывает то, что информация о профиле, уровне и общих ограничениях присутствует в i-й синтаксической структуре profile_tier_level() в VPS. Флаг pt_present_flag[ i ], равный 0, указывает то, что информация о профиле, ранге и общих ограничениях отсутствует в i-й синтаксической структуре profile_tier_level() в VPS. Предполагается, что значение pt_present_flag[ 0 ] равно 0. Когда флаг pt_present_flag[ i ] равен 0, предполагается, что информация о профиле, ранге и общих ограничениях для i-й синтаксической структуры profile_tier_level() в VPS будет такой же, как и для ( i - 1 )-й синтаксической структуры profile_tier_level() в VPS.
ptl_max_temporal_id[ i ] указывает TemporalId представления самого высокого подслоя, для которого информация об уровне присутствует в i-й синтаксической структуре profile_tier_level() в VPS. Значение ptl_max_temporal_id[ i ] должно находиться в диапазоне от 0 до vps_max_sub_layers_minus1 включительно. Когда значение vps_max_sub_layers_minus1 равно 0, предполагается, что значение ptl_max_temporal_id[ i ] равно 0. Когда vps_max_sub_layers_minus1 больше 0, и vps_all_layers_same_num_sub_layers_flag равно 1, значение ptl_max_temporal_id[ i ] предполагается равным vps_max_ussublayers1_max_ussublayers1_min.
Значение vps_ptl_byte_alignment_zero_bit должно быть равно 0.
Индекс ols_ptl_idx[ i ] указывает индекс в списке синтаксических структур profile_tier_level() в VPS синтаксической структуры profile_tier_level(), которая применяется к i-му OLS. Когда он присутствует, значение ols_ptl_idx[ i ] должно находиться в диапазоне от 0 до vps_num_ptls - 1 включительно.
Когда значение NumLayersInOls[ i ] равно 1, синтаксическая структура profile_tier_level(), которая применяется к i-му OLS, присутствует в SPS, на который ссылается слой в i-м OLS.
vps_num_dpb_params указывает количество синтаксических структур dpb_parameters() в VPS. Значение vps_num_dpb_params должно находиться в диапазоне от 0 до 16 включительно. Если это значение отсутствует, предполагается, что значение vps_num_dpb_params равно 0.
Значение same_dpb_size_output_or_nonoutput_flag, равное 1, указывает то, что в VPS отсутствует синтаксический элемент layer_nonoutput_dpb_params_idx[ i ]. Значение same_dpb_size_output_or_nonoutput_flag, равное 0, указывает то, что в VPS могут присутствовать или отсутствовать синтаксические элементы layer_nonoutput_dpb_params_idx[ i ].
vps_sub_layer_dpb_params_present_flag используется для управления наличием синтаксических элементов max_dec_pic_buffering_minus1[ ], max_num_reorder_pics[ ] и max_latency_increase_plus1[ ] в синтаксических структурах dpb_parameters() в VPS. Если параметр vps_sub_dpb_params_info_present_flag отсутствует, предполагается, что он равен 0.
Значение dpb_size_only_flag[ i ], равное 1, указывает то, что синтаксические элементы max_num_reorder_pics[] и max_latency_increase_plus1[] отсутствуют в i-й синтаксической структуре dpb_parameters() в VPS. Значение dpb_size_only_flag[ i ], равное 1, указывает то, что синтаксические элементы max_num_reorder_pics[] и max_latency_increase_plus1[ ] могут присутствовать в i-й синтаксической структуре dpb_parameters() в VPS.
dpb_max_temporal_id[ i ] указывает TemporalId представления самого высокого подслоя, для которого параметры DPB могут присутствовать в i-й синтаксической структуре dpb_parameters() в VPS. Значение dpb_max_temporal_id[ i ] должно находиться в диапазоне от 0 до vps_max_sub_layers_minus1 включительно. Когда значение vps_max_sub_layers_minus1 равно 0, предполагается, что значение dpb_max_temporal_id[ i ] равно 0. Когда значение vps_max_sub_layers_minus1 больше 0, и значение vps_all_layers_same_num_sub_layers_flag равно 1, значение dpb_max_temporal_id[ i ] предполагается равным vpss_minus_sub.
Индекс layer_output_dpb_params_idx[ i ] указывает индекс в списке синтаксических структур dpb_parameters() в VPS синтаксической структуры dpb_parameters(), которая применяется к i-му слою, когда он является слоем вывода в OLS. Когда он присутствует, значение layer_output_dpb_params_idx[ i ] должно находиться в диапазоне от 0 до vps_num_dpb_params - 1 включительно.
Если значение vps_independent_layer_flag[ i ] равно 1, синтаксическая структура dpb_parameters(), которая применяется к i-му слою, когда он является слоем вывода, представляет собой синтаксическую структуру dpb_parameters(), присутствующую в SPS, на которую ссылается слой.
В противном случае (когда значение vps_independent_layer_flag[ i ] равно 0) применяется следующее:
Когда значение vps_num_dpb_params равно 1, предполагается, что значение layer_output_dpb_params_idx[ i ] равно 0.
Требованием соответствия битового потока является то, что значение layer_output_dpb_params_idx[ i ] должно быть таким, чтобы значение dpb_size_only_flag[layer_output_dpb_params_idx[ i ]] равнялось 0.
Индекс layer_nonoutput_dpb_params_idx[ i ] указывает индекс в списке синтаксических структур dpb_parameters() в VPS синтаксической структуры dpb_parameters(), которая применяется к i-му слою, когда он не является слоем вывода в OLS. Когда он присутствует, значение layer_nonoutput_dpb_params_idx[ i ] должно находиться в диапазоне от 0 до vps_num_dpb_params - 1 включительно.
Если значение same_dpb_size_output_or_nonoutput_flag равно 1, применяется следующее:
Если значение vps_independent_layer_flag[ i ] равно 1, синтаксическая структура dpb_parameters(), которая применяется к i-му слою, когда он не является слоем вывода, представляет собой синтаксическую структуру dpb_parameters(), присутствующую в SPS, на которую ссылается слой.
В противном случае (когда значение vps_independent_layer_flag[ i ] равно 0) значение layer_nonoutput_dpb_params_idx[ i ] предполагается равным layer_output_dpb_params_idx[ i ].
В противном случае (когда значение same_dpb_size_output_or_nonoutput_flag равен 0), когда значение vps_num_dpb_params равно 1, предполагается, что значение layer_output_dpb_params_idx[ i ] равно 0.
Значение vps_extension_flag, равное 0, указывает то, что в синтаксической структуре RBSP VPS отсутствуют синтаксические элементы vps_extension_data_flag. Значение vps_extension_flag, равное 1, указывает то, что в синтаксической структуре RBSP VPS присутствуют синтаксические элементы vps_extension_data_flag.
Флаг vps_extension_data_flag может иметь любое значение. Его наличие и значение не влияют на соответствие декодера профилям, указанным в этой версии данной спецификации. Декодеры, соответствующие этой версии данной спецификации, должны игнорировать все синтаксические элементы vps_extension_data_flag.
Семантика RBSP SPS представлена следующим образом.
RBSP SPS должна быть доступной для процесса декодирования перед ссылкой на нее, она должна быть включена по меньшей мере в одну единицу доступа с TemporalId, равным 0, или предоставлена через внешнее средство, и единица NAL SPS, содержащая RBSP SPS, должна иметь nuh_layer_id, равный наименьшему значению nuh_layer_id единиц NAL PPS, которые ссылаются на нее.
Все единицы NAL SPS с конкретным значением sps_seq_parameter_set_id в CVS должны иметь одинаковое содержание.
ID sps_decoding_parameter_set_id, когда он больше 0, указывает значение dps_decoding_parameter_set_id для DPS, на который ссылается SPS. Когда ID sps_decoding_parameter_set_id равен 0, SPS не ссылается на DPS, и на DPS не ссылаются при декодировании каждой CLVS, ссылающейся на SPS. Значение sps_decoding_parameter_set_id должно быть одинаковым во всех SPS, на которые ссылаются кодированные изображения в битовом потоке.
ID sps_video_parameter_set_id, когда он больше 0, указывает значение vps_video_parameter_set_id для VPS, на которое ссылается SPS. Когда ID sps_video_parameter_set_id равен 0, SPS не ссылается на VPS, и на VPS не ссылаются при декодировании каждой CLVS, ссылающейся на SPS, и предполагается, что значение GeneralLayerIdx[nuh_layer_id] равно 0, и значение vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] равно 1.
Когда значение vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] равно 1, SPS, на который ссылается CLVS с конкретным значением nuhLayerId nuh_layer_id, должен иметь nuh_layer_id, равный nuhLayerId.
sps_max_sub_layers_minus1 плюс 1 указывает максимальное количество временных подслоев, которые могут присутствовать в каждой CLVS, ссылающейся на SPS. Значение sps_max_sub_layers_minus1 должно находиться в диапазоне от 0 до vps_max_sub_layers_minus1 включительно.
Значение sps_reserved_zero_4bits должно быть равным 0 в битовых потоках, соответствующих этой версии данного описания. Другие значения для sps_reserved_zero_4bits зарезервированы для будущего использования ITU-T | ISO/IEC.
Флаг sps_ptl_dpb_present_flag, равный 1, указывает то, что в SPS присутствуют синтаксическая структура profile_tier_level() и синтаксическая структура dpb_parameters(). Флаг sps_ptl_dpb_present_flag, равный 0, указывает то, что в SPS отсутствует синтаксическая структура profile_tier_level() и синтаксическая структура dpb_parameters(). Значение sps_ptl_dpb_present_flag должно быть равно vps_independent_layer_flag[nuh_layer_id].
Если значение vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] равно 1, переменная MaxDecPicBuffMinus1 устанавливается равной max_dec_pic_buffering_minus1[sps_max_sub_layers_minus1] в синтаксической структуре dpb_parameters( ) в SPS. В противном случае MaxDecPicBuffMinus1 устанавливается равным max_dec_pic_buffering_minus1[sps_max_sub_layers_minus1] в синтаксической структуре layer_nonoutput_dpb_params_idx[GeneralLayerIdx[nuh_layer_id]]-th dpb_parameters() в VPS.
Флаг gdr_enabled_flag, равный 1, указывает то, что могут присутствовать изображения постепенного обновления при декодировании (GDR) в CLVS, ссылающейся на SPS. Флаг gdr_enabled_flag, равный 0, указывает то, что изображения GDR отсутствуют в CLVS, ссылающейся на SPS.
Флаг sps_sub_layer_dpb_params_flag используется для управления наличием синтаксических элементов max_dec_pic_buffering_minus1[ i ], max_num_reorder_pics[ i ] и max_latency_increase_plus1[ i ] в синтаксической структуре dpb_parameters() в SPS. Если он отсутствует, предполагается, что значение sps_sub_dpb_params_info_present_flag равно 0.
Флаг long_term_ref_pics_flag, равный 0, указывает то, что LTRP не используется для межкадрового предсказания любого кодированного изображения в CLVS. Флаг long_term_ref_pics_flag, равный 1, указывает то, что LTRP могут использоваться для межкадрового предсказания одного или более кодированных изображений в CLVS.
Общий профиль, ранг и семантика слоя представляют собой следующее.
Синтаксическая структура profile_tier_level() предоставляет информацию об уровне и, в качестве варианта информацию о профиле, ранге, подпрофиле и общих ограничениях (обозначенную как PT-информация).
Когда синтаксическая структура profile_tier_level() включена в DPS, OlsInScope представляет собой OLS, который включает в себя все слои во всем битовом потоке, который ссылается на DPS. Когда синтаксическая структура profile_tier_level() включена в VPS, OlsInScope является одной или несколькими OLS, заданными VPS. Когда синтаксическая структура profile_tier_level() включена в SPS, OlsInScope представляет собой OLS, который включает в себя только нижний слой среди слоев, которые ссылаются на SPS, который должен быть независимым слоем.
general_profile_idc указывает профиль, которому соответствует OlsInScope, как указано в приложении A стандарта VVC. Битовые потоки не должны содержать значений general_profile_idc, отличных от указанных в приложении A. Другие значения general_profile_idc зарезервированы для будущего использования ITU-T | ISO/IEC.
general_tier_flag указывает контекст ранга для интерпретации general_level_idc, как указано в приложении A.
num_sub_profiles указывает количество синтаксических элементов general_sub_profile_idc[ i ].
general_sub_profile_idc[ i ] указывает i-е метаданные с взаимной совместимостью, зарегистрированные в соответствии с рекомендацией ITU-T T.35, содержание которой не указано в стандарте VVC.
general_level_idc указывает уровень, которому соответствует OlsInScope, как указано в приложении A. Битовые потоки не должны содержать значений general_level_idc, отличных от указанных в приложении A. Другие значения general_level_idc зарезервированы для будущего использования ITU-T | ISO/IEC.
Примечание 1. Большее значение general_level_idc указывает на более высокий уровень. Максимальный уровень, просигнализированный в DPS для OlsInScope, может быть выше, чем уровень, просигнализированный в SPS для CVS, содержащейся в OlsInScope.
Примечание 2. Когда OlsInScope соответствует нескольким профилям, general_profile_idc должен указывать профиль, который обеспечивает предпочтительный результат декодирования или предпочтительную идентификацию битового потока, как определено кодером (способом, не указанным в данном описании).
Примечание 3. Когда синтаксическая структура profile_tier_level(), включенная в DPS и CVS OlsInScope, соответствует разным профилям, general_profile_idc и level_idc должны указывать профиль и уровень для декодера, способного декодировать OlsInScope.
sub_layer_level_present_flag[ i ], равный 1, указывает то, что информация об уровне присутствует в синтаксической структуре profile_tier_level() для представления подслоя с TemporalId, равным i. sub_layer_level_present_flag[ i ], равный 0, указывает то, что информация об уровне отсутствует в синтаксической структуре profile_tier_level() для представления подслоя с TemporalId, равным i.
Значение ptl_alignment_zero_bits должен быть равно 0.
Семантика синтаксического элемента sub_layer_level_idc[ i ] является, за исключением описания вывода отсутствующих значений, такой же, как синтаксический элемент general_level_idc, но применяется к представлению подслоя с TemporalId, равным i.
Семантика DPB представлена следующим образом.
Синтаксическая структура dpb_parameters(maxSubLayersMinus1, subLayerInfoFlag) предоставляет информацию о размере DPB, максимальном количестве переупорядочений изображений и максимальной задержке для каждой CLVS CVS.
Когда синтаксическая структура dpb_parameters() включена в VPS, OLS, к которым применяется синтаксическая структура dpb_parameters(), задаются VPS. Когда синтаксическая структура dpb_parameters() включена в SPS, она применяется к OLS, который включает в себя только нижний слой среди слоев, ссылающихся на SPS, который должен быть независимым слоем.
max_dec_pic_buffering_minus1[ i ] плюс 1 указывает, для каждой CLVS CVS, максимальный требуемый размер буфера декодированных изображений в единицах буферов хранения изображений, когда значение Htid равно i. Значение max_dec_pic_buffering_minus1[ i ] должно находиться в диапазоне от 0 до MaxDpbSize - 1 включительно, где MaxDpbSize указано где-то в другом месте. Когда i больше 0, max_dec_pic_buffering_minus1[ i ] должно быть больше или равно max_dec_pic_buffering_minus1[i - 1]. Когда max_dec_pic_buffering_minus1[ i ] отсутствует для i в диапазоне от 0 до maxSubLayersMinus1 - 1 включительно, из-за того, что флаг subLayerInfoFlag равен 0, предполагается, что его значение равно max_dec_pic_buffering_minus1[ maxSubLayersMinus1 ].
max_num_reorder_pics[ i ] указывает, для каждой CLVS CVS, максимально допустимое количество изображений CLVS, которые могут предшествовать любому изображению в CLVS в порядке декодирования и следовать за этим изображением в порядке вывода, когда значение Htid равно i. Значение max_num_reorder_pics[ i ] должно находиться в диапазоне от 0 до max_dec_pic_buffering_minus1[ i ] включительно. Когда i больше 0, max_num_reorder_pics[ i ] должно быть больше или равно max_num_reorder_pics[i - 1]. Когда max_num_reorder_pics[ i ] отсутствует для i в диапазоне от 0 до maxSubLayersMinus1 - 1 включительно, из-за того, что флаг subLayerInfoFlag равен 0, предполагается, что он равен max_num_reorder_pics[ maxSubLayersMinus1 ].
max_latency_increase_plus1[ i ], не равное 0, используется для вычисления значения MaxLatencyPictures[ i ], которое указывает, для каждой CLVS в CVS, максимальное количество изображений в CLVS, которые могут предшествовать любому изображению в CLVS в порядке вывода и следовать за этим изображением в порядке декодирования, когда значение Htid равно i.
Когда max_latency_increase_plus1[ i ] не равно 0, значение MaxLatencyPictures[ i ] указывается следующим образом:
MaxLatencyPictures[ i ] =
max_num_reorder_pics[ i ] + max_latency_increase_ plus1[ i ] - 1
Когда значение max_latency_increase_plus1[ i ] равно 0, соответствующий предел не выражается.
Значение max_latency_increase_plus1[ i ] должно находиться в диапазоне от 0 до 232 - 2 включительно. Когда max_latency_increase_plus1[ i ] отсутствует для i в диапазоне от 0 до maxSubLayersMinus1 - 1 включительно, из-за того, что флаг subLayerInfoFlag равен 0, предполагается, что он равен max_latency_increase_plus1[ maxSubLayersMinus1 ].
Семантика параметров HRD включает в себя семантику общих параметров HRD.
Семантика общих параметров HRD представлена следующим образом.
Синтаксическая структура general_hrd_parameters() предоставляет параметры HRD, используемые в операциях HRD.
num_ols_hrd_params_minus1 плюс 1 указывает количество синтаксических структур ols_hrd_parameters(), присутствующих в синтаксической структуре general_hrd_parameters(). Значение num_ols_hrd_params_minus1 должно находиться в диапазоне от 0 до 73 включительно. Когда TotalNumOlss больше 1, предполагается, что значение num_ols_hrd_params_minus1 равно 0.
Параметр hrd_cpb_cnt_minus1 плюс один указывает количество альтернативных спецификаций CPB в битовом потоке CVS. Значение hrd_cpb_cnt_minus1 должно находиться в диапазоне от 0 до 31 включительно.
hrd_max_temporal_id[ i ] указывает TemporalId представления верхнего слоя, для которого параметры HRD содержатся в i-ой синтаксической структуре layer_level_hrd_parameters( ). Значение hrd_max_temporal_id[ i ] должно находиться в диапазоне от 0 до vps_max_sub_layers_minus1 включительно. Когда vps_max_sub_layers_minus1 равно нулю, предполагается, что значение hrd_max_temporal_id[ i ] равно 0.
ols_hrd_idx[ i ] указывает индекс синтаксической структуры ols_hrd_parameters(), который применяется к i-му OLS. Значение ols_hrd_idx[[ i ] должно находиться в диапазоне от 0 до num_ols_hrd_params_minus1 включительно. Если это значение отсутствует, предполагается, что значение ols_hrd_idx[[ i ] равно 0.
Семантика структуры списка опорных изображений представлена следующим образом.
Синтаксическая структура ref_pic_list_struct(listIdx, rplsIdx) может присутствовать в SPS или в заголовке среза. В зависимости от того, включена ли синтаксическая структура в заголовок среза или в SPS, применяется следующее:
- Синтаксическая структура ref_pic_list_struct(listIdx, rplsIdx), если она присутствует в заголовке среза, указывает список опорных изображений listIdx текущего изображения (изображения, содержащего срез).
- В противном случае синтаксическая структура ref_pic_list_struct( listIdx, rplsIdx ) (присутствующая в SPS) указывает кандидата для списка listIdx опорных изображений, и термин «текущее изображение» в семантике, указанной в оставшейся части этого пункта, относится к каждому изображению, которое 1) имеет один или более срезов, содержащих ref_pic_list_idx[ listIdx ], равный индексу в списке синтаксических структур ref_pic_list_struct( listIdx, rplsIdx ), включенных в SPS, и 2) находится в CVS, ссылающейся на SPS.
num_ref_entries[ listIdx ][ rplsIdx ] указывает количество записей в синтаксической структуре ref_pic_list_struct( listIdx, rplsIdx ). Значение num_ref_entries[listIdx][rplsIdx] должно находиться в диапазоне от 0 до MaxDecPicBuffMinus1 + 14 включительно.
VPS 704, SPS 706 и PPS 708 содержатся в различных типах единиц слоя сетевой абстракции (NAL). Единица NAL представляет собой синтаксическую структуру, содержащую указатель типа данных, которому следует следовать (например, кодированные видеоданные). Единицы NAL подразделяются на блоки слоя кодирования видео (VCL) и единицы NAL без VCL. Единицы NAL VCL содержат данные, которые представляют значения выборок в видеоизображениях, и единицы NAL без VCL содержат любую ассоциированную дополнительную информацию, такую как наборы параметров (важные данные, которые могут применяться к ряду единиц NAL VCL) и дополнительная информация расширения (информация о времени и другие дополнительные данные, которые могут повысить удобство использования декодированного видеосигнала, но не являются необходимыми для декодирования значений выборок в видеоизображениях).
В варианте осуществления VPS 704 содержится в единице NAL без VCL, обозначенной как единица NAL VPS. Таким образом, единица NAL VPS имеет NUT VPS. В варианте осуществления SPS 706 представляет собой единицу NAL без VCL, обозначенную как единица NAL SPS. Таким образом, блок SPS NAL имеет NUT SPS. В варианте осуществления PPS 708 содержится в единице NAL без VCL, обозначенной как единица NAL PPS. Таким образом, единица NAL PPS имеет NUT PPS.
Заголовок 712 среза представляет собой синтаксическую структуру, содержащую синтаксические элементы, которые применяются ко всем срезам кодированного изображения (например, изображения 725). В варианте осуществления заголовок 712 среза находится в NAL VCL.
Данные 720 изображения содержат видеоданные, кодированные согласно межслойному предсказанию, внутрикадровому предсказанию или межслойному предсказанию, а также соответствующие преобразованные и квантованные остаточные данные. Как показано на фиг. 7, данные 720 изображения включают в себя один или более OLS 721. Один или более OLS 721 аналогичны OLS 1, OLS 2 и OLS 3, показанным на фиг. 6. Каждый OLS 721 включает в себя один или более слоев 723. Слои 723 аналогичны слоям 531-532, показанным на фиг. 5. Каждый из слоев 723 включает в себя одно или более изображений 725. Изображения 725 аналогичны изображениям 615-618, 611-614, 641-644, 651-654 и 661-664, показанным на фиг. 6.
Каждое изображение 725 представляет собой массив выборок яркости в монохромном формате или массив выборок яркости и два соответствующих массива выборок цветности в цветовом формате 4:2:0, 4:2:2 и 4:4:4. Изображения 725 могут быть либо кадром, либо полем. Однако в одном CVS (например, CVS 790) либо все изображения 725 являются кадрами, либо все изображения 725 являются полями. CVS 790 представляет собой кодированную видеопоследовательность для каждой видеопоследовательности кодированного слоя (CLVS) в битовом видеопотоке 700. Примечательно, что CVS 790 и CLVS являются одинаковыми тогда, когда битовый видеопоток 700 включает в себя один слой. CVS 790 и CLVS являются разными только тогда, когда битовый видеопоток 700 включает в себя множество слоев (например, как показано на фиг. 5 и 6).
Каждое изображение 725 содержит один или более срезов 727. Срез 727 представляет собой целое число полных тайлов или целое число последовательных полных строк CTU в тайле изображения (например, изображения 725). Каждый срез 727 содержится исключительно в одной единице NAL (например, единице NAL VCL). Тайл (не показан) представляет собой прямоугольную область CTU в конкретном столбце тайлов и конкретной строке тайлов в изображении (например, изображении 725). CTU (не показана) представляет собой CTB выборок яркости, два соответствующих CTB выборок цветности изображения, которое имеет три массива выборок, или CTB выборок монохромного изображения или изображения, которое закодировано с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования выборок. CTB (не показан) представляет собой блок N×N выборок для некоторого значения N, так что разделение компонента на CTB представляет собой разбиение на разделы. Блок (не показан) представляет собой массив MxN (M столбцов на N строк) выборок (например, пикселей) или массив MxN коэффициентов преобразования.
Изображения 725 и их срезы 727 содержат данные, ассоциированные с изображениями или видео, подлежащими кодированию или декодированию. Таким образом, изображения 725 и их срезы 727 могут просто называться полезной нагрузкой или данными, переносимыми в битовом потоке 700.
Специалистам в данной области техники будет понятно, что при практическом применении битовый поток 700 может содержать другие параметры и информацию.
Битовый подпоток 701 может быть извлечен из битового потока 700 в соответствии с процессом 703 извлечения битового подпотока. Процесс 703 извлечения битового подпотока представляет собой заданный механизм, который удаляет единицы NAL из битового потока 700, которые не являются частью целевого набора, приводящего к выходному подбитовому потоку 701, который включает в себя единицы NAL, которые включены в целевой набор. Процесс 703 извлечения битового подпотока может выполняться кодером или ассоциированным срезом, выполненным с возможностью динамического изменения битового потока 700 на основе поведения/запросов пользователя.
Так как SPS 706 содержит dpb_parameters() для i-го OLS 784, когда i-й OLS содержит один единственный слой (например, OLS 3 на фиг. 6), VPS 704 может быть удален во время процесса 703 извлечения. То есть битовый подпоток 701 не должен быть включен VPS 704 в битовый подпоток 701, так как идентичные dpb_parameters() для i-го OLS 784 также присутствуют в SPS 706. Таким образом, декодер может получить dpb_parameters() для i-го OLS 784 из SPS 706, когда i-й OLS содержит один единственный слой.
На фиг. 8 показан вариант осуществления способа 800 декодирования, реализуемого видеодекодером (например, видеодекодером 400). Способ 800 может выполняться после того, как битовый поток был прямо или косвенно принят из видеокодера (например, видеокодера 300). Способ 800 улучшает процесс декодирования за счет включения параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
На этапе 802 видеодекодер принимает битовый подпоток (например, битовый подпоток 701), имеющий набор параметров последовательности (например, SPS 706) с синтаксической структурой буфера декодированных изображений (DPB) (например, dpb_parameters()) для i-го OLS 784) для набора слоев вывода (OLS) с одним единственным слоем (например, OLS 3).
В варианте осуществления синтаксическая структура DPB обозначается как dpb_parameters(). В варианте осуществления одним единственным слоем является i-й слой, и где OLS является i-м OLS. В варианте осуществления синтаксическая структура DPB присутствует в i-й синтаксической структуре profile_tier_level() в SPS. В варианте осуществления битовый подпоток не включает в себя набор параметров видео (VPS 704). То есть VPS был удален как часть процесса 703 извлечения.
На этапе 804 видеодекодер получает синтаксическую структуру DPB для OLS с одним слоем из SPS. В варианте осуществления на SPS ссылается один единственный слой в OLS.
На этапе 806 видеодекодер декодирует изображение (например, изображение 725) одного единственного слоя с использованием синтаксической структуры DPB для получения декодированного изображения. В варианте осуществления декодированное изображение сохраняется в буфере декодированных изображений (DPB) до или перед отображением.
После того, как изображение было декодировано, изображение может быть использовано для выработки или получения изображения или видеопоследовательности для отображения пользователю на дисплее или экране электронного устройства (например, смартфона, планшетного компьютера, ноутбука, персонального компьютера и т.д.).
На фиг. 9 показан вариант осуществления способа 900 кодирования битового видеопотока, реализуемого видеокодером (например, видеокодером 300). Способ 900 может выполняться тогда, когда изображение (например, из видео) необходимо кодировать в битовый видеопоток и затем передать в видеодекодер (например, видеодекодер 400). Способ 900 улучшает процесс кодирования за счет включения параметров буфера декодированных изображений (DPB) в набор параметров последовательности (SPS) тогда, когда набор слоев вывода (OLS) содержит один единственный слой. Так как SPS включает в себя параметры DPB для OLS с одним слоем, набор параметров видео (VPS) может быть удален из битового потока, что уменьшает избыточность и повышает эффективность кодирования. Таким образом, кодер/декодер (он же «кодек») при кодировании видео улучшен по сравнению с современными кодеками. С практической точки зрения улучшенный процесс кодирования видео обеспечивает пользователю лучшее пользовательское восприятие при отправке, приеме и/или просмотре видео.
На этапе 902 видеокодер вырабатывает набор параметров видео (например, VPS 704) и набор параметров последовательности (например, SPS 706). VPS включает в себя список синтаксических структур буфера декодированных изображений (DPB) для всех наборов слоев вывода (например, синтаксические структуры 780 PTL). SPS включает в себя синтаксическую структуру DPB для каждого OLS, имеющего один единственный слой (например, dpb_parameters() для i-й OLS 784). Например, SPS включает в себя синтаксическую структуру DPB для OLS 3 на фиг. 6, которая обозначена как dpb_parameters() для OLS3 на фиг. 7. SPS не включает в себя синтаксическую структуру DPB для какого-либо OLS, имеющего более одного слоя. Например, SPS не включает в себя синтаксическую структуру DPB для OLS 1 и OLS 2 на фиг. 6, которая обозначена как dpb_parameters() для OLS2 и dpb_parameters() для OLS3 на фиг. 7.
В варианте осуществления VPS включает в себя индекс для списка синтаксических структур PTL, и где индекс обозначен как vps_ols_dpb_params_idx[ i ]. В варианте осуществления значение vps_ols_dpb_params_idx[ i ] находится в диапазоне от нуля до общего количества синтаксических структур DPB в VPS. В варианте осуществления VPS включает в себя vps_num_dpb_params_minus1, и где vps_num_dpb_params_minus1 плюс 1 указывает общее количество синтаксических структур DPB.
На этапе 904 видеокодер кодирует VPS и SPS в битовый видеопоток. На этапе 906 видеокодер сохраняет битовый видеопоток для передачи в видеодекодер. В варианте осуществления способ 900 дополнительно включает в себя извлечение битового подпотока (например, битового подпотока 701) из битового потока (например, битового потока 700). Как описано выше, процесс 703 извлечения сохраняет SPS, но удаляет VPS. То есть битовый подпоток включает в себя SPS из битового потока, но не включает в себя VPS из битового потока.
Аналогично битовому видеопотоку, битовый подпоток может храниться в памяти для передачи в видеодекодер. В варианте осуществления битовый видеопоток и/или битовый подпоток передается в видеодекодер. Кодированный битовый видеопоток и/или кодированный битовый подпоток, после приема видеодекодером, может быть декодирован (например, как описано выше) для выработки или получения изображения или видеопоследовательности для отображения пользователю на дисплее или экране электронного устройства (например, смартфона, планшетного компьютера, ноутбука, персонального компьютера и т.д.).
Дополнительные и/или добавленные детали представлены ниже.
Общий процесс декодирования выглядит следующим образом.
Входными данными для этого процесса является битовый поток BitstreamToDecode. Выходными данными этого процесса является список декодированных изображений.
Процесс декодирования указывается таким образом, чтобы все декодеры, которые соответствуют заданному профилю и уровню, создавали численно идентичные кадрированные декодированные выходные изображения при вызове процесса декодирования, ассоциированного с этим профилем для битового потока, соответствующего этому профилю и уровню. Любой процесс декодирования, который создает кадрированные декодированные выходные изображения, идентичные изображениям, полученным в процессе, описанном в данном документе (с правильным порядком вывода или синхронизацией вывода, как это задано), соответствует требованиям к процессу декодирования стандарта VVC.
Для каждой AU IRAP в битовом потоке применяется следующее.
- Если AU является первой AU в битовом потоке в порядке декодирования, каждое изображение является изображением мгновенного обновления декодирования (IDR), или каждое изображение является первым изображением слоя, которое следует за концом последовательности единиц NAL в порядке декодирования, переменная NoIncorrectPicOutputFlag устанавливается равной 1.
- В противном случае, если какое-либо внешнее средство, не указанное в данном описании, доступно для установки переменной HandleCraAsCvsStartFlag на значение для AU, HandleCraAsCvsStartFlag устанавливается равным значению, предоставленному внешним средством, и NoIncorrectPicOutputFlag устанавливается равным HandleCraAsCvsStartFlag.
- В противном случае HandleCraAsCvsStartFlag и NoIncorrectPicOutputFlag устанавливаются равными 0.
Для каждой AU GDR в битовом потоке применяется следующее.
- Если AU является первой AU в битовом потоке в порядке декодирования, или каждое изображение является первым изображением слоя, которое следует за единицей NAL конца последовательности в порядке декодирования, переменная NoIncorrectPicOutputFlag устанавливается равной 1.
- В противном случае, если какое-либо внешнее средство, не указанное в данном описании, доступно для установки переменной HandleGdrAsCvsStartFlag на значение для AU, HandleGdrAsCvsStartFlag устанавливается равным значению, предоставленному внешним средством, и NoIncorrectPicOutputFlag устанавливается равным HandleGdrAsCvsStartFlag.
- В противном случае HandleGdrAsCvsStartFlag и NoIncorrectPicOutputFlag устанавливаются равными 0.
Примечание: Описанные выше операции как для изображений IRAP, так и для изображений GDR необходимы для идентификации CVS в битовом потоке.
Пункт 8.1.2 повторно вызывается для каждого кодированного изображения в BitstreamToDecode в порядке декодирования.
Процесс декодирования для составления списков опорных изображений выглядит следующим образом.
Этот процесс вызывается в начале процесса декодирования для каждого слоя изображения без IDR.
Опорные изображения адресуются посредством опорных индексов. Опорный индекс представляет собой индекс в списке опорных изображений. В случае декодирования I-среза список опорных изображений не используется при декодировании данных среза. В случае декодирования P-среза при декодировании данных среза используется только список опорных изображений 0 (то есть RefPicList[ 0 ]). В случае декодирования B-среза при декодировании данных среза используются как список 0 опорных изображений, так и список 1 опорных изображений (то есть RefPicList[1]).
Требованием соответствия битового потока являются следующие ограничения.
- Для каждого i, равного 0 или 1, num_ref_entries[ i ][RplsIdx[ i ]] не должно быть меньше, чем NumRefIdxActive[ i ].
- Изображение, на которое ссылается каждая активная запись в RefPicList[ 0 ] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId, меньший или равный значению TemporalId текущего изображения.
- Изображение, на которое ссылается каждая запись в RefPicList[ 0 ] или RefPicList[1], не должно быть текущим изображением и должно иметь non_reference_picture_flag, равный 0.
- Запись краткосрочного опорного изображения (STRP) в RefPicList[ 0 ] или RefPicList[1] среза изображения и запись LTRP в RefPicList[ 0 ] или RefPicList[1] одного и того же среза или другого среза одного и того же изображения не должны относиться к одному и тому же изображению.
- В RefPicList[ 0 ] или RefPicList[1] не должно быть записей LTRP, для которых разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, на которое ссылается запись, больше или равна 224.
- Пусть setOfRefPics будет набором уникальных изображений, на которые ссылаются все записи в RefPicList[ 0 ], которые имеют тот же nuh_layer_id, что и текущее изображение, и все записи в RefPicList[1], которые имеют тот же nuh_layer_id, что и текущее изображение. Количество изображений в setOfRefPics должно быть меньше или равно MaxDecPicBuffMinus1, и setOfRefPics должно быть одинаковым для всех срезов изображения.
- Когда текущее изображение является изображением с пошаговым доступом к временным подслою (STSA), активная запись в RefPicList[ 0 ] или RefPicList[1], которая имеет TemporalId, равный идентификатору текущего изображения, должна отсутствовать.
Когда текущее изображение является изображением, которое следует в порядке декодирования за изображением STSA, которое имеет TemporalId, равный идентификатору текущего изображения, не должно быть изображения, которое имеет TemporalId, равный значению текущего изображения, включенного в качестве активной записи в RefPicList[ 0 ] или RefPicList[1], которая предшествует изображению STSA в порядке декодирования.
- Изображение, на которое ссылается каждая запись ILRP в RefPicList[ 0 ] или RefPicList[1] среза текущего изображения, должно находиться в той же единице доступа, что и текущее изображение.
- Изображение, на которое ссылается каждая запись ILRP в RefPicList[ 0 ] или RefPicList[1] среза текущего изображения, должно присутствовать в DPB и должно иметь nuh_layer_id меньше, чем у текущего изображения.
- Каждая запись ILRP в RefPicList[ 0 ] или RefPicList[1] среза должна быть активной записью.
Общие аспекты HRD в пункте C.1 стандарта VVC включают в себя следующее.
Это приложение указывает гипотетический опорный декодер (HRD) и его использование для проверки битового потока и соответствия декодера.
Набор тестов на соответствие битового потока необходим для проверки на соответствие битового потока, на который ссылаются как на весь битовый поток, обозначенный как fullBitstream. Набор тестов на соответствие битового потока предназначен для проверки на соответствие каждой OP каждого OLS, заданного VPS.
Для каждого теста применяются следующие упорядоченные этапы в указанном порядке, за которыми следуют процессы, описанные после этих этапов в этом пункте:
1. Тестируемая рабочая точка, обозначенная как targetOp, выбирается путем выбора целевого OLS с индексом OLS opOlsIdx и наивысшим значением OpTid TemporalId. Значение opOlsIdx находится в диапазоне от 0 до TotalNumOlss - 1 включительно. Значение opTid находится в диапазоне от 0 до vps_max_sub_layers_minus1 включительно. Каждая пара выбранных значений opOlsIdx и opTid должна быть такой, чтобы битовый подпоток, являющийся выходным при вызове процесса извлечения битового подпотока, как указано в пункте C.6, с целыми потоками битов, opOlsIdx и opTid в качестве входных данных, удовлетворял следующим условиям:
- Существует по меньшей мере одна единица NAL VCL с nuh_layer_id, равным каждому из значений nuh_layer_id в LayerIdInOls[opOlsIdx] в BitstreamToDecode.
- Существует по меньшей мере одна единица NAL VCL с TemporalId, равным opTid в BitstreamToDecode.
2. Если слои в targetOp включают в себя все слои в fullBitstream, и opTid больше, чем самое высокое значение TemporalId среди всех единиц NAL в fullBitstream, BitstreamToDecode устанавливается равным totalBitstream. В противном случае BitstreamToDecode устанавливается в качестве выходных данных путем вызова процесса извлечения битового подпотока, как указано в пункте C.6 с entireBitstream, opOlsIdx и opTid в качестве входных данных.
3. Значения TargetOlsIdx и Htid устанавливаются равными opOlsIdx и opTid, соответственно, для targetOp.
4. Выбирается значение ScIdx. Выбранное значение ScIdx должно находиться в диапазоне от 0 до hrd_cpb_cnt_minus1 включительно.
5. Единица доступа в параметре BitstreamToDecode, ассоциированном с SEI-сообщениями периода буферизации (присутствующими в TargetLayerBitstream или доступными через внешнее средство, не указанное в данном описании), применимыми к TargetOlsIdx, выбирается в качестве точки инициализации HRD и упоминается как единица 0 доступа для каждого слоя в целевом OLS.
6. Синтаксическая структура ols_hrd_parameters() и синтаксическая структура sub_layer_hrd_parameters(), применяемые к BitstreamToDecode, выбираются следующим образом:
- Выбирается синтаксическая структура ols_hrd_idx[TargetOlsIdx]-th ols_hrd_parameters() в VPS (или предоставляется внешним средством, не указанным в данном описании).
- В выбранной синтаксической структуре ols_hrd_parameters( ), если BitstreamToDecode является битовым потоком типа I, выбирается синтаксическая структура sub_layer_hrd_parameters( Htid ), которая сразу следует за условием «if( general_vcl_hrd_params_present_flag )», и переменная NalHrdModeFlag устанавливается равной 0; в противном случае (когда BitstreamToDecode является битовым потоком типа II) синтаксическая структура sub_layer_hrd_parameters( Htid ), которая сразу следует либо за условием «if( general_vcl_hrd_params_present_flag )» (в этом случае переменная NalHrdModeFlag устанавливается равной 0), либо за условием «if( general_nal_hrd_params_present_flag )" (в этом случае переменная NalHrdModeFlag устанавливается равной 1). Когда BitstreamToDecode является битовым потоком типа II, и флаг NalHrdModeFlag равен 0, все единицы NAL без VCL, за исключением единиц NAL данных-заполнителей, и все синтаксические элементы leading_zero_8bits, zero_byte, start_code_prefix_one_3bytes и trailing_zero_8bits, которые образуют байтовый поток из потока единиц NAL (как указано в приложении B), если они присутствуют, отбрасываются из BitstreamToDecode, и оставшийся битовый поток назначается параметру BitstreamToDecode.
7. Когда флаг decoding_unit_hrd_params_present_flag равен 1, CPB планируется работать либо на уровне единицы доступа (в этом случае переменная DecodingUnitHrdFlag устанавливается равной 0), либо на уровне единицы декодирования (в этом случае переменная DecodingUnitHrdFlag устанавливается равной 1). В противном случае флаг DecodingUnitHrdFlag устанавливается равным 0, и CPB планируется работать на уровне единицы доступа.
8. Для каждой единицы доступа в BitstreamToDecode, начиная с единицы 0 доступа, выбирается SEI-сообщение периода буферизации (присутствующее в BitstreamToDecode или доступное через внешнее средство, не указанное), которое ассоциируется с единицей доступа и применяется к TargetOlsIdx, выбирается SEI-сообщение синхронизации изображения (присутствующее в BitstreamToDecode или доступное через внешнее средство, не указанное в данном описании), которое ассоциируется с единицей доступа и применяется к TargetOlsIdx, и, когда флаг DecodingUnitHrdFlag равен 1, и флаг decoding_unit_cpb_params_in_pic_timing_sei_flag равен 0, выбираются SEI-сообщения информации единицы декодирования (присутствующие в BitstreamToDecode или доступные через внешние средства, не указанные в данном описании), которые ассоциируются с единицами декодирования в единице доступа и применяются к TargetOlsIdx.
Каждый тест на соответствие состоит из комбинации одного варианта на каждом из вышеперечисленных этапов. Когда для этапа существует более одного варианта, для любого конкретного теста на соответствие выбирается только один вариант. Все возможные комбинации всех этапов образуют полный набор тестов на соответствие. Для каждой тестируемой рабочей точки количество выполняемых тестов на соответствие битового потока равно n0 * n1 * n2 * n3, где значения n0, n1, n2 и n3 заданы следующим образом:
- n1 равно hrd_cpb_cnt_minus1 + 1.
- n1 представляет собой количество единиц доступа в BitstreamToDecode, которые ассоциируются с SEI-сообщениями периода буферизации.
- n2 получают следующим образом:
- Если BitstreamToDecode является битовым потоком Типа I, n0 равно 1.
- В противном случае (когда BitstreamToDecode является битовым потоком типа II) n0 равно 2.
- n3 получают следующим образом:
- Если флаг decoding_unit_hrd_params_present_flag равен 0, n3 равно 1.
- В противном случае n3 равно 2.
HRD содержит экстрактор битового потока (в качестве варианта присутствует), буфер кодированный изображений (CPB), процесс мгновенного декодирования, буфер декодированный изображений (DPB), который концептуально содержит под-DPB для каждого слоя, и кадрирование на выходе.
Для каждого теста на соответствие битового потока размер CPB (число битов) равен CpbSize[ Htid ][ ScIdx ], как указано в пункте 7.4.5.2, где ScIdx и параметры HRD указаны выше в этом пункте, и параметры DPB max_dec_pic_buffering_minus1 [ Htid ], max_num_reorder_pics[ Htid ] и MaxLatencyPictures[ Htid ] для каждого слоя находятся в синтаксической структуре dpb_parameters() или получаются из нее, которая применяется к слою в зависимости от того, является ли слой независимым слоем, и является ли слой выходным слоем целевого OLS.
HRD работает следующим образом.
- HRD инициализируется в блоке декодирования 0, причем как CPB, так и каждый под-DPB в DPB устанавливаются пустыми (заполнение под-DPB для каждого под-DPB установлено равным 0).
Примечание: После инициализации HRD не инициализируется снова последующими SEI-сообщениями периода буферизации.
- Данные, ассоциированные с единицами декодирования, которые поступают в каждый CPB в соответствии с заданным графиком поступления, доставляются гипотетическим планировщиком потоков (HSS).
- Данные, ассоциированные с каждой единицей декодирования, удаляются и декодируются мгновенно в процессе мгновенного декодирования во время удаления CPB единицы декодирования.
- Каждое декодированное изображение помещается в DPB.
- Декодированное изображение удаляется из DPB, когда оно больше не требуется для ссылки на межкадровое предсказание и больше не требуется для вывода.
Выполняется работа буфера декодированных изображений.
Спецификации в этом разделе применяются независимым образом к каждому набору параметров буфера декодированных изображений (DPB), выбранных, как указано в пункте C.1.
Буфер декодированных изображений концептуально состоит из под-DPB, и каждый под-DPB содержит буферы хранения изображений для хранения декодированных изображений одного слоя. Каждый из буферов хранения изображений может содержать декодированное изображение, которое помечено как «используемое для ссылки» или сохранено для будущего вывода. Процессы, указанные в пунктах C3.2, C3.3 и C3.4, применяются последовательно, как указано ниже, и применяются независимо для каждого слоя, начиная с самого нижнего слоя в OLS, в порядке возрастания значений nuh_layer_id слоев в OLS. Когда эти процессы применяются для конкретного слоя, затрагивается только под-DPB для конкретного слоя. В описаниях этих процессов DPB относится к под-DPB для конкретного слоя, и конкретный слой упоминается как текущий слой.
Примечание: В операции синхронизации на выходе DPB декодированные изображения с PicOutputFlag, равным 1, в одной и той же единице доступа выводятся последовательно в порядке возрастания значений nuh_layer_id декодированных изображений.
Пусть изображение n и текущее изображение будут кодированным изображением или декодированным изображением единицы n доступа для конкретного значения nuh_layer_id, где n - неотрицательное целое число.
Ниже описывается удаление изображений из DPB перед декодированием текущего изображения.
Удаление изображений из DPB до декодирования текущего изображения (но после синтаксического анализа заголовка среза первого среза текущего изображения) происходит мгновенно во время удаления CPB первой единицы декодирования единицы n доступа (содержащей текущее изображение) и выполняется следующим образом:
- Процесс декодирования запускается для составления списка опорных изображений, как указано в пункте 8.3.2, и процесс декодирования запускается для маркировки опорных изображений, как указано в пункте 8.3.3.
- Когда текущая AU является AU CVSS, которая не является AU 0, применяются следующие упорядоченные этапы:
1. Переменная NoOutputOfPriorPicsFlag получается для тестируемого декодера следующим образом:
- Если значение pic_width_max_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8 или max_dec_pic__minus1 [Htid], полученное для любого изображения в текущей AU, отличается от значений pic_width_in_luma_samples, pic_height_in_luma_samples, chroma_format_idc, separate_colour_plane_, bit_depth_luma_minus8, bit_depth_chrom a_minus8 или max_dec_pic_buffering_minus1[ Htid ], , полученных, соответственно, для предыдущего изображения в одной той же CLVS, флаг NoOutputOfPriorPicsFlag может (но не должен) быть установлен тестируемым декодером на 1, независимо от значения no_output_of_prior_pics_flag.
Примечание: Хотя установка NoOutputOfPriorPicsFlag, равного no_output_of_prior_pics_flag, в этих условиях является предпочтительной, в этом случае тестируемому декодеру разрешается устанавливать NoOutputOfPriorPicsFlag в 1.
- В противном случае NoOutputOfPriorPicsFlag устанавливается равным no_output_of_prior_pics_flag.
2. Значение NoOutputOfPriorPicsFlag, полученное для тестируемого декодера, применяется для HRD, поэтому, когда значение NoOutputOfPriorPicsFlag равно 1, все буферы хранения изображений в DPB очищаются без вывода содержащихся в них изображений, и заполненность DPB устанавливается равной 0.
- Когда для любых изображений k в DPB выполняются оба следующих условия, все такие изображения k в DPB удаляются из DPB:
- изображение k помечается как «неиспользуемое для ссылки».
- изображение k имеет флаг PictureOutputFlag, равный 0, или время его вывода DPB меньше или равно времени удаления CPB первой единицы декодирования (обозначенной как единица m декодирования) текущего изображения n; то есть DpbOutputTime[ k ] меньше или равно DuCpbRemovalTime[ m ].
- Для каждого изображения, которое удаляется из DPB, заполнение DPB уменьшается на единицу.
Ниже приводится описание работы DPB в порядке вывода.
Спецификации в этом пункте применяются независимым образом к каждому набору параметров буфера декодированных изображений (DPB), выбранных, как указано в пункте C.1.
Буфер декодированных изображений концептуально состоит из подблоков DPB, и каждый подблок DPB содержит буферы хранения изображений для хранения декодированных изображений одного слоя. Каждый из буферов хранения изображений содержит декодированное изображение, помеченное как «используемое для справки» или сохраненное для будущего вывода.
Процесс вывода и удаления изображений из DPB инициируется перед декодированием текущего изображения, как указано в пункте C.5.2.2, с последующим вызовом процесса маркировки и сохранения текущего декодированного изображения, как указано в пункте C.3.4, и, наконец, с последующим вызовом процесса дополнительного выталкивания, как указано в пункте C.5.2.3. Процесс «выталкивания» указан в пункте C.5.2.4 и инициируется таким образом, как указано в пунктах C.5.2.2 и C.5.2.3.
Эти процессы применяются независимым образом для каждого слоя, начиная с нижнего слоя в OLS, в порядке возрастания значений nuh_layer_id слоев в OLS. Когда эти процессы применяются для конкретного слоя, затрагивается только под-DPB для конкретного слоя.
Примечание: В операции DPB очередности вывода, так же, как и в операции DPB синхронизации вывода, декодированные изображения с PicOutputFlag, равным 1, в одной той же единице доступа также выводятся последовательно в порядке возрастания значений nuh_layer_id декодированных изображений.
Пусть изображение n и текущее изображение будут кодированным изображением или декодированным изображением единицы n доступа для конкретного значения nuh_layer_id, где n - неотрицательное целое число.
Ниже описывается вывод и удаление изображений из DPB.
Вывод и удаление изображений из DPB перед декодированием текущего изображения (но после синтаксического анализа заголовка среза первого среза текущего изображения) происходит мгновенно тогда, когда первая единица декодирования единицы доступа, содержащей текущее изображение, удаляется из DPB и действует следующим образом:
- Инициируются процесс декодирования для составления списка опорных изображений, как указано в пункте 8.3.2, и процесс декодирования для маркировки опорных изображений, как указано в пункте 8.3.3.
- Если текущая AU представляет собой AU CVSS, которая не является AU0, применяются следующие упорядоченные этапы:
1. Переменная NoOutputOfPriorPicsFlag получается для тестируемого декодера следующим образом:
- Если значение pic_width_max_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8 или max_dec_pic__minus1 [Htid], полученное для любого изображения текущей AU, отличается от значения pic_width_in_luma_samples, pic_height_in_luma_samples, chroma_format_idc, separate_colour_plane, bit_depth_luma_minus8, bit_depth_chroma_minus8 или max_dec_pic_buffering_[ Htid ], полученного, соответственно, для предыдущего изображения в одной и той же CLVS, NoOutputOfPriorPicsFlag может (но не должен) быть установлен тестируемым декодером на 1, независимо от значения no_output_of_prior_pics_flag.
Примечание: Хотя установка флага NoOutputOfPriorPicsFlag, равного no_output_of_prior_pics_flag, при этих условиях является предпочтительной, в этом случае тестируемому декодеру разрешено устанавливать NoOutputOfPriorPicsFlag на 1.
- В противном случае NoOutputOfPriorPicsFlag устанавливается равным no_output_of_prior_pics_flag.
2. Значение NoOutputOfPriorPicsFlag, полученное для тестируемого декодера, применяется для HRD следующим образом:
- Если флаг NoOutputOfPriorPicsFlag равен 1, все буферы хранения изображений в DPB очищаются без вывода содержащихся в них изображений, и заполнение DPB устанавливается равным 0.
- В противном случае (когда значение NoOutputOfPriorPicsFlag равно 0) все буферы хранения изображений, содержащие изображение, которое помечено как «не нужное для вывода» и «не используется для ссылки», очищаются (без вывода), и все очищенные буферы хранения изображений в DPB очищаются путем многократного вызова процесса «выталкивания», указанного в пункте C.5.2.4, и заполнение DPB устанавливается равным 0.
- В противном случае (когда текущее изображение не является изображением CLVSS) все буферы хранения изображений, содержащие изображение, которое помечено как «не нужное для вывода» и «не используется для ссылки», очищаются (без вывода). Для каждого очищенного буфера хранения изображений значение заполнения DPB уменьшается на единицу. Когда одно или более из следующих условий истинны, повторно вызывается процесс «выталкивания», указанный в пункте C.5.2.4, при дальнейшем уменьшении заполнения DPB на единицу для каждого дополнительного буфера хранения изображений, который очищается, до тех пор, пока не будет выполнено одно из следующих условий:
Количество изображений в DPB, которые помечены как «необходимые для вывода», больше, чем max_num_reorder_pics[ Htid ].
Значение max_latency_increase_plus1[ Htid ] не равно 0, и в DPB имеется по меньшей мере одно изображение, помеченное как «необходимое для вывода», для которого ассоциированная переменная PicLatencyCount больше или равна MaxLatencyPictures[ Htid ].
Количество изображений в DPB больше или равно max_dec_pic_buffering_minus1[Htid] + 1.
Ниже приведено дополнительное описание процесса выталкивания.
Процессы, указанные в этом разделе, происходят мгновенно тогда, когда последняя единица декодирования из единицы n доступа, содержащей текущее изображение, удаляется из CPB.
Когда текущее изображение имеет флаг PictureOutputFlag, равный 1, для каждого изображения в DPB, которое помечено как «необходимое для вывода» и следует за текущим изображением в порядке вывода, ассоциированная переменная PicLatencyCount устанавливается равной PicLatencyCount + 1.
Применяется следующее:
- Если текущее декодированное изображение имеет флаг PictureOutputFlag, равный 1, оно помечается как «необходимое для вывода», и ассоциированная с ним переменная PicLatencyCount устанавливается равной 0.
- В противном случае (когда текущее декодированное изображение имеет значение PictureOutputFlag, равное 0) оно помечается как «не нужное для вывода».
Когда одно или более из следующих условий истинны, процесс «выталкивания», указанный в пункте C.5.2.4, вызывается повторно до тех пор, пока не будет выполнено одно из следующих условий:
- Количество изображений в DPB, помеченных как «необходимые для вывода», больше, чем max_num_reorder_pics[ Htid ].
- max_latency_increase_plus1[ Htid ] не равно 0 и в DPB есть хотя бы одно изображение, помеченное как «необходимое для вывода», для которого ассоциированная с ним переменная PicLatencyCount больше или равна MaxLatencyPictures[ Htid ].
Ниже приводится описание процесса выталкивания.
Процесс «выталкивания» состоит из следующих упорядоченных этапов:
Изображение или изображения, которые выводятся первыми, выбираются как имеющие наименьшее значение PicOrderCntVal из всех изображений в DPB, помеченных как «необходимые для вывода».
Каждое из этих изображений, в порядке возрастания nuh_layer_id, кадрируется с использованием окна кадрирования, обеспечивающего соответствие, для изображения, кадрированное изображение выводится, и изображение помечается как «не нужное для вывода».
Каждый буфер хранения изображений, который содержит изображение, помеченное как «неиспользуемое для ссылки», и которое было одним из кадрированных и выведенных изображений, очищается, и заполненность ассоциированного под-DPB уменьшается на единицу.
Примечание: Для любых двух изображений picA и picB, которые принадлежат к одной и той же CVS и выводятся в «процессе выталкивания», когда picA получается раньше, чем picB, значение PicOrderCntVal для picA меньше значения PicOrderCntVal для picB.
Процесс извлечения битового подпотока выглядит следующим образом.
Входными данными этого процесса являются битовый поток inBitstream, целевой индекс OLS targetOlsIdx и целевое наибольшее значение TemporalId tIdTarget.
Выходными данными этого процесса являются битовый подпоток outBitstream.
Требование соответствия битового потока для входного битового потока состоит в том, что любой выходной битовый подпоток, являющийся результатом процесса, заданного в этом пункте, с битовым потоком targetOlsIdx, равным индексу списка OLS, заданного VPS, и tIdTarget, равным любому значению в диапазоне от 0 до 7 включительно в качестве входных данных, и который удовлетворяет следующим условиям, должен быть соответствующим битовым потоком.
- Выходной битовый подпоток содержит по меньшей мере одну единицу NAL VCL с nuh_layer_id, равным каждому из значений nuh_layer_id в LayerIdInOls[ targetOlsIdx ].
- Выходной битовый подпоток содержит по меньшей мере одну единицу NAL VCL с TemporalId, равным tIdTarget.
Примечание: Соответствующий битовый поток содержит одну или более единиц NAL кодированного среза с TemporalId, равным 0, но не обязательно должен содержать единицы NAL кодированного среза с nuh_layer_id, равным 0.
Выходной битовый подпоток OutBitstream получается следующим образом.
- Битовый поток outBitstream устанавливается идентичным битовому потоку inBitstream.
- Удалить из outBitstream все единицы NAL с TemporalId больше, чем tIdTarget.
- Удалить из outBitstream все единицы NAL с nuh_layer_id, не включенные в список LayerIdInOls[ targetOlsIdx ].
- Удалить из outBitstream все единицы NAL SEI, которые содержат масштабируемое вкладывающее SEI-сообщение, которое имеет nesting_ols_flag, равный 1, и у которого отсутствует значение i в диапазоне от 0 до nesting_num_olss_minus1 включительно, чтобы NestingOlsIdx[ i ] равнялось targetOlsIdx.
- Когда targetOlsIdx больше 0, удалить из outBitstream все единицы NAL SEI, которые содержат немасштабируемое вложенное SEI-сообщение с payloadType, равным 0 (период буферизации), 1 (таймирование изображения) или 130 (информация единицы декодирования).
Синтаксис масштабируемого вкладывающего SEI-сообщения предоставлен следующим образом.
Примерная общая семантики полезной нагрузки SEI выглядит следующим образом.
Следующее применимо к применяемым слоям или OLS немасштабируемых вложенных SEI-сообщений.
- Для немасштабируемого вложенного SEI-сообщения, когда payloadType равно нулю (период буферизации), единице (таймирование изображения) или 130 (информация единицы декодирования), немасштабируемое вложенное SEI-сообщение применяется только к 0-й OLS.
- Для немасштабируемого вложенного SEI-сообщения, когда payloadType равно любому значению среди VclAssociatedSeiList, немасштабируемое вложенное SEI-сообщение применяется только к слою, для которого единицы NAL VCL имеют nuh_layer_id, равный nuh_layer_id единицы NAL SEI, содержащей SEI-сообщение.
Требование соответствия битового потока состоит в том, что для значения nuh_layer_id блоков SEI NAL применяются следующие ограничения:
- Когда немасштабируемое вложенное SEI-сообщение имеет значение payloadType, равное 0 (период буферизации), 1 (таймирование изображения) или 130 (информация единицы декодирования), единица NAL SEI, содержащая немасштабируемое вложенное SEI-сообщение nuh_layer_id, должна быть равна vps_layer_id[ 0 ].
- Когда немасштабируемое вложенное SEI-сообщение имеет значение payloadType, равное любому значению из списка VclAssociatedSeiList, единица NAL SEI, содержащая немасштабируемое вложенное SEI-сообщение, должна иметь nuh_layer_id, равный значению nuh_layer_id единицы NAL VCL, ассоциированной с единицей NAL SEI.
- Единица NAL SEI, содержащая масштабируемое вкладывающее SEI-сообщение, должна иметь nuh_layer_id, равный наименьшему значению nuh_layer_id из всех слоев, к которым применяется масштабируемое вложенное SEI-сообщение (когда флаг nesting_ols_flag масштабируемого вкладывающего SEI-сообщения равен 0), или наименьшему значению nuh_layer_id из всех слоев в OLS, к которым применяется масштабируемое вложенное SEI-сообщение (когда флаг nesting_ols_flag масштабируемого вкладывающего SEI-сообщения равен 1).
Предусмотрена семантика масштабируемого вкладывающего SEI-сообщения.
Масштабируемое вкладывающее SEI-сообщение обеспечивает механизм для ассоциирования SEI-сообщений с конкретными OLS или с конкретными слоями.
Масштабируемое вкладывающее SEI-сообщение содержит одно или более SEI-сообщений. SEI-сообщения, содержащиеся в масштабируемом вкладывающем SEI-сообщении, также называются масштабируемыми вложенными SEI-сообщениями.
Требование соответствия битового потока состоит в том, что для содержания SEI-сообщений в масштабируемом вкладывающем SEI-сообщении применяются следующие ограничения:
- SEI-сообщение с типом полезной нагрузки, равным 132 (хэш декодированного изображения) или 133 (масштабируемое вложение), не должно содержаться в масштабируемом вкладывающем SEI-сообщении.
- Когда масштабируемое вкладывающее SEI-сообщение содержит SEI-сообщение о периоде буферизации, синхронизации изображения или информации единицы декодирования, масштабируемое вкладывающее SEI-сообщение не должно содержать никакого другого SEI-сообщения с payloadType, не равным 0 (период буферизации), 1 (синхронизации изображения) или 130 (информация единицы декодирования).
Требование соответствия битового потока состоит в том, что для значения nal_unit_type единицы NAL SEI, содержащего масштабируемое вкладывающее SEI-сообщение, применяются следующие ограничения:
- Когда масштабируемое вкладывающее SEI-сообщение содержит SEI-сообщение, которое имеет значение payloadType, равное 0 (период буферизации), 1 (таймирование изображения), 130 (информация единицы декодирования), 145 (зависимый указатель RAP) или 168 (информация о кадре-поле), единица NAL SEI, содержащая масштабируемое вкладывающее SEI-сообщение, должна иметь nal_unit_type, равный PREFIX_SEI_NUT.
Значение nesting_ols_flag, равное 1, указывает то, что масштабируемые вложенные SEI-сообщения применяются к конкретным OLS. Значение nesting_ols_flag, равное 0, указывает то, что масштабируемые вложенные SEI-сообщения применяются к конкретным слоям.
Требованием соответствия битового потока являются следующие ограничения, применяемые к значению nesting_ols_flag:
- Когда масштабируемое вкладывающее SEI-сообщение содержит SEI-сообщение, которое имеет значение payloadType, равное 0 (период буферизации), 1 (таймирование изображения) или 130 (информация единицы декодирования), значение nesting_ols_flag должно быть равно 1.
- Если масштабируемое вкладывающее SEI-сообщение содержит SEI-сообщение, которое имеет payloadType, равный значению в VclAssociatedSeiList, значение nesting_ols_flag должно быть равно 0.
nesting_num_olss_minus1 плюс 1 указывает количество OLS, к которым применяются масштабируемые вложенные SEI-сообщения. Значение nesting_num_olss_minus1 должно находиться в диапазоне от 0 до TotalNumOlss - 1 включительно.
nesting_ols_idx_delta_minus1[ i ] используется для получения переменной NestingOlsIdx[ i ], которая указывает индекс OLS i-го OLS, к которому применяются масштабируемые вложенные SEI-сообщения, когда nesting_ols_flag равна 1. Значение nesting_ols_idx_delta_minus1[i ] должно находиться в диапазоне от 0 до TotalNumOlss - 2 включительно.
Переменная NestingOlsIdx[ i ] получается следующим образом.
if( i = = 0 )
NestingOlsIdx[ i ] = nesting_ols_idx_delta_minus1[ i ]
else
NestingOlsIdx[ i ] = NestingOlsIdx[ i - 1 ] + nesting_ols_idx_delta_minus1[ i ] + 1
Значение nesting_all_layers_flag, равное 1, указывает то, что масштабируемые вложенные SEI-сообщения применяются ко всем слоям, у которых nuh_layer_id больше или равен nuh_layer_id текущей единицы NAL SEI. Значение nesting_all_layers_flag, равное 0, указывает то, что масштабируемые вложенные SEI-сообщения могут применяться или не применяться ко всем слоям, у которых nuh_layer_id больше или равен nuh_layer_id текущей единицы NAL SEI.
nesting_num_layers_minus1 плюс 1 указывает количество слоев, к которым применяются масштабируемые вложенные SEI-сообщения. Значение nesting_num_layers_minus1 должно находиться в диапазоне от 0 до vps_max_layers_minus1 - GeneralLayerIdx[nuh_layer_id] включительно, где nuh_layer_id представляет собой nuh_layer_id текущей единицы NAL SEI.
nesting_layer_id[ i ] указывает значение nuh_layer_id i-го слоя, к которому применяются масштабируемые вложенные SEI-сообщения, когда значение nesting_all_layers_flag равно 0. Значение nesting_layer_id[ i ] должно быть больше, чем nuh_layer_id, где nuh_layer_id представляет собой nuh_layer_id текущей единицы NAL SEI.
Когда nesting_ols_flag равно 0, переменная NestingNumLayers, указывающая номер слоя, к которому применяются масштабируемые вложенные SEI-сообщения, и список NestingLayerId[ i ] для i в диапазоне от 0 до NestingNumLayers - 1 включительно, задающий список значений nuh_layer_id слоев, к которым применяются масштабируемые вложенные SEI-сообщения, получаются следующим образом, где nuh_layer_id представляет собой nuh_layer_id текущей единицы NAL SEI.
if( nesting_all_layers_flag ) {
NestingNumLayers =
ps_max_layers_minus1 + 1 - GeneralLayerIdx[ nuh_layer_id ]
for( i = 0; i < NestingNumLayers; i ++)
NestingLayerId[ i ] = vps_layer_id[ GeneralLayerIdx[ nuh_layer_id ] + i ]
} else {
NestingNumLayers = nesting_num_layers_minus1 + 1
for( i = 0; i < NestingNumLayers; i ++)
NestingLayerId[ i ] = ( i = = 0 ) ? nuh_layer_id : nesting_layer_id[ i ]
}
}
nesting_num_seis_minus1 плюс 1 указывает количество масштабируемых вложенных SEI-сообщений. Значение nesting_num_seis_minus1 должно находиться в диапазоне от 0 до 73 включительно.
Значение nesting_zero_bit должно быть равно 0.
На фиг. 10 показано схематичное представление устройства 1000 для кодирования видео (например, видеокодера 300 или видеодекодера 400) в соответствии с вариантом осуществления настоящего раскрытия. Устройство 1000 для кодирования видео подходит для реализации раскрытых вариантов осуществления, которые описаны в данном документе. Устройство 1000 для кодирования видео содержит входные порты 1010 и блоки (Rx) 1020 приемника для приема данных; процессор, логический блок или центральный процессор (CPU) 1030 для обработки данных; блоки (Tx) 1040 передатчика и выходные порты 1050 для передачи данных; и память 1060 для хранения данных. Устройство 1000 для кодирования видео может также содержать оптико-электрические (OE) компоненты и электрооптические (EO) компоненты, подключенные к входным портам 1010, приемным блокам 1020, блокам 1040 передачи и выходным портам 1050 для вывода или ввода оптических или электрических сигналов.
Процессор 1030 реализован с помощью программно-аппаратных средств. Процессор 1030 может быть реализован в виде одной или более микросхем CPU, ядер (например, в виде многоядерного процессора), программируемых пользователем вентильных матриц (FPGA), специализированных интегральных схем (ASIC) и процессоров цифровых сигналов (DSP). Процессор 1030 взаимодействует с входными портами 1010, блоками 1020 приемника, блоками 1040 передатчика, выходными портами 1050 и памятью 1060. Процессор 1030 содержит модуль 1070 кодирования. Модуль 1070 кодирования реализует раскрытые варианты осуществления, описанные выше. Например, модуль 1070 кодирования реализует, обрабатывает, подготавливает или обеспечивает различные функции кодека. Таким образом, включение модуля 1070 кодирования обеспечивает существенное улучшение функциональных возможностей устройства 1000 для кодирования видео и приводит к переводу устройства 1000 для кодирования видео в другое состояние. Альтернативно, модуль 1070 кодирования реализован в виде инструкций, хранящихся в памяти 1060 и исполняемым процессором 1030.
Устройство 1000 кодирования видео может также включать в себя устройства 1080 ввода и/или вывода (I/O) для передачи данных пользователю и от пользователя. Устройства 1080 ввода/вывода могут включать в себя устройства вывода, такие как дисплей для отображения видеоданных, динамики для вывода аудиоданных и т.д. Устройства 1080 ввода/вывода также могут включать в себя устройства ввода, такие как клавиатура, мышь, шаровой манипулятор и т.д. и/или соответствующие интерфейсы для взаимодействия с такими устройствами вывода.
Память 1060 содержит один или более дисков, ленточных накопителей и твердотельных накопителей и может использоваться в качестве устройства для хранения данных с переполнением для хранения программ, когда такие программы выбираются для исполнения, и для хранения инструкций и данных, которые считываются во время исполнения программы. Память 1060 может быть энергозависимой и/или энергонезависимой и может представлять собой постоянную память (RAM), оперативную память (ROM), троичную память с адресацией по содержимому (TCAM) и/или статическую оперативную память (SRAM).
На фиг. 11 показано схематичное представление варианта осуществления средства 1100 кодирования. В варианте осуществления средство 1100 кодирования реализовано в устройстве 1102 для кодирования видео (например, видеокодере 300 или видеодекодере 400). Устройство 1102 для кодирования видео включает в себя средство 1101 приема. Средство 1101 приема выполнено с возможностью приема изображения для кодирования или приема битового потока для декодирования. Устройство 1102 для кодирования видео включает в себя средство 1107 передачи, подключенное к средству 1101 приема. Средство 1107 передачи выполнено с возможностью передачи битового потока в декодер или передачи декодированного изображения в средство отображения (например, в одно из устройств 1080 ввода-вывода).
Устройство 1102 для кодирования видео включает в себя средство 1103 хранения. Средство 1103 хранения подключено по меньшей мере к одному из: средства 1101 приема или средства 1107 передачи. Средство 1103 хранения выполнено с возможностью хранения инструкций. Устройство 1102 для кодирования видео также включает в себя средство 1105 обработки. Средство 1105 обработки подключено к средству 1103 хранения. Средство 1105 обработки выполнено с возможностью исполнения инструкций, хранящихся в средстве 1103 хранения, для выполнения способов, раскрытых в данном документе.
Кроме того, следует также понимать, что этапы примерных способов, изложенных в данном документе, не обязательно должны выполняться в описанном порядке, и порядок этапов таких способов следует рассматривать только как примерный. Аналогичным образом, в такие способы могут быть включены дополнительные этапы, и некоторые этапы могут быть исключены или объединены в способах, соответствующих различным вариантам осуществления настоящего раскрытия.
Несмотря на то, что в настоящем раскрытии было представлено несколько вариантов осуществления, должно быть понятно, что раскрытые системы и способы могут быть воплощены в многих других конкретных формах без отклонения от сущности или объема настоящего раскрытия. Настоящие примеры следует рассматривать как иллюстративные, и не ограничительные, и примеры не имеют намерения ограничивать изобретение деталями, приведенными в данном документе. Например, различные элементы или компоненты могут быть объединены или интегрированы в другую систему, или некоторые функции могут быть опущены или не реализованы.
В дополнение к этому, технологии, системы, подсистемы и способы, описанные и проиллюстрированные в различных вариантах осуществления как дискретные или отдельные, могут быть объединены или интегрированы с другими системами, компонентами, технологиями или способами, что не выходит за рамки объема настоящего раскрытия. Другие элементы, показанные или рассмотренные как напрямую соединенные или связанные друг с другом, могут быть косвенно соединены или связаны через какой-либо интерфейс, устройство или промежуточный компонент, будь то электрически, механически или иным образом. Другие примеры изменений, замен и модификаций могут быть установлены специалистом в данной области техники и могут быть осуществлены без отклонения от сущности и объема, раскрытых в данном документе.
название | год | авторы | номер документа |
---|---|---|---|
ПАРАМЕТРЫ HRD НА УРОВНЕ ПОСЛЕДОВАТЕЛЬНОСТИ | 2020 |
|
RU2825440C1 |
ТЕСТЫ НА СООТВЕТСТВИЕ HRD ДЛЯ OLS | 2020 |
|
RU2820076C1 |
ПРЕДОТВРАЩЕНИЕ ИЗБЫТОЧНОЙ СИГНАЛИЗАЦИИ В МНОГОСЛОЙНЫХ БИТОВЫХ ПОТОКАХ ВИДЕО | 2020 |
|
RU2822511C1 |
УПРАВЛЕНИЕ МАСШТАБИРУЕМЫМ ВКЛАДЫВАЕМЫМ SEI-СООБЩЕНИЕМ | 2020 |
|
RU2824781C1 |
ПАРАМЕТРЫ HRD ДЛЯ ТЕСТИРОВАНИЯ НА СООТВЕТСТВИЕ НА ОСНОВЕ СЛОЯ | 2020 |
|
RU2821048C1 |
ОГРАНИЧЕНИЯ НАБОРА ПАРАМЕТРОВ ЕДИНИЦ NAL НА ОСНОВЕ УРОВНЯ | 2020 |
|
RU2822533C1 |
ОГРАНИЧЕНИЯ ВРЕМЕННОГО ИДЕНТИФИКАТОРА ДЛЯ СООБЩЕНИЙ SEI | 2020 |
|
RU2823614C1 |
СИГНАЛИЗАЦИЯ ИЗМЕНЕНИЯ НАБОРОВ УРОВНЕЙ ВЫВОДА | 2014 |
|
RU2633106C2 |
СПОСОБ ДЛЯ ДЕКОДИРОВАНИЯ БИТОВОГО ПОТОКА ВИДЕО | 2014 |
|
RU2746310C2 |
СПОСОБ ДЛЯ ДЕКОДИРОВАНИЯ БИТОВОГО ПОТОКА ВИДЕО | 2021 |
|
RU2825853C2 |
Изобретение относится к технологиям кодирования видео. Техническим результатом является повышение эффективности кодирования видео. Результат достигается тем, что принимают битовый подпоток, имеющий набор параметров последовательности (SPS) с синтаксической структурой буфера декодированных изображений (DPB) для набора слоев вывода (OLS) с одним единственным слоем; устанавливают количество слоев в OLS на значение, равное единице, на основании того, что OLS имеет один единственный слой; получают синтаксическую структуру DPB для OLS с одним слоем из SPS, когда количество слоев в OLS равно единице; и декодируют изображение одного единственного слоя с использованием синтаксической структуры DPB для получения декодированного изображения. 5 н. и 13 з.п. ф-лы, 11 ил., 1 табл.
1. Способ декодирования, содержащий этапы, на которых:
принимают битовый подпоток, имеющий синтаксическую структуру буфера декодированных изображений (DPB), причем когда синтаксическая структура DPB содержится в наборе параметров видео (VPS), наборы слоев вывода (OLSs), к которым применяется синтаксическая структура DPB, определены посредством VPS, а когда синтаксическая структура DPB содержится в наборе параметров последовательности (SPS), синтаксическая структура DPB применяется к OLS, который имеет только один слой;
получают синтаксическую структуру DPB для OLS с одним слоем из SPS или синтаксическую структуру DPB для OLS из VPS; и
декодируют изображение из OLS, имеющего только один слой, или из OLSs с использованием синтаксической структуры DPB для получения декодированного изображения.
2. Способ по п. 1, в котором синтаксическая структура DPB обозначена как dpb_parameters().
3. Способ по п. 1 или 2, в котором указанным только одним слоем является i-й слой, а OLS является i-м OLS.
4. Способ по любому из пп. 1-3, в котором синтаксическая структура DPB присутствует в i-й синтаксической структуре dpb_parameters() в SPS.
5. Способ по любому из пп. 1-4, в котором битовый подпоток не включает в себя набор параметров видео (VPS), когда синтаксическая структура DPB содержится в SPS.
6. Способ по любому из пп. 1-5, дополнительно содержащий этап, на котором сохраняют декодированное изображение в DPB перед отображением.
7. Способ по любому из пп. 1-6, в котором на SPS ссылается указанный только один слой в OLS.
8. Способ по любому из пп. 1-7, дополнительно содержащий этап, на котором отображают декодированное изображение на дисплее электронного устройства.
9. Устройство декодирования, содержащее:
приемник, выполненный с возможностью приема битового подпотока, имеющего синтаксическую структуру буфера декодированных изображений (DPB), причем когда синтаксическая структура DPB содержится в наборе параметров видео (VPS), наборы слоев вывода (OLSs), к которым применяется синтаксическая структура DPB, определены посредством VPS, а когда синтаксическая структура DPB содержится в наборе параметров последовательности (SPS), синтаксическая структура DPB применяется к OLS, который имеет только один слой; и
процессор, подключенный к памяти, причем процессор выполнен с возможностью исполнения инструкций, вызывающих выполнение, устройством декодирования:
получения синтаксической структуры DPB для OLS только с одним слоем из SPS или синтаксической структуры DPB для OLSs из VPS; и
декодирования изображения из OLS только с одним слоем или OLSs с использованием синтаксической структуры DPB для получения декодированного изображения.
10. Устройство декодирования по п. 9, в котором синтаксическая структура DPB обозначена как dpb_parameters(), причем указанным только одним слоем является i-й слой, при этом OLS является i-м OLS.
11. Устройство декодирования по п. 9 или 10, в котором синтаксическая структура DPB присутствует в i-й синтаксической структуре dpb_parameters() в SPS.
12. Устройство декодирования по любому из пп. 9-11, в котором битовый подпоток не включает в себя набор параметров видео (VPS), когда синтаксическая структура DPB содержится в SPS.
13. Устройство декодирования по любому из пп. 9-12, в котором на SPS ссылается указанный только один слой в OLS.
14. Устройство декодирования по любому из пп. 9-13, дополнительно содержащее дисплей, выполненный с возможностью отображения декодированного изображения.
15. Устройство кодирования, содержащее:
приемник, выполненный с возможностью приема изображения для кодирования или приема битового потока для декодирования;
передатчик, соединенный с приемником, причем передатчик выполнен с возможностью передачи битового потока в декодер или передачи декодированного изображения на дисплей;
память, соединенную по меньшей мере с одним из: приемника и передатчика, причем память выполнена с возможностью хранения инструкций; и
процессор, соединенный с памятью, причем процессор выполнен с возможностью исполнения инструкций, хранящихся в памяти, для реализации способа по любому из пп. 1-8.
16. Устройство кодирования по п. 15, дополнительно содержащее дисплей, выполненный с возможностью отображения декодированного изображения.
17. Система кодирования/декодирования видео, содержащая:
кодер; и
декодер, соединенный с возможностью связи с кодером, причем кодер или декодер включает в себя устройство декодирования или устройство кодирования по любому из пп. 9-16.
18. Средство кодирования, содержащее:
средство приема, выполненное с возможностью приема изображения для кодирования или приема битового потока для декодирования;
средство передачи, соединенное со средством приема, причем средство передачи выполнено с возможностью передачи битового потока на средство декодирования или передачи декодированного изображения на средство отображения;
средство хранения, соединенное меньшей мере с одним из: средства приема и средства передачи, причем средство хранения выполнено с возможностью хранения инструкций; и
средство обработки, соединенное со средством хранения, причем средство обработки выполнено с возможностью исполнения инструкций, хранящихся в средстве хранения, для реализации способа по любому из пп. 1-8.
US 2016366428 A1, 2016.12.15 | |||
US 2014301484 A1, 2014.10.09 | |||
US 2017006300 A1, 2017.01.05 | |||
US 2016261878 A1, 2016.09.08 | |||
US 2019052910 A1, 2019.02.14 | |||
US 9819948 B2, 2017.11.14 | |||
Способ и устройство для кодирования видеоинформации | 2013 |
|
RU2612577C2 |
Авторы
Даты
2024-06-24—Публикация
2020-10-06—Подача