Область техники
[0001] Настоящее изобретение относится к устройству, способу и компьютерной программе для видеокодирования и видеодекодирования.
Предпосылки создания изобретения
[0002] Стандарты и спецификации видеокодирования, как правило, допускают разделение, в кодере, кодированного изображения на подмножества. В видеокодировании разбиением может называться разделение изображения, или подобласти изображения, на подмножества (блоки) таким образом, что каждый элемент изображения, или подобласти изображения, находится только в одном подмножестве (блоке). К примеру, в стандарте H.265/HEVC введено понятие пакета кодового дерева (coding tree unit, CTU), который по умолчанию имеет размер 64×64 пикселя. CTU может либо содержать единственный блок кодирования (coding unit, CU), либо может быть рекурсивно разбит на множество менее крупных блоков кодирования, CU, с минимальным размером 8×8 пикселей, в виде квадродерева. В стандарте H.265/HEVC также существуют тайлы, которые являются прямоугольными и содержат целое количество CTU, а также слайсы, которые определяют на основе сегментов слайсов, содержащих целое количество пакетов кодового дерева, расположенных последовательно в порядке сканирования тайла, и входящих в состав одного блока NAL.
[0003] Универсальное видеокодирование (Versatile Video Coding, VVC) (MPEG-I Part 3), также известное под обозначением ITU-T Н.266, - это стандарт видеокодирования, разрабатываемый Объединенной командой экспертов по видео (Joint Video Experts Team, JVET) Группы экспертов по движущемуся изображению (Moving Picture Experts Group, MPEG) и Группы экспертов по видеокодированию (Video Coding Experts Group, VCEG) Международного союза электросвязи (International Telecommunication Union, ITU) и призванный прийти на смену стандарту HEVC/H.265. Схемы разбиения в стандарте VVC включают не только тайлы, но также и «кирпичи» (bricks), которые могут включать одну или более строк CTU внутри тайла. Введение кирпичей также влияет на определение слайсов.
[0004] В результате была создана достаточно сложная синтаксическая структура для сигнализации различных вариантов разбиения на тайлы и кирпичи, во многих аспектах не являющаяся оптимальной. В частности, это касается битрейта, необходимого для подобной сигнализации.
Сущность изобретения
[0005] Далее в настоящем документе будет рассмотрен улучшенный способ кодирования, призванный, по меньшей мере частично, решить описанные выше проблемы.
[0006] В соответствии с первым аспектом настоящего изобретения способ включает кодирование, в битовом потоке или наряду с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; логическое получение, если обнаружены строки кирпичей, находящиеся на одной линии на протяжении изображения, потенциальных строк тайлов; логическое получение или указание, является ли граница потенциальной строки тайлов границей строки тайлов; и кодирование одного или более изображений в битовый поток с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0007] В соответствии со вторым аспектом настоящего изобретения способ включает следующие шаги:
a) указание количества разделов, подлежащих назначению;
b) определение количества блоков, подлежащих назначению в разделы;
c) указание, является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так,
d) указание количества блоков, подлежащих назначению в следующий раздел, и
e) повтор шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
[0008] В соответствии с одним из вариантов осуществления настоящего изобретения, упомянутые повторяющиеся шаги с) и d) выполняют, пока количество разделов, все еще подлежащих назначению, остается большим единицы.
[0009] В соответствии с одним из вариантов осуществления настоящего изобретения, способ дополнительно включает определение, делится ли количество блоков, все еще подлежащих назначению, на количество разделов, все еще подлежащих назначению; и если это так, указание, является ли количество блоков, все еще подлежащих назначению, назначаемым равномерно в количество разделов, все еще подлежащих назначению.
[0010] В соответствии с одним из вариантов осуществления настоящего изобретения, если логически получено или указано, что количество блоков, все еще подлежащих назначению, не является назначаемым равномерно в количество разделов, все еще подлежащих назначению, или если количество блоков, все еще подлежащих назначению, не делится без остатка на количество разделов, все еще подлежащих назначению, после шага d) выполняют следующие шаги:
d1) уменьшение количества блоков, все еще подлежащих назначению в разделы, на указанное количество; и
d2) уменьшение количества разделов, все еще подлежащих назначению, на единицу.
[0011] В соответствии с одним из вариантов осуществления настоящего изобретения, упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей в одном или более столбцах тайлов, строки кирпичей в тайле.
[0012] В соответствии с одним из вариантов осуществления настоящего изобретения, упомянутые блоки являются прямоугольными блоками отсчетов изображения.
[0013] В соответствии с третьим аспектом настоящего изобретения устройство включает: средства кодирования, в битовом потоке или наряду с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; средства логического получения, в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении всего изображения, потенциальных строк тайлов; средства логического получения или указания, является ли граница потенциальной строки тайлов границей строки тайлов; и средства кодирования одного или более изображений в битовый поток с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0014] В соответствии с четвертым аспектом настоящего изобретения устройство включает: средства указания количества разделов, подлежащих назначению; средства определения количества блоков, подлежащих назначению в разделы; средства указания, является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; средства указания, в ответ на то, что упомянутое количество блоков, подлежащих назначению, не является назначаемым равномерно в упомянутое количество разделов, количества блоков, подлежащих назначению в следующий раздел, и средства повтора упомянутых операций указания до тех пор, пока все блоки не будут назначены в разделы.
[0015] В соответствии с пятым аспектом настоящего изобретения способ включает: декодирование, из битового потока или наряду с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; логическое получение, в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении всего изображения, потенциальных строк тайлов; логическое получение или указание, является ли граница потенциальной строки тайлов границей строки тайлов; и декодирование одного или более изображений из битового потока с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0016] В соответствии с шестым аспектом настоящего изобретения способ включает следующие шаги:
a) декодирование указания количества разделов, подлежащих назначению;
b) определение количества блоков, подлежащих назначению в разделы;
c) определение, является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так,
d) определение количества блоков, подлежащих назначению в следующий раздел, и
е) повтор шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
[0017] В соответствии с седьмым аспектом настоящего изобретения устройство включает: средства декодирования, из битового потока или наряду с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; средства логического получения, в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении всего изображения, потенциальных строк тайлов; средства логического получения или указания, является ли граница потенциальной строки тайлов границей строки тайлов; и и средства декодирования одного или более изображений из битового потока с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0018] В соответствии с восьмым аспектом настоящего изобретения устройство включает: средства декодирования указания количества разделов, подлежащих назначению; средства определения количества блоков, подлежащих назначению в разделы; средства определения, является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; средства определения, в ответ на то, что упомянутое количество блоков, подлежащих назначению, не является назначаемым равномерно в упомянутое количество разделов, количества блоков, подлежащих назначению в следующий раздел, и средства повтора упомянутых операций определения до тех пор, пока все блоки не будут назначены в разделы.
[0019] Дополнительные аспекты настоящего изобретения относятся к устройствам, включающим: по меньшей мере один процессор и по меньшей мере одну память, при этом в упомянутой по меньшей мере одной памяти хранят код, который при исполнении упомянутым по меньшей мере одним процессором обеспечивает выполнение, устройством, по меньшей мере описанных выше способов и одного или более связанных с ними вариантов осуществления настоящего изобретения.
Краткое описание чертежей
[0020] Для более детального понимания настоящего изобретения оно будет описано далее с помощью примеров, показанных на приложенных чертежах, где:
[0021] на фиг. 1 эскизно проиллюстрировано электронное устройство, в котором применяются варианты осуществления настоящего изобретения;
[0022] на фиг. 2 эскизно проиллюстрировано пользовательское оборудование, подходящее для применения в вариантах осуществления настоящего изобретения;
[0023] на фиг. 3 также эскизно проиллюстрированы электронные устройства, в которых применяются варианты осуществления настоящего изобретения и которые соединены при помощи проводных и беспроводных сетевых соединений;
[0024] на фиг. 4 эскизно проиллюстрирован кодер, подходящий для реализации некоторых из вариантов осуществления настоящего изобретения;
[0025] на фиг. 5а, 5b, 5с показаны примеры разбиения изображения на пакеты кодового дерева (CTU), тайлы, кирпичи и слайсы;
[0026] на фиг. 6 показана синтаксическая структура для разбиения на слайсы, тайлы и кирпичи в соответствии с версией 5 проекта H.266/VVC (H.266/VVC Draft 5);
[0027] на фиг. 7 показана блок-схема алгоритма для способа кодирования в соответствии с одним из аспектов осуществления настоящего изобретения;
[0028] на фиг. 8 показана блок-схема алгоритма для способа кодирования в соответствии с еще одним из аспектов осуществления настоящего изобретения;
[0029] на фиг. 9 показана блок-схема алгоритма для способа кодирования в соответствии с одним из вариантов осуществления настоящего изобретения;
[0030] на фиг. 10а, 10b, 10с показаны примеры разбиений на тайлы и кирпичи;
[0031] на фиг. 11 показана эскизная блок-схема декодера, подходящего для реализации некоторых из вариантов осуществления настоящего изобретения;
[0032] на фиг. 12 показана блок-схема алгоритма для способа декодирования в соответствии с одним из вариантов осуществления настоящего изобретения;
[0033] на фиг. 13 показана блок-схема алгоритма для способа декодирования в соответствии с еще одним из вариантов осуществления настоящего изобретения; и
[0034] на фиг. 14 показана эскизная блок-схема типовой мультимедийной системы связи, в которой могут быть реализованы различные варианты осуществления настоящего изобретения.
Подробное описание некоторых примеров осуществления изобретения
[0035] Ниже будут более подробно рассмотрены соответствующее устройство и возможные механизмы инициирования переключения порта просмотра. С этой целью обратимся сначала к фиг. 1 и 2. На фиг. 1 показана блок-схема системы видеокодирования в соответствии с одним из вариантов осуществления настоящего изобретения, имеющая вид блок-схемы типовой аппаратуры или электронного устройства 50, которое может включать в свой состав кодек, соответствующий одному из вариантов осуществления настоящего изобретения. На фиг. 2 показана схема устройства в соответствии с одним из примеров осуществления настоящего изобретения. Далее будут описаны элементы фиг. 1 и 2.
[0036] Электронное устройство 50 может, например, быть мобильным терминалом или пользовательским оборудованием системы беспроводной связи. Однако нужно понимать, что варианты осуществления настоящего изобретения могут быть реализованы в любом электронном устройстве или аппаратуре, где требуется кодирование и декодирование, или только кодирование, или же только декодирование видеоизображений.
[0037] Устройство 50 может иметь в своем составе корпус 30 для размещения и защиты устройства. Устройство 50 может также включать дисплей 32 в форме дисплея на жидких кристаллах. В других вариантах осуществления настоящего изобретения упомянутый дисплей может быть выполнен по любой технологии, подходящей для отображения изображений или видеоинформации. Устройство 50 может также включать клавиатуру 34. В других вариантах осуществления настоящего изобретения может применяться любой подходящий интерфейс обмена данными или пользовательский интерфейс. К примеру, пользовательский интерфейс может быть реализован в виде виртуальной клавиатуры или системы ввода данных, являющейся частью сенсорного дисплея.
[0038] Устройство может включать микрофон 36 или любое другое подходящее устройство ввода аудиоинформации, которое может быть устройством ввода цифрового или аналогового сигнала. Устройство 50 может также включать устройство вывода аудиоинформации, которое в вариантах осуществления настоящего изобретения может представлять собой любое из следующего: головной телефон 38, громкоговоритель или же аналоговое или цифровое соединение для вывода аудиоинформации. Устройство 50 может также иметь в своем составе аккумулятор (или в других вариантах осуществления настоящего изобретения устройство может снабжаться электроэнергией от любого подходящего мобильного энергетического устройства, например, солнечной батареи, топливной батареи или заводного генератора). Устройство может дополнительно включать камеру, способную записывать, или захватывать, изображения и/или видеоинформацию. Устройство 50 может также включать инфракрасный порт для связи с другими устройствами в ближней зоне прямой видимости. В других вариантах осуществления настоящего изобретения устройство 50 может включать любые подходящие решения связи малой дальности, например, беспроводное соединение Bluetooth или проводное соединение USB/Firewire.
[0039] Устройство 50 может включать контроллер 56, процессор или схемы обработки данных для управления устройством 50. Контроллер 56 может быть соединен с памятью 58, которая в различных вариантах осуществления настоящего изобретения может хранить данные, одновременно в форме видеоинформации и аудиоинформации, и/или может также хранить инструкции для исполнения в контроллере 56. Контроллер 56 может быть также соединен со схемами 54 кодека, способными осуществлять кодирование и декодирование аудио- и/или видеоданных или являться вспомогательным средством при кодировании и декодировании, выполняемом контроллером.
[0040] Устройство 50 может также включать устройство 48 чтения карт и смарт-карту 46, например, карту UICC и устройство чтения UICC-карт для предоставления информации об абоненте, и для обеспечения возможности предоставления аутентификационной информации с целью аутентификации и авторизации абонента в сети.
[0041] Устройство 50 может включать схемы 52 радиоинтерфейса, связанные с контроллером, которые могут использоваться для формирования сигналов беспроводной связи, например, для связи с сетью сотовой связи, системой беспроводной связи или беспроводной локальной вычислительной сетью. Устройство 50 может также включать антенну 44, связанную со схемами 52 радиоинтерфейса, для передачи радиочастотных сигналов, формируемых в схемах 52 радиоинтерфейса, в другое устройство (или устройства), а также для приема радиочастотных сигналов от другого устройства (или устройств).
[0042] Устройство 50 может включать камеру, способную записывать или регистрировать отдельные кадры, которые затем передают в кодек 54 или контроллер для обработки. Устройство может принимать от другого устройства данные видеоизображений для обработки перед их передачей и/или хранением. Устройство 50 может также принимать изображение для кодирования/декодирования либо беспроводным способом, либо по проводному соединению. Структурные элементы устройства 50, описанные выше, представляют собой примеры средств выполнения соответствующих функций.
[0043] С помощью фиг. 3 проиллюстрирован один из примеров системы, в которой могут использоваться различные варианты осуществления настоящего изобретения. Система 10 включает несколько устройств связи, способных осуществлять связь при помощи одной или нескольких сетей. В состав системы 10 может входить любая комбинация проводных и беспроводных сетей, включая, без ограничения перечисленным, беспроводную сотовую телефонную сеть (например, сеть GSM, UMTS, CDMA и т.п.), беспроводную локальную вычислительную сеть (wireless local area network, WLAN), например, в соответствии с определением в любом из стандартов IEEE 802.x, персональную сеть Bluetooth, локальную вычислительную сеть Ethernet, локальную вычислительную сеть типа «маркерное кольцо» глобальную сеть и Интернет.
[0044] Система 10 может включать как проводные, так и беспроводные устройства связи, и/или устройство 50, подходящее для реализации вариантов осуществления настоящего изобретения.
[0045] В качестве примера на фиг. 3 показана мобильная телефонная сеть 11 и сеть Интернет 28. Соединение с Интернетом 28 может включать, без ограничения перечисленным, беспроводные соединения с большим радиусом действия, беспроводные соединения с малым радиусом действия, а также различные проводные соединения, включая, без ограничения перечисленным, телефонные линии, кабельные линии, линии электропередач и аналогичные каналы связи.
[0046] Примерами устройств связи в системе 10 могут служить, без ограничения перечисленным, электронное устройство 50, комбинация карманного персонального компьютера (personal digital assistant, PDA) и мобильного телефона 14, PDA 16, интегрированное устройство 18 обмена сообщениями (integrated messaging device, IMD), настольный компьютер 20, ноутбук 22. Устройство 50 может быть стационарным или подвижным, когда переносится движущимся оператором. Устройство 50 может также размещаться на транспортном средстве, включая, без ограничения перечисленным, автомобиль, грузовик, такси, автобус, поезд, судно, самолет, велосипед, мотоцикл или любое аналогичное подходящее транспортное средство.
[0047] Варианты осуществления настоящего изобретения могут также быть реализованы в абонентской телеприставке, т.е. в приемнике цифрового телевидения, который, опционально, может обладать функциональностью отображения видеоинформации и беспроводной связи, в планшетных или (портативных) персональных компьютерах (ПК), которые включают аппаратную или программную (или комбинированную) реализацию кодера и/или декодера, в различных операционных системах, в чипсетах (микросхемных наборах), процессорах, DSP-процессорах и/или во встраиваемых системах, обеспечивающих аппаратное и/или программное кодирование.
[0048] Некоторые из подобных или других устройств могут как посылать, так и принимать вызовы и сообщения, а также осуществлять связь с операторами связи при помощи беспроводного соединения 25 с базовой станцией 24. Базовая станция 24 может быть соединена с сетевым сервером 26, обеспечивающим связь между средствами 11 связи и Интернетом 28. Система может включать дополнительные устройства связи, а также устройства связи других типов.
[0049] Устройства связи могут осуществлять связь с использованием различных технологий передачи данных, включая, без ограничения перечисленным, множественный доступ с кодовым разделением (Code Division Multiple Access, CDMA), глобальную систему мобильной связи (Global System for Mobile Communications, GSM), универсальную систему мобильной связи (Universal Mobile Telecommunication System, UMTS), множественный доступ с разделением по времени (Time Division Multiple Access, TDMA), множественный доступ с разделением по частоте (Frequency Division Multiple Access, FDMA), протокол управления передачей/протокол Интернета (Transmission Control Protocol/Internet Protocol, TCP-IP), службу коротких сообщений (Short Messaging Service, SMS), службу мультимедийных сообщений (Multimedia Messaging Service, MMS), электронную почту, сервис мгновенной передачи сообщений (Instant Messaging Service, IMS), Bluetooth, IEEE 802.11, и любые аналогичные технологии беспроводной связи. Устройство связи, используемое при реализации различных вариантов осуществления настоящего изобретения, может осуществлять связь с использованием различных сред передачи данных, включая, без ограничения, радиосоединения, инфракрасные, лазерные, кабельные соединения или любые другие подходящие соединения.
[0050] В телекоммуникационных сетях и в сетях передачи данных под «каналом» может пониматься как физический, так логический канал. Физическим каналом может быть любая физическая среда передачи, например, провод, тогда как логическим каналом может быть логическое соединение по мультиплексируемой среде передачи, способной обеспечивать передачу нескольких логических каналов. Канал может применяться для передачи информационного сигнала, например, битового потока, от одного или нескольких отправителей (или передатчиков) на один или несколько приемников.
[0051] Транспортный поток (transport stream, TS) MPEG-2, определенный в документе ISO/TEC 13818-1, или, эквивалентно, в Рекомендации Н.222.0 ITU-T, представляет собой формат для передачи аудио-, видео- и других медиаданных, а также метаданных программ или иных метаданных, в мультиплексированном потоке. Для идентификации элементарных потоков (также называемых, пакетированными элементарными потоками) используются идентификаторы пакетов (packet identifier, PID). Следовательно, можно считать, что каждый логический канал в потоке MPEG-2 TS соответствует конкретному значению PID.
[0052] Существующие стандарты для форматов медиафайлов включают базовый формат медиафайлов ISO (ISO/TEC 14496-12, сокращенно обозначаемый ISOBMFF) и формат файлов для видеоданных, структурированных NAL-блоками (ISO/IEC 14496-15), являющийся производным от ISOBMFF.
[0053] Видеокодек состоит из кодера, при помощи которого входные видеоданные преобразуют в сжатое представление, подходящее для хранения и передачи, а также декодера, при помощи которого сжатое представление видеоданных распаковывают, возвращая их к форме, пригодной для просмотра пользователем. Видеокодер и/или видеодекодер могут быть также независимыми друг от друга, т.е. не обязательно образовывать кодек. Как правило, в кодере часть информации исходной видеопоследовательности отбрасывается с целью представления видеоинформации в более компактной форме (т.е. с меньшим битрейтом).
[0054] Типовые гибридные видеокодеры, например, многие из реализаций кодеров, соответствующие стандартам ITU-T Н.263 и Н.264, кодируют видеоинформацию в два этапа. Сначала предсказывают значения пикселей в определенной области (или «блоке») изображения, например, с использованием механизмов компенсации движения (нахождение области в одном из предварительно кодированных видеокадров, близко соответствующей кодируемому в текущий момент блоку пикселей, и указание на эту область) или с использованием средств пространственного предсказания (использование, заданным образом, значений пикселей вокруг кодируемого блока пикселей). Затем кодируют ошибку предсказания, т.е. разность между предсказанным блоком пикселей и исходным блоком пикселей. Как правило, это выполняется при помощи преобразования разности пиксельных значений с использованием заданного преобразования (например, дискретного косинусного преобразования (Discrete Cosine Transform, DCT), или его варианта), квантования его коэффициентов и энтропийного кодирования квантованных коэффициентов. Регулируя степень детализации в процедуре квантования, кодер может управлять балансом между точностью представления пикселей (качеством изображения) и размером результирующего кодированного видеопредставления (размером файла или битрейтом).
[0055] Источником информации для внешнего предсказания являются ранее декодированные изображения (называемые опорными изображениями). При внутреннем копировании блоков (intra block copy, IBC), которое также называют «предсказанием на основе внутреннего копирования блоков», предсказание выполняют аналогично временному предсказанию, однако опорным изображением в таком случае является само текущее изображение, при этом в процессе декодирования ссылки допускаются только на уже декодированные ранее отсчеты. Межуровневое или межракурсное предсказание может выполняться аналогично временному предсказанию, однако в этом случае опорным будет, соответственно, декодированное изображение из другого масштабируемого уровня или из другого ракурса. В некоторых случаях под внешним предсказанием понимают исключительно временное предсказание, однако в других случаях внешнее предсказание может обобщенно обозначать как временное предсказание, так и любые другие типы предсказания, а именно, внутреннее копирование блоков, межуровневое и межракурсное предсказание, если их выполняют с помощью той же процедуры, что и временное предсказание, или аналогичной процедуры. Внешнее предсказание или временное предсказание иногда называют компенсацией движения или предсказанием с компенсацией движения.
[0056] Внешнее предсказание, которое может также называться временным предсказанием, компенсацией движения или предсказанием с компенсацией движения, позволяет понизить временную избыточность. Источником информации для внешнего предсказания являются ранее декодированные изображения. Для внешнего предсказания используют тот факт, что смежные пиксели в одном изображении с большой вероятностью являются коррелированными. Внутреннее предсказание быть либо пространственным, либо относиться собственно к преобразованию, т.е. могут предсказываться либо значения элементов изображения, либо коэффициенты преобразования. Внутреннее предсказание обычно применяют при внутреннем кодировании, когда внешнее предсказание не применяется.
[0057] Одним из результатов процедуры кодирования является набор параметров кодирования, таких как векторы движения и коэффициенты преобразования. Энтропийное кодирование множества параметров может быть более эффективным, если сначала выполнить их предсказание, на основе пространственно-смежных или соседних по времени параметров. Например, вектор движения может предсказываться на основе пространственно смежных векторов движения, при этом кодироваться может только разность относительно предсказания вектора движения. Предсказание параметров кодирования и внутреннее предсказание совместно могут называться внутрикадровым предсказанием.
[0058] На фиг. 4 проиллюстрирована блок-схема видеодекодера, подходящего для применения вариантов осуществления настоящего изобретения. На фиг. 4 проиллюстрирован кодер для двух уровней, однако нужно понимать, что проиллюстрированный кодер может быть расширен и выполнять кодирование более чем двух уровней. На фиг. 4 проиллюстрирован один вариантов осуществления видеокодера, включающий первый сегмент 500 кодера для базового уровня (кодирования) и второй сегмент 502 кодера для уточняющего уровня. Каждый из сегментов, первый сегмент 500 кодера и второй сегмент 502 кодера, могут включать аналогичные элементы для кодирования поступающих изображений. Сегменты 500, 502 кодера могут включать устройство 302, 402 предсказания пикселей, кодер 303, 403 ошибки предсказания и декодер 304, 404 ошибки предсказания. Также, на фиг. 4 показан один из вариантов осуществления устройства 302, 402 предсказания пикселей, включающего устройство 306, 406 внешнего предсказания, устройство 308, 408 внутреннего предсказания, селектор 310, 410 режима, фильтр 316, 416 и память 318, 418 опорных кадров. Устройство 302 предсказания пикселей в первом сегменте 500 кодера принимает изображения 300 базового уровня кодируемого видеопотока одновременно в устройстве 306 внешнего предсказания (которое определяет разницу между этим изображением и опорным кадром 318 компенсации движения) и в устройстве 308 внутреннего предсказания (которое определяет предсказание для блока пикселей изображения, исходя только из уже обработанных частей текущего кадра или изображения). Выходные данные из устройства внешнего предсказания и из устройства внутреннего предсказания передают в селектор 310 режима. Устройство 308 внутреннего предсказания может иметь более одного режима внутреннего предсказания. Следовательно, в каждом из режимов может выполняться внутреннее предсказание, и предсказанный сигнал может быть предоставлен в селектор 310 режима. В селектор 310 режима передается также копия изображения 300 базового уровня. Соответственно, устройство 402 предсказания пикселей во втором сегменте 502 кодера принимает изображения 400 уточняющего уровня кодируемого видеопотока одновременно в устройстве 406 внешнего предсказания (которое определяет разницу между этим изображением и опорным кадром 418 компенсации движения) и в устройстве 408 внутреннего предсказания (которое определяет предсказание для блока пикселей изображения, исходя только из уже обработанных частей текущего кадра или изображения). Выходные данные из устройства внешнего предсказания и из устройства внутреннего предсказания передают в селектор 410 режима. Устройство 408 внутреннего предсказания может иметь более одного режима внутреннего предсказания. Следовательно, в каждом из режимов может выполняться внутреннее предсказание, и предсказанный сигнал может быть предоставлен в селектор 410 режима. В селектор 410 режима передается также копия изображения 400 уточняющего уровня.
[0059] В зависимости от режима кодирования выбранного для кодирования текущего блока пикселей, на выход селектора 310, 410 режима передают выходные данные устройства 306, 406 внешнего предсказания, выходные данные одного из опциональных режимов внутреннего предсказания или выходные данные поверхностного кодера из состава селектора режима. Выходные данные селектора режима передают в первое суммирующее устройство 321, 421. Первое суммирующее устройство может вычитать выходные данные устройства 302, 402 предсказания пикселей из изображения 300 базового уровня, или изображения 400 уточняющего уровня, соответственно, с формированием первого сигнала 320, 420 ошибки предсказания, который подают на вход кодера 303, 403 ошибки предсказания.
[0060] Также устройство 302, 402 предсказания пикселей принимает от устройства 339, 439 предварительного восстановления комбинацию предсказанного представления блока 312, 418 изображения и выходные данные 338, 438 кодера 304, 404 ошибки предсказания. Предварительно восстановленное изображение 314, 414 может быть передано в устройство 308, 408 внутреннего предсказания и фильтр 316, 416. В фильтре 316, 416, где принимается это предварительное представление, может выполняться его фильтрация и вывод окончательного восстановленного изображения 340, 440, которое может быть сохранено в память 318, 418 опорных кадров. Память 318 опорных кадров может иметь соединение с устройством 306 внешнего предсказания и использоваться в качестве опорного изображения, с которым сравнивают будущее изображение 300 базового уровня при выполнении операций внешнего предсказания. При условии, что базовый уровень выбран в качестве источника для межуровневого предсказания отсчетов и/или для межуровневого предсказания информации о движении уточняющего уровня, и если на это также выполнено соответствующее указание, в соответствии с некоторыми из вариантов осуществления настоящего изобретения, память 318 опорных кадров может иметь соединение с устройством 406 внешнего предсказания и может использоваться в качестве опорного изображения, с которым сравнивают будущее изображение 400 уточняющего уровня при выполнении операций внешнего предсказания. При этом память 418 опорных кадров может иметь соединение с устройством 406 внешнего предсказания и использоваться в качестве опорного изображения, с которым сравнивают будущее изображение 400 уточняющего уровня при выполнении операций внешнего предсказания.
[0061] При условии, что базовый уровень выбран в качестве источника для предсказания параметров фильтрации уточняющего уровня, и на это выполнено соответствующее указание, в соответствии с некоторыми из вариантов осуществления настоящего изобретения, параметры фильтрации из фильтра 316 первого сегмента 500 кодера могут передаваться во второй сегмент 502 кодера.
[0062] Кодер 303, 403 ошибки предсказания включает блок 342, 442 преобразования и квантователь 344, 444. Блок 342 преобразования преобразует первый сигнал 320, 420 ошибки предсказания в домен преобразования. Таким преобразованием является, к примеру, преобразование DCT. Квантователь 344, 444 квантует сигнал, например, коэффициенты DCT, в домене преобразования и формирует квантованные коэффициенты.
[0063] Декодер 304, 404 ошибки предсказания принимает выходные данные из кодера 303, 403 ошибки предсказания и выполняет процедуры, обратные процедурам кодера 303, 403 ошибки предсказания, в результате чего получают декодированный сигнал 338, 438 ошибки предсказания, который при комбинировании с предсказанным представлением блока 312, 412 изображения во втором суммирующем устройстве 339, 439 дает предварительное восстановленное изображение 314, 414. Декодер ошибки предсказания можно рассматривать как имеющий в своем составе деквантователь 361, 461 который деквантует квантованные значения коэффициентов, например, коэффициентов DCT, и восстанавливает преобразованный сигнал, а также как включающий блок 363, 463 обратного преобразования, который выполняет обратное преобразование над восстановленным сигналом преобразования, при этом выходные данные блока 363, 463 обратного преобразования содержат восстановленный блок (или блоки). Декодер ошибки предсказания может также включать фильтр блоков, который может выполнять фильтрацию восстановленного блока (или блоков) в соответствии с дополнительной декодированной информацией и параметрами фильтрации.
[0064] Энтропийный кодер 330, 430 принимает выходные данные из кодера 303, 403 ошибки предсказания и может выполнять соответствующее кодирование переменной длины и/или энтропийное кодирование сигнала для обеспечения возможности обнаружения и исправления ошибок. Выходные данные энтропийных кодеров 330, 430 могут быть введены в битовый поток, например, при помощи мультиплексора 508.
[0065] Энтропийное кодирование/декодирование может выполняться множеством различных способов. К примеру, может применяться контекстно-зависимое кодирование/декодирование, при котором и кодер, и декодер, меняют контекстное состояние параметров кодирования в зависимости от ранее кодированных/декодированных параметров кодирования. Примерами контекстно-зависимого кодирования являются контекстно-зависимое двоичное арифметическое кодирование (context adaptive binary arithmetic coding, CABAC), контекстно-зависимое кодирование с переменной длиной кодового слова (context-based variable length coding, CAVLC) или любое аналогичное энтропийное кодирование. Энтропийное кодирование/декодирование, альтернативно или в дополнение, может выполняться при помощи схем кодирования с переменной длиной кодового слова, например, кодирования/декодирования методом Хаффмана или кодирования/декодирования методом экспоненциального кодирования Голомба. Декодирование параметров кодирования из энтропийно-кодированного битового потока, или из кодовых слов, может называться синтаксическим анализом.
[0066] Стандарт H.264/AVC был разработан объединенной командой по видео (Joint Video Team, JVT) из состава группы экспертов по видеокодированию (Video Coding Experts Group (VCEG) сектора стандартизации телекоммуникаций Международного союза электросвязи (International Telecommunication Union, ITU-T) и группой экспертов по движущемуся изображению (Moving Picture Experts Group, MPEG) Международной организации по стандартизации (International Organization for Standardization, ISO) / Международной электротехнической комиссии (International Electrotechnical Commission, IEC). Стандарт H.264/AVC был опубликован обеими родительскими организациями по стандартизации и получил наименование Рекомендации Н.264 ITU-T и Международного стандарта ISO/IEC 14496-10, известного также как улучшенное видеокодирование (Advanced Video Coding, AVC), 10-ая часть MPEG-4. Были выпущены несколько версий стандарта H.264/AVC, в спецификацию каждой из которых добавлялись новые расширения или элементы. В число этих расширений вошли масштабируемое видеокодирование (Scalable Video Coding, SVC) и многоракурсное видекодирование (Multiview Video Coding, MVC).
[0067] Объединенной командой по видеокодированию (Joint Collaborative Team Video Coding, JCT-VC) групп VCEG и MPEG была создана первая версия (version 1) стандарта высокоэффективного видео кодирования (High Efficiency Video Coding, HEVC), H.265. Стандарт был опубликован обеими родительскими стандартизующими организациями и в текущий момент имеет наименование Рекомендации H.265 ITU-T и Международного стандарта ISO/IEC 23008-2, известного также как высокоэффективное видеокодирование (HEVC), 2-ая часть MPEG-H. В более поздние версии стандарта H.265/HEVC вошли расширения масштабируемого многоракурсного кодирования, расширения диапазона точности, трехмерного кодирования и кодирования экранного контента, которые сокращенно обозначаются, соответственно, SHVC, MV-HEVC, REXT, 3D-HEVC и SCC.
[0068] Для расширений SHVC, MV-HEVC и 3D-HEVC используется общая базовая спецификация, описанная в приложении F второй версии стандарта HEVC. Эта общая база включает, например, высокоуровневые синтаксис и семантику, к примеру, определяющие часть характеристик уровней битового потока, такие как межуровневые зависимости, а также процедуры декодирования, такие как построение списка опорных изображений, включающего опорные изображения межуровневого предсказания, а также вычисление порядковых номеров изображений для многоуровневых потоков. Приложение F может применяться и в последующих многоуровневых расширениях HEVC, которые могут появиться позднее. В приведенном ниже описании видеокодер, видеодекодер, способы кодирования, способы декодирования, структуры битового потока и/или варианты осуществления настоящего изобретения могут быть рассмотрены на примере конкретных расширений, таких как SHVC и/или MV-HEVC, однако нужно понимать, что они, в общем случае, применимы также для многоуровневых расширений HEVC, а также, в еще более общем случае, к любой многоуровневой схеме видеокодирования.
[0069] Универсальное видео кодирование (VVC) (MPEG-I Part 3), также известное под наименованием ITU Н.266, является стандартом видеосжатия, разрабатываемым Объединенной командой экспертов по видео (JVET) консорциума MPEG и ITU, и призванным прийти на смену стандарту HEVC/H.265.
[0070] В настоящем разделе приведены ключевые определения, описана структура битового потока и кодирования, основные понятия стандартов Н.264/AVC, HEVC и VVC, а также некоторых из их расширений. Они использованы в качестве примера видеокодера, декодера, способа кодирования, способа декодирования и структуры битового потока, в которых могут быть реализованы варианты осуществления настоящего изобретения. Аспекты настоящего изобретения не ограничены стандартами H.264/AVC, HEVC или VVC, и их расширениями, напротив, данное описание приведено как один из примеров базы для частичной или полной реализации вариантов осуществления настоящего изобретения. Когда ниже упоминается стандарт VVC или версии его проекта, нужно понимать, что настоящее описание соответствует спецификации одной из версий проекта VVC, и в более поздних версиях проекта, или в финальной версии (или версиях VVC) могут быть изменения, и тогда описание вариантов осуществления настоящего изобретения могут быть скорректированы для соответствия финальной версии (или версиям) стандарта VVC.
[0071] Стандарты видеокодирования могут определять синтаксис и семантику битового потока, а также процедуру декодирования для безошибочных битовых потоков, при этом процедура кодирования может быть не определена, однако к кодерам может предъявляться требование о формировании битовых потоков, отвечающих стандарту. Соответствие битового потока и декодера стандарту может быть проверено с помощью гипотетического опорного декодера (Hypothetical Reference Decoder, HRD). Стандарт может включать в себя инструменты кодирования, помогающие справиться с ошибками и потерями при передаче, однако использование этих инструментов при кодировании может быть опциональным, а процесс декодирования для битовых потоков с ошибками может быть не определен.
[0072] Синтаксическим элементом может быть назван элемент данных, представленный в битовом потоке. Синтаксической структурой может быть назван ноль или более синтаксических элементов, совместно находящихся в битовом потоке в заданном порядке.
[0073] Каждый синтаксический элемент может быть описан наименованием и одним дескриптором формы его кодированного представления. Может применяться соглашение, в котором наименования синтаксических элементов состоят из строчных букв с символами подчеркивания. Поведение процедуры декодирования в видеодекодере может определяться значением синтаксического элемента и значениями ранее декодированных синтаксических элементов.
[0074] При описании стандартов Н.264/AVCAVC, HEVC и VCC, а также различных примеров осуществления настоящего изобретения, для определения процедуры синтаксического анализа синтаксических элементов могут использоваться следующие обозначения.
- u(n): целое без знака с использованием n бит. Если в синтаксической таблице n равно "v", то количество бит изменяется в зависимости от значения других синтаксических элементов. Процедура синтаксического разбора (анализа) данного дескриптора определяется следующими n битами в битовом потоке, которые интерпретируются как двоичное представление целого числа без знака, старший бит которого идет первым.
- ue(v): синтаксический элемент в виде целого числа без знака, кодированного экспоненциальным кодом Голомба (exp-Golomb), где старший бит находится слева.
[0075] Битовая строка, кодированная экспоненциальным кодом Голомба, может быть преобразована в кодовое число (codeNum), например, с использованием следующей таблицы:
[0076] В некоторых случаях в синтаксических таблицах могут использоваться значения других переменных, вычисленных на основе значений синтаксических элементов. Может применяться соглашение об именовании переменных, в котором используют комбинации из строчных и прописных букв без символов подчеркивания. Переменные, начинающиеся с прописной буквы, могут вычисляться для декодирования текущей синтаксической структуры и всех зависимых от нее синтаксических структур. Переменные, начинающиеся с прописной буквы, могут быть использованы в процессе декодирования последующих синтаксических структур без упоминания исходной синтаксической структуры переменной. Может применяться соглашение, в котором переменные, начинающиеся со строчной буквы, используются только в контексте их вычисления.
[0077] В некоторых случаях «мнемонические» наименования значений синтаксических элементов или переменных используются взаимозаменяемо с их численными значениями. Иногда «мнемонические» наименования используются без каких-либо соответствующих численных значений.
[0078] Флаг - это переменная или однобитный синтаксический элемент, имеющий одно из двух возможных значений: 0 или 1.
[0079] Массивы могут быть как синтаксическими элементами, так и переменными. Для индексов массивов могут использоваться квадратные скобки. Одномерный массив может называться списком. Двумерный массив может называться матрицей.
[0080] Функции могут описываться их именами. Может использоваться соглашение, в соответствии с которым имена функций начинаются с прописных букв, содержат комбинацию из строчных и прописных букв без символов подчеркивания и заканчиваются левой и правой скобками, заключающих ноль или более имен переменных (для определения) или значений (для использования), разделенных запятыми (при наличии более одной переменной).
[0081] Функция Ceil(х) может быть определена как возвращающая наименьшее целое число, большее или равное х. Функция Log2(х) может быть определена как возвращающая логарифм х по основанию 2.
[0082] Могут быть определены процедуры для описания декодирования синтаксических элементов. Процедура может иметь независимые описание и вызов. Может быть определено, что все синтаксические элементы и переменные с наименованием прописными буквами, относящиеся к текущей синтаксической структуре и всем зависящим от нее синтаксическим структурам, доступны в описании процедуры и при ее вызове, и также может быть определено, что описание процедуры может иметь переменные с наименованием строчными буквами, явно заданные как входные. Описание любой процедуры может явно задавать одну или более выходных переменных, каждая из которых может быть либо переменной с наименованием прописными буквами, либо переменной с наименованием строчными буквами.
[0083] Синтаксис, семантика и процедуры могут быть определены с использованием арифметических, логических, реляционных, битовых операторов и операторов назначения, аналогичных применяемым в языке программирования С. В частности, оператор / используют для указания на целочисленное деление (с округлением), а оператор % используют для указания на деление по модулю (т.е. взятие остатка от деления).
[0084] Используемые соглашения о нумерации и счете могут соответствовать началу от 0, например, «первый» может быть эквивалентно 0-му, «второй» может быть эквивалентно 1-му и т.п.
[0085] Элементарной единицей для ввода в декодер и вывода из декодера, соответственно, как правило, является изображение. Изображение, передаваемое в качестве входных данных в кодер может называться исходным изображением, а изображение, декодированное декодером, может называться декодированным или восстановленным изображением.
[0086] Исходное и декодированное изображения, каждое, состоят из одного или более массивов отсчетов, например, одного или более следующих наборов массивов отсчетов:
- только составляющая яркости (Y) (монохромное изображение),
- составляющая яркости и две составляющие цветности (YCbCr или YCgCo),
- составляющие зеленого, синего и красного (GBR или RGB),
- массивы, представляющие другие неопределенные монохромные или трехкомпонентные цветовые отсчеты (например, YZX, которые также называют XYZ).
[0087] Далее в настоящем описании такие массивы называются компонентами яркости (или L, или Y) и компонентами цветности, при этом два массива цветности могут обозначаться за Cb и Cr; независимо от реально используемого метода представления информации о цвете. Фактически используемый способ представления цветовой информации может, например, указываться в битовом потоке, например, с использованием синтаксиса информации об используемости видео (Video Usability Information, VUI) в стандарте HEVC или другом стандарте. Составляющая может быть определена как массив отсчетов, или одиночный отсчет, из одного из трех массивов отчетов (одного яркости и двух цветности), или как массив отсчетов, или одиночный отсчет, из массива, образующего изображение в монохромном формате.
[0088] Изображение может быть определено либо как кадр, либо как поле. Кадр включает в себя матрицу отсчетов яркости, и возможно также, соответствующих отсчетов цветности. Поле представляет собой множество чередующихся строк отсчетов в кадре и может использоваться в качестве входных данных для кодера в случае, когда исходный сигнал является чересстрочным. Массивы отсчетов цветности могут отсутствовать (и, следовательно, могут применяться монохромные значения) или массивы отсчетов цветности могут иметь пониженное разрешение по сравнению с массивами отсчетов яркости.
[0089] Ниже кратко описаны некоторые из форматов представления цветности.
- При дискретизации в монохромном формате имеется только один массив отсчетов, который, по определению, считают массивом яркости.
- При дискретизации с форматом 4:2:0 каждый из двух массивов цветности имеет половину высоты массива яркости и половину его ширины.
- При дискретизации с форматом 4:2:2 каждый из двух массивов цветности имеет одинаковую высоту с массивом яркости, но половину ширины.
- При дискретизации с форматом 4:4:4, если не используются отдельные цветовые плоскости, каждый из двух массивов цветности ту же высоту и ширину, что и массив яркости.
[0090] Форматы или стандарты кодирования могут допускать кодирование массивов отсчетов в виде отдельных цветовых плоскостей в битовом потоке, и соответственно, может выполняться декодирование отдельно кодированных цветовых плоскостей из битового потока. Если применяются отдельные цветовые плоскости, каждую из них обрабатывают отдельно (в кодере и/или декодере) как изображение с монохромным представлением.
[0091] Разбиением (partitioning) называют такое разделение множества на подмножества, при котором каждый из элементов множества находится только в одном из подмножеств. В видеокодировании разбиением может называться разделение изображения, или подобласти изображения, на подмножества таким образом, что каждый элемент изображения, или подобласти изображения, находится точно в одном подмножестве. Например, при разбиении в соответствии с кодированием и/или декодированием HEVC, и/или кодированием и/или декодированием VVC, могут использоваться описанные ниже термины. Блок кодирования (coding block) - это блок отсчетов размером NxN, для некоторого значения N, такого, что разделение блока кодового дерева на блоки кодирования является разбиением. Блок кодового дерева (coding tree block, СТВ) - это блок отсчетов размером NxN, для некоторого значения N, такого, что разделение составляющей изображения на блоки кодового дерева будет разбиением. Пакет кодового дерева (coding tree unit, CTU) - это блок кодового дерева из отсчетов яркости, два соответствующих блока кодового дерева из отсчетов цветности в случае изображения, имеющего три массива отсчетов, или блок кодового дерева в монохромном изображении, или изображении, которое кодируют с использованием трех отдельных цветовых плоскостей и синтаксических структур, применяемых для кодирования отсчетов. Блок кодирования (coding unit, CU) - это блок кодирования из отсчетов яркости, два соответствующих блока кодирования из отсчетов цветности для изображения, имеющего три массива значений, блок кодирования из отсчетов монохромного изображения, или изображения, которое кодируют с использованием трех отдельных цветовых плоскостей и синтаксических структур, применяемых для кодирования отсчетов. Блок кодирования, CU, максимально допустимого размера, как правило, называется LCU (largest coding unit, наибольший блок кодирования) или пакетом кодового дерева (CTU), при этом изображение в видео разбивается на неперекрывающиеся блоки LCU.
[0092] В стандарте HEVC каждый из кодовых блоков, CU, состоит из одного или более блоков предсказания (prediction unit, PU), определяющих процедуру предсказания отсчетов в блоке кодирования, а также одного или более блоков преобразования (transform units, TU), определяющих процедуру кодирования ошибки предсказания для отсчетов в этом блоке кодирования. Как правило, блок кодирования, CU, состоит из квадратного блока отсчетов, размер которого выбирают из заранее заданного множества допустимых размеров кодового блока. Каждый блок предсказания, PU, и блок преобразования, TU, могут быть разбиты на менее крупные блоки предсказания и блоки преобразования с целью повышения точности процедур предсказания и кодирования ошибки предсказания соответственно. Каждый блок предсказания, PU, имеет связанную с ним информацию предсказания, которая определяет, предсказание какого типа должно применяться к пикселям данного блока предсказания (например, информацию вектора движения в случае блока предсказания с внешним предсказанием, или информацию направления внутреннего предсказания в случае внутренне предсказываемого блока предсказания).
[0093] Аналогично, каждый блок преобразования может быть связан с информацией, описывающей процедуру декодирования ошибки предсказания для значений в данном блоке преобразования (включая, например, информацию о коэффициентах DCT-преобразования). Информация о том, применяется ли кодирование ошибки предсказания для каждого кодового блока, CU, или нет, как правило, сигнализируется в синтаксических элементах на уровне блока кодирования. Если остатка или ошибки предсказания, связанного с блоком кодирования, CU, нет, то можно считать, что для данного блока кодирования блоки преобразования, TU, отсутствуют. Информация о разделении изображения на блоки кодирования, CU, и о разделении блоков кодирования на блоки предсказания, PU, и блоки преобразования, TU, сигнализируемая, как правило, в битовом потоке, позволяет декодеру воспроизводить заданную структуру этих блоков.
[0094] Ниже описано разбиение, применяемое в проекте стандарта H.266/VVC. Следует отметить, что описанное здесь может меняться в более поздних версиях проекта H.266/WC, пока стандарт не будет финализирован. Изображения разбивают на CTU аналогично HEVC, однако максимальный размер CTU увеличен до 128×128. Пакет кодового дерева (CTU) сначала разбивают в соответствии со структурой квадродерева. Затем вершины квадродерева могут быть дополнительно подразбиты на древообразные структуры различных типов. Среди этих многотиповых древообразных структур имеются четыре типа разделения: вертикальное двоичное разделение, горизонтальное двоичное разделение, вертикальное троичное разделение и горизонтальное троичное разделение. Такие многотиповые вершины дерева называют блоками кодирования (CU). Блоки кодирования, CU, блоки предсказания, PU, и блоки преобразования, TU, имеют одинаковый размер блока, если только блок кодирования не превышает максимальную длину преобразования. Структурой сегментации CTU является квадродерево со вложенными многотиповыми деревьями, в которых применяют двоичное и троичное деление, т.е. не применяют отдельных специальных моделей блоков CU, PU и TU, кроме тех случаев, когда это необходимо для блоков кодирования с размером, превышающим максимальную длину преобразования. Блок кодирования, CU, может иметь квадратную или прямоугольную форму.
[0095] Элементарной единицей вывода из кодеров в некоторых форматах кодирования, например, в VVC, и ввода в декодер, в некоторых форматах кодирования, например, VVC, является блок уровня сетевой абстракции (Network Abstraction Layer, NAL). С целью передачи по сетям пакетной передачи данных или хранения в структурированных файлах NAL-блоки могут инкапсулироваться в пакеты или в аналогичные структуры.
[0096] Формат битового потока для потоков из NAL-блоков может быть определен для сред передачи или хранения, не обеспечивающих структуру кадров. В таких форматах битового потока NAL-блоки отделяются друг от друга при помощи прикрепления стартового кода перед каждым NAL-блоком. Чтобы исключить ложное обнаружение границ NAL-блоков в кодерах исполняется байтовый алгоритм предотвращения эмуляции стартового кода, который добавляет байт предотвращения эмуляции к полезной нагрузке NAL-блока, если в противном случае в ней будет присутствовать стартовый код. Для обеспечения прозрачного шлюзового взаимодействия между системами пакетной и потоковой передачи данных, предотвращение эмуляции стартового кода должно выполняться в любом случае, независимо от того, применяется формат битового потока или нет.
[0097] NAL-блок - это синтаксическая структура, содержащая указание на тип данных, следующих за ней, и байты, содержащие эти данные в форме RBSP, чередующиеся, при необходимости, с байтами предотвращения эмуляции. Последовательность исходных байтов полезной нагрузки (raw byte sequence payload, RBSP) может быть определена как синтаксическая структура, включающая целое число байт и инкапсулированная в NAL-блоке. Последовательность RBSP может быть либо пустой, либо иметь форму строки информационных бит, содержащих синтаксические элементы, за которыми следует стоп-бит RBSP и ноль или более последующих бит, равных 0.
[0098] NAL-блоки состоят из заголовка и полезной нагрузки. В заголовке NAL-блока указывают, помимо другой информации, тип NAL-блока.
[0099]
[0100] NAL-блоки могут быть разделены на две категории: NAL-блоки уровня видеокодирования (Video Coding Layer, VCL) и NAL-блоки, не относящиеся к VCL. NAL-блоки VCL представляют собой NAL-блоки со стандартным кодированием слайсов.
[0101] NAL-блок, не относящийся к VCL, может, например, иметь один из следующих типов: набор параметров последовательности, набор параметров изображения, NAL-блок дополнительной уточняющей информации (supplemental enhancement information, SEI), разделитель блока доступа, конец последовательности NAL-блоков, конец битового потока NAL-блоков или NAL-блок с данными фильтрации. Набор параметров может быть необходим для восстановления декодированных изображений, при этом многие из остальных типов NAL-блоков, не относящихся к VCL, не являются необходимыми для восстановления декодированных изображений.
[0102] В некоторых форматах кодирования определены наборы параметров, которые могут содержать значения параметров, необходимых для декодирования или восстановления декодированных изображений. Параметр может быть определен как синтаксический элемент в наборе параметров. Набор параметров может быть определен как синтаксическая структура, которая содержит параметры и на которую могут осуществляться ссылки из других синтаксических структур, или которые могут активироваться из других синтаксических структур, например, с помощью идентификатора.
[0103] Ниже описаны некоторые из типов наборов параметров, однако нужно понимать, что могут существовать и другие, и что варианты осуществления настоящего изобретения могут применяться в описанных типах наборов параметров, но не ограничены ими. В набор параметров последовательности (sequence parameter set, SPS) могут включаться параметры, которые остаются неизменными на протяжении всей кодированной видеопоследовательности. В дополнение к параметрам, которые могут быть необходимы в процессе декодирования, набор параметров последовательности опционально может включать информацию по используемости видео (video usability information, VUI), включающую параметры, важные для буферизации, синхронизации вывода изображения, отрисовки и резервирования ресурсов. Набор параметров изображения (picture parameter set, PPS) содержит параметры, которые с большой вероятностью будут неизменными для нескольких кодированных изображений. Набор параметров изображения может включать в себя параметры, на которые могут выполняться ссылки из сегментов одного или более кодированных изображений. Набор параметров заголовка (header parameter set, HPS) был введен для включения параметров, которые могут меняться для каждого отдельного изображения.
[0104] Битовый поток - это последовательность битов, которая, в некоторых форматах или стандартах кодирования, может иметь вид потока NAL-блоков или потока байтов, который позволяет получить представление кодированных изображений и связанных с ними данных в форме одной или более кодированных видеопоследовательностей. В одном логическом канале, например, в одном файле или по одному соединению протокола связи за первым битовым потоком может следовать второй битовый поток. Элементарный поток (в контексте видеокодирования) это последовательность из одного или более битовых потоков. В некоторых форматах или стандартах кодирования конец первого битового потока может быть означен специальным NAL-блоком, который может называться NAL-блоком конца битового потока (end of bitstream, ЕОВ), и который является последним NAL-блоком битового потока.
[0105] Часть битового потока - это непрерывное подмножество битового потока. В некоторых контекстах может предъявляться требование, чтобы часть битового потока состояла из одной или более полных синтаксических структур и не имел неполных синтаксических структур. В других контекстах часть битового потока может включать любой непрерывной отрезок битового потока и может включать неполные синтаксические структуры.
[0106] Выражение «наряду с битовым потоком» (например, «указание наряду с битовым потоком») или «наряду с блоком кодирования битового потока» (например, «указание наряду с кодированным тайлом») может пониматься, в пунктах формулы изобретения и в описании вариантов осуществления настоящего изобретения, как передача, сигнализация или хранение данных вне основной полосы частот, таким образом, чтобы данные, не принадлежащие основной полосе частот, оставались связанными с битовым потоком или кодовым блоком, соответственно, но не были в них включены. Выражение «декодирование наряду с битовым потоком», или «наряду с блоком кодирования битового потока», или аналогичные выражения, могут обозначать декодирование данных, поступающих вне основной полосы частот, на которые осуществляют ссылки (и которые могут быть получены путем передачи, сигнализации или хранения данных вне основной полосы частоты) и которые связаны с битовым потоком или кодовым блоком, соответственно. К примеру, выражение «наряду с битовым потоком» может использоваться, когда битовый поток содержится в контейнерном файле, например, файле, соответствующему базовому формату медиафайлов ISO, а метаданные файла хранят в файле таким образом, что они связаны с битовым потоком, например, в виде боксов в записи сэмпла для трека, содержащего битовый поток, группы сэмплов для трека, содержащего битовый поток, или трека синхронизированных метаданных, связанного с треком, содержащим битовый поток.
[0107] Кодированная видеопоследовательность (coded video sequence, CVS) - это такая последовательность кодированных изображений в порядке декодирования, которая является независимо декодируемой и за которой следует еще одна кодированная видеопоследовательность или конце битового потока. Кодированная видеопоследовательность, альтернативно или дополнительно, может быть определена как оканчивающаяся, когда в битовом потоке встречается специальный NAL-блок, который может называться NAL-блоком конца последовательности (end of sequence, EOS).
[0108] Изображения могут разбиваться на независимо кодируемые и декодируемые сегменты изображения (например, слайсы и/или тайлы, и/или группы тайлов). Такие сегменты изображения позволяют выполнять параллельную обработку. Слайсами в настоящем описании называют сегменты изображения, состоящие из заданного числа базовых блоков кодирования, которые обрабатывают в заданном по умолчанию порядке кодирования или декодирования, тогда как тайлами обычно называют сегменты изображения, определенные как прямоугольные области изображения, расположенные на сетке тайлов. Группа тайлов это группа из одного или более тайлов. Сегменты изображения в битовом потоке могут быть кодированы как отдельные блоки, например, блоки NAL VCL в стандартах H.264/AVC, HEVC и VVC. Кодированные сегменты изображения могут включать заголовок и полезную нагрузку, при этом заголовок содержит значения параметров, необходимых для декодирования полезной нагрузки. Полезную нагрузку слайсов называют данными слайсов.
[0109] В стандарте HEVC изображение может быть разбито на тайлы, которые имеют прямоугольную форму и содержат целое число блоков LCU. В стандарте HEVC разбиение на тайлы дает регулярную сетку, в которой максимальная разность между высотой и шириной тайлов равна одному LCU. В стандарте HEVC слайс определен как целое количество пакетов кодового дерева, содержащихся в одном независимом сегменте слайса и во всех последующих зависимых сегментах слайса (если они присутствуют), которые предшествуют следующему независимому сегменту слайса (если он существует) внутри одного блока доступа. В стандарте HEVC сегмент слайса определяют как целое количество пакетов кодового дерева, организованных в виде последовательности, в порядке сканирования тайла, и содержащихся в одном блоке NAL. Разделение каждого из изображений на сегменты слайса является разбиением. В стандарте HEVC независимый сегмент слайса определен как сегмент слайса, для которого значения синтаксических элементов в заголовке сегмента слайса не получают на основе значений предыдущего сегмента слайса, а зависимый сегмент слайса определен как сегмент слайса, для которого значения некоторых из синтаксических элементов в заголовке сегмента слайса получают на основе значений для предыдущего независимого сегмента слайса в порядке декодирования. В стандарте HEVC заголовок слайса определен как заголовок независимого сегмента слайса, который является текущим, или как заголовок независимого сегмента слайса, который предшествует текущему зависимому сегменту слайса, и заголовок сегмента слайса определен как часть кодированного сегмента слайса, включающего элементы данных, которые относятся к первому блоку (или ко всем блокам) кодового дерева, представленному (или представленным) в сегменте слайса. Блоки кодирования, CU, сканируют в порядке сканирования растра LCU в тайлах или в изображении в целом, если тайлы не используются. В LCU блоки кодирования, CU, могут иметь заданный порядок сканирования.
[0110] Соответственно, стандарт и спецификации видеокодирования могут допускать разделение, в кодере, кодированного изображения на кодированные слайсы или аналогичные элементы. Предсказание внутри изображения с пересечением границ слайсов, как правило, не допускается. Следовательно, слайсы можно считать способом разделения кодированного изображения на независимо декодируемые части. В стандартах H.264/AVC и HEVC предсказание внутри изображения с пересечением границ слайсов может быть запрещено. Соответственно, слайсы можно считать способом деления кодированного изображения на независимо декодируемые части, и, следовательно, слайсы часто считаются элементарными единицами передачи. Во многих случаях кодеры могут указывать в битовом потоке, какие типы внутреннего предсказания с переходом между границами слайсов запрещены, при этом декодер учитывает данную информацию при своей работе, например, делая вывод о доступных источниках предсказания. Например, отсчеты из смежных блоков кодирования могут считаться недоступными для внутреннего предсказания, если эти блоки кодирования расположены в различных слайсах.
[0111] Ниже описано разбиение изображений на слайсы, тайлы и кирпичи в проекте стандарта VVC (т.е. в версии 5 проекта VVC).
[0112] Изображение разделяют на одну или более строк тайлов и один или более столбец тайлов. Разбиение изображения на тайлы формирует сетку тайлов, которая может быть охарактеризована списком ширин столбцов тайлов (в CTU) и списком высот строк тайлов (в CTU).
[0113] Тайл - это последовательность пакетов кодового дерева (CTU), которая покрывает одну «ячейку» в сетке тайлов, т.е. прямоугольную область изображения. Тайл разбивается на один или более кирпичей, каждый из которых состоит из набора строк CTU внутри этого тайла. Тайл, не разбитый на множество кирпичей, также называют кирпичом. Однако, кирпич, являющийся истинным подмножеством тайла, не называют тайлом.
[0114] Слайс содержит либо набор тайлов изображения, либо набор кирпичей тайлов. Слайс является блоком NAL VCL.
[0115] Поддерживаются два режима слайсов, а именно режим слайсов со сканированием растра и режим прямоугольных слайсов. В режиме слайсов со сканированием растра слайс содержит последовательность тайлов в порядке сканирования тайлового растра изображения. В режиме прямоугольных слайсов слайс содержит набор кирпичей изображения, которые совместно образуют прямоугольную область изображения. Кирпичи в прямоугольном слайсе располагаются в порядке сканирования растра кирпичей слайса.
[0116] Порядок сканирования кирпича может быть определен как конкретный порядок последовательных CTU, на которые разбито изображения, где CTU внутри кирпича расположены последовательно в порядке сканирования растра CTU, при этом кирпичи в тайле расположены последовательно в порядке сканирования растра кирпичей тайла, а тайлы в изображения расположены последовательно в порядке сканирования растра тайлов изображения. Может предъявляться требование, например, в стандарте кодирования, о том, что NAL-блоки кодированного слайса должны располагаться в порядке увеличения адреса CTU в порядке сканирования кирпича для первого CTU каждого NAL-блока кодированного слайса, при этом может быть определено, что адрес CTU увеличивается в порядке сканирования растра CTU внутри изображения. Растр может быть определен как отображение прямоугольной двумерной структуры на одномерную структуру, таким образом, что первые записи в одномерной структуре будут из первой верхней строки двумерной структуры, сканируемой слева направо, за ними будут идти, аналогично, вторая, третья и т.д. строки структуры (в направлении вниз), каждую из которых сканируют слева направо.
[0117] На фиг. 5а показан пример разбиения изображения на слайсы в режиме сканирования растра, где изображение разбивают на 12 тайлов и 3 слайса в режиме сканирования растра. На фиг. 5b показан пример разбиения изображения на прямоугольные слайсы (с размером 18×12 CTU), где изображение разбивают на 24 тайла (6 столбцов тайлов и 4 строки тайлов) и 9 прямоугольных слайсов. На фиг. 5с показан пример разбиения изображения на тайлы, кирпичи и прямоугольные слайсы, где изображение разбивают на 4 тайла (2 столбца тайлов и 2 строки тайлов), 11 кирпичей (верхний левый тайл содержит 1 кирпич, верхний правый тайл содержит 5 кирпичей, нижний левый тайл содержит 2 кирпича, и нижней правый тайл содержит 3 кирпича) и 4 прямоугольных слайса.
[0118] Разбиение на тайлы, кирпичи и прямоугольные слайсы задают в наборе параметров изображения (PPS). На фиг. 6 показан синтаксис указания разбиения на тайлы и кирпичи, которое выполняют в два этапа: на первом этапе формируют сетку тайлов (т.е. ширины столбцов тайлов и высоты строк тайлов), а затем указанные тайлы дополнительно разбивают на кирпичи.
[0119] Существуют два режима задания сетки тайлов: равномерный (указывается с помощью синтаксического элемента uniform_tile_spacing_flag, равного 1) и явный. При равномерном шаге тайлов они имеют одинаковую ширину, за возможным исключением самого правого столбца тайла, и равную высоту, за возможным исключением самой нижней строки тайлов. Пря явно задаваемом шаге тайлов, ширины и высоты столбцов и строк тайлов (соответственно) (в единицах CTU) указывают явно, за исключением самого правого столбца и самой нижней строки (соответственно).
[0120] Аналогично указанию сетки тайлов существуют два режима указания, каким образом тайл разбивают на кирпичи, т.е. для каждого тайла может быть указан либо равномерный шаг кирпичей, либо явно задаваемый шаг. Сигнализация аналогична строкам тайлов.
[0121] Когда используют прямоугольные слайсы, то для каждого слайса, с помощью синтаксической структуры, (включающей и) следующей за синтаксическим элементом num_slices_in_pic_minusl, указывают следующее:
- индекс верхнего левого кирпича (за исключением первого слайса, для которого индекс принимают равным 0),
- разность индексов нижнего правого кирпича слайса и верхнего левого кирпича.
[0122] Семантика синтаксических элементов, показанных на фиг. 6, определена в версии 5 проекта VVC следующим образом:
[0123] Флаг single_tile_in_pic_flag, равный 1, определяет, что в каждом изображении, ссылающемся на данный набор PPS, имеется только один тайл. Флаг single_tile_in_pic_flag, равный 0, определяет, что в каждом изображении, ссылающемся на данный набор PPS, присутствует более одного тайла. Примечание: в отсутствие дополнительного разбиения на кирпичи внутри тайла весь тайл называют кирпичом. Когда изображения содержит только единственный тайл, без разбиения на кирпичи, его считают одним кирпичом. Для совместимости битовых потоков необходимо, чтобы значение single_tile_in_pic_flag было одинаковым для всех PPS, активированных внутри CVS.
[0124] Флаг uniform_tile_spacing_flag, равный 1, определяет, что границы столбцов тайлов, а также границы строки тайлов, распределены равномерно по изображению. Их сигнализируют с помощью синтаксических элементов tile_cols_width_minusl и tile_rows_height_minusl. Флаг uniform_tile_spacing_flag, равный 0, определяет, что границы столбцов тайлов, а также границы строки тайлов, не обязательно распределены равномерно по изображению. Их сигнализируют с помощью синтаксических элементов num_tile_columns_minusl и num_tile_rows_minusl, а также списка пар синтаксических элементов tile_column_width_minusl[i] и tile_row_height_minusl[i]. В случае его отсутствия, значение флага uniform_tile_spacing_flag принимают равным 1.
[0125] Значение tile_cols_width_minusl плюс 1 определяет ширину столбцов тайлов, за исключением самого правого столбца тайлов в изображении, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 1. Значение tile_cols_width_minusl должно лежать в диапазоне от 0 до PicWidthInCtbsY - 1 включительно. В случае его отсутствия значение tile_cols_width_minusl принимают равным PicWidthInCtbsY - 1.
[0126] Значение tile_rows_height_minusl плюс 1 определяет высоту строк тайлов, за исключением самой нижней строки тайлов в изображении, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 1. Значение tile_rows_height_minusl должно лежать в диапазоне от 0 до PicHeightInCtbsY - 1 включительно. В случае его отсутствия, значение tile_rows_height_minusl принимают равным PicHeightInCtbsY - 1.
[0127] Значение num_tile_columns_minusl плюс 1 определяет количество столбцов тайлов, на которые разбито изображение, когда флаг uniform_tile_spacing_flag равен 0. Значение num_tile_columns_minusl должно лежать в диапазоне от 0 до PicWidthInCtbsY - 1 включительно. Если флаг single_tile_in_pic_flag равен 1, значение num_tile_columns_minusl принимают равным 0. В противном случае, когда флаг uniform_tile_spacing_flag равен 1, значение num_tile_columns_minusl принимают равным заданному в процедуре сканирования растра СТВ, сканирования тайлов и сканирования кирпичей.
[0128] Значение num_tile_rows_minusl_плюс 1 определяет количество строк тайлов, на которое разбито изображение, когда флаг uniform_tile_spacing_flag равен 0. Значение num_tile_rows_minusl должно лежать в диапазоне от 0 до PicHeightInCtbsY - 1 включительно. Если флаг single_tile_in_pic_flag равен 1, значение num_tile_rows_minusl принимают равным 0. в противном случае, когда флаг uniform_tile_spacing_flag равен 1, значение num_tile_rows_minusl принимают равным заданному в процедуре сканирования растра СТВ, сканирования тайлов и сканирования кирпичей. Переменную NumTilesInPic задают равной (num_tile_columns_minusl + 1) * (num_tile_rows_minusl + 1). Когда флаг single_tile_in_pic_flag равен 0, NumTilesInPic должно быть больше 1.
[0129] Значение tile_column_width_minusl[i] плюс 1 определяет ширину i-го столбца тайлов, измеряемую в СТВ.
[0130] Значение tile_row_height_minusl[i] плюс 1 определяет высоту i-й строки тайлов, измеряемую в СТВ.
[0131] Флаг brick_splitting_present_flag, равный 1, определяет, что один или более тайлов изображений, ссылающих на этот PPS, могут быть разбиты на два или более кирпича. Флаг brick_splitting_present_flag, равный 0, определяет, что ни один из тайлов изображений, ссылающих на этот PPS, не могут быть разбиты на два или более кирпича.
[0132] Флаг brick_split_flag[i], равный 1, определяет, что i-й тайл разбит на два или более кирпича. Флаг brick_split_flag[i], равный 0, определяет, что i-й тайл не разбит на два или более кирпича. В случае его отсутствия, значение brick_split_flag[i] принимают равным 0.
[0133] Флаг uniform_brick_spacing_flag[i], равный 1, определяет, что горизонтальные границы кирпичей распределены равномерно по i-му столбцу тайлов и сигнализируются с использованием синтаксического элемента brick_height_minusl[i]. Флаг uniform_brick_spacing_flag[i], равный 0, определяет, что горизонтальные границы кирпичей не обязательно равномерно распределены по i-му тайлу и сигнализируются с использованием синтаксического элемента num_brick_rows_minusl[i] и списка синтаксических элементов brick_row_height_minusl[i][j]. В случае его отсутствия значение флага uniform_brick_spacing_flag[i] принимают равным 1.
[0134] Значение brick_height_minusl[i] плюс 1 определяет высоту строк кирпичей, за исключением нижнего кирпича в i-м тайле, измеряемую в СТВ, когда флаг uniform_brick_spacing_flag[i] равен 1. В случае его наличия значение brick_height_minusl должно лежать в диапазоне от 0 до RowHeight[i] - 2 включительно. В случае его отсутствия значение brick_height_minusl[i] принимают равным RowHeight[i] - 1.
[0135] Значение num_brick_rows_minusl[i] плюс 1 определяет количество кирпичей, на которые разбит i-й тайл, когда флаг uniform_brick_spacing_flag[i] равен 0. В случае его наличия значение num_brick_rows_minusl[i] должно лежать в диапазоне от 1 до RowHeight[i] - 1 включительно. Если флаг brick_split_flag[i] равен 0, значение of num_brick_rows_minusl[i] принимают равным 0. В противном случае, когда флаг brick_split_flag[i] равен 1, значение of num_brick_rows_minusl[i] принимают равным заданному в процедуре сканирования растра СТВ, сканирования растра тайлов и сканирования растра кирпичей.
[0136] Значение brick_row_height_minusl[i][j] плюс 1 определяет высоту j-го кирпича в i-м столбце тайлов, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 0.
[0137] Вычисляют перечисленные ниже переменные, и когда флаг uniform_tile_spacing_flag равен 1, значения num_tile_columns_minusl и num_tile_rows_minusl получают логически, и для каждого i в диапазоне от 0 до NumTilesInPic - 1 включительно, когда флаг uniform_brick_spacing_flag[i] равен 1, значение num_brick_rows_minusl[i] получают логически с помощью вызова процедуры сканирования растра СТВ, сканирования тайлов и сканирования кирпичей:
- список RowHeight[j] для j в диапазоне от 0 до num_tile_rows_minusl включительно, определяющий высоту j-й строки тайлов, измеряемую в СТВ,
- список CtbAddrRsToBs[ctbAddrRs] для ctbAddrRs в диапазоне от 0 до PicSizeInCtbsY - 1 включительно, определяющий преобразование из адреса СТВ при сканировании растра СТВ изображения в адрес СТВ при сканировании кирпичей,
- список CtbAddrRsToBs[ctbAddrRs] для ctbAddrRs в диапазоне от 0 до PicSizeInCtbsY - 1 включительно, определяющий преобразование из адреса СТВ при сканировании растра СТВ изображения в адрес СТВ при сканировании кирпичей,
- список BrickId[ctbAddrBs] для ctbAddrBs в диапазоне от 0 до PicSizeInCtbsY - 1 включительно, определяющий преобразование из адреса СТВ при сканировании кирпичей в идентификатор (ID) кирпича,
- список NumCtusInBrick[brickIdx] для brickIdx в диапазоне от 0 до NumBricksInPic - 1 включительно, определяющий преобразование из индекса кирпича в количество CTU в этом кирпиче,
- список FirstCtbAddrBs[brickIdx] для brickIdx в диапазоне от 0 до NumBricksInPic - 1 включительно, определяющий преобразование из идентификатора ID кирпича в адрес СТВ при сканировании кирпичей для первого СТВ внутри кирпича.
[0138] Флаг single_brick_per_slice_flag, равный 1, определяет, что каждый слайс, ссылающийся на данный набор PPS, содержит один кирпич. Флаг single_brick_per_slice_flag, равный 0, определяет, что каждый слайс, ссылающийся на данный набор PPS, может содержать более одного кирпича. В случае его отсутствия значение single_brick_per_slice_flag принимают равным 1.
[0139] Флаг rect_slice_flag, равный 0, определяет, что кирпичи во всех слайсах расположены в порядке сканирования растра, и информация о слайсах не сигнализируется в наборе PPS. Флаг rect_slice_flag, равный 1, определяет, что кирпичи во всех слайсах покрывают прямоугольную область изображения, и информация о слайсах сигнализируется в наборе PPS. Когда флаг single_brick_per_slice_flag равен 1, флаг rect_slice_flag принимают равным 1.
[0140] Количество num_slices_in_pic_minusl плюс 1 определяет количество слайсов в каждом изображении, ссылающемся на данный набор PPS. Значение num_slices_in_pic_minusl должно лежать в диапазоне от 0 до NumBricksInPic - 1 включительно. Когда это значение отсутствует, и флаг single_brick_per_slice_flag равен 1, значение num_slices_in_pic_minusl принимают равным NumBricksInPic - 1.
[0141] Значение top_left_brick_idx[i] определяет индекс кирпича, расположенного в левом верхнем углу i-го слайса. Значение top_left_brick_idx[i] не должно быть равно значению top_left_brick_idx[j] для любых i не равных j. Когда оно отсутствует, значение top_left_brick_idx[i] принимают равным i. Длина синтаксического элемента top_left_brick_idx[i] равна Ceil(Log2(NumBricksInPic) бит.
[0142] Значение bottom_right_brick_idx_delta[i] определяет разность между индексом кирпича, расположенного в нижнем правом углу i-го слайса, и top_left_brick_idx[i]. Когда флаг single_brick_per_slice_flag равен 1, значение bottom_right_brick_idx_delta[i] принимают равным 0. Длина синтаксического элемента bottom_right_brick_idx_delta[i] равна Ceil(Log2(NumBricksInPic - top_left_brick_idx[i])) бит.
[0143] Для совместимости битового потока предъявляется требование о том, что слайс должен включать либо набор полных тайлов, либо последовательность полных кирпичей одного тайла. Переменные NumBricksInSlice[i] и BricksToSliceMap[j], которые определяют количество кирпичей в i-м слайсе, а также соответствие кирпичей слайсам, получают следующим образом:
[0144] Итак, для сигнализации разбиения на тайлы и кирпичи, создана достаточно сложная синтаксическая структура. Она является во многих аспектах неоптимальной, например, в отношении количества синтаксических элементов, строк синтаксиса, количества режимов работы (т.е. отдельные равномерный режим и явный режим и для тайлов, и для кирпичей, а также отдельное указание границ тайлов и кирпичей), а также в отношении битового объема сигнализации.
[0145] Ниже будут представлены улучшенные способы сигнализации разбиения на тайлы и кирпичи.
[0146] Способ кодирования, в соответствии с первым аспектом настоящего изобретения, который проиллюстрирован на фиг. 7, включает кодирование (700) битового потока, включающего указание столбцов тайлов и указание высот кирпичей для одного или более столбцов тайлов одновременно, или кодирование, в битовом потоке или наряду с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; логическое получение (702), в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении всего изображения, потенциальных строк тайлов; логическое получение (704) или указание, является ли граница потенциальной строки тайлов границей строки тайлов; и кодирование (706) одного или более изображений в битовый поток с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0147] Способ декодирования в соответствии с первым аспектом настоящего изобретения включает декодирование, из битового потока или наряду с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; логическое получение, в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении всего изображения, потенциальных строк тайлов; логическое получение или декодирование, является ли граница потенциальной строки тайлов границей строки тайлов; и декодирование одного или более изображений из битового потока с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0148] То есть, столбцы тайлов и высоты кирпичей для каждого столбца тайлов указывает кодер и/или декодирует декодер. Потенциальные границы строки тайлов логически получают как границы кирпичей, находящихся на одной (горизонтальной) линии во всем изображении. То есть, для потенциальной границы строки тайлов может быть сделано заключение, что эта потенциальная граница строки тайлов является действительной границей строки тайлов. Логическое заключение о том, что потенциальная граница строки тайлов является действительной границей строки тайлов, может быть основано на заключениях, выполненных на основе другой информации, доступной в синтаксической структуре, или на основе отсутствия некоторой информации в синтаксической структуре, например, на основе отсутствия некоторого флага.
[0149] Альтернативно, является ли потенциальная граница строки тайлов реальной границей строки тайлов, может быть указано кодером и/или декодировано декодером. Такое указание может быть основано, например, на одном или более флагов, присутствующих в синтаксической структуре.
[0150] Следовательно, путем указания только столбцов тайлов и высот кирпичей для каждого столбца тайлов, а также логического получения потенциальных строк тайлов, разбиение может быть сигнализировано без сигнализации высот строк тайлов. В результате может быть повышена эффективность кодирования и снижен битрейт, необходимый для упомянутой сигнализации.
[0151] Ниже рассмотрены несколько примеров осуществления для первого аспекта настоящего изобретения, т.е. синтаксис и семантика для указания столбцов тайлов и высоты кирпичей для каждого столбца тайлов, без высот строк тайлов. Варианты осуществления настоящего изобретения одинаково применимы как для кодирования, формирующего часть битового потока, соответствующую предложенным синтаксису и семантике, так и для декодирования, декодирующего часть битового потока в соответствии с предложенными синтаксисом и семантикой.
[0152] Пример 1 синтаксиса и семантики:
[0153] Флаг uniform_tile_col_spacing_flag, равный 1, определяет, что границы столбцов тайлов распределены равномерно по изображению и сигнализируются с помощью синтаксического элемента tile_cols_width_minusl. Флаг uniform_tile_spacing_flag, равный 0, определяет, что границы столбцов тайлов не обязательно распределены равномерно по изображению и сигнализируются с помощью синтаксического элемента num_tile_columns_minusl, а также списка синтаксических элементов tile_column_width_minusl[i]. В случае его отсутствия значение uniform_tile_col_spacing_flag принимают равным 1.
[0154] Семантика tile_cols_width_minusl, num_tile_columns_minusl и tile_column_width_minusl[i] определена идентично семантике синтаксических элементов с теми же именами в версии 5 проекта VVC.
[0155] Если флаг uniform_tile_col_spacing_flag равен 1, NumTileColsInPic назначают равным PicWidthInCtbsY / (tile_cols_width_minusl + 1) + PicWidthInCtbsY % (tile_cols_width_minusl + 1). В противном случае NumTileColsInPic назначают равным num_tile_columns_minusl + 1.
[0156] Флаг uniform_brick_spacing_flag[i], равный 1, определяет, что горизонтальные границы кирпичей распределены равномерно по i-му столбцу тайлов и сигнализируются с использованием синтаксического элемента brick_height_minusl[i]. Флаг uniform_brick_spacing_flag[i], равный 0, определяет, что горизонтальные границы кирпичей не обязательно равномерно распределены по i-му тайлу и сигнализируются с использованием синтаксического элемента num_brick_rows_minusl[i] и списка синтаксических элементов brick_row_height_minusl[i][j]. В случае его отсутствия значение флага uniform_brick_spacing_flag[i] принимают равным 1.
[0157] Значение brick_height_minusl[i] плюс 1 определяет высоту строк кирпичей, за исключением нижнего кирпича в i-м столбце тайлов, измеряемую в СТВ, когда флаг uniform_brick_spacing_flag[i] равен 1.
[0158] Значение num brick_rows_minusl[i] плюс 1 определяет количество кирпичей, на которые разбит i-й столбец тайлов, когда флаг uniform_brick_spacing_flag[i] равен 0.
[0159] Значение brick_row_height_minusl[i][j] плюс 1 определяет высоту j-го кирпича в i-м столбце тайлов, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 0.
[0160] Пример 2 синтаксиса и семантики:
[0161] Пример 2 аналогичен примеру 1, однако дополнительно кодер указывает и/или декодер декодирует, является ли разбиение текущего столбца тайла на кирпичи идентичным предыдущему столбцу тайлов.
[0162] Семантика синтаксических элементов идентична примеру 1, за исключением введения описанной ниже семантики для copy_previous_col_flag[i].
Флаг copy_previous_col_flag[i], равный 1, определяет все из нижеперечисленного:
- значение uniform_brick_spacing_flag[i] принимают равным uniform_brick_spacing_flag[i-1],
- когда brick_height_minusl[i-1] присутствует, значение brick_height_minusl[i] принимают равным brick_height_minusl[i-1],
- когда num_brick_rows_minusl[i-1] присутствует, значение num_brick_rows_minusl[i] принимают равным num_brick_rows_minusl[i-1], а значение brick_row_height_minusl[i][j] принимают равным brick_row_height_minusl[i-1][j] для каждого значения] в диапазоне от 0 до num_brick_rows_minusl[i] - 1 включительно.
[0163] С другой стороны, проблема неоптимальной синтаксической структуры версии 5 проекта VVC может быть частично решена с помощью подхода, в котором ширины столбцов тайлов, высоты строк тайлов или высоты кирпичей могут указываться кодером и/или декодироваться декодером в заранее заданном порядке сканирования, до тех пор, пока не будет указано или декодировано (соответственно), что оставшиеся столбцы тайлов, строки тайлов или кирпичи (соответственно) имеют равный размер.
[0164] Способ кодирования в соответствии с таким вторым аспектом настоящего изобретения показан на фиг. 8, при этом способ включает следующие шаги: а) указание (800) количества разделов для назначения; b) определение (802) количества блоков, подлежащих назначению в разделы; с) указание (804), является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так, d) указание (806) количества блоков, подлежащих назначению в следующий раздел, и е) повтор (808) шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
[0165] Способ декодирования в соответствии со вторым аспектом настоящего изобретения включает следующие шаги: а) декодирование количества разделов, подлежащих назначению; b) определение количества блоков, подлежащих назначению в разделы; с) декодирование, является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так, d) декодирование количества блоков, подлежащих назначению в следующий раздел, и е) повтор шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
[0166] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в CTU (например, когда разделы представляют собой столбцы тайлов), высота изображения в CTU (например, когда разделы представляют собой строки тайлов, или когда разделы представляют собой строки кирпичей, указанные для одного или более полных столбцов тайлов одновременно), количество строк CTU в тайле (например, когда разделы представляют собой кирпичи тайла).
[0167] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей.
[0168] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые блоки являются прямоугольными блоками отсчетов изображения. Например, блок во втором аспекте настоящего изобретения, проиллюстрированном на фиг. 8, может быть блоком кодового дерева.
[0169] Следовательно, при помощи указания количества блоков, подлежащих назначению в разделы в заранее заданном порядке сканирования, могут быть значительно сокращены количество синтаксических элементов и битрейт, необходимые для упомянутой сигнализации, в особенности, когда оставшиеся блоки, все еще подлежащие назначению в разделы, назначают в оставшиеся разделы равномерно.
[0170] На фиг. 9 показан пример того, каким образом способ, показанный на фиг. 8, может быть реализован в соответствии с одним из вариантов осуществления настоящего изобретения. Итак, сначала указывают (900) количество разделов, например, столбцов тайлов и/или строк тайлов, подлежащих назначению, и определяют (902) количество блоков, NU, например, блоков кодового дерева (СТВ), подлежащих назначению в разделы. Для формирования цикла проверки того, что все блоки были назначены в один из разделов, проверяют (904), является ли количество разделов, NP, подлежащих назначению, большим единицы. Если это не так, т.е. NP=1, логически получают, или указывают (910), что все оставшиеся блоки, все еще подлежащие назначению, должны быть назначены в оставшийся раздел.
[0171] Однако если NP>1, проверяют (906), делится ли количество блоков, NU, подлежащих назначению, без остатка на количество NP разделов. Если это так, определяют (908), должно ли количество блоков, NU, быть назначено равномерно в оставшиеся разделы. Если это так, логически получают, или указывают (910), что все оставшиеся блоки, все еще подлежащие назначению, NU, должны быть назначены в оставшийся раздел (или разделы). Если найдено, что количество блоков, NU, подлежащих назначению, не делится без остатка на количество NP разделов (906), или определено (908), что количество блоков, NU, не должно быть распределено равномерно в оставшиеся разделы, указывают (912) количество блоков, подлежащих назначению в следующий раздел, в заранее заданном порядке сканирования. Количество блоков, NU, подлежащих назначению, уменьшают (914) на указанное количество блоков, подлежащих назначению в упомянутый следующий раздел, а количество разделов, NP, подлежащих назначению уменьшают на единицу (916). Затем цикл возвращается к проверке, превосходит ли количество разделов, NP, подлежащих назначению, единицу.
[0172] Способ, показанный на фиг. 9, может быть реализован аналогично декодированию в соответствии с одним из вариантов осуществления настоящего изобретения, описанным ниже. Сначала из битового потока, или наряду с ним, декодируют количество разделов, например, столбцов тайлов и/или строк тайлов, подлежащих назначению, и определяют количество блоков, NU, например блоков кодового дерева (СТВ), подлежащих назначению в разделы. Для формирования цикла проверки того, что все блоки были назначены в один из разделов, проверяют, является ли количество разделов, NP, подлежащих назначению, большим единицы. Если это не так, т.е. NP=1, логически получают, или декодируют, из битового потока или наряду с ним, что все оставшиеся блоки, все еще подлежащие назначению, должны быть назначены в оставшийся раздел.
[0173] Однако если NP>1, проверяют, делится ли количество блоков, NU, подлежащих назначению, без остатка на количество NP разделов. Если это так, декодируют, из битового потока или наряду с ним, должно ли количество блоков, NU, быть назначено равномерно в оставшиеся разделы. Если найдено, что количество блоков, NU, подлежащих назначению, не делится без остатка на количество NP разделов, или если декодировано, из битового потока или наряду с ним, что количество блоков, NU, не должно быть распределено равномерно в оставшиеся разделы, то декодируют, из битового потока или наряду с ним, количество блоков, подлежащих назначению в следующий раздел, в заранее заданном порядке сканирования. Количество блоков, NU, подлежащих назначению, уменьшают на указанное количество блоков, подлежащих назначению в упомянутый следующий раздел, а количество разделов, NP, подлежащих назначению уменьшают на единицу. Затем цикл возвращается к проверке, превосходит ли количество разделов, NP, подлежащих назначению, единицу.
[0174] Ниже рассмотрен один из примеров осуществления для второго аспекта настоящего изобретения, т.е. для синтаксиса и семантики унифицированной сигнализации о явно заданном или равномерном разбиении на тайлы и кирпичи. Данный вариант осуществления настоящего изобретения одинаково применим как для кодирования, формирующего часть битового потока, соответствующуюо предложенным синтаксису и семантике, так и для декодирования, декодирующего часть битового потока в соответствии с предложенными синтаксисом и семантикой.
[0175] В данном примере упомянутую унифицированную сигнализацию используют для задания ширины столбцов тайлов и высот строк тайлов, тогда как сигнализация кирпичей идентична версии 5 проекта VVC.
[0176] Флаг rem_tile_col_equal_flag[i], равный 0, определяет, что столбцы тайлов с индексами в диапазоне от 0 до i включительно не обязательно должны иметь одинаковую ширину, измеряемую в СТВ.
Флаг rem_tile_col_equal_flag[i], равный 1, определяет, что столбцы тайлов с индексами в диапазоне от 0 до i включительно имеют одинаковую ширину, измеряемую в СТВ, при этом tile_column_width_minusl[j] принимают равным remWidthInCtbsY / (i+1) для каждого значения j в диапазоне от 0 до i включительно.
[0177] Флаг rem_tile_rowe_qual_flag[i], равный 0, определяет, что строки тайлов с индексами в диапазоне от 0 до i включительно не обязательно должны иметь равную высоту, измеряемую в СТВ.
Флаг rem_tile_row_equal_flag[i], равный 1, определяет, что строки тайлов с индексами в диапазоне от 0 до i включительно имеют равную высоту, измеряемую в СТВ, при этом tile_row_height_minusl[j] принимают равным remHeightInCtbsY / (i+1) для каждого значения] в диапазоне от 0 до i включительно.
[0178] Семантика остальных синтаксических элементов может быть определена идентично семантике синтаксических элементов с идентичными именами в версии 5 проекта VVC.
[0179] Ниже будет рассмотрен пример осуществления для еще одного из аспектов настоящего изобретения, то есть, синтаксис и семантика, включающие одновременно указание столбцов тайлов и высот кирпичей для каждого столбца тайла, а также унифицированную сигнализацию о явно заданном или равномерном разбиении на тайлы и кирпичи. Данный вариант осуществления настоящего изобретения одинаково применим как для кодирования, формирующего часть битового потока, соответствующую предложенным синтаксису и семантике, так и для декодирования, декодирующего часть битового потока в соответствии с предложенными синтаксисом и семантикой.
[0180] Ниже кратко изложена сущность данного примера осуществления настоящего изобретения, при этом он может быть адаптирован для декодирования заменой слова «указание» на «декодирование».
[0181] Столбцы тайлов указывают следующим образом:
- указывают количество столбцов тайлов (num_tile_columns_minusl);
- в цикле, проходящем по столбцам тайлов слева направо до тех пор, пока не будут пройдены все столбцы тайлов, или до тех пор, пока не будет указано, что все оставшиеся столбцы тайлов имеют равную ширину, указывают:
- если оставшаяся ширина (измеряемая в СТВ) делится без остатка на количество столбцов тайлов, все еще подлежащих назначению, указывают, имеют ли оставшиеся столбцы тайлов равную ширину (rem_tile_col_equal_flag[i]),
- если оставшиеся столбцы тайлов не имеют равную ширину, указывают ширину столбца тайла (tile_column_width_minusl[i]).
[0182] Перечисленное ниже указывают в цикле, который проходит по столбцам тайлов слева направо, для прямоугольных слайсов, и включает только одну запись в теле цикла, которая определяет высоты строк тайлов для слайсов в режиме сканирования растра:
- Флаг, указывающий, является разбиение столбца тайлов на кирпичи идентичным предыдущему столбцу тайлов. Этот флаг отсутствует для самого левого столбца тайлов (copy_previous_col_flag[i]). Следует отметить, что этот флаг в данном примере осуществления настоящего изобретения может быть опущен, или могут быть другие альтернативы, описанные ниже, подходящие для достижения аналогичной этому флагу функциональности.
- Когда разбиение тайлов на кирпичи в столбце тайлов не идентично предыдущему столбцу тайлов, кирпичи столбца тайлов указывают следующим образом:
- указывают количество кирпичей в столбце тайлов (num_bricks_minusl[i]),
- в цикле, проходящем по кирпичам сверху снизу вверх, пока не будут пройдены все кирпичи столбца тайлов, или до тех пор, пока не будет указано, что все оставшиеся кирпичи в столбце тайлов имеют равную высоту, указывают следующее:
если оставшаяся высота (измеряемая в СТВ) делится на количество кирпичей, все еще подлежащих определению, указывают, имеют ли оставшиеся кирпичи равную высоту (rem_brick_height_equal_flag[i][j]);
если оставшиеся кирпичи не имеют равную высоту, указывают высоту кирпича (brick_height_minusl[i][j]).
[0183] В данном примере осуществления настоящего изобретения может использоваться приведенный ниже синтаксис.
[0184] Значение num_tile_columns_minusl плюс 1 определяет количество столбцов тайлов, на которые разбито изображение, когда флаг uniform_tile_spacing_flag равен 0. Значение num_tile_columns_minusl должно лежать в диапазоне от 0 до PicWidthInCtbsY - 1 включительно. Когда флаг single_tile_in_pic_flag равен 1, значение num_tile_columns_minusl принимают равным 0.
[0185] Флаг rem_tile_col_equal_flag[i], равный 0, определяет, что столбцы тайлов с индексами в диапазоне от 0 до i включительно не обязательно должны иметь одинаковую ширину, измеряемую в СТВ.
Флаг rem_tile_col_equal_flag[i], равный 1, определяет, что столбцы тайлов с индексами в диапазоне от 0 до i включительно, считают имеющими одинаковую ширину, измеряемую в СТВ. Когда это флаг отсутствует, значение rem_tile_col_equal_flag[i] принимают равным 0.
[0186] Значение tile_column_width_minusl[i] плюс 1 определяет ширину i-го столбца тайлов, измеряемую в СТВ.
[0187] Флаг copy_previous_col_flag[i], равный 0, определяет, что присутствует значение that_num_bricks_minusl[i]. Флаг copy_previous_col_flag[i], равный 1, определяет все из нижеперечисленного:
- значение num_bricks_minusl[i] принимают равным num_bricks_minusl[i-1],
- флаг rem_brick_height_equal_flag[i][j] принимают равным rem_brick_height_equal_flag[i-1][j] для всех таких значений j в диапазоне от 0 до num_bricks_minusl[i] включительно, для которых значение rem_brick_height_equal_flag[i-1][j] присутствует или получено логически,
- значение brick_height_minusl[i][j] принимают равным brick_height_minusl[i-1][j] для таких значений j в диапазоне от 0 до num_bricks_minusl[i] включительно, для которых значение brick_height_minusl[i-1][j] присутствует.
[0188] Флаг copy_previous_col_flag[i], равный 0, определяет, что присутствует значение num_bricks_minusl[i]. Флаг copy_previous_col_flag[i], равный 1, определяет все из нижеперечисленного:
- значение num_bricks_minusl[i] принимают равным num_bricks_minusl[i-1],
- флаг rem_brick_height_equal_flag[i][j] принимают равным rem_brick_height_equal_flag[i-1][j] для всех таких значений j в диапазоне от 0 до num_bricks_minusl[i] включительно, для которых значение rem_brick_height_equal_flag[i-1][j] присутствует или получено логически, - значение brick_height_minusl[i]fj] принимают равным brick_height_minusl[i-1][j] для таких значений j в диапазоне от 0 до num_bricks_minusl[i] включительно, для которых значение brick_height_minusl[i-1][j] присутствует.
[0189] Флаг rem_brick_height_equal_flag[i][j], равный 0, определяет, что кирпичи с индексами в диапазоне от 0 до j включительно в i-м столбце тайлов не обязательно имеют равную высоту, измеряемую в СТВ. Флаг rem_brick_height_equal_flag[i][j], равный 1, определяет, что кирпичи с индексами в диапазоне от 0 до j включительно в i-м столбце тайлов считают имеющими равную высоту, измеряемую в СТВ. Когда этот флаг отсутствует, значение rem_brick_height_equal_flag[i][j] принимают равным 0.
[0190] Значение brick_height_minusl[i][j] плюс 1 определяет высоту j-го кирпича в i-м столбце тайлов, измеряемую в СТВ.
[0191] Семантика остальных синтаксических элементов может быть определена идентично семантике синтаксических элементов с идентичными именами в версии 5 проекта VVC.
[0192] В процедуре декодирования могут применяться переменные, соответствующие приведенному ниже описанию или аналогичные ему.
[0193] Список colWidth[i] в диапазоне от 0 до num_tile_columns_minusl включительно, определяющий ширину i-го столбца тайлов, измеряемую в СТВ, получают следующим образом:
[0194] Списки colBrickHeight[i][j] для i в диапазоне от 0 до num_tile_columns_minusl включительно и j в диапазоне от 0 до num_bricks_minusl[i] включительно, определяющие высоту j-й строки кирпичей, измеряемую в СТВ, в i-м столбце тайла, список RowHeight[j] для j в диапазоне от 0 до NumTileRows - 1 включительно, определяющий высоту j-й строкитайлов, измеряемую в СТВ, список tileRowBd[j] для j в диапазоне от 0 до NumTileRows включительно, определяющий местоположение границы j-й строки тайлов, измеряемое в СТВ, значение NumTileRows и значение NumTilesInPic получают следующим образом:
[0195] Когда флаг single_tile_in_pic_flag равен 0, NumTilesInPic должно быть больше 1. Список tileColBd[i] для i в диапазоне от 0 до num_tile_columns_minusl + 1 включительно, определяющий местоположение границы i-го столбца тайлов, измеряемое в СТВ, получают следующим образом:
[0196] Описанным ниже образом вычисляют переменную NumBricksInPic, определяющую количество кирпичей в изображении, ссылающемся на данный набор PPS, и списки BrickColBd[brickIdx], BrickRowBd[brickIdx], BrickWidth[brickIdx], BrickHeight[brickIdx] для brickIdx в диапазоне от 0 до NumBricksInPic - 1 включительно, определяющие местоположения вертикальных границ кирпичей, измеряемые в СТВ, местоположения горизонтальных границ кирпичей, измеряемые в СТВ, ширины столбцов кирпичей, измеряемые в СТВ, и высоты столбцов кирпичей, измеряемые в СТВ, и логически получают, для каждого i в диапазоне от 0 до NumTilesInPic - 1 включительно, когда флаг uniform_brick_spacing_flag[i] равен 1, значение num brick_rows_minusl[i].
[0197] В соответствии с одним из вариантов осуществления настоящего изобретения, способ кодирования включает следующие шаги: а) определение количества блоков, подлежащих назначению в разделы; b) указание или логическое получение количества разделов явно задаваемого размера, подлежащих назначению; с) указание размеров разделов явно задаваемого размера или количества блоков в них; и d) указание или логическое получение количества разделов равного размера, подлежащих назначению.
[0198] В соответствии с одним из вариантов осуществления настоящего изобретения, способ декодирования включает следующие шаги: а) определение количества блоков, подлежащих назначению в разделы; b) декодирование или логическое получение количества разделов явно задаваемого размера, подлежащих назначению; с) декодирование размеров разделов явно задаваемого размера или количества блоков в них; и d) декодирование или логическое получение количества разделов равного размера, подлежащих назначению.
[0199] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в CTU (например, когда разделы представляют собой столбцы тайлов), высота изображения в CTU (например, когда разделы представляют собой строки тайлов, или когда разделы представляют собой строки кирпичей, указанные для одного или более полных столбцов тайлов одновременно), количество строк CTU в тайле (например, когда разделы представляют собой кирпичи тайла).
[0200] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей.
[0201] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, шаг d включает: определение количества блоков, все еще подлежащих назначению в разделы, при помощи вычитания количества блоков в разделах явно задаваемого размера из количества блоков, подлежащих назначению в разделы, при этом способ дополнительно включает:
- назначение разделов разделами явно задаваемого размера в соответствии с размерами или с количеством блоков в разделах явно задаваемого размера, и в соответствии с заранее заданным или указанным/декодированным порядком сканирования;
- назначение разделов разделами равного размера при помощи деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера, и в соответствии с заранее заданным или указанным/декодированным порядком сканирования.
[0202] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, количество разделов явно задаваемого размера указывают и/или декодируют из высокоуровневой синтаксической структуры (например, набор SPS), тогда как размеры разделов явно задаваемого размера и/или количество разделов равного размера, подлежащих назначению, могут указываться и/или декодироваться из низкоуровневой синтаксической структуры (например, набор PPS).
[0203] В соответствии с одним из вариантов осуществления настоящего изобретения, логически получают, что количество разделов явно задаваемого размера равно 1 (например, это может быть заранее задано в стандарте кодирования).
[0204] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, шаг d включает:
- определение набора или списка размеров разделов, по которым может быть равномерно распределено количество блоков, все еще подлежащих назначению в разделы;
- если количество элементов в упомянутом наборе или списке равно 1, логическое заключение о том, что количество разделов равного размера равно 1;
- указание и/или декодирование индекса (или аналогичной информации), соответствующей элементу набора или списка, при этом индекс указывает количество разделов равного размера, подлежащих назначению.
[0205] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, набор или список размеров разделов, в которые могут быть равномерно распределено упомянутое количество блоков, все еще подлежащих назначению, ограничивают путем исключения размеров разделов, меньших порога, при этом порог может быть заранее задан, например, в стандарте кодирования, или указан/декодирован. Например, заранее задана, или указана/декодирована, может быть минимальная ширина столбца тайлов в CTU.
[0206] В соответствии с одним из вариантов осуществления настоящего изобретения, индекс, соответствующий элементу упомянутого набора или списка, кодируют с помощью кодового слова фиксированной длины, например, u(v), при этом длина кодового слова определяется количеством элементов в наборе или списке.
Указание, является ли граница потенциальной строки тайлов границей строки тайлов
[0207] В некоторых из вариантов осуществления настоящего изобретения границу строки тайлов получают логически, когда горизонтальные границы кирпичей находятся на одной линии на протяжении всего изображения. В этом разделе представлен вариант осуществления настоящего изобретения для сигнализации границ строки тайлов. Этот вариант осуществления настоящего изобретения может применяться совместно с любыми вариантами осуществления изобретения, в которых, в синтаксисе, границы кирпичей указывают раньше границ строки тайлов.
[0208] Данный вариант осуществления настоящего изобретения может включать один или более из следующих шагов (некоторые из которых уже были описаны выше):
- Потенциальные границы строки тайлов логически получают как границы кирпичей, находящихся на одной (горизонтальной) линии во всем изображении.
- Кодер указывает, в битовом потоке или наряду с ним, и/или декодер декодирует, из битового потока или наряду с ним, образуют ли все находящиеся на одной линии границы кирпичей границы строки тайлов. Например, может использоваться флаг в синтаксисе битового потока.
- Если все находящиеся на одной линии границы кирпичей образуют границы строки тайлов, кодер указывает, в битовом потоке или наряду с ним, и/или декодер декодирует, из битового потока или наряду с ним, является ли эта граница границей строки тайлов. К примеру, в синтаксисе битового потока может присутствовать флаг для каждой границы находящихся на одной линии кирпичей (за исключением находящихся на одной линии границ кирпичей, которые являются границами изображения).
[0209] Например, может использоваться следующий синтаксис:
[0210] Значение NumAlignedBrickRows может быть вычислено аналогично NumTileRows в других вариантах осуществления настоящего изобретения.
[0211] Семантика представленных синтаксических элементов может быть определена описанным ниже образом.
[0212] Флаг explicit_tile_rows_flag, равный 0, определяет, что границу строк тайлов логически получают всякий раз, когда горизонтальные границы кирпичей находятся на одной линии на протяжении всего изображения. Флаг explicit_tile_rows_flag, равный 1, определяет, что присутствует синтаксический элемент tile_row_flag[i].
[0213] Флаг tile_row_flag[i], равный 0, определяет, что i-я горизонтальная граница, где горизонтальные границы кирпичей находятся на одной линии по ширине изображения, не является границей строки тайлов. Флаг tile_row_flag[i], равный 1, определяет, что i-я горизонтальная граница, где горизонтальные границы кирпичей находятся на одной линии по ширине изображения, является границей строки тайлов. 0-ая горизонтальная граница, где горизонтальные границы кирпичей находятся на одной линии по ширине изображения, является верхней границей изображения.
Указание столбцов тайлов. разбиение которых на кирпичи одинаково
[0214] В некоторых из примеров осуществления настоящего изобретения синтаксис включает указание на то, что столбец тайлов разбивают на кирпичи идентично предыдущему столбцу тайлов, в порядке ввода в цикл (например, сканирование столбцов тайлов слева направо). Нужно понимать, что варианты осуществления настоящего изобретения могут быть равноценно применимы без такого указания или с любым аналогичным указанием. К примеру, сканирование столбцов тайлов может выполняться слева направо, и, следовательно, может быть указано, что разбиение на кирпичи текущего столбца тайлов должно быть скопировано из столбца тайлов справа. В другом примере может быть указано, или логически получено, что все столбцы тайлов равной ширины имеют одинаковое разбиение на кирпичи. В еще одном из примеров указывают индекс столбца тайлов, из которого должно быть скопировано разбиение на кирпичи. Нужно также понимать, что могут равноценно применяться варианты осуществления настоящего изобретения, в которых используют другие методы заключения о разбиении столбца тайлов на кирпичи на основе предшествующих указаний. В настоящем разделе представлены некоторые из соответствующих вариантов осуществления изобретения.
[0215] В одном из вариантов осуществления настоящего изобретения кодер указывает, в битовом потоке или наряду с ним, и/или декодер декодирует, из битового потока или наряду с ним, имеют ли все столбцы тайлов, имеющие одинаковую ширину (например, в СТВ), одинаковое разбиение на кирпичи. К примеру, может использоваться синтаксический элемент с именем same_brick_spacing_in_equally_wide_tile_cols_flag.
[0216] В одном из вариантов осуществления настоящего изобретения кодер указывает, в битовом потоке или наряду с ним, и/или декодер декодирует, из битового потока или наряду с ним, количество смежных столбцов тайлов, в порядке ввода в цикл (например, сканирование столбцов тайлов слева направо), имеющих одинаковое разбиение на кирпичи. Например, синтаксический элемент с именем num_tile_cols_with_same_brick_partitioning_minusl[i], может быть кодирован в формате u(v), где v определяется количеством оставшихся столбцов тайлов, для которых разбиение на кирпичи еще не указано.
[0217] В одном из вариантов осуществления настоящего изобретения кодер может указывать, в битовом потоке или наряду с ним, и/или декодер может декодировать, из битового потока или наряду с ним, присутствуют ли синтаксические элементы, относящиеся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи (например, флаг copy_previous_col_flag[i]). В одном из вариантов осуществления настоящего изобретения такое указание находится в синтаксической структуре на уровне последовательности, например, в наборе SPS. В еще одном из вариантов осуществления настоящего изобретения такое указание может находиться в синтаксической структуре уровня изображения, например, в наборе PPS. В одном из вариантов осуществления настоящего изобретения может быть заранее задано, например, в стандарте кодирования, что отсутствие синтаксических элементов, относящихся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи, может вызывать указание и/или декодирование разбиения на кирпичи для всех столбцов тайлов по отдельности. В одном из вариантов осуществления настоящего изобретения может быть заранее задано, например, в стандарте кодирования, что отсутствие синтаксических элементов, относящихся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи, может вызывать указание и/или декодирование разбиения на кирпичи для одного столбца тайлов и логическое заключение о том, что оно такое же для всех столбцов тайлов. В одном из вариантов осуществления настоящего изобретения способ обработки отсутствия синтаксических элементов, относящихся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи, указывает кодер, в битовом потоке или наряду с ним, например, в наборе SPS, и/или декодирует декодер, из битового потока или наряду с ним, например, из набора SPS. Упомянутый способ может быть указан и/или декодирован в составе заранее заданного набора процедур, который может включать, без ограничения перечисленным: i) указание и/или декодирование разбиения на кирпичи для всех столбцов тайлов по отдельности, и ii) указание и/или декодирование разбиения на кирпичи для одного столбца тайлов и логическое заключение о том, что оно является одинаковым для всех столбцов тайлов.
[0218] Таким образом, синтаксис и семантика для сигнализации разбиения на тайлы и кирпичи, в соответствии с вариантами осуществления настоящего изобретения, обеспечивают значительное сокращение количества синтаксических элементов и строк синтаксиса, необходимых для реализации упомянутой сигнализации. В результате достигается значительная экономия количества битов, необходимых для указания разбиения на тайлы и кирпичи.
[0219] Эти преимущества проиллюстрированы на следующем примере, где три различных разбиения на тайлы и кирпичи, показанные на фиг. 9а, 9b и 9с, используются для сравнения эффективности разбиения на тайлы и кирпичи согласно версии 5 проекта VVC и разбиения на тайлы и кирпичи в соответствии с некоторыми из вариантов осуществления настоящего изобретения.
[0220] На фиг. 10а и 10b представлены разбиения на тайлы и кирпичи, которые обеспечивают реализацию равнопрямоугольной проекции (equirectangular projection, ERP) и проекции кубической карты (cubemap projection, CMP) с эффективным разрешением 6K (соответственно), которые описаны в пунктах D.6.3 и D.6.4 (соответственно) формата всенаправленных медиа (Omnidirectional Media Format, OMAF, ISO/IEC 23090-2). Эти схемы приведены в Рекомендациях форума индустрии виртуальной реальности (VR Industry Forum Guidelines). Схема, представленная на фиг. 10с, практически эквивалентна схеме на фиг. 10b, однако там применяют отличающееся соотношение сторон изображения.
[0221] Для версии 5 проекта VVC и варианта осуществления настоящего изобретения, объединяющего указание столбцов тайлов и высот кирпичей для каждого столбца тайлов, и унифицированную сигнализацию явно задаваемого или равномерного разбиения на тайлы и кирпичи, были получены следующие характеристики: - количество синтаксических элементов для указания разбиения на тайлы и кирпичи,
- количество строк синтаксиса для указания разбиения на тайлы и кирпичи,
- количество бит, необходимых для указания разбиения на тайлы и кирпичи для схем, представленных на чертеже ниже,
- экономия количества бит в процентах, обеспечиваемая упомянутым вариантом осуществления настоящего изобретения, по сравнению с версией 5 проекта VVC для схем, представленных на чертеже ниже.
[0222] Характеристики, полученные при размере блоков СТВ яркости, равном 128×128, представлены в таблице ниже.
[0223] Соответственно, можно видеть, что количество синтаксических элементов сократилось с 13 до 7, а количество требуемых строк синтаксиса сократилось с 26 до 20. Экономия количества битов, обеспечиваемая предложенным вариантом осуществления настоящего изобретения для каждого из разбиений на тайлы и кирпичи на фиг. 10а-10с составляет более 50% по сравнению с версией 5 проекта VVC. Также следует отметить, что посредством настоящего изобретения могут быть сокращены семантика и процедуры вычислений.
Указание некодированных тайлов или кирпичей
[0224] В некоторых применениях желательно иметь возможность назначить контент, который должен быть кодирован и/или декодирован, в тайлы и/или кирпичи таким образом, чтобы было занято только подмножество тайлов и/или кирпичей. К примеру, при потоковой передаче 360-градусного видео, зависящей от порта просмотра, может приниматься только подмножество независимо кодированных областей изображения, например, тайлов. В другом примере может применяться кодирование объемного видео (volumetric) или видео облака точек (point cloud) на основе патчей (patch-based), где патчи занимают только подмножество тайлов и/или кирпичей изображения.
[0225] В соответствии с одним из вариантов осуществления настоящего изобретения, применяемом для кодирования, некодированные тайлы или кирпичи указывают в синтаксической структуре до данных слайсов, в битовом потоке или наряду с ним. Для некодированных тайлов или кирпичей в данные слайсов не кодируют никаких синтаксических элементов. Некодированные тайлы или кирпичи восстанавливают (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения восстановленных отсчетов в массивах отсчетов равными 0.
[0226] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для декодирования, некодированные тайлы или кирпичи декодируют из синтаксической структуры, предшествующей данным слайсов, из битового потока или наряду с ним. Для некодированных тайлов или кирпичей из данных слайсов не декодируют никаких синтаксических элементов. Некодированные тайлы или кирпичи декодируют (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения восстановленных отсчетов в массивах отсчетов равными 0.
[0227] В соответствии с одним из вариантов осуществления настоящего изобретения, применяемым для кодирования и/или декодирования, количество некодированных кирпичей указывают для отдельных столбцов тайлов, например, с использованием слова переменной длины в формате ue(v). Кирпичи в столбце тайлов проходят в заранее заданном порядке сканирования (например, снизу вверх). Для каждого пройденного кирпича указывают и/или декодируют флаг, позволяющий заключить, является кирпич некодированным или нет. Если кирпич не кодирован, количество кирпичей, оставшихся для назначения как некодированные, уменьшают на 1. Процедура продолжается до тех пор, пока не останется кирпичей, которые можно назначить некодированными.
[0228] На фиг. 11 проиллюстрирована блок-схема видеодекодера, подходящего для применения вариантов осуществления настоящего изобретения. На фиг. 11 показана структура двухуровневого декодера, однако нужно понимать, что те же операции декодирования могут аналогичным образом применяться в одноуровневом декодере.
[0229] Видеодекодер 550 включает первую секцию 552 декодера для базового уровня и вторую секцию 554 декодера для предсказываемого уровня. Блок 556 иллюстрирует демультиплексор, предназначенный для предоставления информации об изображениях базового уровня в первую секцию 552 декодера, а также для предоставления информации об изображениях предсказываемого уровня во вторую секцию 554 декодера. Р'n обозначены предсказанные представления блока пикселей изображения. D'n обозначены восстановленные сигналы ошибки предсказания. Блоки 704, 804 иллюстрируют предварительно восстановленные изображения (I'n). R'n обозначено окончательное восстановленное изображение. Блоками 703, 803 проиллюстрировано обратное преобразование (Т-1). Блоками 702, 802 проиллюстрированное обратное квантование (Q-1). Блоками 701, 801 проиллюстрировано энтропийное декодирование (Е-1). Блоками 705, 805 проиллюстрирована память опорных кадров (reference frame memory, RFM). Блоками 706, 806 проиллюстрировано предсказание (Р) (либо внутреннее, либо внешнее предсказание). Блоками 707, 807 проиллюстрирована фильтрация (F). Блоки 708, 808 могут использоваться для комбинирования декодированной информации ошибки предсказания с предсказанными изображениями базового или предсказываемого уровня, в результате чего получают предварительно восстановленные изображения (I'n). Предварительно восстановленные и прошедшие фильтрацию изображения базового уровня могут выводиться (709) из первой секции 552 декодера, а предварительно восстановленные и прошедшие фильтрацию изображения предсказываемого ракурса могут выводиться (809) из второй секции 554 декодера.
[0230] Здесь под декодером понимают любой функциональный блок, способный выполнять операции декодирования, например, это может быть проигрыватель, приемник, шлюз, демультиплексор и/или декодер.
На фиг. 12 показана блок-схема алгоритма работы декодера в соответствии с одним из вариантов осуществления настоящего изобретения. Операции декодирования в вариантах осуществления настоящего изобретения практически аналогичны операциям кодирования, за исключением того, что декодер декодирует указания из битового потока или наряду с ним. Итак, способ декодирования включает: декодирование (1200) части битового потока, включающего указание столбцов тайлов и указание высот кирпичей для одного или более столбцов тайлов одновременно; логическое получение (1202), в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении всего изображения, потенциальных строк тайлов; логическое получение (1204) или декодирование указания, является ли граница потенциальной строки тайлов границей строки тайлов; и декодирование (1206) одного или более изображений из битового потока с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число пакетов кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк пакетов кодового дерева внутри тайла.
[0231] На фиг. 13 показана блок-схема алгоритма работы декодера в соответствии с еще одним из вариантов осуществления настоящего изобретения. Способ декодирования включает следующие шаги: а) декодирование (1300) указания количества разделов, подлежащих назначению; b) определение (1302) количества блоков, подлежащих назначению в разделы; с) определение (1304), является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так, d) определение (1306) количества блоков, подлежащих назначению в следующий раздел, и е) повтор (1308) шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
Указание разбиения изображения на прямоугольные слайсы
[0232] В следующих параграфах представлены варианты осуществления настоящего изобретения для усовершенствованных способов кодирования и/или декодирования сигнализации прямоугольных слайсов. Эти варианты осуществления настоящего изобретения могут применяться совместно с вариантами осуществления изобретения для разбиения на тайлы и кирпичи или независимо от них. Эти варианты осуществления настоящего изобретения основаны на определениях и свойствах тайлов, кирпичей и прямоугольных слайсов, принятых в версии 5 проекта VVC. С помощью предложенных вариантов осуществления настоящего изобретения количество битов, необходимых для указания прямоугольных слайсов (например, указания или получения местоположения, ширины и высоты прямоугольных слайсов), может быть сокращено.
[0233] Способ кодирования, в соответствии с первым аспектом настоящего изобретения, включает указание, в битовом потоке или наряду с ним, или логическое получение верхнего левого кирпича прямоугольного слайса. заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов; если прямоугольный слайс включает один или более кирпичей тайлов, указание, в битовом потоке или наряду с ним, или логическое получение количества кирпичей в прямоугольном слайсе.
[0234] Способ декодирования, в соответствии с первым аспектом настоящего изобретения, включает декодирование, из битового потока или наряду с ним, или логическое получение верхнего левого кирпича прямоугольного слайса; заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов; если прямоугольный слайс включает один или более кирпичей тайлов, декодирование, из битового потока или наряду с ним, или логическое получение количества кирпичей в прямоугольном слайсе.
[0235] Местоположение кирпича может быть, например, индексом кирпича в порядке сканирования кирпичей изображения.
[0236] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, когда местоположение верхнего левого кирпича прямоугольного слайса не является верхним левым кирпичом ни одного тайла, заключают, что прямоугольный слайс содержит один или более кирпичей тайла.
[0237] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, когда местоположение верхнего левого кирпича прямоугольного слайса является верхним левым кирпичом какого-либо тайла, и тайл содержит множество кирпичей, заключают, что прямоугольный слайс может включать либо кирпичи тайла, либо полные тайлы. В одном из вариантов осуществления настоящего изобретения, применимом для кодирования, если заключено, что прямоугольный слайс может содержать либо кирпичи тайла, либо полные тайлы, указывают, в битовом потоке или наряду с ним, содержит ли прямоугольный слайс кирпичи тайла или полные тайлы. В одном из вариантов осуществления настоящего изобретения, применимом для декодирования, если заключено, что прямоугольный слайс может содержать либо кирпичи тайла, либо полные тайлы, декодируют, из битового потока или наряду с ним, содержит ли прямоугольный слайс кирпичи тайла или полные тайлы.
[0238] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, если логически получено или указано (как часть кодирования), или декодировано, что прямоугольный слайс содержит кирпичи тайла, переменную, например, с именем numDeltaValues задают равной количеству кирпичей, следующих за местоположением верхнего левого кирпича прямоугольного слайса и находящихся в этом же тайле. Если numDeltaValues равно 1, делают вывод о том, что прямоугольный слайс содержит ровно один кирпич. В противном случае переменную numDeltaValues используют для вычисления длины первого синтаксического элемента, указывающего на нижний правый кирпич прямоугольного слайса, или второго синтаксического элемента, указывающего на количество кирпичей в прямоугольном слайсе, или третьего синтаксического элемента, указывающего на высоту (в кирпичах) прямоугольного слайса, или любого аналогичного синтаксического элемента. Например, первый, второй или третий синтаксический элемент или любой аналогичный синтаксический элемент может быть кодирован в формате u(v), а его длина может составлять Ceil ((numDeltaValues)) бит.
[0239] В одном из примеров осуществления настоящего изобретения применяют следующий синтаксис:
[0240] Семантика синтаксических элементов может быть определена в соответствии с предшествующим описанием, за исключением того, что значение bottom_right_brick_idx_delta[i] определяет разность между индексом кирпича, расположенного в нижнем правом углу i-го слайса и top_left_brick_idx[i]. Когда флаг single_brick_per_slice_flag равен 1, значение bottom_right_brick_idx_delta[i] принимают равным 0. В случае его отсутствия значение bottom_right_brick_idx_delta[i] принимают равным 0. Переменную numDeltaValues, определяющую количество значений, которые может принимать bottom_right_brick_idx_delta[i], вычисляют следующим образом:
[0241] Длина синтаксического элемента bottom_right_brick_idx_delta[i] составляет Ceil(Log2(numDeltaValues)) битов. Переменная NumBricksIntile[brickIdx] определяет количество кирпичей в тайле, содержащем кирпич с индексом brickIdx при сканировании кирпичей изображения. Переменная BrickIdxIntile[brickIdx] определяет индекс кирпича внутри тайла, содержащего этот кирпич, когда кирпич имеет индекс brickIdx при сканировании кирпичей изображения.
[0242] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, местоположение верхнего левого кирпича прямоугольного слайса получают логически. Вначале все местоположения кирпичей маркируют как свободные. Цикл назначения кирпичей в прямоугольные слайсы включают, в битовом потоке или наряду с ним, или декодируют, из битового потока или наряду с ним. При каждом входе в цикл считают, что верхний левый кирпич прямоугольного слайса будет следующим свободным местоположением кирпича в заранее заданном, указанном или декодированном порядке сканирования. К примеру, может быть заранее определено, например, в стандарте кодирования, что используется порядок сканирования кирпичей в изображении. Нижний правый кирпич прямоугольного слайса может быть получен логически, указан или декодирован, например, в соответствии с предшествующим описанием, а кирпичи, образующие прямоугольник с верхним левым кирпичом и правым нижним кирпичом в углах, маркируют как назначенные. Эту же, или аналогичную, процедуру выполняют при каждом входе в цикл.
[0243] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, когда заключено (как часть кодирования или декодирования) или указано (как часть кодирования), или декодировано (как часть декодирования), что прямоугольный слайс включает полные тайлы, синтаксический элемент для указания на нижний правый кирпич прямоугольного слайса вычисляют на основе одного или более из следующего:
- Получают набор возможных местоположений нижнего правого кирпича. Этот набор может включать только те местоположения кирпичей, которые являются последними местоположениями кирпича в пределах тайла, расположены в строке или под строкой тайлов, содержащей левый верхний кирпич прямоугольного тайла, расположены в столбце тайлов или справа от столбца тайлов, содержащего верхний левый кирпич прямоугольного тайла, и включают прямоугольный набор свободных местоположений тайлов (еще не назначенных ни в какие прямоугольные слайсы).
- Записи в наборе возможных местоположений нижнего правого кирпича индексируют, или нумеруют.
- Длину синтаксического элемента, кодированного в формате u(v), для указания на нижний правый кирпич прямоугольного слайса вычисляют на основе количества записей в наборе возможных местоположений нижнего правого кирпича. Если количество записей numEnt равно 1, индекс нижнего правого кирпича не нужно указывать или декодировать. В противном случае длина этого синтаксического элемента равна Ceil(Log2(numEnt)) бит.
- Синтаксический элемент для указания на нижний правый кирпич прямоугольного слайса представляет собой индекс в пронумерованном наборе возможных местоположений нижнего правого кирпича.
[0244] Способ кодирования в соответствии со вторым аспектом настоящего изобретения включает:
- указание, в битовом потоке или наряду с ним, или логическое получение местоположения верхнего левого кирпича прямоугольного слайса;
- заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов;
- если прямоугольный слайс содержит один или более кирпичей тайла, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, в противном случае, если левый верхний кирпич находится в самом правом столбце тайлов, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, и в противном случае, указание, в битовом потоке или наряду с ним, на ширину прямоугольного слайса в столбцах тайлов;
- если прямоугольный слайс содержит один или более кирпичей тайлов, указание, в битовом потоке или наряду с ним, или логическое получение количества кирпичей в прямоугольном слайсе; в противном случае, если верхний левый кирпич находится в самой нижней строке тайлов, логическое заключение о том, что высота прямоугольного слайса равна одной строке тайлов, и в противном случае, указание, в битовом потоке или наряду с ним, высоты прямоугольного слайса в строках тайлов.
[0245] Способ декодирования в соответствии со вторым аспектом настоящего изобретения включает:
- декодирование, из битового потока или наряду с ним, или логическое получение местоположения верхнего левого кирпича прямоугольного слайса;
- заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов;
- если прямоугольный слайс содержит один или более кирпичей тайла, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, в противном случае, если левый верхний кирпич находится в самом правом столбце тайлов, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, и в противном случае, декодирование, из битового потока или наряду с ним, ширины прямоугольного слайса в столбцах тайлов;
- если прямоугольный слайс включает один или более кирпичей тайлов, декодирование, из битового потока или наряду с ним, или логическое получение количества кирпичей в прямоугольном слайсе; в противном случае, если верхний левый кирпич находится в самой нижней строке тайлов, логическое заключение о том, что высота прямоугольного слайса равна одной строке тайлов, и в противном случае, декодирование, из битового потока или наряду с ним, высоты прямоугольного слайса в строках тайлов.
[0246] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования и применимом для первого аспекта и/или второго аспекта, количество кирпичей в прямоугольном слайсе принимают равным 1 (в кирпичах), когда заключено, или указано, или декодировано, что прямоугольный слайс содержит кирпичи тайла, и либо тайл содержит два кирпича и текущий кирпич (т.е. верхний левый кирпич прямоугольного слайса) является самым верхним кирпичом тайла, либо текущий кирпич является самым нижним кирпичом тайла.
[0247] В одном из примеров осуществления настоящего изобретения применяют следующий синтаксис:
[0248] Переменные и семантика синтаксических элементов могут быть определены в соответствии с предшествующим описанием, со следующими дополнениями:
- Переменная tlBrickIdx может быть определена как следующее свободное местоположение кирпича в заранее заданном порядке сканирования, например, сканирования кирпичей изображения, как это было описано ранее. Значение tlBrickIdx заново вычисляют для каждого значения i, то есть, при каждом входе в цикл.
Переменная numFreeColumnsOnTheRight[brickIdx] - это переменная, указывающая количество столбцов тайлов справа от кирпича с индексом brickIdx.
- Значение slice_width_minusl[i] плюс 1 определяет ширину i-го прямоугольного слайса в столбцах тайлов. В случае его отсутствия значение slice_height_minusl[i] принимают равным 0.
- Флаг full_tiles_in_slice_flag[i], равный 0, определяет, что i-й прямоугольный слайс содержит один или несколько кирпичей одного тайла. Флаг full_tiles_in_slice_flag[i], равный 1, определяет, что i-й прямоугольный слайс содержит один или более полных тайлов.
Значение full_tiles_in_slice_flag[i] принимают равным 0, когда BrickIdxIntile[tlBrickIdx] больше 0 (т.е. когда верхний левый кирпич прямоугольного слайса не является верхним левым кирпичом ни одного из тайлов). Флаг full_tiles_in_slice_flag[i] принимают равным 1, когда slice_width_minusl[i] больше 0, или когда BrickIdxIntile[tlBrickIdx] равно 0, и NumBricksIntile[tlBrickIdx] равно 1.
- Если флаг full_tiles_in_slice_flag[i] равен 0, numFreeRowsBelow[brickIdx] - это переменная, указывающая количество кирпичей в тайле под кирпичом с индексом brickIdx в этом же тайле. В противном случае numFreeRowsBelow[brickIdx] - это переменная, указывающая количество строк тайлов под тайлом, содержащем кирпич с индексом brickIdx.
- Если флаг full_tiles_in_slice_flag[i] равен 0, значение slice_height_minusl[i] плюс 1 определяет высоту i-го прямоугольного слайса в кирпичах. В противном случае значение slice_height_minusl[i] плюс 1 определяет высоту i-го прямоугольного слайса в строках тайлов. В случае его отсутствия значение slice_height_minusl[i] принимают равным 0.
[0249] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, длину синтаксического элемента ширины слайса (например, slice_width_minusl) вычисляют на основе количества возможных значений, исходя из местоположения верхнего левого кирпича прямоугольного слайса. С помощью описанных выше переменных и синтаксических элементов, длину slice_width_minusl получают как равную Ceil(Log2(numFreeColumnsOnTheRight[tlBrickIdx] + 1)).
[0250] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, длину синтаксического элемента высоты слайса (например, slice_height_minusl) вычисляют на основе количества возможных значений, исходя из местоположения верхнего левого кирпича прямоугольного слайса, и того, содержит ли прямоугольный слайс кирпичи одного тайла или полные тайлы. С помощью описанных выше переменных и синтаксических элементов, длину slice_height_minusl вычисляют как равную Ceil(Log2(numDeltaValues)), где numDeltaValues вычисляют следующим образом:
Указание некодированных прямоугольных слайсов
[0251] В некоторых применениях желательно иметь возможность назначить контент, который должен быть кодирован и/или декодирован, в прямоугольные слайсы таким образом, чтобы было занято только подмножество прямоугольных слайсов. Например, при потоковой передаче 360-градусного видео, зависящей от порта просмотра, может приниматься только подмножество прямоугольных слайсов. В другом примере может применяться кодирование объемного видео (volumetric) или видео облака точек (point cloud) на основе патчей (patch-based), где патчи занимают только подмножество прямоугольных слайсов изображения.
[0252] В соответствии с одним из вариантов осуществления настоящего изобретения, для кодирования, некодированные прямоугольные слайсы указывают в битовом потоке или наряду с ним, например, в наборе PPS. Некодированные прямоугольные слайсы не кодируют в битовый поток в виде блоков NAL VCL. Некодированные прямоугольные слайсы восстанавливают (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения восстановленных отсчетов в массивах отсчетов равными 0.
[0253] В соответствии с одним из вариантов осуществления настоящего изобретения, для декодирования, некодированные прямоугольные слайсы декодируют из битового потока или наряду с ним, например, из набора PPS. Некодированные прямоугольные слайсы не декодируют из битового потока в виде блоков NAL VCL. Вместо этого некодированные прямоугольные слайсы декодируют (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения декодированных отсчетов в массивах отсчетов равными 0.
[0254] В соответствии с одним из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, для каждого прямоугольного слайса указывают и/или декодируют флаг, который указывает, является прямоугольный слайс некодированным или нет.
[0255] В соответствии с одним из вариантов осуществления настоящего изобретения, количество некодированных прямоугольных слайсов указывают и/или декодируют с использованием кодового слова переменной длины, например, в формате ue(v). Прямоугольные слайсы проходят в заранее заданном порядке сканирования (например, в обратном порядке сканирования растра верхних левых CTU прямоугольных слайсов). Для каждого пройденного прямоугольного слайса указывают и/или декодируют флаг, позволяющий заключить, является ли прямоугольный слайс некодированным или нет. Если прямоугольный слайс не кодирован, количество прямоугольных слайсов, оставшихся для обозначения как некодированные, уменьшают на 1. Процедура продолжается до тех пор, пока не останется прямоугольных слайсов, которые можно обозначить некодированными.
[0256] Фиг. 14 является графическим представлением типовой системы мультимедийной связи, в которой могут быть реализованы различные варианты осуществления настоящего изобретения. В соответствии с иллюстрацией фиг. 8, источник 1510 данных предоставляет исходный сигнал в аналоговом, несжатом цифровом или сжатом цифровом формате, или в любой комбинации из этих форматов. Кодер 1520 может иметь в своем составе средства предварительной обработки, например, средства преобразования формата данных и/или средства фильтрации исходного сигнала, или может иметь соединение с такими средствами. Кодер 1520 кодирует исходный сигнал в кодированный битовый поток медиаданных. Следует отметить, что кодируемый битовый поток может приниматься, напрямую или опосредованно, от удаленного устройства, расположенного в сети практически любого типа. Также, битовый поток может приниматься от локального аппаратного или программного обеспечения. Кодер 1520 может быть способен кодировать более одного типа медиаданных, например, аудио- и видеоданные, или могут требоваться более одного кодера 1520 для кодирования различных типов исходного сигнала. Кодер 1520 может также получать входные данные, полученные при помощи синтеза, такие как графику или текст, или может быть способен формировать кодированные битовые потоки синтезированных медиаданных. Ниже, для простоты описания, будет рассмотрена обработка только одного кодированного битового потока, содержащего однотипные мультимедийные данные. Однако нужно отметить, что обычно сервисы вещания реального времени включают несколько потоков (как правило, по меньшей мере один аудиопоток, видеопоток и текстовый поток субтитров). Также, нужно отметить, что система может включать множество кодеров, однако на фиг. 8, для простоты описания, без потери общности, показан только один кодер 1520. Описание и примеры в настоящем документы описывают именно процедуру кодирования, однако при этом специалисты в данной области техники должны понимать, что те же самые принципы и идеи применимы и для соответствующей процедуры декодирования, и наоборот.
[0257] Кодированный битовый поток медиаданных может быть передан в хранилище 1530. Хранилище 1530 может включать любой тип запоминающего устройства большой емкости для хранения кодированного битового потока медиаданных. Формат кодированного битового потока медиаданных в хранилище 1530 может быть элементарным автономным форматом битового потока, или один или более кодированных битовых потоков медиаданных могут быть инкапсулированы в контейнерный файл, или кодированные медиаданные могут быть инкапсулированы в формат сегмента (Segment), подходящего для DASH или аналогичной системы потоковой передачи), и храниться в виде последовательности сегментов. Если один или более битовых потоков медиаданных инкапсулируют в контейнерный файл, может применяться формирователь файлов (не показан на чертеже) для сохранения одного или более битовых потоков медиаданных в файл и для формирования метаданных формата файла, которые также сохраняют в файл. Кодер 1520 и/или хранилище 1530 могут включать формирователь файлов, или же формирователь файлов может быть функционально связан кодером 1520 и/или хранилищем 1530. Некоторые системы работают «на лету», то есть не используют память и передают кодированный битовый поток мультимедийных данных из кодера 1520 непосредственно в передатчик 1540. Затем кодированный битовый поток медиаданных передают, когда это необходимо, в передатчик 1540, также именуемый сервером. Формат, используемый при передаче, может быть элементарным автономным форматом битового потока, пакетным форматом потока, форматом сегментов (Segment), подходящих для DASH или аналогичной системы потоковой передачи, или один или более кодированных битовых потоков медиаданных могут быть инкапсулированы в контейнерный файл. Кодер 1520, хранилище 1530 и передатчик 1540 могут располагаться в одном и том же физическом устройстве, или же они могут входить в состав отдельных устройств. Кодер 1520 и сервер 1540 могут работать с данными реального времени, и в этом случае кодированный битовый поток медиаданных, как правило, не хранят на постоянной основе, а буферизуют в течение небольших промежутков времени в кодере 1520 видеоданных и/или на сервере 230 для сглаживания колебаний задержек на обработку, задержек на передачу и битрейта кодированных медиаданных.
[0258] Сервер 1540 передает кодированный битовый поток медиаданных с использованием стека протоколов связи. Стек может включать, без ограничения перечисленным, одно или более из следующего: протокол передачи в реальном времени (RTP), протокол пользовательских датаграмм (UDP), протокол передачи гипертекста (Hypertext Transfer Protocol, HTTP), протокол управления передачей (Transmission Control Protocol, TCP) и протокол Интернета (IP). Когда стек протоколов связи является пакетным, сервер 1540 инкапсулирует кодированный битовый поток медиаданных в пакеты. Например, когда используется протокол RTP, сервер 1540 инкапсулирует кодированный битовый поток медиаданных в пакеты RTP согласно формату полезной нагрузки протокола RTP. Как правило, каждый тип медиаданных имеет отдельный формат полезной нагрузки RTP. Следует еще раз отметить, что система может содержать более одного сервера 1540, но для простоты в последующем описании рассмотрен только один сервер 1540.
[0259] Если мультимедийные данные инкапсулированы в контейнерный файл для хранилища 1530 или для ввода данных в передатчик 1540, передатчик 1540 может иметь в своем составе «анализатор передаваемого файла» (не показан на чертеже) или может быть функционально связан с подобным элементом. В частности, если контейнерный файл сам по себе не передают, но по меньшей мере один содержащийся в нем кодированный битовый поток медиаданных инкапсулируют для передачи по протоколу связи, анализатор передаваемого файла находит соответствующие части кодированного битового потока медиаданных, подлежащие передаче по протоколу связи. Анализатор передаваемого файла может также быть полезен при создании корректного формата для протокола связи, например, заголовков и полезной нагрузки пакетов. Мультимедийный контейнерный файл может содержать инструкции по инкапсуляции, такие как треки указаний в ISOBMFF, используемые для инкапсуляции по меньшей мере одного кодированного битового потока медиаданных в протокол связи.
[0260] Сервер 1540, опционально, может быть соединен со шлюзом 1550 по сети связи, которая может представлять собой, например, комбинацию из CDN, Интернета и/или одной или более сетей доступа. В дополнение или альтернативно, шлюз может называться промежуточным узлом. В случае DASH шлюз может быть пограничным сервером (сети CDN) или веб-прокси-сервером. Следует отметить, что в общем случае система может включать любое количество шлюзов или аналогичных элементов, однако для простоты в приведенном ниже описании рассмотрен только один шлюз 1550. Шлюз 1550 может выполнять функции различных типов, например, трансляцию потока пакетов, соответствующего одному стеку протоколов связи, в другой стек протоколов связи, слияние и разветвление потоков данных и манипуляцию потоками данных согласно возможностям нисходящей линии связи и/или приемника, например, управление битовой скоростью передачи данных перенаправляемого потока согласно превалирующим сетевым условиям в нисходящей линии связи. Шлюз 1550 в различных вариантах осуществления настоящего изобретения может быть серверным объектом.
[0261] Система включает один или более приемников 1560, которые, в общем случае, способны принимать, демодулировать и/или декапсулировать переданный сигнал с получением кодированного битового потока мультимедийных данных. Кодированный битовый поток медиаданных может быть передан в записывающее хранилище 1570. Записывающее хранилище 1570 может включать любой тип запоминающего устройства большой емкости для хранения кодированного битового потока медиаданных. Записывающие хранилище 1570 может, дополнительно или альтернативно, включать вычислительную память, например, память с произвольным доступом. Формат кодированного битового потока медиаданных в записывающем хранилище 1570 может быть элементарным автономны форматом битового потока, или один или более кодированных битовых потоков медиаданных могут быть инкапсулированы в контейнерный файл. Если имеются несколько кодированных битовых потоков медиаданных, например, аудиопоток и видеопоток, связанные друг с другом, то, как правило, применяют контейнерный файл, и приемник 1560 содержит формирователь контейнерного файла (или связан с подобным формирователем), формирующий контейнерный файл на основе входных потоков. Некоторые системы работают «на лету», то есть передают кодированный битовый поток медиаданных из приемника 1560 непосредственно в декодер 1580, без задействования записывающего хранилища 1570. В некоторых системах в записывающем хранилище 1570 хранят только последнюю по времени часть записанного потока, например, последний 10-минутный фрагмент записанного потока, тогда как все ранее записанные данные удаляют из записывающего хранилища 1570.
[0262] Кодированный битовый поток медиаданных из записывающего хранилища 1570 может быть передан в декодер 1580. Если имеются несколько кодированных битовых потоков медиаданных, например, аудиопоток и видеопоток, связанные друг с другом и инкапсулированные в контейнерный файл, или один битовый поток, который инкапсулирован в контейнерный файл, например, для более простого доступа, то применяют анализатор файлов (не показан на чертеже) для декапсуляции всех кодированных битовых потоков медиаданных из контейнерного файла. Записывающее хранилище 1570 или декодер 1580 могут иметь анализатор файлов в своем составе, или анализатор файлов может быть связан с записывающим хранилищем 1570, или с декодером 1580. Также, нужно отметить, что система может включать множество декодеров, однако в данном документе, для простоты описания, без потери общности, показан только один декодер 1580.
[0263] Кодированный битовый поток медиаданных может далее обрабатываться декодером 1580, на выходе которого получают один или более несжатых потоков медиаданных. Наконец, рендерер 1590 может воспроизводить несжатые потоки мультимедийных данных, например, с помощью громкоговорителя или дисплея. Приемник 1560, записывающее хранилище 1570, декодер 1580 и рендерер 1590 могут располагаться в одном и том же физическом устройстве, или же они могут входить в состав отдельных устройств.
[0264] Выше часть вариантов осуществления настоящего изобретения была описана на примере стандарта WC/H.266 и/или с использованием соответствующей терминологии. Нужно понимать, что варианты осуществления настоящего изобретения могут быть аналогичным образом реализованы с любым видеокодерами и/или видеодекодерами.
[0265] Выше некоторые из примеров осуществления настоящего изобретения были описаны с упоминанием конкретных синтаксических структур и/или синтаксических элементов. Следует понимать, что варианты осуществления настоящего изобретения могут быть аналогичным образом реализованы с использованием других синтаксических структур и/или синтаксических элементов. Например, когда варианты осуществления настоящего изобретения описаны с упоминанием синтаксических элементов в синтаксисе набора PPS, необходимо понимать, что варианты осуществления настоящего изобретения могут быть реализованы с использованием этих же или аналогичных синтаксических элементов в других синтаксических структурах, например, в наборе SPS.
[0266] Выше некоторые из вариантов осуществления настоящего изобретения описаны с использованием термина «указание». Следует понимать, что термин «указание» можно понимать как кодирование или формирование одного или более синтаксических элементов в одной или более синтаксических структурах, в битовом потоке или наряду с ним.
[0267] Выше некоторые из вариантов осуществления настоящего изобретения описаны с использованием термина «декодирование». Следует понимать, что термин «декодирование» можно понимать как декодирование или анализ одного или более синтаксических элементов из одной или более синтаксических структур, из битового потока или наряду с ним.
[0268] В приведенном выше описании, там, где примеры осуществления изобретения были описаны со ссылками на кодер, нужно понимать, что результирующий поток и декодер также могут включают соответствующие элементы. Аналогично, там, где примеры осуществления настоящего изобретения были описаны со ссылками на декодер, нужно понимать, что кодер может иметь структуру и/или компьютерную программу для формирования битового потока, декодируемого декодером. К примеру, часть вариантов осуществления настоящего изобретения была описана в связи с формированием блока предсказания как части кодирования. Варианты осуществления настоящего изобретения могут быть аналогичным образом реализованы с формированием блока предсказания как части декодирования, с той разницей, что параметры кодирования, такие как горизонтальное смещение и вертикальное смещение, декодируются из битового потока, а не определяются кодером.
[0269] В рассмотренных выше вариантах осуществления настоящего изобретения кодек описан на примере отдельных устройств кодирования и декодирования - для упрощения понимания применяемых процедур. Однако нужно понимать, что устройство, структуры и операции могут быть реализованы в виде единого устройства/структуры/операции кодирования-декодирования. Также допускается, что кодер и декодер могут совместно использовать часть общих элементов, или что всех элементы могут быть общими.
[0270] Рассмотренные выше примеры описывают работу вариантов осуществления настоящего изобретения в кодеке электронного устройства, однако нужно понимать, что настоящее изобретение, определенное приложенной формулой изобретения, может быть реализовано как часть любого видеокодека. Так, например, варианты осуществления настоящего изобретения могут быть реализованы в видеокодеке, в котором видеокодирование может быть реализовано по фиксированным, или проводным, каналам связи.
[0271] Соответственно, пользовательское оборудование может включать в свой состав видеокодек, например, аналогичный рассмотренным в приведенном выше описании настоящего изобретения. Нужно понимать, что выражение «пользовательское оборудование» используется как охватывающие любые подходящие типы беспроводного пользовательского оборудования, например, мобильные телефоны, портативные устройства обработки данных или портативные веб-браузеры.
[0272] При этом элементы наземной сети мобильной связи общего пользования (public land mobile network, PLMN) также могут включать видеокодеки в соответствии с предшествующим описанием.
[0273] В общем случае различные варианты осуществления настоящего изобретения могут быть реализованы в виде аппаратного обеспечения или схем специального назначения, программного обеспечения, логики или какой-либо их комбинации. К примеру, некоторые из аспектов могут быть реализованы в виде аппаратного обеспечения, тогда как другие аспекты могут быть реализованы в виде микропрограммного или программного обеспечения, которое может исполняться контроллером, микропроцессором или иным вычислительным устройством, без ограничения настоящего изобретения перечисленным. Различные аспекты настоящего изобретения допускают иллюстрацию и описание в виде блок-схем, блок-схем алгоритмов или с помощью некоторых других наглядных представлений, но при этом нужно понимать, что блоки, устройства, системы, методы или способы, описанные в настоящем документе, могут быть реализованы, в качестве неограничивающих примеров, в виде аппаратного обеспечения, программного обеспечения, микропрограммного обеспечения, схем или логики специального назначения, аппаратного обеспечения или контроллера общего назначения, или же иных вычислительных устройств, или некоторой их комбинации.
[0274] Варианты осуществления настоящего изобретения могут быть реализованы с помощью программного обеспечения, исполняемого процессором данных мобильного устройства, например, процессорным элементом, или с помощью аппаратного обеспечения, или с помощью комбинации программного и аппаратного обеспечения. Также в этом отношении следует отметить, что любые блоки последовательностей логических операций, проиллюстрированные на чертежах, могут представлять собой шаги программы или взаимосвязанные логические схемы, блоки и функции, или комбинацию программных шагов и логических схем, блоков и функций. Программное обеспечение может храниться на таких физических носителях, как микросхемы памяти или блоки памяти, реализованные внутри процессора, магнитные носители, например, жесткий диск или гибкий диск, и оптические носители, например, DVD и их варианты для хранения данных, CD.
[0275] Память может относиться к любому типу, соответствующему локальному техническому окружению, при этом она может быть реализована с использованием любой подходящей технологии хранения данных, например, запоминающие устройства на полупроводниках, магнитные запоминающие устройства и системы, оптические запоминающие устройства и системы, несъемная или съемная память. Процессоры данных могут относиться к любому типу, соответствующему локальному техническому окружению и могут включать одно или более из следующего: компьютеры общего назначения, компьютеры специального назначения, микропроцессоры, цифровые сигнальные процессоры (digital signal processors, DSP), процессоры на основе многоядерной архитектуры в качестве неограничивающих примеров.
[0276] Варианты осуществления настоящего изобретения могут применяться на практике в различных компонентах, например, в модулях интегральных схем. Процесс разработки интегральных схем, в целом, в высокой степени автоматизирован. Существуют сложные и мощные программные инструменты для преобразования проектов логического уровня в конструкции полупроводниковых схем, готовые для вытравливания и формовки на полупроводниковой подложке.
[0277] Программы, подобные поставляемой фирмой Synopsys, Inc (Маунтин-Вью, Калифорния) или фирмой Cadence Design (Сан-Хосе, Калифорния), осуществляют автоматическую разводку проводников и позиционирование компонентов на полупроводниковом кристалле с использованием общепринятых правил разработки, а также с использованием библиотек заранее сохраненных модулей проектов. По завершении разработки полупроводниковой схемы результирующая конструкция, в стандартизированном электронном формате (например, Opus, GDSII и т.п.) может быть передана на полупроводниковое производство для изготовления микросхемы.
[0278] В предшествующем изложении в качестве иллюстративных и неограничивающих примеров было представлено полное и информативное описание одного из примеров осуществления изобретения. Однако в свете предшествующего описания, в сочетании с приложенными чертежами, специалистам в соответствующих областях техники могут быть очевидны различные модификации и доработки. Тем не менее, любые такие или аналогичные модификации изобретения остаются в его объеме.
Изобретение относится к средствам для кодирования и декодирования видео. Технический результат заключается в повышении эффективности видеокодирования. Определяют количество блоков, подлежащих назначению в разделы, которое является одним из следующего: ширина изображения в пакетах кодового дерева (CTU), высота изображения в CTU, количество строк CTU в тайле. Указывают количество разделов явно задаваемого размера, подлежащих назначению. Указывают размеры разделов явно задаваемого размера или количество блоков в них. Выполняют логическое получение количества разделов равного размера, подлежащих назначению. Упомянутое логическое получение количества разделов равного размера, подлежащих назначению, включает: определение количества блоков, все еще подлежащих назначению в разделы, путем вычитания количества блоков в разделах явно задаваемого размера из количества блоков, подлежащих назначению в разделы; назначение разделов разделами явно задаваемого размера в соответствии с размерами или с количеством блоков в разделах явно задаваемого размера и в соответствии с заранее заданным или указанным порядком сканирования и назначение разделов разделами равного размера путем деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера и в соответствии с заранее заданным или указанным порядком сканирования. 4 н. и 7 з.п. ф-лы, 14 ил.
1. Способ кодирования, содержащий:
определение количества блоков, подлежащих назначению в разделы, при этом количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в пакетах кодового дерева (CTU), высота изображения в CTU, количество строк CTU в тайле;
указание количества разделов явно задаваемого размера, подлежащих назначению;
указание размеров разделов явно задаваемого размера или количества блоков в них; и
логическое получение количества разделов равного размера, подлежащих назначению,
при этом упомянутое логическое получение количества разделов равного размера, подлежащих назначению, включает:
определение количества блоков, все еще подлежащих назначению в разделы, путем вычитания количества блоков в разделах явно задаваемого размера из количества блоков, подлежащих назначению в разделы;
назначение разделов разделами явно задаваемого размера в соответствии с размерами или с количеством блоков в разделах явно задаваемого размера и в соответствии с заранее заданным или указанным порядком сканирования; и
назначение разделов разделами равного размера путем деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера и в соответствии с заранее заданным или указанным порядком сканирования.
2. Устройство кодирования, содержащее:
средства определения количества блоков, подлежащих назначению в разделы, при этом количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в пакетах кодового дерева (CTU), высота изображения в CTU, количество строк CTU в тайле;
средства указания количества разделов явно задаваемого размера, подлежащих назначению;
средства указания размеров разделов явно задаваемого размера или количества блоков в них; и
средства логического получения количества разделов равного размера, подлежащих назначению,
при этом упомянутые средства логического получения количества разделов равного размера, подлежащих назначению, включают:
средства определения количества блоков, все еще подлежащих назначению в разделы, путем вычитания количества блоков в разделах явно задаваемого размера из количества блоков, подлежащих назначению в разделы;
средства назначения разделов разделами явно задаваемого размера в соответствии с размерами или с количеством блоков в разделах явно задаваемого размера и в соответствии с заранее заданным или указанным порядком сканирования; и
средства назначения разделов разделами равного размера путем деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера и в соответствии с заранее заданным или указанным порядком сканирования.
3. Устройство по п. 2, дополнительно содержащее:
средства указания количества разделов явно задаваемого размера в высокоуровневой синтаксической структуре; и
средства указания размеров разделов явно задаваемого размера и/или количества разделов равного размера в низкоуровневой синтаксической структуре.
4. Способ декодирования, содержащий:
определение количества блоков, подлежащих назначению в разделы, при этом количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в пакетах кодового дерева (CTU), высота изображения в CTU, количество строк CTU в тайле;
декодирование количества разделов явно задаваемого размера, подлежащих назначению;
декодирование размеров разделов явно задаваемого размера или количества блоков в них; и
логическое получение количества разделов равного размера, подлежащих назначению,
при этом упомянутое логическое получение количества разделов равного размера, подлежащих назначению, включает:
определение количества блоков, все еще подлежащих назначению в разделы, путем вычитания количества блоков в разделах явно задаваемого размера из количества блоков, подлежащих назначению в разделы;
назначение разделов разделами явно задаваемого размера в соответствии с размерами или с количеством блоков в разделах явно задаваемого размера и в соответствии с заранее заданным или указанным порядком сканирования; и
назначение разделов разделами равного размера путем деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера и в соответствии с заранее заданным или указанным порядком сканирования.
5. Устройство декодирования, содержащее:
средства определения количества блоков, подлежащих назначению в разделы, при этом количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в пакетах кодового дерева (CTU), высота изображения в CTU, количество строк CTU в тайле;
средства декодирования количества разделов явно задаваемого размера, подлежащих назначению;
средства декодирования размеров разделов явно задаваемого размера или количества блоков в них; и
средства логического получения количества разделов равного размера, подлежащих назначению,
при этом упомянутые средства логического получения количества разделов равного размера, подлежащих назначению, включают:
средства определения количества блоков, все еще подлежащих назначению в разделы, путем вычитания количества блоков в разделах явно задаваемого размера из количества блоков, подлежащих назначению в разделы;
средства назначения разделов разделами явно задаваемого размера в соответствии с размерами или с количеством блоков в разделах явно задаваемого размера и в соответствии с заранее заданным или указанным порядком сканирования; и
средства назначения разделов разделами равного размера путем деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера и в соответствии с заранее заданным или указанным порядком сканирования.
6. Устройство по п. 5, в котором упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей.
7. Устройство по п. 5 или 6, дополнительно содержащее:
средства декодирования количества разделов явно задаваемого размера из высокоуровневой синтаксической структуры; и
средства декодирования размеров разделов явно задаваемого размера и/или количества разделов равного размера из низкоуровневой синтаксической структуры.
8. Устройство по любому из пп. 5-7, дополнительно содержащее:
средства логического заключения о том, что количество разделов явно задаваемого размера равно 1.
9. Устройство по п. 8, в котором упомянутые средства логического получения количества разделов равного размера, подлежащих назначению, дополнительно включают:
средства определения набора или списка размеров разделов, по которым может быть равномерно распределено количество блоков, все еще подлежащих назначению в разделы;
средства логического заключения о том, что количество разделов равного размера равно 1, если количество элементов в упомянутом наборе или списке равно 1; и
средства указания индекса, соответствующего элементу упомянутого набора или списка, при этом индекс указывает количество разделов равного размера, подлежащих назначению.
10. Устройство по п. 9, дополнительно содержащее:
средства ограничения набора или списка размеров разделов, по которым может быть равномерно распределено упомянутое количество блоков, все еще подлежащих назначению, путем исключения размеров разделов, меньших порога, при этом порог заранее задан или декодирован.
11. Устройство по п. 9 или 10, дополнительно содержащее:
средства декодирования индекса, соответствующего элементу упомянутого набора или списка, с помощью кодового слова фиксированной длины, при этом длина кодового слова определена количеством элементов в наборе или списке.
Bross B | |||
и др., "Versatile Video Coding (Draft 5)", опубл | |||
Солесос | 1922 |
|
SU29A1 |
Kiran Misra и др., "An Overview of Tiles in HEVC", опубл | |||
Многоступенчатая активно-реактивная турбина | 1924 |
|
SU2013A1 |
Многоступенчатая активно-реактивная турбина | 1924 |
|
SU2013A1 |
Устройство для закрепления лыж на раме мотоциклов и велосипедов взамен переднего колеса | 1924 |
|
SU2015A1 |
КОМПОЗИЦИЯ ЗУБНОЙ ПАСТЫ | 2009 |
|
RU2526148C2 |
US 9386305 B2, 05.07.2016 | |||
ПЕРЕДАЮЩЕЕ УСТРОЙСТВО, ПРИЕМНОЕ УСТРОЙСТВО И СИСТЕМА СВЯЗИ | 2011 |
|
RU2538919C2 |
Авторы
Даты
2023-02-14—Публикация
2020-05-22—Подача