УСТРОЙСТВО, СПОСОБ И МАШИНОЧИТАЕМЫЙ НОСИТЕЛЬ ДЛЯ ВИДЕОКОДИРОВАНИЯ И ВИДЕОДЕКОДИРОВАНИЯ
DEVICE, METHOD AND MACHINE-READABLE MEDIA FOR VIDEO ENCODING AND VIDEO DECODING

Область техники
[0001] Настоящее изобретение относится к устройству, способу и компьютерной программе для видеокодирования и видеодекодирования.
Предпосылки создания изобретения
[0002] Стандарты и спецификации видеокодирования, как правило, допускают разделение, в кодере, кодированного изображения на подмножества. В видеокодировании разбиением (partitioning) может называться разделение изображения или подобласти изображения на подмножества (блоки) таким образом, что каждый элемент изображения или подобласти изображения находится только в одном подмножестве (блоке). К примеру, в стандарте 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] Способ, в соответствии с первым аспектом настоящего изобретения, включает определение количества блоков, подлежащих назначению в разделы и инициализированных как неназначенные; указание или логическое определение количества разделов явно заданного размера, подлежащих назначению; указание размеров для разделов явно заданного размера и соответствующую маркировку неназначенных блоков как назначенных в разделы в заранее заданном порядке сканирования; указание числа блоков; циклическое назначение упомянутого числа блоков в разделы и соответствующую маркировку неназначенных блоков как назначенных в заранее заданном порядке сканирования до тех пор, пока количество неназначенных блоков не станет меньше, чем упомянутое число блоков; и назначение, если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел.
[0008] В соответствии с одним из вариантов осуществления настоящего изобретения упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей в одном или более столбце тайлов, строки кирпичей в тайле, столбцы сетки, используемой для указания разбиения на субизображения, строки сетки, используемой для указания разбиения на субизображения.
[0009] В соответствии с одним из вариантов осуществления настоящего изобретения упомянутые блоки являются одним или более из следующего: прямоугольные блоки отсчетов изображения, ячейки сетки, используемой для указания разбиения на субизображения.
[0010] Устройство, в соответствии со вторым аспектом настоящего изобретения, включает средства определения количества блоков, подлежащих назначению в разделы и инициализированных как не назначенные; средства указания или логического определения количества разделов явно заданного размера, подлежащих назначению; средства указания размеров для разделов явно заданного размера и средства соответствующей маркировки неназначенных блоков как назначенных в разделы в заранее заданном порядке сканирования; средства указания числа блоков; средства циклического назначения упомянутого числа блоков в разделы и средства соответствующей маркировки неназначенных блоков как назначенных в заранее заданном порядке сканирования до тех пор, пока количество неназначенных блоков не станет меньше, чем упомянутое число блоков; и средства назначения, если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел.
[ООП] Способ, в соответствии с третьим аспектом настоящего изобретения, включает определение количества блоков, подлежащих назначению в разделы; определение количества разделов явно заданного размера, подлежащих назначению; определение размеров для разделов явно заданного размера и соответствующую маркировку неназначенных блоков как назначенных в разделы в заранее заданном порядке сканирования; определение числа блоков; циклическое назначение упомянутого числа блоков в разделы и соответствующую маркировку неназначенных блоков как назначенных в заранее заданном порядке сканирования до тех пор, пока количество неназначенных блоков не станет меньше, чем упомянутое число блоков; и назначение, если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел.
[0012] В соответствии с одним из вариантов осуществления настоящего изобретения определение количества разделов явно заданного размера, подлежащих назначению, включает декодирование количества разделов явно заданного размера, подлежащих назначению, из синтаксической структуры; определение размеров разделов явно заданного размера включает декодирование размеров явно заданного размера из синтаксической структуры; и определение числа блоков включает декодирование числа блоков из синтаксической структуры.
[0013] Устройство, в соответствии с четвертым аспектом настоящего изобретения, включает средства определения количества блоков, подлежащих назначению в разделы; средства определения количества разделов явно заданного размера, подлежащих назначению; средства определения размеров для разделов явно заданного размера и средства соответствующей маркировки неназначенных блоков как назначенных в разделы в заранее заданном порядке сканирования; средства определения числа блоков; средства циклического назначения упомянутого числа блоков в разделы и средства соответствующей маркировки неназначенных блоков как назначенных в заранее заданном порядке сканирования до тех пор, пока количество неназначенных блоков не станет меньше, чем упомянутое число блоков; и средства назначения, если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел.
[0014] Дополнительные аспекты настоящего изобретения относятся к устройствам, включающим по меньшей мере один процессор и по меньшей мере одну память, при этом в упомянутой по меньшей мере одной памяти хранят код, который при исполнении упомянутым по меньшей мере одним процессором обеспечивает выполнение, устройством, по меньшей мере описанных выше способов и одного или более связанных с ними вариантов осуществления настоящего изобретения.
Краткое описание чертежей
[0015] Для более детального понимания настоящего изобретения оно будет описано далее с помощью примеров и показано на приложенных чертежах, где:
[0016] на фиг. 1 эскизно проиллюстрировано электронное устройство, в котором применяются варианты осуществления настоящего изобретения;
[0017] на фиг. 2 эскизно проиллюстрировано абонентское оборудование, подходящее для применения в вариантах осуществления настоящего изобретения;
[0018] на фиг. 3 также эскизно проиллюстрированы электронные устройства, в которых применяются варианты осуществления настоящего изобретения и которые соединены при помощи проводных и беспроводных сетевых соединений;
[0019] на фиг. 4 эскизно проиллюстрирован кодер, подходящий для реализации некоторых из вариантов осуществления настоящего изобретения;
[0020] на фиг. 5а, 5b, 5с показаны примеры разбиения изображения на блоки кодового дерева (CTU), тайлы, кирпичи и слайсы;
[0021] на фиг. 6 показана синтаксическая структура для разбиения на слайсы, тайлы и кирпичи в соответствии с версией 5 проекта H.266/VVC (H.266/VVC Draft 5);
[0022] на фиг. 7 показана блок-схема алгоритма для способа кодирования в соответствии с одним из аспектов осуществления настоящего изобретения;
[0023] на фиг. 8 показана блок-схема алгоритма для способа кодирования в соответствии с еще одним из аспектов осуществления настоящего изобретения;
[0024] на фиг. 9 показана блок-схема алгоритма для способа кодирования в соответствии с одним из вариантов осуществления настоящего изобретения;
[0025] на фиг. 10а, 10b, 10с показаны примеры разбиений на тайлы и кирпичи;
[0026] на фиг. 11 показана эскизная блок-схема декодера, подходящего для реализации некоторых из вариантов осуществления настоящего изобретения;
[0027] на фиг. 12 показана блок-схема алгоритма для способа декодирования в соответствии с одним из вариантов осуществления настоящего изобретения;
[0028] на фиг. 13 показана блок-схема алгоритма для способа декодирования в соответствии с еще одним из вариантов осуществления настоящего изобретения;
[0029] на фиг. 14а и 14b показаны блок-схемы алгоритмов для способа кодирования и декодирования в соответствии с еще одним из вариантов осуществления настоящего изобретения; и
[0030] на фиг. 15 показана эскизная блок-схема типовой мультимедийной системы связи, в которой могут быть реализованы различные варианты осуществления настоящего изобретения.
Подробное описание некоторых из примеров осуществления изобретения
[0031] Ниже будут более подробно рассмотрены соответствующее устройство и возможные механизмы для инициирования переключения порта просмотра. С этой целью обратимся сначала к фиг. 1 и 2. На фиг. 1 показана блок-схема системы видеокодирования в соответствии с одним из вариантов осуществления настоящего изобретения, имеющая вид блок-схемы типовой аппаратуры или электронного устройства 50, которое может включать в свой состав кодек, соответствующий одному из вариантов осуществления настоящего изобретения. На фиг. 2 показана схема устройства в соответствии с одним из примеров осуществления настоящего изобретения. Далее будут описаны элементы фиг. 1 и 2.
[0032] Электронное устройство 50 может, например, быть мобильным терминалом или абонентским оборудованием системы беспроводной связи. Однако нужно понимать, что варианты осуществления настоящего изобретения могут быть реализованы в любом электронном устройстве или аппаратуре, где требуется кодирование и декодирование, или только кодирование, или же только декодирование видеоизображений.
[0033] Устройство 50 может иметь в своем составе корпус 30 для размещения и защиты устройства. Устройство 50 может также включать дисплей 32 в форме дисплея на жидких кристаллах. В других вариантах осуществления настоящего изобретения упомянутый дисплей может быть выполнен по любой технологии, подходящей для отображения изображений или видеоинформации. Устройство 50 может также включать клавиатуру 34. В других вариантах осуществления настоящего изобретения может применяться любой подходящий интерфейс обмена данными или пользовательский интерфейс. К примеру, пользовательский интерфейс может быть реализован в виде виртуальной клавиатуры или системы ввода данных, являющейся частью сенсорного дисплея.
[0034] Устройство может включать микрофон 36 или любое другое подходящее устройство ввода аудиоинформации, которое может быть устройством ввода цифрового или аналогового сигнала. Устройство 50 может также включать устройство вывода аудиоинформации, которое в вариантах осуществления настоящего изобретения может представлять собой любое из следующего: головной телефон 38, громкоговоритель или же аналоговое или цифровое соединение для вывода аудиоинформации. Устройство 50 может также иметь в своем составе аккумулятор (или в других вариантах осуществления настоящего изобретения устройство может снабжаться электроэнергией от любого подходящего мобильного энергетического устройства, например, солнечной батареи, топливной батареи или заводного генератора). Устройство может дополнительно включать камеру, способную записывать, или захватывать, изображения и/или видеоинформацию. Устройство 50 может также включать инфракрасный порт для связи с другими устройствами в ближней зоне прямой видимости. В других вариантах осуществления настоящего изобретения устройство 50 может включать любые подходящие решения связи малой дальности, например, беспроводное соединение Bluetooth или проводное соединение USB/Firewire.
[0035] Устройство 50 может включать контроллер 56, процессор или схемы обработки данных для управления устройством 50. Контроллер 56 может быть соединен с памятью 58, которая в различных вариантах осуществления настоящего изобретения может хранить данные, одновременно в форме видеоинформации и аудиоинформации, и/или может также хранить инструкции для исполнения в контроллере 56. Контроллер 56 может быть также соединен со схемами 54 кодека, способными осуществлять кодирование и декодирование аудио- и/или видеоданных или являться вспомогательным средством при кодировании и декодировании, выполняемом контроллером.
[0036] Устройство 50 может также включать устройство 48 чтения карт и смарт-карту 46, например, карту UICC и устройство чтения UICC-карт для предоставления информации об абоненте, и для обеспечения возможности предоставления аутентификационной информации с целью аутентификации и авторизации абонента в сети.
[0037] Устройство 50 может включать схемы 52 радиоинтерфейса, связанные с контроллером, которые могут использоваться для формирования сигналов беспроводной связи, например, для связи с сетью сотовой связи, системой беспроводной связи или беспроводной локальной вычислительной сетью. Устройство 50 может также включать антенну 44, связанную со схемами 52 радиоинтерфейса, для передачи радиочастотных сигналов, формируемых в схемах 52 радиоинтерфейса, в другое устройство (или устройства), а также для приема радиочастотных сигналов от другого устройства (или устройств).
[0038] Устройство 50 может включать камеру, способную записывать или регистрировать отдельные кадры, которые затем передают в кодек 54 или контроллер для обработки. Устройство может принимать от другого устройства данные видеоизображений для обработки перед их передачей и/или хранением. Устройство 50 может также принимать изображение для кодирования/декодирования либо беспроводным способом, либо по проводному соединению. Структурные элементы устройства 50, описанные выше, представляют собой примеры средств выполнения соответствующих функций.
[0039] С помощью фиг. 3 проиллюстрирован один из примеров системы, в которой могут использоваться различные варианты осуществления настоящего изобретения. Система 10 включает несколько устройств связи, способных осуществлять связь при помощи одной или нескольких сетей. В состав системы 10 может входить любая комбинация проводных и беспроводных сетей, включая, без ограничения перечисленным, беспроводную сотовую телефонную сеть (например, сеть GSM, UMTS, CDMA и т.п.), беспроводную локальную вычислительную сеть (wireless local area network, WLAN), например, в соответствии с определением в любом из стандартов IEEE 802.x, персональную сеть Bluetooth, локальную вычислительную сеть Ethernet, локальную вычислительную сеть типа «маркерное кольцо» глобальную сеть и Интернет.
[0040] Система 10 может включать как проводные, так и беспроводные устройства связи, и/или устройство 50, подходящее для реализации вариантов осуществления настоящего изобретения.
[0041] В качестве примера на фиг. 3 показана мобильная телефонная сеть 11 и сеть Интернет 28. Соединение с Интернетом 28 может включать, без ограничения перечисленным, беспроводные соединения с большим радиусом действия, беспроводные соединения с малым радиусом действия, а также различные проводные соединения, включая, без ограничения перечисленным, телефонные линии, кабельные линии, линии электропередач и аналогичные каналы связи.
[0042] Примерами устройств связи в системе 10 могут служить, без ограничения перечисленным, электронная устройство или устройство 50, комбинация карманного персонального компьютера (personal digital assistant, PDA) и мобильного телефона 14, PDA 16, интегрированное устройство 18 обмена сообщениями (integrated messaging device, IMD), настольный компьютер 20, ноутбук 22. Устройство 50 может быть стационарным или подвижным, когда переносится движущимся оператором. Устройство 50 может также размещаться на транспортном средстве, включая, без ограничения перечисленным, автомобиль, грузовик, такси, автобус, поезд, судно, самолет, велосипед, мотоцикл или любое аналогичное подходящее транспортное средство.
[0043] Варианты осуществления настоящего изобретения могут также быть реализованы в абонентской телеприставке, т.е. в приемнике цифрового телевидения, который, опционально, может обладать функциональностью отображения видеоинформации и беспроводной связи, в планшетных или (портативных) персональных компьютерах (ПК), которые включают аппаратную или программную (или комбинированную) реализацию кодера и/или декодера, в различных операционных системах, в чипсетах (микросхемных наборах), процессорах, DSP-процессорах и/или во встраиваемых системах, обеспечивающих аппаратное и/или программное кодирование.
[0044] Некоторые из подобных или других устройств могут как посылать, так и принимать вызовы и сообщения, а также осуществлять связь с операторами связи при помощи беспроводного соединения 25 с базовой станцией 24. Базовая станция 24 может быть соединена с сетевым сервером 26, обеспечивающим связь между средствами 11 связи и Интернетом 28. Система может включать дополнительные устройства связи, а также устройства связи других типов.
[0045] Устройства связи могут осуществлять связь с использованием различных технологий передачи данных, включая, без ограничения перечисленным, множественный доступ с кодовым разделением (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, и любые аналогичные технологии беспроводной связи. Устройство связи, используемое при реализации различных вариантов осуществления настоящего изобретения, может осуществлять связь с использованием различных сред передачи данных, включая, без ограничения, радиосоединения, инфракрасные, лазерные, кабельные соединения или любые другие подходящие соединения.
[0046] В телекоммуникационных сетях и в сетях передачи данных под «каналом» может пониматься как физический, так логический канал. Физическим каналом может быть любая физическая среда передачи, например, провод, тогда как логическим каналом может быть логическое соединение по мультиплексируемой среде передачи, способной обеспечивать передачу нескольких логических каналов. Канал может применяться для передачи информационного сигнала, например, битового потока, от одного или нескольких отправителей (или передатчиков) на один или несколько приемников.
[0047] Транспортный поток (transport stream, TS) MPEG-2, определенный в документе ISO/TEC 13818-1, или, эквивалентно, в Рекомендации Н.222.0 ITU-T, представляет собой формат для передачи аудио-, видео- и других медиаданных, а также метаданных программ или иных метаданных, в мультиплексированном потоке. Для идентификации элементарных потоков (также называемых, пакетированными элементарными потоками) используются идентификаторы пакетов (packet identifier, PID). Следовательно, можно считать, что каждый логический канал в потоке MPEG-2 TS соответствует конкретному значению PID.
[0048] Существующие стандарты для форматов медиафайлов включают базовый формат медиафайлов ISO (ISO/IEC 14496-12, сокращенно обозначаемый ISOBMFF) и формат файлов для видеоданных, структурированных блоками NAL (ISO/IEC 14496-15), являющийся производным от ISOBMFF.
[0049] Видеокодек состоит из кодера, при помощи которого входные видеоданные преобразуют в сжатое представление, подходящее для хранения и передачи, а также декодера, при помощи которого сжатое представление видеоданных распаковывают, возвращая их к форме, пригодной для просмотра пользователем. Видеокодер и/или видеодекодер могут быть также независимыми друг от друга, т.е. не обязательно образовывать кодек. Как правило, в кодере часть информации исходной видеопоследовательности отбрасывается с целью представления видеоинформации в более компактной форме (т.е. с меньшим битрейтом).
[0050] Типовые гибридные видеокодеры, например, многие из реализаций кодеров, соответствующие стандартам ITU-T Н.263 и Н.264, кодируют видеоинформацию в два этапа. Сначала предсказывают значения пикселей в определенной области изображения (или «блоке пикселей»), например, с использованием механизмов компенсации движения (нахождение области в одном из предварительно кодированных видеокадров, которая близко соответствует кодируемому в текущий момент блоку пикселей, и указание на эту область) или с использованием средств пространственного предсказания (использование, заданным образом, значений пикселей вокруг кодируемого блока пикселей). Затем кодируют ошибку предсказания, т.е. разность между предсказанным блоком пикселей и исходным блоком пикселей. Как правило, это выполняется при помощи преобразования разности пиксельных значений с использованием заданного преобразования (например, дискретного косинусного преобразования (Discrete Cosine Transform, DCT), или его варианта), квантования его коэффициентов и энтропийного кодирования квантованных коэффициентов. Регулируя степень детализации в процедуре квантования, кодер может управлять балансом между точностью представления пикселей (качеством изображения) и размером результирующей кодированной видеорепрезентации (размером файла или битрейтом).
[0051] Источником информации для внешнего предсказания являются ранее декодированные изображения (называемые опорными изображениями). При внутреннем копировании блоков (intra block copy, IBC), которое также называют «предсказанием на основе внутреннего копирования блоков», предсказание выполняют аналогично временному предсказанию, однако опорным изображением в таком случае является само текущее изображение, при этом в процессе декодирования ссылки допускаются только на уже декодированные ранее отсчеты. Межуровневое или межракурсное предсказание может выполняться аналогично временному предсказанию, однако в этом случае опорным будет, соответственно, декодированное изображение из другого масштабируемого уровня или из другого ракурса. В некоторых случаях под внешним предсказанием понимают исключительно временное предсказание, однако в других случаях внешнее предсказание может обобщенно обозначать как временное предсказание, так и любые другие типы предсказания, а именно, внутреннее копирование блоков, межуровневое и межракурсное предсказание, если их выполняют с помощью той же процедуры, что и временное предсказание, или аналогичной процедуры. Внешнее предсказание или временное предсказание иногда называют компенсацией движения или предсказанием с компенсацией движения.
[0052] Внешнее предсказание, которое может также называться временным предсказанием, компенсацией движения или предсказанием с компенсацией движения, позволяет понизить временную избыточность. Источником информации для внешнего предсказания являются ранее декодированные изображения. Для внешнего предсказания используют тот факт, что смежные пиксели в одном изображении с большой вероятностью являются коррелированными. Внутреннее предсказание может быть либо пространственным, либо может относиться собственно к преобразованию, т.е. могут предсказываться либо значения элементов изображения, либо коэффициенты преобразования. Внутреннее предсказание обычно применяют при внутреннем кодировании, когда внешнее предсказание не применяется.
[0053] Одним из результатов процедуры кодирования является набор параметров кодирования, таких как векторы движения и коэффициенты преобразования. Энтропийное кодирование множества параметров может быть более эффективным, если сначала выполнить их предсказание, на основе пространственно-смежных или соседних по времени параметров. Например, вектор движения может предсказываться на основе пространственно смежных векторов движения, при этом кодироваться может только разность относительно предсказания вектора движения. Предсказание параметров кодирования и внутреннее предсказание совместно могут называться внутрикадровым предсказанием.
[0054] На фиг. 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 уточняющего уровня.
[0055] В зависимости от режима кодирования, выбранного для кодирования текущего блока пикселей, на выход селектора 310, 410 режима передают выходные данные устройства 306, 406 внешнего предсказания, выходные данные одного из опциональных режимов внутреннего предсказания или выходные данные поверхностного кодера из состава селектора режима. Выходные данные селектора режима передают в первое суммирующее устройство 321, 421. Первое суммирующее устройство может вычитать выходные данные устройства 302, 402 предсказания пикселей из изображения 300 базового уровня, или изображения 400 уточняющего уровня, соответственно, с формированием первого сигнала 320, 420 ошибки предсказания, который подают на вход кодера 303, 403 ошибки предсказания.
[0056] Также устройство 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 уточняющего уровня при выполнении операций внешнего предсказания.
[0057] При условии, что базовый уровень выбран в качестве источника для предсказания параметров фильтрации уточняющего уровня, и на это выполнено соответствующее указание, в соответствии с некоторыми из вариантов осуществления настоящего изобретения, параметры фильтрации из фильтра 316 первого сегмента 500 кодера могут передаваться во второй сегмент 502 кодера.
[0058] Кодер 303, 403 ошибки предсказания включает блок 342, 442 преобразования и квантователь 344, 444. Блок 342 преобразования преобразует первый сигнал 320, 420 ошибки предсказания в домен преобразования. Таким преобразованием является, к примеру, преобразование DCT. Квантователь 344, 444 квантует сигнал, например, коэффициенты DCT, в домене преобразования и формирует квантованные коэффициенты.
[0059] Декодер 304, 404 ошибки предсказания принимает выходные данные из кодера 303, 403 ошибки предсказания и выполняет процедуры, обратные процедурам кодера 303, 403 ошибки предсказания, в результате чего получают декодированный сигнал 338, 438 ошибки предсказания, который при комбинировании с предсказанным представлением блока 312, 412 изображения во втором суммирующем устройстве 339, 439 дает предварительное восстановленное изображение 314, 414. Декодер ошибки предсказания можно рассматривать как имеющий в своем составе деквантователь 361, 461 который деквантует квантованные значения коэффициентов, например, коэффициентов DCT, и восстанавливает преобразованный сигнал, а также как включающий блок 363, 463 обратного преобразования, который выполняет обратное преобразование над восстановленным сигналом преобразования, при этом выходные данные блока 363, 463 обратного преобразования содержат восстановленный блок (или блоки). Декодер ошибки предсказания может также включать фильтр блоков, который может выполнять фильтрацию восстановленного блока (или блоков) в соответствии с дополнительной декодированной информацией и параметрами фильтрации.
[0060] Энтропийный кодер 330, 430 принимает выходные данные из кодера 303, 403 ошибки предсказания и может выполнять соответствующее кодирование переменной длины и/или энтропийное кодирование сигнала для обеспечения возможности обнаружения и исправления ошибок. Выходные данные энтропийных кодеров 330, 430 могут быть введены в битовый поток, например, при помощи мультиплексора 508.
[0061] Энтропийное кодирование/декодирование может выполняться множеством различных способов. К примеру, может применяться контекстно-зависимое кодирование/декодирование, при котором и кодер, и декодер меняют контекстное состояние параметров кодирования в зависимости от ранее кодированных/декодированных параметров кодирования. Примерами контекстно-зависимого кодирования являются контекстно-зависимое двоичное арифметическое кодирование (context adaptive binary arithmetic coding, CABAC), контекстно-зависимое кодирование с переменной длиной кодового слова (context-based variable length coding, CAVLC) или любое аналогичное энтропийное кодирование. Энтропийное кодирование/декодирование, альтернативно или в дополнение, может выполняться при помощи схем кодирования с переменной длиной кодового слова, например, кодирования/декодирования методом Хаффмана или кодирования/декодирования методом экспоненциального кодирования Голомба. Декодирование параметров кодирования из энтропийно-кодированного битового потока, или из кодовых слов, может называться синтаксическим анализом.
[0062] Стандарт 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).
[0063] Объединенной командой по видеокодированию (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.
[0064] Для расширений SHVC, MV-HEVC и 3D-HEVC используется общая базовая спецификация, описанная в приложении F второй версии стандарта HEVC. Эта общая база включает, например, высокоуровневые синтаксис и семантику, к примеру, определяющие часть характеристик уровней битового потока, такие как межуровневые зависимости, а также процедуры декодирования, такие как построение списка опорных изображений, включающего опорные изображения межуровневого предсказания, а также вычисление порядковых номеров изображений для многоуровневых потоков. Приложение F может применяться и в последующих многоуровневых расширениях HEVC, которые могут появиться позднее. В приведенном ниже описании видеокодер, видеодекодер, способы кодирования, способы декодирования, структуры битового потока и/или варианты осуществления настоящего изобретения могут быть рассмотрены на примере конкретных расширений, таких как SHVC и/или MV-HEVC, однако нужно понимать, что они, в общем случае, применимы также для многоуровневых расширений HEVC, а также, в еще более общем случае, для любой многоуровневой схемы видеокодирования.
[0065] Универсальное видеокодирование (VVC) (MPEG-I Part 3), также известное под наименованием ITU Н.266, является стандартом видеосжатия, разрабатываемым Объединенной командой экспертов по видео (JVET) из состава консорциума MPEG и ITU, и призванным прийти на смену стандарту HEVC/H.265.
[0066] В настоящем разделе приведены ключевые определения, описана структура битового потока и кодирования, а также основные понятия стандартов H.264/AVC, HEVC и VVC, а также некоторых из их расширений. Они использованы в качестве примера видеокодера, декодера, способа кодирования, способа декодирования и структуры битового потока, в которых могут быть реализованы варианты осуществления настоящего изобретения. Аспекты настоящего изобретения не ограничены стандартами H.264/AVC, HEVC или VVC, и их расширениями, напротив, данное описание приведено в качестве одного из примеров базы для частичной или полной реализации вариантов осуществления настоящего изобретения. Когда ниже упоминается стандарт VVC или версии его проекта, нужно понимать, что настоящее описание соответствует проекту спецификации VVC, и в более поздних версиях проекта, или в финальной версии (или версиях VVC) могут быть изменения, и тогда описание вариантов осуществления настоящего изобретения могут быть скорректированы для соответствия финальной версии (или версиям) стандарта VVC.
[0067] Стандарты видеокодирования могут определять синтаксис и семантику битового потока, а также процедуру декодирования для безошибочных битовых потоков, при этом процедура кодирования может быть не определена, однако к кодерам может предъявляться требование формирования битовых потоков, отвечающих стандарту. Соответствие битового потока и декодера стандарту может быть проверено с помощью гипотетического эталонного декодера (Hypothetical Reference Decoder, HRD). Стандарт может включать в себя инструменты кодирования, помогающие справиться с ошибками и потерями при передаче, однако использование этих инструментов при кодировании может быть опциональным, а процесс декодирования для битовых потоков с ошибками может быть не определен.
[0068] Синтаксическим элементом может быть назван элемент данных, представленный в битовом потоке. Синтаксической структурой может быть назван ноль или более синтаксических элементов, совместно находящихся в битовом потоке в заданном порядке.
[0069] Каждый синтаксический элемент может быть описан наименованием и одним дескриптором формы его кодированного представления. Может применяться соглашение о том, что наименования синтаксических элементов состоят из строчных букв с символами подчеркивания. Поведение процедуры декодирования в видеодекодере может определяться значением синтаксического элемента и значениями ранее декодированных синтаксических элементов.
[0070] При описании стандартов H.264/AVCAVC, HEVC и VCC, а также различных примеров осуществления настоящего изобретения, для определения процедуры синтаксического анализа синтаксических элементов могут использоваться следующие обозначения.
u(n): целое без знака с использованием n бит. Если в синтаксической таблице n равно "v", то количество битов изменяется в зависимости от значения других синтаксических элементов. Процедура синтаксического анализа данного дескриптора определяется следующими n битами в битовом потоке, которые интерпретируются как двоичное представление целого числа без знака, старший бит которого идет первым.
- ue(v): синтаксический элемент в виде целого числа без знака, кодированного экспоненциальным кодом Голомба (exp-Golomb), где старший бит находится слева.
[0071] Битовая строка, кодированная экспоненциальным кодом Голомба, может быть преобразована в кодовое число (codeNum), например, с использованием следующей таблицы:
[0072] В некоторых случаях в синтаксических таблицах могут использоваться значения других переменных, вычисленных на основе значений синтаксических элементов. Может применяться соглашение о наименовании переменных, в котором используют комбинации из строчных и прописных букв без символов подчеркивания. Переменные, начинающиеся с прописной буквы, могут вычисляться для декодирования текущей синтаксической структуры и всех зависимых от нее синтаксических структур. Переменные, начинающиеся с прописной буквы, могут быть использованы в процессе декодирования последующих синтаксических структур без упоминания исходной синтаксической структуры переменной. Может применяться соглашение о том, что переменные, начинающиеся со строчной буквы, используются только в контексте их вычисления.
[0073] В некоторых случаях «мнемонические» наименования значений синтаксических элементов или переменных используются взаимозаменяемо с их численными значениями. Иногда «мнемонические» наименования используются без каких-либо соответствующих численных значений.
[0074] Флаг - это переменная, или однобитный синтаксический элемент, имеющий одно из двух возможных значений: 0 или 1.
[0075] Массивы могут быть как синтаксическими элементами, так и переменными. Для индексов массивов могут использоваться квадратные скобки. Одномерный массив может называться списком. Двумерный массив может называться матрицей.
[0076] Функции могут описываться их именами. Может использоваться соглашение о том, что имена функций начинаются с прописных букв, содержат комбинацию из строчных и прописных букв без символов подчеркивания и заканчиваются левой и правой скобками, заключающих ноль или более имен переменных (для определения) или значений (для использования), разделенных запятыми (при наличии более одной переменной).
[0077] Функция Ceil(x) может быть определена как возвращающая наименьшее целое число, большее или равное х. Функция Log2(x) может быть определена как возвращающая логарифм х по основанию 2.
[0078] Могут быть определены процедуры для описания декодирования синтаксических элементов. Процедура может иметь независимые описание и вызов. Может быть определено, что все синтаксические элементы и переменные с наименованием прописными буквами, относящиеся к текущей синтаксической структуре и всем зависящим от нее синтаксическим структурам, доступны при описании процедуры и ее вызове, и также может быть определено, что описание процедуры может иметь переменные с наименованием строчными буквами, явно заданные как входные. Описание любой процедуры может явно задавать одну или более выходных переменных, каждая из которых может быть либо переменной с наименованием прописными буквами, либо переменной с наименованием строчными буквами.
[0079] Синтаксис, семантика и процедуры могут быть определены с использованием арифметических, логических, реляционных, битовых операторов и операторов назначения, аналогичных применяемым в языке программирования С. В частности, оператор / используют для указания на целочисленное деление (с округлением), а оператор % используют для указания наделение по модулю (т.е. остаток от деления).
[0080] Используемые соглашения о нумерации и счете могут соответствовать началу от 0, например, «первый» может быть эквивалентно 0-му, «второй» может быть эквивалентно 1-му и т.п.
[0081] Элементарной единицей для ввода в декодер и вывода из декодера, соответственно, как правило, является изображение. Изображение, передаваемое в качестве входных данных в кодер может называться исходным изображением, а изображение, декодированное декодером, может называться декодированным или восстановленным изображением.
[0082] Исходное и декодированное изображения, каждое, состоят из одного или более массивов отсчетов, например, одного или более следующих наборов массивов отсчетов:
- Только составляющая яркости (Y) (монохромное изображение).
- Составляющая яркости и две составляющие цветности (YCbCr или YCgCo).
- Составляющие зеленого, синего и красного (GBR или RGB).
- Массивы, представляющие другие не специфицированные монохромные или трехкомпонентные цветовые отсчеты (например, YZX, которые также называют XYZ).
[0083] Далее в настоящем описании такие массивы называются компонентами яркости (или L, или Y) и компонентами цветности, при этом два массива цветности могут обозначаться за Cb и Cr; независимо от реально используемого метода представления информации о цвете. Фактически используемый способ представления цветовой информации может, например, указываться в битовом потоке, например, с использованием синтаксиса информации об используемости видео (Video Usability Information, VUI) в стандарте HEVC или другом стандарте. Составляющая может быть определена как массив отсчетов, или одиночный отсчет, из одного из трех массивов отчетов (одного яркости и двух цветности), или как массив отсчетов, или одиночный отсчет, из массива, образующего изображение в монохромном формате.
[0084] Изображение может быть определено либо как кадр, либо как поле. Кадр включает в себя матрицу отсчетов яркости, и возможно также, соответствующих отсчетов цветности. Поле представляет собой множество чередующихся строк отсчетов в кадре и может использоваться в качестве входных данных для кодера в случае, когда исходный сигнал является чересстрочным. Массивы отсчетов цветности могут отсутствовать (и, следовательно, могут применяться монохромные значения) или массивы отсчетов цветности могут иметь пониженное разрешение по сравнению с массивами отсчетов яркости.
[0085] Ниже кратко описаны некоторые из форматов представления цветности.
- При дискретизации в монохромном формате имеется только один массив отсчетов, который, по определению, считают массивом яркости.
- При дискретизации с форматом 4:2:0 каждый из двух массивов цветности имеет половину высоты массива яркости и половину его ширины.
- При дискретизации с форматом 4:2:2 каждый из двух массивов цветности имеет одинаковую высоту с массивом яркости, но половину ширины.
- При дискретизации с форматом 4:4:4, если не используются отдельные цветовые плоскости, каждый из двух массивов цветности ту же высоту и ширину, что и массив яркости.
[0086] Форматы или стандарты кодирования могут допускать кодирование массивов отсчетов в виде отдельных цветовых плоскостей в битовом потоке, и, соответственно, может выполняться декодирование отдельно кодированных цветовых плоскостей из битового потока. Если применяются отдельные цветовые плоскости, каждую из них обрабатывают отдельно (в кодере и/или декодере) как изображение с монохромным представлением.
[0087] Разбиением (partitioning) называют такое разделение множества на подмножества, при котором каждый из элементов множества находится только в одном из подмножеств. В видеокодировании разбиением может называться разделение изображения или подобласти изображения на подмножества таким образом, что каждый элемент изображения или подобласти изображения находится точно в одном подмножестве. Например, при разбиении в соответствии с кодированием и/или декодированием HEVC, и/или кодированием и/или декодированием VVC, могут использоваться описанные ниже термины. Блок кодирования (coding block) - это блок отсчетов размером N×N для некоторого значения N, такой, что разделение блока кодового дерева на блоки кодирования является разбиением. Блок кодового дерева (coding tree block, СТВ) - это блок отсчетов размером N×N для некоторого значения N, такой что разделение составляющей изображения на блоки кодового дерева будет разбиением. Пакет кодового дерева (coding tree unit, CTU) может быть определен как блок кодового дерева из отсчетов яркости, два соответствующих блока кодового дерева из отсчетов цветности в случае изображения, имеющего три массива отсчетов, или блок кодового дерева в монохромном изображении или изображении, которое кодируют с использованием трех отдельных цветовых плоскостей, и синтаксические структуры, применяемые для кодирования отсчетов. Блок кодирования (coding unit, CU) - это блок кодирования из отсчетов яркости, два соответствующих блока кодирования из отсчетов цветности для изображения, имеющего три массива значений, или блок кодирования из отсчетов монохромного изображения или изображения, которое кодируют с использованием трех отдельных цветовых плоскостей, и синтаксические структуры, применяемые для кодирования отсчетов. Блок кодирования CU максимально допустимого размера, как правило, называется LCU (largest coding unit, наибольший блок кодирования) или пакетом кодового дерева (CTU), при этом изображение в видео разбивается на неперекрывающиеся блоки LCU.
[0088] В стандарте HEVC блок кодирования CU состоит из одного или более блоков предсказания (prediction unit, PU), определяющих процедуру предсказания отсчетов в блоке кодирования, а также одного или более блоков преобразования (transform units, TU), определяющих процедуру кодирования ошибки предсказания для отсчетов в этом блоке кодирования. Как правило, CU состоит из квадратного блока отсчетов, размер которого выбирают из заранее заданного множества допустимых размеров кодового блока. Каждый блок предсказания, PU, и блок преобразования, TU, могут быть разбиты на менее крупные блоки предсказания и блоки преобразования с целью повышения точности процедур предсказания и кодирования ошибки предсказания, соответственно. Каждый блок предсказания, PU, имеет связанную с ним информацию предсказания, которая определяет, какого типа предсказание должно применяться к пикселям данного блока предсказания (например, информацию вектора движения в случае блока предсказания с внешним предсказанием, или информацию направления внутреннего предсказания в случае внутренне предсказываемого блока предсказания).
[0089] Аналогично, каждый блок преобразования может быть связан с информацией, описывающей процедуру декодирования ошибки предсказания для значений в данном блоке преобразования (включая, например, информацию о коэффициентах DCT-преобразования). Информация о том, применяется ли кодирование ошибки предсказания для каждого CU или нет, как правило, сигнализируется в синтаксических элементах на уровне блока кодирования. Если остатка или ошибки предсказания, связанного с CU нет, то можно считать, что для данного блока кодирования блоки преобразования, TU, отсутствуют. Информация о разделении изображения на блоки кодирования, CU, и о разделении блоков кодирования на блоки предсказания, PU, и блоки преобразования, TU, сигнализируемая, как правило, в битовом потоке, позволяет декодеру воспроизводить заданную структуру этих блоков.
[0090] Ниже описано разбиение, применяемое в проекте стандарта H.266/VVC. Следует отметить, что описанное здесь может меняться в более поздних версиях проекта H.266/VVC, до тех пор, пока стандарт не будет финализирован. Изображения разбивают на блоки CTU аналогично HEVC, однако максимальный размер CTU увеличен до 128×128. Пакет кодового дерева (CTU) сначала разбивают в соответствии со структурой квадродерева. Затем вершины квадродерева могут быть дополнительно подразбиты на древообразные структуры различных типов. Среди этих древовидных структур многих типов имеются четыре типа разделения: вертикальное двоичное разделение, горизонтальное двоичное разделение, вертикальное троичное разделение и горизонтальное троичное разделение. Такие многотипные листы дерева называют блоками кодирования (CU). Блоки кодирования, CU, блоки предсказания, PU, и блоки преобразования, TU, имеют одинаковый размер блока, если только блок кодирования не превышает максимальную длину преобразования. Структурой сегментации блока CTU является квадродерево с вложенными многотипными деревьями, в которых применяют двоичное и троичное деление, т.е. не применяют отдельных специальных моделей блоков CU, PU и TU, кроме тех случаев, когда это необходимо для блоков кодирования с размером, превышающим максимальную длину преобразования. Блок кодирования, CU, может иметь квадратную или прямоугольную форму.
[0091] Элементарной единицей вывода из кодеров в некоторых форматах кодирования, например, в VVC, и ввода в декодер, в некоторых форматах кодирования, например, VVC, является блок уровня сетевой абстракции (Network Abstraction Layer, NAL). С целью передачи по сетям пакетной передачи данных или хранения в структурированных файлах, блоки NAL могут инкапсулироваться в пакеты или в аналогичные структуры.
[0092] Формат битового потока для потоков из блоков NAL может быть определен для сред передачи или хранения, не обеспечивающих структуру кадров. В таких форматах битового потока блоки NAL отделяются друг от друга при помощи прикрепления стартового кода перед каждым блоком NAL. Чтобы исключить ложное обнаружение границ блоков NAL в кодерах исполняется байтовый алгоритм предотвращения эмуляции стартового кода, который добавляет байт предотвращения эмуляции к полезной нагрузке блока NAL, если в противном случае в ней будет присутствовать стартовый код. Для обеспечения прозрачного шлюзового взаимодействия между системами пакетной и потоковой передачи данных, предотвращение эмуляции стартового кода должно выполняться в любом случае, независимо от того, применяется формат битового потока или нет.
[0093] Блок NAL - это синтаксическая структура, содержащая указание на тип данных, следующих за ней, и байты, содержащие эти данные в форме RBSP, чередующиеся, при необходимости, с байтами предотвращения эмуляции. Последовательность исходных байтов полезной нагрузки (raw byte sequence payload, RBSP) может быть определена как синтаксическая структура, включающая целое число байтов и инкапсулированная в блок NAL. Последовательность RBSP может быть либо пустой, либо иметь форму строки информационных битов, содержащих синтаксические элементы, за которыми следует стоп-бит RBSP и ноль или более последующих битов, равных 0.
[0094] Блоки NAL состоят из заголовка и полезной нагрузки. В заголовке блока NAL указывают, помимо другой информации, тип блока NAL.
[0095]
[0096] Блоки NAL могут быть разделены на две категории: блоки NAL уровня видеокодирования (Video Coning Layer, VCL) и блоки NAL, не относящиеся к VCL. Блоки NAL VCL представляют собой блоки NAL со стандартным кодированием слайсов.
[0097] Блок NAL, не относящийся к VCL, может, например, иметь один из следующих типов: набор параметров последовательности, набор параметров изображения, блок NAL дополнительной уточняющей информации (supplemental enhancement information, SEI), разделитель блока доступа, конец последовательности блоков NAL, конец битового потока блоков NAL или блок NAL с данными фильтрации. Набор параметров может быть необходим для восстановления декодированных изображений, при этом многие из остальных типов блоков NAL, не относящихся к VCL, не являются необходимыми для восстановления декодированных изображений.
[0098] В некоторых форматах кодирования определены наборы параметров, которые могут содержать значения параметров, необходимых для декодирования или восстановления декодированных изображений. Параметр может быть определен как синтаксический элемент в наборе параметров. Набор параметров может быть определен как синтаксическая структура, которая содержит параметры и на которую могут осуществляться ссылки из других синтаксических структур, или которые могут активироваться из других синтаксических структур, например, с помощью идентификатора.
[0099] Ниже описаны некоторые из типов наборов параметров, однако нужно понимать, что могут существовать и другие, и варианты осуществления настоящего изобретения могут применяться в описанных типах наборов параметров, но не ограничены ими. В набор параметров последовательности (sequence parameter set, SPS) могут включаться параметры, которые остаются неизменными на протяжении всей кодированной видеопоследовательности. В дополнение к параметрам, которые могут быть необходимы в процессе декодирования, набор параметров последовательности опционально может включать информацию по используемости видео (video usability information, VUI), включающую параметры, важные для буферизации, синхронизации вывода изображения, рендеринга и резервирования ресурсов. Набор параметров изображения (picture parameter set, PPS) содержит параметры, которые с большой вероятностью будут неизменными для нескольких кодированных изображений. Набор параметров изображения может включать в себя параметры, на которые могут выполняться ссылки из сегментов одного или более кодированных изображений. Набор параметров заголовка (header parameter set, HPS) был введен для включения параметров, которые могут меняться для каждого отдельного изображения.
[0100] Битовый поток - это последовательность битов, которая, в некоторых форматах или стандартах кодирования, может иметь вид потока блоков NAL или потока байтов, который позволяет получить представление кодированных изображений и связанных с ними данных в форме одной или более кодированных видеопоследовательностей. В одном логическом канале, например, в одном файле или по одному соединению протокола связи за первым битовым потоком может следовать второй битовый поток. Элементарный поток (в контексте видеокодирования) это последовательность из одного или более битовых потоков. В некоторых форматах или стандартах кодирования конец первого битового потока может быть обозначен специальным блоком NAL, который может называться блоком NAL конца битового потока (end of bitstream, ЕОВ), и который является последним блоком NAL битового потока.
[0101] Фрагмент (portion) битового потока - это непрерывное подмножество битового потока. В некоторых контекстах может предъявляться требование, чтобы фрагмент битового потока состоял из одной или более полных синтаксических структур и не имел неполных синтаксических структур. В других контекстах фрагмент битового потока может включать любой непрерывной отрезок битового потока и может включать неполные синтаксические структуры.
[0102] Выражение «вместе с битовым потоком» (например, «указание вместе с битовым потоком») или «вместе с кодированным блоком битового потока» (например, «указание вместе с кодированным тайлом») может пониматься, в пунктах формулы изобретения и в описании вариантов осуществления настоящего изобретения, как передача, сигнализация или хранение данных вне основной полосы частот, таким образом, чтобы данные, не принадлежащие основной полосе частот, оставались связанными с битовым потоком или кодированным блоком, соответственно, но не были в них включены. Выражение «декодирование вместе с битовым потоком», или «вместе с кодированным блоком битового потока», или аналогичные выражения, могут обозначать декодирование данных, поступающих вне основной полосы частот, на которые осуществляют ссылки (и которые могут быть получены путем передачи, сигнализации или хранения данных вне основной полосы частоты) и которые связаны с битовым потоком или кодированным блоком, соответственно. К примеру, выражение «вместе с битовым потоком» может использоваться, когда битовый поток содержится в контейнерном файле, например, файле, соответствующему базовому формату медиафайлов ISO, а метаданные файла хранят в файле таким образом, чтобы они были связаны с битовым потоком, например, в виде боксов в записи сэмпла для трека, содержащего битовый поток, группы сэмплов для трека, содержащего битовый поток, или трека синхронизированных метаданных, связанного с треком, содержащим битовый поток.
[0103] Кодированная видеопоследовательность (coded video sequence, CVS) - это такая последовательность кодированных изображений в порядке декодирования, которая является независимо декодируемой и за которой следует еще одна кодированная видеопоследовательность или конец битового потока. Кодированная видеопоследовательность, альтернативно или дополнительно, может быть определена как оканчивающаяся, когда в битовом потоке встречается специальный блок NAL, который может называться блоком NAL конца последовательности (end of sequence, EOS).
[0104] Изображения могут разбиваться на независимо кодируемые и декодируемые сегменты изображения (например, слайсы и/или тайлы, и/или группы тайлов). Такие сегменты изображения позволяют выполнять параллельную обработку. Слайсами в настоящем описании называют сегменты изображения, состоящие из заданного числа базовых блоков кодирования, которые обрабатывают в заданном по умолчанию порядке кодирования или декодирования, тогда как тайлами обычно называют сегменты изображения, определенные как прямоугольные области изображения, расположенные в виде сетки тайлов. Группа тайлов это группа из одного или более тайлов. Сегменты изображения в битовом потоке могут быть кодированы как отдельные блоки, например, блоки NAL VCL в стандартах H.264/AVC, HEVC и VVC. Кодированные сегменты изображения могут включать заголовок и полезную нагрузку, при этом заголовок содержит значения параметров, необходимых для декодирования полезной нагрузки. Полезную нагрузку слайсов называют данными слайсов.
[0105] В стандарте HEVC изображение может быть разбито на тайлы, которые имеют прямоугольную форму и содержат целое число блоков LCU. В стандарте HEVC разбиение на тайлы дает регулярную сетку, в которой максимальная разность между высотой и шириной тайлов равна одному LCU. В стандарте HEVC слайс определен как целое количество блоков кодового дерева, содержащихся в одном независимом сегменте слайса и во всех последующих зависимых сегментах слайса (если они присутствуют), которые предшествуют следующему независимому сегменту слайса (если он существует) внутри одного блока доступа. В стандарте HEVC сегмент слайса определяют как целое количество блоков кодового дерева, организованных в виде последовательности, в порядке сканирования тайла, и содержащихся в одном блоке NAL. Разделение каждого из изображений на сегменты слайса является разбиением. В стандарте HEVC независимый сегмент слайса определен как сегмент слайса, для которого значения синтаксических элементов в заголовке сегмента слайса не получают на основе значений предыдущего сегмента слайса, а зависимый сегмент слайса определен как сегмент слайса, для которого значения некоторых из синтаксических элементов в заголовке сегмента слайса получают на основе значений для предыдущего независимого сегмента слайса в порядке декодирования. В стандарте HEVC заголовок слайса определен как заголовок независимого сегмента слайса, который является текущим, или как заголовок независимого сегмента слайса, который предшествует текущему зависимому сегменту слайса, при этом заголовок сегмента слайса определен как часть кодированного сегмента слайса, включающего элементы данных, которые относятся к первому блоку (или ко всем блокам) кодового дерева, представленному (или представленным) в сегменте слайса. Блоки кодирования, CU, сканируют в порядке сканирования растра LCU в тайлах или в изображении в целом, если тайлы не используются. В LCU блоки кодирования, CU, могут иметь заданный порядок сканирования.
[0106] Соответственно, стандарты и спецификации видеокодирования могут допускать разделение, в кодере, кодированного изображения на кодированные слайсы или аналогичные элементы. Предсказание внутри изображения с пересечением границ слайсов, как правило, не допускается. Следовательно, слайсы можно считать способом разделения кодированного изображения на независимо декодируемые части. В стандартах H.264/AVC и HEVC предсказание внутри изображения с пересечением границ слайсов может быть запрещено. Соответственно, слайсы можно считать способом деления кодированного изображения на независимо декодируемые части, и, следовательно, слайсы часто считаются элементарными единицами передачи. Во многих случаях кодеры могут указывать в битовом потоке, какие типы внутреннего предсказания с переходом между границами слайсов запрещены, при этом декодер учитывает данную информацию при своей работе, например, делая вывод о доступных источниках предсказания. Например, отсчеты из смежных блоков кодирования могут считаться недоступными для внутреннего предсказания, если эти блоки кодирования расположены в различных слайсах.
[0107] Ниже описано разбиение изображений на слайсы, тайлы и кирпичи в проекте стандарта VVC (т.е. в версии 5 проекта VVC). В других версиях проекта VVC разбиение изображений на слайсы, тайлы и кирпичи может быть определено аналогичным образом.
[0108] Изображение разделяют на одну или более строк тайлов и один или более столбец тайлов. Разбиение изображения на тайлы формирует сетку тайлов, которая может быть охарактеризована списком значений ширины столбцов тайлов (в CTU) и списком высот строк тайлов (в CTU).
[0109] Тайл это последовательность блоков кодового дерева (CTU), которая покрывает одну «ячейку» в сетке тайлов, т.е. прямоугольную область изображения. Тайл разбивается на один или более кирпичей, каждый из которых состоит из набора строк CTU внутри этого тайла. Тайл, не разбитый на множество кирпичей, также называют кирпичом. Однако кирпич, являющийся истинным подмножеством тайла, не называют тайлом.
[0110]Слайс содержит либо набор тайлов изображения, либо набор кирпичей тайла. Слайс является блоком NAL VCL.
[0111] Поддерживаются два режима слайсов, а именно режим слайсов со сканированием растра и режим прямоугольных слайсов. В режиме слайсов со сканированием растра слайс содержит последовательность тайлов в порядке сканирования тайлового растра изображения. В режиме прямоугольных слайсов слайс содержит набор кирпичей изображения, которые совместно образуют прямоугольную область изображения. Кирпичи в прямоугольном слайсе располагаются в порядке сканирования растра кирпичей слайса.
[0112] Порядок сканирования кирпича может быть определен как конкретный порядок последовательных блоков CTU, на которые разбито изображения, где CTU внутри кирпича расположены последовательно в порядке сканирования растра CTU, при этом кирпичи в тайле расположены последовательно в порядке сканирования растра кирпичей тайла, а тайлы в изображения расположены последовательно в порядке сканирования растра тайлов изображения. Может предъявляться требование, например, в стандарте кодирования, о том, что блоки NAL кодированного слайса должны располагаться в порядке увеличения адреса CTU в порядке сканирования кирпича для первого CTU каждого блока NAL кодированного слайса, при этом может быть определено, что адрес CTU увеличивается в порядке сканирования растра CTU внутри изображения. Растр может быть определен как отображение прямоугольной двумерной структуры на одномерную структуру, таким образом, что первые записи в одномерной структуре будут из первой верхней строки двумерной структуры, сканируемой слева направо, за ними будут идти, аналогично, вторая, третья и т.д. строки структуры (в направлении вниз), каждую из которых сканируют слева направо.
[0113] На фиг. 5а показан пример разбиения изображения на слайсы в режиме сканирования растра, где изображение разбивают на 12 тайлов и 3 слайса в режиме сканирования растра. На фиг. 5b показан пример разбиения изображения на прямоугольные слайсы (с размером 18×12 CTU), где изображение разбивают на 24 тайла (6 столбцов тайлов и 4 строки тайлов) и 9 прямоугольных слайсов. На фиг. 5 с показан пример разбиения изображения на тайлы, кирпичи и прямоугольные слайсы, где изображение разбивают на 4 тайла (2 столбца тайлов и 2 строки тайлов), 11 кирпичей (верхний левый тайл содержит 1 кирпич, верхний правый тайл содержит 5 кирпичей, нижний левый тайл содержит 2 кирпича, и нижней правый тайл содержит 3 кирпича) и 4 прямоугольных слайса.
[0114] Разбиение на тайлы, кирпичи и прямоугольные слайсы задают в наборе параметров изображения (PPS). На фиг. 6 показан синтаксис указания разбиения на тайлы и кирпичи, которое выполняют в два этапа: на первом этапе формируют сетку тайлов (т.е. ширины столбцов тайлов и высоты строк тайлов), а затем указанные тайлы дополнительно разбивают на кирпичи.
[0115] Существуют два режима задания сетки тайлов: равномерный (указывается с помощью синтаксического элемента uniform_tile_spacing_flag, равного 1) и явный. При равномерном шаге тайлов они имеют одинаковую ширину, за возможным исключением самого правого столбца тайлов, и равную высоту, за возможным исключением самой нижней строки тайлов. Пря явно заданном шаге тайлов, ширины и высоты столбцов и строк тайлов (соответственно) (в блоках CTU) указывают явно, за исключением самого правого столбца и самой нижней строки (соответственно).
[0116] Аналогично указанию сетки тайлов, существуют два режима указания, каким образом тайл разбивают на кирпичи, т.е. для каждого тайла может быть указан либо равномерный шаг кирпичей, либо явно заданный шаг. Сигнализация аналогична строкам тайлов.
[0117] Когда используют прямоугольные слайсы, то для каждого слайса, с помощью синтаксической структуры, включающей и следующей за синтаксическим элементом num_slices_in_pic_minus1, указывают следующее:
- порядковый номер верхнего левого кирпича (за исключением первого слайса, для которого порядковый номер принимают равным 0).
- Разность порядковых номеров нижнего правого кирпича слайса и верхнего левого кирпича.
[0118] Семантика синтаксических элементов, показанных на фиг. 6, определена в версии 5 проекта VVC следующим образом:
[0119] Флаг single_tile_in_pic_flag, равный 1, определяет, что в каждом изображении, ссылающемся на данный PPS, имеется только один тайл. Флаг single_tile_in_pic_flag, равный 0, определяет, что в каждом изображении, ссылающемся на данный PPS, присутствует более одного тайла. Примечание: в отсутствие дополнительного разбиения на кирпичи внутри тайла, весь тайл называют кирпичом. Когда изображения содержит только единственный тайл, без разбиения на кирпичи, его считают одним кирпичом. Для совместимости битовых потоков необходимо, чтобы значение single_tile_in_pic_flag было одинаковым для всех PPS, активированных внутри CVS.
[0120] Флаг uniform_tile_spacing_flag, равный 1, определяет, что границы столбцов тайлов, а также границы строк тайлов, распределены равномерно по изображению. Их сигнализируют с помощью синтаксических элементов tile_cols_width_minus1 и tile_rows_height_ minus1. Флаг uniform_tile_spacing_flag, равный 0, определяет, что границы столбцов тайлов, а также границы строк тайлов, не обязательно распределены равномерно по изображению. Их сигнализируют с помощью синтаксических элементов num_tile_columns_minus1 и num_tile_rows_minus1, а также списка пар синтаксических элементов tile_column_width_minus1[i] и tile_row_height_minus1[i]. В случае его отсутствия, значение флага uniform_tile_spacing_flag принимают равным 1.
[0121] Значение tile_cols_width_minus1 плюс 1 определяет ширину столбцов тайлов, за исключением самого правого столбца тайлов в изображении, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 1. Значение tile_cols_width_minus1 должно лежать в диапазоне от 0 до PicWidthlnCtbsY - 1 включительно. В случае его отсутствия значение tile_cols_width_minus1 принимают равным PicWidthlnCtbsY - 1.
[0122] Значение tile_rows_height_minus1 плюс 1 определяет высоту строк тайлов, за исключением самой нижней строки тайлов в изображении, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 1. Значение tile_rows_height_minus1 должно лежать в диапазоне от 0 до PicHeightlnCtbsY 1 включительно. В случае его отсутствия значение tile rows height minus 1 принимают равным PicHeightlnCtbsY - 1.
[0123] Значение num_tile_columns_minus1 плюс 1 определяет количество столбцов тайлов, на которые разбито изображение, когда флаг uniform_tile_spacing_flag равен 0. Значение num_tile_columns_minus1 должно лежать в диапазоне от 0 до PicWidthlnCtbsY - 1 включительно. Если флаг single_tile_in_pic_flag равен 1, значение num_tile_columns_minus1 принимают равным 0. В противном случае, когда флаг uniform_tile_spacing_flag равен 1, значение num_tile_columns_minus1 принимают равным заданному в процедуре сканирования растра СТВ, сканирования тайлов и сканирования кирпичей.
[0124] Значение num_tile_columns_minus1 плюс 1 определяет количество строк тайлов, на которое разбито изображение, когда флаг uniform_tile_spacing_flag равен 0. Значение numtilerowsminus 1 должно лежать в диапазоне от 0 до PicHeightlnCtbsY - 1 включительно. Если флаг single_tile_in_pic_flag равен 1, значение num_tile_columns_minus1 принимают равным 0. В противном случае, когда флаг uniform_tile_spacing_flag равен 1, значение numtilerowsminus 1 принимают равным заданному в процедуре сканирования растра СТВ, сканирования тайлов и сканирования кирпичей. Переменную NumTilesInPic задают равной (num tile columns minus 1+1) * (num_tile_columns_minus1+1). Когда флаг single_tile_in_pic_flag равен 0, NumTilesInPic должно быть больше 1.
[0125] Значение tile column width minus1[i] плюс 1 определяет ширину i-го столбца тайлов, измеряемую в СТВ.
[0126] Значение tile_row_height_minus1[i] плюс 1 определяет высоту i-й строки тайлов, измеряемую в СТВ.
[0127] Флаг brick_splitting_present_flag, равный 1, определяет, что один или более тайлов изображений, ссылающих на этот PPS, могут быть разбиты на два или более кирпича. Флаг brick_splitting_present_flag, равный 0, определяет, что ни один из тайлов изображений, ссылающих на этот PPS, не могут быть разбиты на два или более кирпича.
[0128] Флаг brick_split_flag[i], равный 1, определяет, что i-й тайл разбит на два или более кирпича. Флаг brick_split_flag[i], равный 0, определяет, что i-й тайл не разбит на два или более кирпича. В случае его отсутствия значение brick_split_flag[i] принимают равным 0.
[0129] Флаг uniform_brick_spacing_flag[i], равный 1, определяет, что горизонтальные границы кирпичей распределены равномерно по i-му тайлу и сигнализируются с использованием синтаксического элемента brickheightminus1[i]. Флаг uniform_brick_spacing_flag[i], равный 0, определяет, что горизонтальные границы кирпичей не обязательно равномерно распределены по i-му тайлу и сигнализируются с использованием синтаксического элемента numbrickrowsminus 1 [i] и списка синтаксических элементов brick_row_height_minus1[i][j]. В случае его отсутствия значение флага uniform_brick_spacing_flag[i] принимают равным 1.
[0130] Значение brick_height_minus 1 [i] плюс 1 определяет высоту строк кирпичей, за исключением нижнего кирпича в i-м тайле, измеряемую в СТВ, когда флаг uniform_brick_spacing_flag[i] равен 1. В случае его наличия значение brick_height_minus 1 должно лежать в диапазоне от 0 до RowHeight[i] - 2 включительно. В случае его отсутствия значение brick_height_minus1[i] принимают равным RowHeight[i] - 1.
[0131] Значение num_brick_rows_minus1 [i] плюс 1 определяет количество кирпичей, на которые разбит i-й тайл, когда флаг uniform_brick_spacing_flag[i] равен 0. В случае его наличия значение num_brick_rows_minus1[i] должно лежать в диапазоне от 1 до RowHeight[i] - 1 включительно. Если флаг brick_split_flag[i] равен 0, значение num_brick_rows_minus1 [i] принимают равным 0. В противном случае, когда флаг uniform_brick_spacing_flag[i] равен 1, значение num_brick_rows_minus1[i] принимают равным заданному в процедуре сканирования растра СТВ, сканирования тайлов и сканирования кирпичей.
[0132] Значение brick_row_height_minus1[i][j] плюс 1 определяет высоту j-го кирпича в i-м тайле, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 0.
[0133] Вычисляют перечисленные ниже переменные, и когда флаг uniform_tile_spacing_flag равен 1, значения num_tile_columns_minus1 и num_tile_columns_minus1 получают логически, и для каждого i в диапазоне от 0 до NumTilesInPic - 1 включительно, когда флаг uniform_brick_spacing_flag[i] равен 1, значение num_brick_rows_minus1 [i] получают логически с помощью вызова процедуры сканирования растра СТВ, сканирования тайлов и сканирования кирпичей:
- список RowHeight[j] для j в диапазоне от 0 до num_tile_columns_minus1 включительно, определяет высоту j-й строки тайлов, измеряемую в СТВ,
- список CtbAddrRsToBs[ctbAddrRs] для ctbAddrRs в диапазоне от 0 до PicSizelnCtbsY - 1 включительно, определяет преобразование из адреса СТВ при сканировании растра СТВ изображения в адрес СТВ при сканировании кирпичей,
- список CtbAddrBsToRs [ctbAddrBs] для ctbAddrBs в диапазоне от 0 до PicSizelnCtbsY - 1 включительно, определяет преобразование из адреса СТВ при сканировании кирпичей в адрес СТВ при сканировании растра СТВ изобаржения,
- список BrickId[ctbAddrBs] для ctbAddrBs в диапазоне от 0 до PicSizelnCtbsY - 1 включительно, определяет преобразование из адреса СТВ при сканировании кирпичей в идентификатор (ID) кирпича.
- список NumCtusInBrick[brickIdx] для brickIdx в диапазоне от 0 до NumBricksInPic - 1 включительно, определяет преобразование из порядкового номера кирпича в количество блоков CTU в этом кирпиче,
- список FirstCtbAddrBs [brickIdx] для brickIdx в диапазоне от 0 до NumBricksInPic - 1 включительно, определяет преобразование из идентификатора ID кирпича в адрес СТВ при сканировании кирпичей для первого СТВ внутри кирпича.
[0134] Флаг single_brick_per_slice_flag, равный 1, определяет, что каждый слайс, ссылающийся на данный PPS, содержит один кирпич. Флаг single_brickjer_slice_flag, равный 0, определяет, что каждый слайс, ссылающийся на данный PPS, может содержать более одного кирпича. В случае его отсутствия значение single_brick_per_slice_flag принимают равным 1.
[0135] Флаг rect_slice_flag, равный 0, определяет, что кирпичи во всех слайсах расположены в порядке сканирования растра, и информация о слайсах не сигнализируется в PPS. Флаг rect_slice_flag, равный 1, определяет, что кирпичи во всех слайсах покрывают прямоугольную область изображения, и информация о слайсах сигнализируется в PPS. Когда флаг single_brick_per_slice_flag равен 1, флаг rect_slice_flag принимают равным 1.
[0136] Количество num_slices_in_pic_minus1 плюс 1 определяет количество слайсов в каждом изображении, ссылающемся на данный PPS. Значение num_slices_in_pic_minus 1 должно лежать в диапазоне от 0 до NumBricksInPic 1 включительно. Когда это значение отсутствует, и флаг single_brick_per_slice_flag равен 1, значение num_slices_in_pic_minus1 принимают равным NumBricksInPic - 1.
[0137] Значение 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) бит.
[0138] Значение 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])) бит.
[0139] Для совместимости битового потока предъявляется требование о том, что слайс должен включать либо набор полных тайлов, либо последовательность полных кирпичей одного тайла. Переменные NumBricksInSlice[i] и BricksToSliceMap[j], которые определяют количество кирпичей в i-м слайсе, а также соответствие кирпичей слайсам, получают следующим образом:
[0140] Итак, для сигнализации разбиения на тайлы и кирпичи создана достаточно сложная синтаксическая структура. Она является во многих аспектах неоптимальной, например, в отношении количества синтаксических элементов, строк синтаксиса, количества режимов работы (т.е. отдельные равномерный режим и явный режим и для тайлов, и для кирпичей, а также отдельное указание границ тайлов и кирпичей), а также в отношении количества битов в сигнализации.
[0141] Версия 6 проекта VVC поддерживает субизображения. Субизображение - это прямоугольная область из одного или более слайсов внутри изображения, при этом упомянутые один или более слайсов должны быть полными. Соответственно, субизображение состоит из одного или более слайсов, которые совместно покрывают прямоугольную область изображения. Может предъявляться требование, чтобы слайсы субизображения были прямоугольными. Разбиение изображения на субизображения может указываться в SPS и/или декодироваться из него. Могут указываться (например, кодером) или декодироваться (например, декодером), или могут быть получены логически (например, кодером и/или декодером) одно или более из описанных ниже свойств субизображений, совместно, или для каждого субизображения в отдельности: i) должно ли субизображение обрабатываться как изображение в процедуре декодирования; в некоторых случаях это свойство исключает операции внутриконтурной фильтрации, - это может отдельно указываться/декодироваться/быть получено логически; ii) должны ли операции внутриконтурной фильтрации выполняться с пересечением границ субизображения или нет.
[0142] Ниже будут представлены улучшенные способы сигнализации разбиения на тайлы и кирпичи.
[0143] Способ кодирования в соответствии с первым аспектом настоящего изобретения, который показан на фиг. 7, включает: кодирование (700) битового потока, включающего указание столбцов тайлов и указание высот кирпичей для одного или более столбцов тайлов одновременно, или кодирование, внутри битового потока или вместе с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; логическое определение (702), в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении изображения, потенциальных строк тайлов; логическое определение (704) или указание, является ли граница потенциальной строки тайлов границей строки тайлов; и кодирование (706) одного или более изображений в битовый поток с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число блоков кодового дерева и разбит на один или более кирпичей, и кирпич содержит целое число строк блоков кодового дерева внутри тайла.
[0144] Способ декодирования в соответствии с первым аспектом настоящего изобретения включает декодирование, из битового потока или вместе с ним, указания столбцов тайлов и указания высот кирпичей для одного или более столбцов тайлов одновременно; логическое определение, в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении изображения, потенциальных строк тайлов; логическое определение или декодирование, является ли граница потенциальной строки тайлов границей строки тайлов; и декодирование одного или более изображений из битового потока с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число блоков кодового дерева и разбит на один или более кирпичей, и при этом кирпич содержит целое число строк блоков кодового дерева внутри тайла.
[0145] То есть, столбцы тайлов и высоты кирпичей для каждого столбца тайлов указывает кодер и/или декодирует декодер. Потенциальные границы строк тайлов логически получают как границы кирпичей, расположенных на одной (горизонтальной) линии на протяжении изображения. То есть, для потенциальной границы строки тайлов может быть сделано заключение, что эта потенциальная граница строки тайлов является действительной границей строки тайлов. Логическое заключение о том, что потенциальная граница строки тайлов является действительной границей строки тайлов, может быть основано на заключениях, выполненных на основе другой информации, доступной в синтаксической структуре, или на основе отсутствия некоторой информации в синтаксической структуре, например, на основе отсутствия некоторого флага.
[0146] Альтернативно, является ли потенциальная граница строки тайлов реальной границей строки тайлов, может быть указано кодером и/или декодировано декодером. Такое указание может быть основано, например, на одном или более флагов, присутствующих в синтаксической структуре.
[0147] Следовательно, путем указания только столбцов тайлов и высот кирпичей для каждого столбца тайлов, а также логического определения потенциальных строк тайлов, разбиение может быть сигнализировано без сигнализации высот строк тайлов. В результате может быть повышена эффективность кодирования и снижен битрейт, необходимый для упомянутой сигнализации.
[0148] Ниже рассмотрены несколько примеров осуществления для первого аспекта настоящего изобретения, т.е. синтаксис и семантика для указания столбцов тайлов и высоты кирпичей для каждого столбца тайлов, без высот строк тайлов. Варианты осуществления настоящего изобретения одинаково применимы как для кодирования, формирующего фрагмент битового потока, соответствующего предложенным синтаксису и семантике, так и для декодирования, декодирующего фрагмент битового потока в соответствии с предложенными синтаксисом и семантикой.
[0149] Пример 1 синтаксиса и семантики:
[0150] Флаг uniform_tile_col_spacing_flag, равный 1, определяет, что границы столбцов тайлов распределены равномерно по изображению и сигнализируются с помощью синтаксического элемента tile_cols_width_minus1. Флаг uniform_tile_spacing_flag, равный 0, определяет, что границы столбцов тайлов не обязательно распределены равномерно по изображению и сигнализируются с помощью синтаксического элемента num_tile_columns_minus1, а также списка синтаксических элементов tile_column_width_minus1[i]. В случае его отсутствия значение uniform_tile_col_spacing_flag принимают равным 1.
[0151] Семантика tile_cols_width_minus1, num_tile_columns_minus1 и tile_column_width_minus1[i] определена идентично семантике синтаксических элементов с теми же именами в версии 5 проекта VVC.
[0152] Если флаг uniform_tile_col_spacing_flag равен 1, NumTileColsInPic назначают равным PicWidthlnCtbsY / (tile_cols_width_minus1+1)+PicWidthlnCtbsY % (tile_cols_width_minus1+1). В противном случае NumTileColsInPic назначают равным num_tile_columns_minus 1+1.
[0153] Флаг uniform_brick_spacing_flag[i], равный 1, определяет, что горизонтальные границы кирпичей распределены равномерно по i-му столбцу тайлов и сигнализируются с использованием синтаксического элемента brick_height_minus1[i]. Флаг uniform_brick_spacing_flag[i], равный 0, определяет, что горизонтальные границы кирпичей не обязательно равномерно распределены по i-му столбцу тайлов и сигнализируются с использованием синтаксического элемента num_brick_rows_minus1 [i] и списка синтаксических элементов brick_row_height_minus1[i] [j]. В случае его отсутствия значение флага uniform_brick_spacing_flag[i] принимают равным 1.
[0154] Значение brick_height_minus1 [i] плюс 1 определяет высоту строк кирпичей, за исключением нижнего кирпича в i-м столбце тайлов, измеряемую в СТВ, когда флаг uniform_brick_spacing_flag[i] равен 1.
[0155] Значение num_brick_rows_minus1 [i] плюс 1 определяет количество кирпичей, на которые разбит i-й столбец тайлов, когда флаг uniform_brick_spacing_flag[i] равен 0.
[0156] Значение brick_row_height_minus1[i][j] плюс 1 определяет высоту j-го кирпича в i-м столбце тайлов, измеряемую в СТВ, когда флаг uniform_tile_spacing_flag равен 0.
[0157] Пример 2 синтаксиса и семантики:
[0158] Пример 2 аналогичен примеру 1, однако дополнительно кодер указывает и/или декодер декодирует, является ли разбиение текущего столбца тайла на кирпичи идентичным предыдущему столбцу тайлов.
[0159] Семантика синтаксических элементов идентична примеру 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_minus1[i-1] присутствует, значение brick_height_minus1[i] принимают равным brickheightminus 1 [i-1].
- Когда num_brick_rows_minus1[i-l] присутствует, значение num_brick_rows_minus1 [i] принимают равным num_brick_rows_minus1[i-1], а значение brick_row_height_minus1[i][j] принимают равным brick_row_height_minus1[i-1][j] для каждого значения] в диапазоне от 0 до num_brick_rows_minus1 [i] - 1 включительно.
[0160] С другой стороны, проблема неоптимальной синтаксической структуры версии 5 проекта VVC может быть частично решена с помощью подхода, в котором ширины столбцов тайлов, высоты строк тайлов или высоты кирпичей могут указываться кодером и/или декодироваться декодером в заранее заданном порядке сканирования, до тех пор, пока не будет указано или декодировано (соответственно), что оставшиеся столбцы тайлов, строки тайлов или кирпичи (соответственно) имеют равный размер.
[0161] Способ кодирования в соответствии с этим вторым аспектом изобретения показан на фиг. 8, при этом способ включает следующие шаги: а) указание (800) количества разделов, подлежащих назначению; b) определение (802) количества блоков, подлежащих назначению в разделы; с) указание (804), является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и, если это не так, d) указание (806) количества блоков, подлежащих назначению в следующий раздел, и е) повтор (808) шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
[0162] Способ декодирования в соответствии со вторым аспектом настоящего изобретения включает следующие шаги: а) декодирование количества разделов, подлежащих назначению; b) определение количества блоков, подлежащих назначению в разделы; с) декодирование, является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так, d) декодирование количества блоков, подлежащих назначению в следующий раздел, и е) повтор шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
[0163] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в единицах CTU (например, когда разделы представляют собой столбцы тайлов), высота изображения в единицах CTU (например, когда разделы представляют собой строки тайлов, или когда разделы представляют собой строки кирпичей, указанные для одного или более полных столбцов тайлов одновременно), количество строк CTU в тайле (например, когда разделы представляют собой кирпичи тайла).
[0164] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей.
[0165] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые блоки являются прямоугольными блоками отсчетов изображения. Например, блок во втором аспекте настоящего изобретения, проиллюстрированном на фиг. 8, может быть блоком кодового дерева.
[0166] Следовательно, при помощи указания количества блоков, подлежащих назначению в разделы в заранее заданном порядке сканирования, могут быть значительно сокращены количество синтаксических элементов и битрейт, необходимые для упомянутой сигнализации, в особенности, когда оставшиеся блоки, еще подлежащие назначению в разделы, назначают в оставшиеся разделы равномерно.
[0167] На фиг. 9 показан пример того, каким образом способ, показанный на фиг. 8, может быть реализован в соответствии с одним из вариантов осуществления настоящего изобретения. Так, сначала указывают (900) количество разделов, например, столбцов тайлов и/или строк тайлов, подлежащих назначению, и определяют (902) количество блоков, NU, например блоков кодового дерева (СТВ), подлежащих назначению в разделы. Для формирования цикла проверки того, что все блоки были назначены в один из разделов, проверяют (904), является ли количество разделов, NP, подлежащих назначению, большим единицы. Если это не так, т.е. NP=1, логически получают, или указывают (910), что все оставшиеся блоки, все еще подлежащие назначению, должны быть назначены в оставшийся раздел.
[0168] Однако если NP>1, проверяют (906), делится ли количество блоков, NU, подлежащих назначению, без остатка на количество NP разделов. Если это так, определяют (908), должно ли количество блоков, NU, быть назначено равномерно в оставшиеся разделы. Если это так, логически получают, или указывают (910), что все оставшиеся блоки, все еще подлежащие назначению, NU, должны быть назначены в оставшийся раздел (или разделы). Если найдено, что количество блоков, NU, подлежащих назначению, не делится без остатка на количество NP разделов (906), или определено (908), что количество блоков, NU, не должно быть распределено равномерно в оставшиеся разделы, указывают (912) количество блоков, подлежащих назначению в следующий раздел, в заранее заданном порядке сканирования. Количество блоков, NU, подлежащих назначению, уменьшают (914) на указанное количество блоков, подлежащих назначению в упомянутый следующий раздел, а количество разделов, NP, подлежащих назначению уменьшают на единицу (916). Затем цикл возвращается к проверке, превосходит ли количество разделов, NP, подлежащих назначению, единицу.
[0169] Способ, показанный на фиг. 9, может быть реализован аналогично декодированию в соответствии с одним из вариантов осуществления настоящего изобретения, описанным ниже. Сначала из битового потока, или параллельно битовому потому, декодируют количество разделов, например, столбцов тайлов и/или строк тайлов, подлежащих назначению, и определяют количество блоков, NU, например, блоков кодового дерева (СТВ), подлежащих назначению в разделы. Для формирования цикла проверки того, что все блоки были назначены в один из разделов, проверяют, является ли количество разделов, NP, подлежащих назначению, большим единицы. Если это не так, т.е. NP=1, логически получают, или декодируют, из битового потока или вместе с ним, что все оставшиеся блоки, все еще подлежащие назначению, должны быть назначены в оставшийся раздел.
[0170] Однако если NP>1, проверяют, делится ли количество блоков, NU, подлежащих назначению, без остатка на количество NP разделов. Если это так, декодируют, из битового потока или вместе с ним, должно ли количество блоков, NU, быть назначено равномерно в оставшиеся разделы. Если найдено, что количество блоков, NU, подлежащих назначению, не делится без остатка на количество NP разделов, или если декодировано, из битового потока или вместе с ним, что количество блоков, NU, не должно быть распределено равномерно в оставшиеся разделы, то декодируют, из битового потока или вместе с ним, количество блоков, подлежащих назначению в следующий раздел, в заранее заданном порядке сканирования. Количество блоков, NU, подлежащих назначению, уменьшают на указанное количество блоков, подлежащих назначению в упомянутый следующий раздел, а количество разделов, NP, подлежащих назначению уменьшают на единицу. Затем цикл возвращается к проверке, превосходит ли количество разделов, NP, подлежащих назначению, единицу.
[0171] Ниже рассмотрен один из примеров осуществления для второго аспекта настоящего изобретения, т.е. для синтаксиса и семантики унифицированной сигнализации о явно заданном или равномерном разбиении на тайлы и кирпичи. Данный вариант осуществления настоящего изобретения одинаково применим как для кодирования, формирующего фрагмент битового потока, соответствующего предложенным синтаксису и семантике, так и для декодирования, декодирующего фрагмент битового потока в соответствии с предложенными синтаксисом и семантикой.
[0172] В данном примере упомянутую унифицированную сигнализацию используют для задания ширины столбцов тайлов и высот строк тайлов, тогда как сигнализация кирпичей идентична версии 5 проекта VVC.
[0173] Флаг rem_tile_col_equal_flag[i], равный 0, определяет, что столбцы тайлов с порядковыми номерами в диапазоне от 0 до i включительно не обязательно имеют одинаковую ширину, измеряемую в СТВ. Флаг rem_tile_col_equal_flag[i], равный 1, определяет, что столбцы тайлов с порядковыми номерами в диапазоне от 0 до i включительно имеют одинаковую ширину, измеряемую в СТВ, при этом tile_column_width_minus1[j] принимают равным remWidthInCtbsY / (i+1) для каждого значения] в диапазоне от 0 до i включительно.
[0174] Флаг rem_tile_row_equal_flag[i], равный 0, определяет, что строки тайлов с порядковыми номерами в диапазоне от 0 до i включительно не обязательно должны иметь равную высоту, измеряемую в СТВ. Флаг rem_tile_row_equal_flag[i], равный 1, определяет, что строки тайлов с порядковыми номерами в диапазоне от 0 до i включительно имеют равную высоту, измеряемую в СТВ, при этом tile_row_height_minus1 [j] принимают равным remHeightlnCtbsY / (i+1) для каждого значения] в диапазоне от 0 до i включительно.
[0175] Семантика остальных синтаксических элементов может быть определена идентично семантике синтаксических элементов с идентичными именами в версии 5 проекта VVC.
[0176] Ниже будет рассмотрен пример осуществления для еще одного из аспектов настоящего изобретения, то есть, синтаксис и семантика, включающие одновременно указание столбцов тайлов и высот кирпичей для каждого столбца тайла, а также унифицированную сигнализацию о явно заданном или равномерном разбиении на тайлы и кирпичи. Данный вариант осуществления настоящего изобретения одинаково применим как для кодирования, формирующего фрагмент битового потока, соответствующего предложенным синтаксису и семантике, так и для декодирования, декодирующего фрагмент битового потока в соответствии с предложенными синтаксисом и семантикой.
[0177] Ниже кратко изложена сущность данного примера осуществления изобретения, при этом он может быть адаптирован для декодирования заменой слова «указание» на «декодирование».
[0178] Столбцы тайлов указывают следующим образом:
- Указывают количество столбцов тайлов (num tile columns minus1).
- В цикле, проходящем по столбцам тайлов слева направо до тех пор, пока не будут пройдены все столбцы тайлов, или до тех пор, пока не будет указано, что все оставшиеся столбцы тайлов имеют равную ширину, указывают:
Если оставшаяся ширина (измеряемая в СТВ) делится без остатка на количество столбцов тайлов, еще подлежащих назначению, указывают, имеют ли оставшиеся столбцы тайлов равную ширину (rem_tile_col_equal_flag[i]).
Если оставшиеся столбцы тайлов не имеют равную ширину, указывают ширину столбца тайла (tile_column_width_minus1[i]).
[0179] Перечисленное ниже указывают в цикле, который проходит по столбцам тайлов слева направо, для прямоугольных слайсов, и включает только одну запись цикла, которая определяет высоты строк тайлов для слайсов в режиме сканирования растра:
- Флаг, указывающий, является разбиение столбца тайлов на кирпичи идентичным предыдущему столбцу тайлов. Этот флаг отсутствует для самого левого столбца тайлов (copy_jtrevious_col_flag[i]). Следует отметить, что этот флаг в данном примере осуществления настоящего изобретения может быть опущен, или могут быть другие альтернативы, описанные ниже, подходящие для достижения аналогичной этому флагу функциональности.
- Когда разбиение тайлов на кирпичи в столбце тайлов не идентично предыдущему столбцу тайлов, кирпичи столбца тайлов указывают следующим образом:
Указывают количество кирпичей в столбце тайлов (num_bricks_minus1[i]).
В цикле, проходящем по кирпичам сверху снизу вверх, пока не будут пройдены все кирпичи столбца тайлов, или до тех пор, пока не будет указано, что все оставшиеся кирпичи в столбце тайлов имеют равную высоту, указывают следующее:
если оставшаяся высота (измеряемая в СТВ) делится на количество кирпичей, все еще подлежащих определению, указывают, имеют ли оставшиеся кирпичи равную высоту (rem_brick_height_equal_flag[i][j]).
Если оставшиеся кирпичи не имеют равную высоту, указывают высоту кирпича (brick_height_minus1 [i] [j]).
[0180] В данном примере осуществления настоящего изобретения может использоваться приведенный ниже синтаксис.
[0181] Значение num_tile_columns_minus1 плюс 1 определяет количество столбцов тайлов, на которые разбито изображение, когда флаг uniform_tile_spacing_flag равен 0. Значение num tile columns minus 1 должно лежать в диапазоне от 0 до PicWidthlnCtbsY - 1 включительно. Когда флаг single_tile_in_pic_flag равен 1, значение num_tile_columns_minus1 принимают равным 0.
[0182] Флаг 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.
[0183] Значение tile_column_width_minus1[i] плюс 1 определяет ширину i-го столбца тайлов, измеряемую в СТВ.
[0184] Флаг copy_previous_col_flag[i], равный 0, определяет, что присутствует num_bricks_minus1[i]. Флаг copy_previous_col_flag[i], равный 1, определяет все из нижеперечисленного:
- Значение num_bricks_minus1[i] принимают равным num_bricks_minus1[i-1].
- Флаг rem_brick_height_equal_flag[i][j] принимают равным rem_brick_height_equal_flag[i-1][j] для всех таких значений j в диапазоне от 0 до num_bricks_minus1[i] включительно, для которых значение rem_brick_height_equal_flag[i-1][j] присутствует или получено логически.
- Значение brick_height_minus1[i][j] принимают равным brick height minus 1 [i-1] [j] для таких значений j в диапазоне от 0 до num bricks minus 1 [i] включительно, для которых значение brick_height_minus1[i-1][j] присутствует.
[0185] Флаг copy_previous_col_flag[i], равный 0, определяет, что присутствует numbricksminus 1 [i]. Флаг copy_previous_col_flag[i], равный 1, определяет все из нижеперечисленного:
- Значение num_bricks_minus1[i] принимают равным num bricks minus1[i-1].
- Флаг rem_brick_height_equal_flag[i][j] принимают равным rem_brick_height_equal_flag[i-1] [j] для всех таких значений j в диапазоне от 0 до numbricksminus 1 [i] включительно, для которых значение rem_brick_height_equal_flag[i-1][j] присутствует или получено логически.
- Значение brick_height_minus1[i][j] принимают равным brick_height_minus1 [i-1] [j] для таких значений j в диапазоне от 0 до num_bricks_minus1 [i] включительно, для которых значение brick_height_minus1[i-1][j] присутствует.
[0186] Флаг 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.
[0187] Значение brick_height_minus1[i][j] плюс 1 определяет высоту j-го кирпича в i-м столбце тайлов, измеряемую в СТВ.
[0188] Семантика остальных синтаксических элементов может быть определена идентично семантике синтаксических элементов с идентичными именами в версии 5 проекта VVC.
[0189] В процедуре декодирования могут применяться переменные, соответствующие приведенному ниже описанию или аналогичные ему.
[0190] Список colWidth[i] в диапазоне от 0 до num tile columns minus1 включительно, определяющий ширину i-го столбца тайлов, измеряемую в СТВ, получают следующим образом:
[0191] Списки colBrickHeight[i][j] для i в диапазоне от 0 до num_tile_columns_minus1 включительно и j в диапазоне от 0 до num_bricks_minus1[i] включительно, определяющие высоту j-й строки кирпичей, измеряемую в СТВ, в i-м столбце тайла, список RowHeight[j] для j в диапазоне от 0 до NumTileRows 1 включительно, определяющий высоту j-й строкитайлов, измеряемую в СТВ, список tileRowBd[j] для j в диапазоне от 0 до NumTileRows включительно, определяющий местоположение границы j-й строки тайлов, измеряемое в СТВ, значение NumTileRows и значение NumTilesInPic получают следующим образом:
[0192] Когда флаг single_tile_in_pic_flag равен 0, NumTilesInPic должно быть больше 1. Список tileColBd[i] для i в диапазоне от 0 до num tile columns minus 1+1 включительно, определяющий местоположение границы i-го столбца тайлов, измеряемое в СТВ, получают следующим образом:
[0193] Описанным ниже образом вычисляют переменную 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_minus1 [i].
[0194] В соответствии с одним из вариантов осуществления настоящего изобретения, способ кодирования включает следующие шаги: а) определение количества блоков, подлежащих назначению в разделы; b) указание или логическое определение количества разделов явно заданного размера, подлежащих назначению; с) указание размеров разделов явно заданного размера или количества блоков в них; и d) указание или логическое определение количества разделов явно заданного размера, подлежащих назначению.
[0195] В соответствии с одним из вариантов осуществления настоящего изобретения шаг d) включает следующие шаги: d1) указание числа блоков; d2) назначение этого числа блоков в разделы циклически до тех пор, пока количество неназначенных блоков не станет меньше числа блоков; и d3) назначение, если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел в заранее заданном порядке сканирования.
[0196] Таким образом, способ кодирования, соответствующий рассмотренному выше варианту осуществления настоящего изобретения, может быть реализован как независимо, так и в комбинации с одним или более другими вариантами осуществления настоящего изобретения, в соответствии с иллюстрацией фиг. 14а. Способ включает:
определение (1400) количества блоков, подлежащих назначению в разделы и инициализированных как неназначенные; указание или логическое определение (1402) количества разделов явно заданного размера, подлежащих назначению; указание (1404) размеров для разделов явно заданного размера и соответствующую маркировку неназначенных блоков как назначенных в разделы в заранее заданном порядке сканирования; указание (1406) числа блоков; циклическое назначение (1408) упомянутого числа блоков в разделы и соответствующую маркировку неназначенных блоков как назначенных в заранее заданном порядке сканирования до тех пор, пока количество неназначенных блоков не станет меньше, чем упомянутое число блоков; и назначение (1410), если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел.
[0197] В соответствии с одним из вариантов осуществления настоящего изобретения способ декодирования включает следующие шаги: а) определение количества блоков, подлежащих назначению в разделы; b) декодирование или логическое определение количества разделов явно заданного размера, подлежащих назначению; с) декодирование размеров разделов явно заданного размера или количества блоков в них; и d) декодирование или логическое определение количества разделов явно заданного размера, подлежащих назначению.
[0198] В соответствии с одним из вариантов осуществления настоящего изобретения в случае декодирования шаг d) включает следующие шаги: d1) декодирование числа блоков; d2) назначение этого единственного числа блоков в разделы циклически до тех пор, пока количество неназначенных блоков не станет меньше числа блоков; и d3) назначение, если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел в заранее заданном порядке сканирования.
[0199] Таким образом, способ декодирования, соответствующий рассмотренному выше варианту осуществления настоящего изобретения, может быть реализован как независимо, так и в комбинации с одним или более другими вариантами осуществления настоящего изобретения, в соответствии с иллюстрацией фиг. 14b. Способ включает:
определение (1450) количества блоков, подлежащих назначению в разделы; определение (1452) количества разделов явно заданного размера, подлежащих назначению; определение (1454) размеров для разделов явно заданного размера и соответствующую маркировку неназначенных блоков как назначенных в разделы в заранее заданном порядке сканирования; определение (1456) числа блоков; циклическое назначение (1458) упомянутого числа блоков в разделы и соответствующую маркировку неназначенных блоков как назначенных в заранее заданном порядке сканирования до тех пор, пока количество неназначенных блоков не станет меньше, чем упомянутое число блоков; и назначение (1460), если количество неназначенных блоков больше 0, неназначенных блоков в последний раздел.
[0200] В соответствии с одним из вариантов осуществления настоящего изобретения, для кодирования и/или декодирования, способ дополнительно включает:
- маркировку упомянутого количества блоков исходно как неназначенных, или, эквивалентно, исходно упомянутое количество блоков не назначены, например, как часть шага а) или в связи с ним;
- маркировку неназначенных блоков как назначенных в соответствии с количеством разделов явно заданного размера, подлежащих назначению, и размерами разделов явно заданного размера, например, как часть шагов b) и/или с), или в связи с ними;
- маркировку неназначенных блоков как назначенных, всякий раз, когда упомянутое число блоков назначают в раздел, например, как часть шага 62 или в связи с ним.
[0201] Назначение блоков в разделы и/или маркировка неназначенных блоков как назначенных могут выполняться в соответствии с порядком сканирования. В одном из вариантов осуществления настоящего изобретения порядок сканирования заранее задан, например, в стандарте кодирования. Сканирование может выполняться, например, слева направо (например, для назначения столбцов CTU в столбцы тайлов), или сверху вниз (например, для назначения строк CTU в строки тайлов, или строк CTU внутри тайла в кирпичи. В одном из вариантов осуществления настоящего изобретения кодер может выбирать порядок сканирования из списка заранее заданных порядков сканирования и указывать выбранный порядок сканирования, например, как порядковый номер в списке заранее заданных порядков сканирования, в битовом потоке или вместе с ним. В одном из вариантов осуществления настоящего изобретения декодер может декодировать порядок сканирования, например, порядковый номер в списке заранее заданных порядков сканирования, из битового потока или вместе с ним.
[0202] В соответствии с одним из вариантов осуществления настоящего изобретения, для кодирования и/или декодирования, шаг с) дополнительно включает, или за ним следует, шаг назначения размеров, или количества блоков, в разделы явно заданного размера.
[0203] Размер раздела явно заданного размера может быть указан как количество блоков, подлежащих назначению.
[0204] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые блоки являются одним из следующего: СТВ, CTU, строка CTU, столбец CTU, ячейка сетки (в случае сетки, используемой для указания разбиения на субизображения), строка сетки (в случае сетки, используемой для указания разбиения на субизображения), столбец сетки (в случае сетки, используемой для указания разбиения на субизображения).
[0205] В вариантах осуществления настоящего изобретения, применимых для кодирования и/или декодирования, может сохраняться информация о блоках, которые все еще являются не назначенными. Сразу после определения количества блоков, подлежащих назначению в разделы, все эти блоки могут быть промаркированы как не назначенные. Когда набор блоков назначают в один из разделов, этот набор блоков может быть промаркирован как назначенные, или маркировка «неназначенные» в этом наборе блоков может быть удалена или отменена. Маркировка блоков как назначенных или неназначенных, например, может представлять собой переменную типа массива, или аналогичную ей, в которой каждый блок, подлежащий назначению, представлен одной записью массива, а значение этой записи в массиве указывает, был ли соответствующий блок назначен или нет.В другом примере количество блоков, все еще подлежащих назначению, т.е. количество оставшихся неназначенных блоков, сохраняют на протяжении шагов варианта осуществления настоящего изобретения.
[0206] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, количество блоков, подлежащих назначению в разделы, является одним из следующего: ширина изображения в блоках CTU (например, когда разделы представляют собой столбцы тайлов), высота изображения в блоках CTU (например, когда разделы представляют собой строки тайлов, или когда разделы представляют собой строки кирпичей, указанные для одного или более полных столбцов тайлов одновременно), количество строк блоков CTU в тайле (например, когда разделы представляют собой кирпичи тайла), ширина изображения в столбцах сетки (в случае сетки, используемой для указания разбиения на субизображения), высота изображения в строках сетки (в случае сетки, используемой для указания разбиения на субизображения).
[0207] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, упомянутые разделы являются одним или более из следующего: столбцы тайлов, строки тайлов, строки кирпичей, столбцы сетки (в случае сетки, используемой для указания разбиения на субизображения), строки сетки (в случае сетки, используемой для указания разбиения на субизображения).
[0208] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, в котором шаг d включает шаги d1, d2 и d3, описанные выше, может использоваться следующий, или аналогичный, синтаксис:
[0209] Значение num_exp_tile_columns_minus1 плюс 1 определяет количество явно предоставляемых ширин столбцов тайлов.
[0210] num_exp_tile_rows_minus1 плюс 1 определяет количество явно предоставляемых высот строк тайлов.
[0211] Значение tile_column_width_minus1[i] плюс 1 определяет ширину i-го столбца тайлов, измеряемую в СТВ, для i в диапазоне от 0 до num_exp_tile_columns_minus1 - 1 включительно. Значение tile_column_width_minus 1 [num_exp_tile_columns_minus1] используют для вычисления ширины столбцов тайлов с порядковыми номерами, большими или равными num_exp_tile_columns_minus1.
[0212] Значение tile_row_height_minus1[i] плюс 1 определяет высоту i-й строки тайлов, измеряемую в СТВ, для i в диапазоне от 0 до num_exp_tile_rows_minus1 - 1 включительно. Значение tile_row_height_minus1 [num_exp_tile_rows_minus1] используют для вычисления высоты строк тайлов с порядковыми номерами, большими или равными num_exp_tile_rows_minus1.
[0213] Флаги brick_splitting_present_flag и brick_spit_flag[i] могут быть определены в соответствии с приведенным выше описанием.
[0214] NumTilesInPic может быть принято равным количеству тайлов в изображении. NumTileColumns может быть принято равным количеству столбцов тайлов в изображении. Значение RowHeight[tileY] может быть принято равным количеству строк CTU в tile Y-й строке тайлов.
[0215] Значение num_exp_brick_rows_minus1[i] плюс 1 определяет количество явно предоставляемых высот строк кирпичей в i-м тайле. В случае его отсутствия значение num_exp_brick_rows_minus1[i] может быть принято равным -1.
[0216] Значение brick_row_height_minus1[i][j] плюс 1 определяет высоту j-ro кирпича в i-м тайле, измеряемую в СТВ, для j в диапазоне от 0 до num_exp_brick_rows_minus1[i] - 1 включительно. Значение brick_row_height_minus1[i][num_exp_brick_rows_minus1] используют для вычисления высоты строк кирпичей с порядковыми номерами, большими или равными num_exp_brick_rows_minus1[i] в i-м тайле.
[0217] В соответствии с одним из примеров осуществления настоящего изобретения, где для кодирования используют приведенный выше синтаксис (или, соответственно, для декодирования, что приведено ниже в скобках), столбцы тайлов определяют следующим образом:
- Указывают (или декодируют) количество явно предоставляемых ширин столбцов тайлов, (num_exp_tile_columns_minus1).
- Явно предоставляют (или декодируют и назначают) ширины столбцов тайлов, слева направо, (tile_column_width_minus1[i]).
- Последнюю явно предоставленную (или декодированную) ширину столбца тайлов (tile_column_width_minus1 [num_exp_tile_columns_minus1]) повторяют до тех пор, пока столбцы такой ширины не перестанут вмещаться в границы изображения.
- Оставшиеся блоки CTU, не назначенные ни в один столбец тайлов, если таковые имеются, назначают в самый правый столбец тайлов.
[0218] Высоты строк тайлов и строк кирпичей задают аналогично строкам тайлов.
[0219] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым к приведенному выше синтаксису, и применимым для кодирования и/или декодирования, переменную numTileColumns, определяющую количество столбцов тайлов, и список colWidth[i] для i в диапазоне от 0 до numTileColumns - 1 включительно, определяющую ширину i-го столбца тайлов, измеряемую в СТВ, вычисляют следующим образом:
[0220] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым к приведенному выше синтаксису, и применимым для кодирования и/или декодирования, переменную numTileRows, определяющую количество строк тайлов, и список RowHeight[j] для] в диапазоне от 0 до numTileRows - 1 включительно, определяющий высоту j-й строки тайлов, измеряемую в СТВ, вычисляют следующим образом:
[0221] В некоторых из вариантов осуществления настоящего изобретения может применяться следующее:
- Переменную NumTilesInPic задают равной numTileColumns * numTileRows.
- Список tileColBd[i] для i в диапазоне от 0 до numTileColumns включительно, определяющий местоположение границы i-го столбца тайлов, измеряемое в СТВ, получают следующим образом:
- Список tileRowBd[j] для j в диапазоне от 0 до numTileRows включительно, определяющий местоположение границы j-й строки тайлов, измеряемое в СТВ, вычисляют следующим образом:
[0222] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым к приведенному выше синтаксису, и применимым для кодирования и/или декодирования, описанным ниже образом вычисляют переменную NumBricksInPic, определяющую количество кирпичей в изображении, ссылающемся на данный PPS, и списки BrickColBd[brickIdx], BrickRowBd[brickIdx], BrickWidth[brickIdx], BrickHeight[brickIdx] для brickIdx в диапазоне от 0 до NumBricksInPic - 1 включительно, определяющие местоположения вертикальных границ кирпичей, измеряемые в СТВ, местоположения горизонтальных границ кирпичей, измеряемые в СТВ, ширины кирпичей, измеряемые в СТВ, и высоты кирпичей:
[0223] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, шаг d включает определение количества блоков, все еще подлежащих назначению в разделы, при помощи вычитания количества блоков в разделах явно заданного размера из количества блоков, подлежащих назначению в разделы, при этом способ дополнительно включает:
- назначение разделов как разделы явно заданного размера в соответствии с размерами или с количеством блоков в разделах явно заданного размера, и в соответствии с заранее заданным или указанным/декодированным порядком сканирования;
- назначение разделов как разделы равного размера при помощи деления блоков, все еще подлежащих назначению в разделы, на количество разделов равного размера, и в соответствии с заранее заданным или указанным/декодированным порядком сканирования.
[0224] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, количество разделов явно заданного размера указывают и/или декодируют из высокоуровневой синтаксической структуры (например, SPS), тогда как размеры разделов явно заданного размера и/или количество разделов равного размера, подлежащих назначению, могут указываться и/или декодироваться из низкоуровневой синтаксической структуры (например, PPS).
[0225] В соответствии с одним из вариантов осуществления настоящего изобретения логически получают, что количество разделов явно заданного размера равно 1 (например, это может быть заранее задано в стандарте кодирования).
[0226] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, шаг d включает:
- определение набора или списка размеров разделов, на которые может быть равномерно распределено количество блоков, все еще подлежащих назначению в разделы;
- если количество элементов в упомянутом наборе или списке равно 1, логическое заключение о том, что количество разделов равного размера равно 1;
- указание и/или декодирование порядкового номера (или аналогичной информации), соответствующей одному из элементов набора или списка, при этом порядковый номер указывает на количество разделов равного размера, подлежащих назначению.
[0227] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, набор или список размеров разделов, в которые могут быть равномерно распределено упомянутое количество блоков, все еще подлежащих назначению, ограничивают путем исключения размеров разделов, меньших порога, при этом порог может быть заранее задан, например, в стандарте кодирования, или указан/декодирован. Например, заранее задана или указана/декодирована может быть минимальная ширина столбца тайлов в CTU.
[0228] В соответствии с одним из вариантов осуществления настоящего изобретения порядковый номер, соответствующий элементу упомянутого набора или списка, кодируют с помощью кодового слова фиксированной длины, например, u(v), при этом длина кодового слова определяется количеством элементов в наборе или списке.
Указание, является ли граница потенциальной строки тайлов границей строки тайлов
[0229] В некоторых из вариантов осуществления настоящего изобретения границу строки тайлов получают логически, когда горизонтальные границы кирпичей находятся на одной линии на протяжении всего изображения. В этом разделе представлен вариант осуществления настоящего изобретения для сигнализации границ строк тайлов. Этот вариант осуществления настоящего изобретения может применяться совместно с любыми вариантами осуществления изобретения, в которых, в синтаксисе, границы кирпичей указывают раньше границ строк тайлов.
[0230] Данный вариант осуществления настоящего изобретения может включать один или более из следующих шагов (некоторые из которых уже были описаны выше):
- Потенциальные границы строк тайлов логически получают как границы кирпичей, находящихся на одной (горизонтальной) линии во всем изображении.
- кодер логически определяет, в битовом потоке или вместе с ним, и/или декодер декодирует, из битового потока или вместе с ним, образуют ли все находящиеся на одной линии границы кирпичей границы строк тайлов. Например, может использоваться флаг в синтаксисе битового потока.
- если все находящиеся на одной линии границы кирпичей не образуют границы строк тайлов, кодер указывает, в битовом потоке или вместе с ним, и/или декодер декодирует, из битового потока или вместе с ним, является ли эта граница границей строк тайлов. К примеру, в синтаксисе битового потока может присутствовать флаг для каждой границы находящихся на одной линии кирпичей (за исключением находящихся на одной линии границ кирпичей, которые являются границами изображения).
[0231] Например, может использоваться следующий синтаксис:
[0232] Значение NumAlignedBrickRows может быть вычислено аналогично NumTileRows в других вариантах осуществления настоящего изобретения.
[0233] Семантика представленных синтаксических элементов может быть определена описанным ниже образом.
[0234] Флаг explicit_tile_rows_flag, равный 0, определяет, что границу строк тайлов логически получают всякий раз, когда горизонтальные границы кирпичей находятся на одной линии на протяжении изображения. Флаг explicit_tile_rows_flag, равный 1, определяет, что присутствует синтаксический элемент tile_row_flag[i].
[0235] Флаг tile_row_flag[i], равный 0, определяет, что i-я горизонтальная граница, где горизонтальные границы кирпичей находятся на одной линии по ширине изображения, не является границей строк тайлов. Флаг tile_row_flag[i], равный 1, определяет, что i-я горизонтальная граница, где горизонтальные границы кирпичей находятся на одной линии по ширине изображения, является границей строк тайлов. 0-я горизонтальная граница, где горизонтальные границы кирпичей находятся на одной линии по ширине изображения, является верхней границей изображения.
Указание столбцов тайлов. идентично разбиваемых на кирпичи
[0236] В некоторых из примеров осуществления настоящего изобретения синтаксис включает указание на то, что столбец тайлов разбивают на кирпичи идентично предыдущему столбцу тайлов, в порядке входа цикла (например, сканирование столбцов тайлов слева направо). Нужно понимать, что варианты осуществления настоящего изобретения могут быть равноценно применимы без такого указания или с любым аналогичным указанием. К примеру, сканирование столбцов тайлов может выполняться слева направо, и, следовательно, может быть указано, что разбиение на кирпичи текущего столбца тайлов должно быть скопировано из столбца тайлов справа. В другом примере может быть указано, или логически определено, что все столбцы тайлов равной ширины имеют одинаковое разбиение на кирпичи. В еще одном из примеров указывают порядковый номер столбца тайлов, из которого должно быть скопировано разбиение на кирпичи. Нужно также понимать, что могут равноценно применяться варианты осуществления настоящего изобретения, в которых используют другие методы заключения о разбиении столбца тайлов на кирпичи на основе предшествующих указаний. В настоящем разделе представлены некоторые из соответствующих вариантов осуществления изобретения.
[0237] В одном из вариантов осуществления настоящего изобретения кодер указывает, в битовом потоке или вместе с ним, и/или декодер декодирует, из битового потока или вместе с ним, имеют ли все столбцы тайлов, имеющие одинаковую ширину (например, в СТВ), одинаковое разбиение на кирпичи. К примеру, может использоваться синтаксический элемент с именем same_brick_spacing_in_equally_wide_tile_cols_flag.
[0238] В одном из вариантов осуществления настоящего изобретения кодер указывает, в битовом потоке или вместе с ним, и/или декодер декодирует, из битового потока или вместе с ним, количество смежных столбцов тайлов, в порядке входа цикла (например, сканирование столбцов тайлов слева направо), имеющих одинаковое разбиение на кирпичи. Например, синтаксический элемент с именем num_tile_cols_with_same_brick_partitioning_minus1[i], может быть кодирован в формате u(v), где v определяется количеством оставшихся столбцов тайлов, для которых разбиение на кирпичи еще не указано.
[0239] В одном из вариантов осуществления настоящего изобретения кодер может указывать, в битовом потоке или вместе с ним, и/или декодер может декодировать, из битового потока или вместе с ним, присутствуют ли синтаксические элементы, относящиеся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи (например, флаг copy_previous_col_flag[i]). В одном из вариантов осуществления настоящего изобретения такое указание находится в синтаксической структуре на уровне последовательности, например, в SPS. В еще одном из вариантов осуществления настоящего изобретения такое указание может находиться в синтаксической структуре на уровне изображения, например, в PPS. В одном из вариантов осуществления настоящего изобретения может быть заранее задано, например, в стандарте кодирования, что отсутствие синтаксических элементов, относящихся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи, может вызывать указание и/или декодирование разбиения на кирпичи для всех столбцов тайлов по отдельности. В одном из вариантов осуществления настоящего изобретения может быть заранее задано, например, в стандарте кодирования, что отсутствие синтаксических элементов, относящихся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи, может вызывать указание и/или декодирование разбиения на кирпичи для одного столбца тайлов и логическое заключение о том, что оно такое же для всех столбцов тайлов. В одном из вариантов осуществления настоящего изобретения способ обработки отсутствия синтаксических элементов, относящихся к указанию на то, что столбцы тайлов идентично разбивают на кирпичи, указывает кодер, в битовом потоке или вместе с ним, например, в SPS, и/или декодирует декодер, из битового потока или вместе с ним, например, из SPS. Упомянутый способ может быть указан и/или декодирован в составе заранее заданного набора процедур, который может включать, без ограничения перечисленным: i) указание и/или декодирование разбиения на кирпичи для всех столбцов тайлов по отдельности, и ii) указание и/или декодирование разбиения на кирпичи для одного столбца тайлов и логическое заключение о том, что оно является одинаковым для всех столбцов тайлов.
[0240] В некоторых из вариантов осуществления настоящего изобретения определяют, или логически получают, количество блоков, подлежащих назначению в разделы. Количество блоков может быть, например, количеством столбцов CTU в изображении, количеством строк CTU в изображении или количеством строк CTU в тайле. При декодировании количество блоков, подлежащих назначению в разделы, может быть декодировано из SPS и/или PPS. В некоторых из вариантов осуществления настоящего изобретения может быть желательным исключение зависимостей анализа между синтаксическими структурами, и все синтаксические элементы, достаточные для логического определения количества блоков, включают в одну синтаксическую структуру, например, в PPS. К примеру, в PPS могут быть включены ширина изображения в отсчетах яркости, высота изображения в отсчетах яркости и размер CTU, что позволяет логически получать количество столбцов CTU в изображении и количество строк CTU в изображении.
[0241] Например, в PPS может быть включен синтаксический элемент log2_pps_ctu_size_minus5, кодированный в формате u(2). Значение log2_pps_ctu_size_minus5 плюс 5 определяет размер блока кодового дерева в каждом из CTU. Значение log2_pps_ctu_size_minus5, равное 0, 1 или 2, определяет, что размер блока кодового дерева яркости в каждом CTU равен 32×32, 64×64 или 128×128 отсчетов яркости соответственно. Может предъявляться требование, чтобы значение log2_pps_ctu_size_minus5 было меньше или равным 2. Может предъявляться требование, чтобы значение log2_pps_ctu_size_minus5, равное log2_ctu_size_minus5, было указано в SPS.
Указание разбиения на субизображения
[0242] Следует отметить, что многие из рассмотренных вариантов осуществления изобретения для указания разбиения на слайсы, тайлы и/или кирпичи, не зависит от метода указания субизображений. В настоящем разделе представлены варианты осуществления настоящего изобретения для указания и/или декодирования разбиения изображения на субизображения. Многие из вариантов осуществления настоящего изобретения в данном разделе могут использоваться независимо от других вариантов осуществления изобретения, например, для указания разбиения на слайсы, тайлы и/или кирпичи, однако это не является обязательным.
[0243] В соответствии с одним из вариантов осуществления настоящего изобретения сетку, используемую при сигнализации разбиения на субизображения, указывают, в битовом потоке или вместе с ним (например, в SPS), или декодируют, из битового потока или вместе с ним (например, из SPS). Ячейки этой сетки определяют блоки, в соответствии с которыми сигнализируют границы субизображений. То есть, граница субизображения может находиться только на границе указанной сетки.
[0244] В соответствии с одним из вариантов осуществления настоящего изобретения сетку указывают и/или декодируют, используя CTU в качестве элементарной единицы (или аналогичные элементарные блоки кодирования в кодеке).
[0245] В соответствии с одним из вариантов осуществления настоящего изобретения сигнализация включает указание информации о количестве столбцов сетки, количестве строк сетки, ширин столбцов сетки (например, измеряемое в числе CTU) и высот строк сетки (например, измеряемое в числе CTU). Например, может использоваться следующий синтаксис:
[0246] Значение num_Id_columns_minus1 определяет количество столбцов, на которые разбивают изображение, минус 1. Значение num_Id_rows_minus1 определяет количество строк, на которые разбивают изображение, минус 1. Значение Id_column_width_minus1[i] плюс 1 определяет ширину i-го столбца, измеряемое в блоках кодового дерева. Значение Id_row_height_minus1[i] плюс один определяет высоту i-й строки, измеряемую в блоках кодового дерева. Самый правый столбец сетки может рассматриваться как состоящий из столбцов блоков кодового дерева, не назначенных в остальные столбцы сетки. Самая нижняя строка сетки может рассматриваться как состоящая из блоков кодового дерева, не назначенных в остальные строки сетки.
[0247] В соответствии с еще одним из примеров, может использоваться следующий синтаксис:
[0248] Когда применяют описанную выше сигнализацию, все столбцы сетки имеют равную ширину, за исключением, возможно, самого правого столбца сетки, который может рассматриваться как состоящий из столбцов блоков кодового дерева, не назначенных в остальные столбцы сетки. Аналогично, все строки сетки могут иметь равную высоту, за исключением, возможно, самой нижней строки сетки, которая может рассматриваться как состоящая из блоков кодового дерева, не назначенных в остальные строки сетки. Значение Id_column_width_minus1 плюс 1 определяет ширину столбцов сетки, измеряемую в блоках кодового дерева. Значение Id_row_height_minus1 плюс один определяет высоту строк сетки, измеряемую в блоках кодового дерева.
[0249] В соответствии с одним из вариантов осуществления настоящего назначение ячеек сетки в субизображения указывают, в битовом потоке или вместе с ним (например, в SPS), и/или декодируют, из битового потока или вместе с ним (например, из SPS).
[0250] В одном из вариантов осуществления настоящего изобретения назначение ячеек сетки в субизображения указывают с помощью и/или декодируют из порядкового номера нижней правой ячейки сетки для каждого субизображения (возможно, помимо последнего субизображения, для которого нижняя правая ячейка соты может считаться нижней правой ячейкой всей сетки). К примеру, может использоваться следующий синтаксис, или аналогичный ему (который может быть добавлен после любого рассмотренного выше, или аналогичного, синтаксиса):
Значение num_subpics_minus2 плюс два определяет количество субизображений в изображении. Значение bottom_right_grid_idx_length-minus1 плюс один определяет количество битов, используемых для представления синтаксического элемента bottom right_grid_idx_delta[i]. Значение bottom right_grid_idx_delta[i], когда i больше 0, определяет разность между порядковым номером ячейки сетки, расположенной в правом нижнем углу i-го субизображения, и порядковым номером ячейки сетки в правом нижнем углу (i - 1)-го субизображения. Значение bottom_right_grid_idx delta[0] определяет порядковый номер ячейки в правом нижнем углу 0-го субизображения. Правый нижний угол последнего субизображения считают правой нижней ячейкой сетки. Флаг grid_idx_delta_sign_flag[i], равный 1, указывает на положительный знак bottom_right_grid_idx_delta[i]. Флаг sign_bottom_right_grid_idx_delta[i], равный 0, указывает на отрицательный знак bottom_right_grid_idx_delta[i]. Переменные NumGridRows, NumGridCols и NumGridCellsInPic могут быть логически определены равными количествам строк сетки, столбцов сетки и ячеек сетки в изображении, соответственно. Переменные TopLeftGridIdx[i], BottomRightGridIdx[i], NumGridCellsInSubpic[i] и GridCellsToSubpicMap[j], которые определяют порядковый номер ячейки сетки, расположенной в верхнем левом углу i-го субизображения, порядковый номер ячейки сетки, расположенной в правом нижнем углу i-го субизображения, количество ячеек сетки в i-м субизображении и соответствие ячеек сетки субизображениям, вычисляют следующим образом:
Указание разбиения на тайлы как дополнительного деления разбиения на субизображения
[0251] В соответствии с одним из вариантов осуществления настоящего изобретения, который может применяться совместно с другими вариантами изобретения или независимо от них, разбиение изображения на субизображения указывают, в битовом потоке или вместе с ним, например, в SPS, и/или декодируют, из битового потока или вместе с ним, например, из SPS, а разбиение на столбцы тайлов, строки тайлов и/или кирпичи указывают, в битовом потоке или вместе с ним, например в PPS, и/или декодируют, из битового потока или вместе с ним, например из PPS, на основе разбиения на субизображения.
[0252] В соответствии с одним из вариантов осуществления настоящего изобретения кодер указывает границы столбцов тайлов, в битовом потоке или вместе с ним, и/или декодер декодирует границы столбцов тайлов, из битового потока или вместе с ним, описанным ниже образом. Поскольку вертикальные границы прямоугольных слайсов совпадают с границами столбцов тайлов и поскольку субизображения состоят из одного или нескольких полных прямоугольных слайсов, можно сделать вывод, что граница столбцов тайлов совпадает с вертикальной границей субизображения. Таким образом, вертикальные границы субизображений получают (например, в кодере) или декодируют (например, в декодере), и делают вывод, что они являются границами столбцов тайлов. Кроме того, кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, существуют ли дополнительные границы столбцов тайлов (в дополнение к тем, о которых был сделан вывод на основе вертикальных границ субизображения). К примеру, флаг tile_col_splitting_present_flag может быть указан, в битовом потоке или вместе с ним, (например, кодером) и/или декодирован, из битового потока или вместе с ним (например, декодером). Флаг tile_col_splitting_present_flag, равный 0, определяет, что границы столбцов тайлов идентичны полученным или декодированным вертикальным границам субизображений. Флаг tile_col_splitting_present_flag, равный 1, определяет, что есть дополнительные столбцы тайлов в дополнение к столбцам, о которых был сделан вывод на основе вертикальных границ субизображений.
[0253] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, что существуют дополнительные границы столбцов тайлов (в дополнение к тем, о которых был сделан вывод на основе вертикальных границ субизображений), применяют описанное ниже. Вертикальные границы субизображений, которые не являются границами изображения, могут быть упорядочены, например, слева направо, и пронумерованы от 0 до NumSubPicCols - 2 включительно, где NumSubPicCols - это количество отдельных вертикальных границ субизображений, которые не являются границами изображения, i-й столбец субизображений может быть определен как окаймленный слева правой границей (i-1)-го столбца субизображений, когда i больше 0, или левой границей изображения, когда i равно 0, и справа границей i-го субизображения, когда i меньше NumSubPicCols - 1, или правой границей изображения, когда i равно NumSubPicCols - 1. Кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например из PPS, разделен ли столбец субизображений на более чем один столбец тайлов. Например, флаг tile_col_split_flag[i] может быть указан, в битовом потоке или вместе с ним (например, кодером), и/или декодирован, из битового потока или вместе с ним, (например, декодером), для каждого столбца субизображений. Флаг tile_col_split_flag[i], равный 0, указывает, что i-й столбец субизображений состоит ровно из одного столбца тайлов. Флаг tile_col_split_flag [i], равный 1, указывает, что i-й столбец субизображений состоит более чем из одного столбца тайлов.
[0254] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, что столбец субизображений разделен более чем на один столбец тайлов, столбцы тайлов в столбце субизображений указывают аналогично проекту стандарта VVC или любому из рассмотренных вариантов осуществления настоящего изобретения. Например, кодер может указывать, в битовом потоке или вместе с ним, и/или декодер может декодировать, из битового потока или вместе с ним, синтаксический элемент, указывающий на количество столбцов тайлов в столбце субизображений. К примеру, может использоваться синтаксический элемент num_tile_cols_minus2[i], при этом значение num_tile_cols_minus2 [i] плюс 2 определяет количество столбцов тайлов в i-м столбце субизображений. Ширину каждого столбца тайлов в столбце субизображений указывают, в битовом потоке или вместе с ним, и/или декодируют, из битового потока или вместе с ним (за исключением последнего столбца тайлов в столбце субизображений, ширина которого может быть логически определена как содержащая всю оставшуюся, еще нераспределенную область субизображения). К примеру, может использоваться элемент tile_col_width_minus1[i][j], при этом значение tile_col_width_minus1[i][j] плюс 1 определяет ширину]-го столбца тайлов в i-м столбце субизображений, измеряемую в CTU.
[0255] В рассмотренных выше вариантах осуществления настоящего изобретения может применяться, например, следующий синтаксис, или аналогичный ему:
[0256] В соответствии с одним из вариантов осуществления настоящего изобретения кодер указывает границы строк тайлов, в битовом потоке или вместе с ним, и/или декодер декодирует границы строк тайлов, из битового потока или вместе с ним, описанным ниже образом. Горизонтальная граница субизображения может совпадать либо с границей строки тайлов, либо с границей кирпича внутри тайла. Таким образом, горизонтальные границы субизображения получают (например, в кодере) или декодируют (например, в декодере), и делают вывод, что они являются границами либо строки тайлов, либо границами кирпича.
[0257] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, совпадают ли границы строк тайлов один в один с горизонтальными границами субизображения (и наоборот), или есть дополнительные границы строк тайлов, или некоторые горизонтальные границы субизображения являются границами кирпичей внутри тайла (или тайлов). К примеру, флаг tile_row_splitting_present_flag может быть указан, в битовом потоке или вместе с ним, (например, кодером) и/или декодирован, из битового потока или вместе с ним (например, декодером). Флаг tile_row_splitting_present_flag, равный 0, определяет, что границы строк тайлов идентичны полученным или декодированным горизонтальным границам субизображения. Флаг tile_row_splitting_present_flag, равный 1, определяет, что существуют дополнительные строки тайлов, в дополнение к тем, о которых был сделан вывод на основе горизонтальных границ субизображения, или что некоторые из горизонтальных границ субизображения являются границами кирпича тайла (или тайлов).
[0258] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, что существуют дополнительные границы строк тайлов (в дополнение к тем, о которых был сделан вывод на основе горизонтальных границ субизображения), или что некоторые из горизонтальных границ субизображений являются границами кирпичей внутри тайла (или тайлов), применяют описанное ниже. Горизонтальные границы субизображений, которые не являются границами изображения, могут быть упорядочены, например, сверху вниз, и пронумерованы от 0 до NumSubPicRows - 2 включительно, где NumSubPicRows - это количество отдельных горизонтальных границ субизображения, не являющихся границами изображения, i-ая строка субизображений может быть определена как окаймленная сверху нижней границей (i-1)-oft строки субизображений, когда i больше 0, или верхней границей изображения, когда i равно 0, и снизу границей i-го субизображения, когда i меньше NumSubPicRows - 1, или нижней границей изображения, когда i равно NumSubPicRows - 1. Кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например из PPS, является ли граница строки субизображений границей строки тайлов или границей кирпича. Например, флаг tile_row_flag[i] может быть указан, в битовом потоке или вместе с ним (например, кодером), и/или декодирован, из битового потока или вместе с ним, (например, декодером), для каждого столбца субизображений. Флаг tile_row_flag[i], равный 0, определяет, что граница i-й строки субизображений является границей кирпича внутри тайла (или тайлов). Флаг tile_row_flag[i], равный 1, определяет, что граница i-й строки субизображений является границей строки тайлов. Кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, содержит ли строка субизображений данные для более чем одной строки тайлов. Например, флаг tile_row_split_flag[i] может быть указан, в битовом потоке или вместе с ним (например, кодером), и/или декодирован, из битового потока или вместе с ним (например, декодером), для каждой строки субизображений. Флаг tile_row_split_flag [i], равный 0, определяет, что i-я строка субизображений содержит данные для одной строки тайлов. Флаг tile_row_split_flag[i], равный 1, определяет, что i-я строка субизображений содержит данные более чем для одной строки тайлов.
[0259] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, что строка субизображений содержит данные более чем для одной строки тайлов, строки тайлов в строке субизображений указывают аналогично проекту стандарта VVC или любому из рассмотренных вариантов осуществления настоящего изобретения. Например, кодер может указывать, в битовом потоке или вместе с ним, и/или декодер может декодировать, из битового потока или вместе с ним, синтаксический элемент, указывающий на количество границ строк тайлов в строке субизображений. Например, может применяться синтаксический элемент num_tile_rows_minus2[i], при этом значение num_tile_rows_minus2 [i] плюс 2 определяет количество границ строк тайлов в i-й строке субизображений. Высоту каждой строки тайлов в строке субизображений указывают, в битовом потоке или вместе с ним, и/или декодируют, из битового потока или вместе с ним (за исключением последней строки тайлов в строке субизображений, высота которой может быть логически определена как содержащая всю оставшуюся, еще нераспределенную область до следующей границы строки тайлов в следующей строке (или строках) субизображений, в зависимости от значения tile_row_flag[j], где j больше i). Например, может использоваться элемент tile_row_height_minus1[i][j], при этом значение tile_row_height_minus1[i][j] плюс 1 определяет высоту j-й строки тайлов в i-й строке субизображений, измеряемую в CTU.
[0260] В рассмотренных выше вариантах осуществления настоящего изобретения может применяться, например, следующий синтаксис, или аналогичный ему:
[0261] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования и/или декодирования, когда граница субизображения не совпадает с границей строки тайлов, логически заключают, что граница субизображения совпадает с границей кирпича. Кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, существуют ли дополнительные кирпичи (в дополнение к тем, о которых был сделан вывод на основе границ субизображения). К примеру, флаг brick_splitting_present_flag может быть указан, в битовом потоке или вместе с ним (например, кодером), и/или декодирован, из битового потока или вместе с ним (например, декодером). Переменную NumInferredBricksInPic задают в соответствии с количеством кирпичей, логически полученным на основе количества тайлов в указанной сетке тайлов, и дополнительного деления тайлов по логически полученным границам кирпичей. Флаг brick_splitting_present_flag, равный 0, определяет, что нет границ кирпичей, кроме тех, которые были логически определены на основе границ субизображения. Флаг brick_splitting_present_flag, равный 1, определяет, что есть границы кирпичей, которые не определены логически на основе границ субизображения (т.е. количество кирпичей больше, чем NumInferredBricksInPic).
[0262] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, что существуют границы кирпичей, которые не определены логически на основе границ субизображения, применяют описанное ниже. Логически полученные кирпичи могут быть пронумерованы в заранее заданном порядке сканирования. Кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, разделен ли логически полученный потенциальный кирпич более чем на один кирпич. К примеру, может быть указан, в битовом потоке или вместе с ним (например, кодером), и/или декодирован, из битового потока или вместе с ним (например, декодером), флаг brick_split_flag[i] для каждого логически полученного потенциального кирпича. Флаг brick_split_flag[i], равный 0, определяет, что i-й логически полученный потенциальный кирпич состоит ровно из одного кирпича. Флаг brick_split_flag[i], равный 1, определяет, что i-й логически полученный потенциальный кирпич состоит более чем из одного кирпича.
[0263] В рассмотренных выше вариантах осуществления настоящего изобретения может применяться, например, следующий синтаксис, или аналогичный ему:
[0264] В одном из вариантов осуществления настоящего изобретения, когда кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например, из PPS, что логически полученный потенциальный кирпич разделен более чем на один кирпич, дальнейшее разделение логически полученного потенциального кирпича указывают, в битовом потоке или вместе с ним (например, с помощью кодера), и/или декодируют, из битового потока или вместе с ним (например, с помощью декодера) аналогично проекту стандарта VVC или любому из рассмотренных вариантов осуществления настоящего изобретения. Например, кодер может указывать, в битовом потоке или вместе с ним, и/или декодер может декодировать, из битового потока или вместе с ним, синтаксический элемент, указывающий на количество кирпичей в логически полученном потенциальном кирпиче. К примеру, может использоваться синтаксический элемент num_bricks_minus2[i], при этом значение num_bricks_minus2[i] плюс 2 определяет количество кирпичей в i-м логически полученном потенциальном кирпиче. Высоту каждого кирпича в логически полученном потенциальном кирпиче указывают, в битовом потоке или вместе с ним, и/или декодируют, из битового потока или вместе с ним (за исключением последнего кирпича в логически полученном потенциальном кирпиче, ширину которого логически получают как содержащую всю оставшуюся, нераспределенную область логически полученного потенциального кирпича). К примеру, может использоваться элемент brick_row_height_minus1[i][j] при этом значение brick_row_height_minus1[i][j] плюс 1 определяет высоту j-го кирпича в i-м логически полученном потенциальном кирпиче, измеряемую в CTU.
[0265] Таким образом, синтаксис и семантика для сигнализации разбиения на тайлы и кирпичи, в соответствии с вариантами осуществления настоящего изобретения, обеспечивают значительное сокращение количества синтаксических элементов и строк синтаксиса, необходимых для реализации упомянутой сигнализации. В результате достигается значительная экономия количества битов, необходимых для указания разбиения на тайлы и кирпичи.
[0266] Эти преимущества проиллюстрированы на следующем примере, где три различных разбиения на тайлы и кирпичи, показанные на фиг. 9а, 9b и 9с, используются для сравнения эффективности разбиения на тайлы и кирпичи согласно версии 5 проекта VVC и разбиения на тайлы и кирпичи в соответствии с некоторыми из вариантов осуществления настоящего изобретения.
[0267] На фиг. 10а и 10b представлены разбиения на тайлы и кирпичи, которые обеспечивают реализацию равнопрямоугольной проекции (equirectangular projection, ERP) и проекции кубической карты (cubemap projection, CMP) с эффективным разрешением 6К (соответственно), которые описаны в пунктах D. 6.3 и D.6.4 (соответственно) формата всенаправленных медиа (Omnidirectional Media Format, OMAF, ISO/IEC 23090-2). Эти схемы приведены в рекомендациях Форума индустрии виртуальной реальности (VR Industry Forum Guidelines). Схема, представленная на фиг. 10 с, практически эквивалентна схеме на фиг. 10b, однако там применяют отличающееся соотношение сторон изображения.
[0268] Для версии 5 проекта VVC и варианта осуществления настоящего изобретения, объединяющего указание столбцов тайлов и высот кирпичей для каждого столбца тайлов, и унифицированную сигнализацию о явно заданном или равномерном разбиении на тайлы и кирпичи, были получены следующие характеристики:
- Количество синтаксических элементов для указания разбиения на тайлы и кирпичи
- Количество строк синтаксиса для указания разбиения на тайлы и кирпичи
- Количество битов, необходимых для указания разбиения на тайлы и кирпичи для схем, представленных на чертеже ниже
- Экономия числа битов в процентах, обеспечиваемая упомянутым вариантом осуществления настоящего изобретения, по сравнению с версией 5 проекта VVC для схем, представленных на чертеже ниже.
[0269] Характеристики, полученные при размере блоков СТВ яркости, равном 128×128, представлены в таблице ниже.
[0270] Соответственно, можно видеть, что количество синтаксических элементов сократилось с 13 до 7, а количество требуемых строк синтаксиса сократилось с 26 до 20. Экономия числа битов, обеспечиваемая предложенным вариантом осуществления настоящего изобретения, для каждого из разбиений на тайлы и кирпичи на фиг. 10а-10 с составляет более 50% по сравнению с версией 5 проекта VVC. Также следует отметить, что посредством настоящего изобретения могут быть сокращены семантика и процедуры вычислений.
Указание некодированных тайлов или кирпичей
[0271] В некоторых применениях желательно иметь возможность назначить контент, который должен быть кодирован и/или декодирован, в тайлы и/или кирпичи таким образом, чтобы было занято только подмножество тайлов и/или кирпичей. К примеру, при потоковой передаче 360-градусного видео, зависящей от порта просмотра, может приниматься только подмножество независимо кодированных областей изображения, например, тайлов. В другом примере может применяться кодирование, на основе патчей (patch-based), объемного видео или видео облака точек, где патчи занимают только подмножество тайлов и/или кирпичей изображения.
[0272] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для кодирования, некодированные тайлы или кирпичи указывают в синтаксической структуре до данных слайсов, в битовом потоке или вместе с ним. Для некодированных тайлов или кирпичей в данные слайсов не кодируют никаких синтаксических элементов. Некодированные тайлы или кирпичи восстанавливают (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения восстановленных отсчетов в массивах отсчетов равными 0.
[0273] В соответствии с одним из вариантов осуществления настоящего изобретения, применимым для декодирования, некодированные тайлы или кирпичи декодируют из синтаксической структуры, предшествующей данным слайсов, из битового потока или вместе с ним. Для некодированных тайлов или кирпичей из данных слайсов не декодируют никаких синтаксических элементов. Некодированные тайлы или кирпичи декодируют (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения восстановленных отсчетов в массивах отсчетов равными 0.
[0274] В соответствии с одним из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, количество некодированных кирпичей указывают для отдельных столбцов тайлов, например, с использованием слова переменной длины в формате ue(v). Кирпичи в столбце тайлов проходят в заранее заданном порядке сканирования (например, снизу вверх). Для каждого пройденного кирпича указывают и/или декодируют флаг, позволяющий заключить, является кирпич некодированным или нет. Если кирпич не кодирован, количество кирпичей, оставшихся для обозначения как некодированные, уменьшают на 1. Процедура продолжается до тех пор, пока не останется кирпичей, которые можно обозначить некодированными.
[0275] На фиг. 11 проиллюстрирована блок-схема видеодекодера, подходящего для применения вариантов осуществления настоящего изобретения. На фиг. 11 показана структура двухуровневого декодера, однако нужно понимать, что те же операции декодирования могут аналогичным образом применяться в одноуровневом декодере.
-1
-1
-1
[0276] Видеодекодер 550 включает первую секцию 552 декодера для базового уровня и вторую секцию 554 декодера для предсказываемого уровня. Блок 556 иллюстрирует демультиплексор, предназначенный для предоставления информации об изображениях базового уровня в первую секцию 552 декодера, а также для предоставления информации об изображениях предсказываемого уровня во вторую секцию 554 декодера. Р'n обозначены предсказанные представления блока пикселей изображения. D'n обозначены восстановленные сигналы ошибки предсказания. Блоки 704, 804 иллюстрируют предварительно восстановленные изображения (I'n). R'n обозначено окончательное восстановленное изображение. Блоками 703, 803 проиллюстрированное обратное преобразование (Т). Блоками 702, 802 проиллюстрировано обратное квантование (Q). Блоками 701, 801 проиллюстрировано энтропийное декодирование (Е). Блоками 705, 805 проиллюстрирована память опорных кадров (reference frame memory, RFM). Блоками 706, 806 проиллюстрировано предсказание (Р) (либо внутреннее, либо внешнее предсказание). Блоками 707, 807 проиллюстрирована фильтрация (F). Блоки 708, 808 могут использоваться для комбинирования декодированной информации ошибки предсказания с предсказанными изображениями базового или предсказываемого уровня, в результате чего получают предварительно восстановленные изображения (Гп). Предварительно восстановленные и прошедшие фильтрацию изображения базового уровня могут выводиться (709) из первой секции 552 декодера, а предварительно восстановленные и прошедшие фильтрацию изображения предсказываемого ракурса могут выводиться (809) из второй секции 554 декодера.
[0277] Здесь под декодером понимают любой функциональный блок, способный выполнять операции декодирования, например, это может быть проигрыватель, приемник, шлюз, демультиплексор и/или декодер.
[0278] На фиг. 12 показана блок-схема алгоритма работы декодера в соответствии с одним из вариантов осуществления настоящего изобретения. Операции декодирования в вариантах осуществления настоящего изобретения практически аналогичны операциям кодирования, за исключением того, что декодер декодирует указания из битового потока или вместе с ним. Так, способ декодирования включает:
декодирование (1200) фрагмента битового потока, включающего указание столбцов тайлов и указание высот кирпичей для одного или более столбцов тайлов одновременно; логическое определение (1202), в случае обнаружения строк кирпичей, находящихся на одной линии на протяжении изображения, потенциальных строк тайлов; логическое определение (1204) или декодирование указания, является ли граница потенциальной строки тайлов границей строки тайлов; и декодирование (1206) одного или более изображений из битового потока с использованием указанных столбцов тайлов, указанных или логически полученных строк тайлов и указанных высот кирпичей, при этом одно или более изображений разбивают на сетку тайлов, следуя указанным столбцам тайлов и указанным или логически полученным строкам тайлов, при этом тайл в сетке тайлов включает целое число блоков кодового дерева и разбит на один или более кирпичей, и при этом кирпич содержит целое число строк блоков кодового дерева внутри тайла.
[0279] На фиг. 13 показана блок-схема алгоритма работы декодера в соответствии с еще одним из вариантов осуществления настоящего изобретения. Способ декодирования включает следующие шаги: а) декодирование (1300) указания на количество разделов, подлежащих назначению; b) определение (1302) количества блоков, подлежащих назначению в разделы; с) определение (1304), является ли количество блоков, подлежащих назначению, назначаемым равномерно в упомянутое количество разделов; и если это не так, d) определение (1306) количества блоков, подлежащих назначению в следующий раздел, и е) повтор (1308) шагов с) и d) до тех пор, пока все блоки не будут назначены в разделы.
Указание разбиения изображения на прямоугольные слайсы
[0280] В следующих параграфах представлены варианты осуществления настоящего изобретения для усовершенствованных способов кодирования и/или декодирования сигнализации прямоугольных слайсов. Эти варианты осуществления настоящего изобретения могут применяться совместно с вариантами осуществления изобретения для разбиения на тайлы и кирпичи или независимо от них. Эти варианты осуществления настоящего изобретения основаны на определениях и свойствах тайлов, кирпичей и прямоугольных слайсов, принятых в версии 5 проекта VVC. С помощью предложенных вариантов осуществления настоящего изобретения число битов, необходимых для указания прямоугольных слайсов (например, указания или получения местоположения, ширины и высоты прямоугольных слайсов), может быть сокращено.
[0281] Способ кодирования, в соответствии с первым аспектом настоящего изобретения, включает указание, в битовом потоке или вместе с ним, или логическое определение верхнего левого кирпича прямоугольного слайса. заключение, на
основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов; если прямоугольный слайс включает один или более кирпичей тайлов, указание, в битовом потоке или вместе с ним, или логическое определение количества кирпичей в прямоугольном слайс е.
[0282] Способ декодирования, в соответствии с первым аспектом настоящего изобретения, включает декодирование, из битового потока или вместе с ним, или логическое определение верхнего левого кирпича прямоугольного слайса; заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов; если прямоугольный слайс включает один или более кирпичей тайлов, декодирование, из битового потока или вместе с ним, или логическое определение количества кирпичей в прямоугольном слайсе.
[0283] Местоположение кирпича может быть, например, порядковым номером кирпича в порядке сканирования кирпичей изображения.
[0284] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, когда местоположение верхнего левого кирпича прямоугольного слайса не является верхним левым кирпичом ни одного тайла, заключают, что прямоугольный слайс содержит один или более кирпичей тайла.
[0285] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, когда местоположение верхнего левого кирпича прямоугольного слайса является верхним левым кирпичом какого-либо тайла, и тайл содержит множество кирпичей, заключают, что прямоугольный слайс может включать либо кирпичи тайла, либо полные тайлы. В одном из вариантов осуществления настоящего изобретения, применимом для кодирования, если заключено, что прямоугольный слайс может содержать либо кирпичи тайла, либо полные тайлы, указывают, в битовом потоке или вместе с ним, содержит ли прямоугольный слайс кирпичи тайла или полные тайлы. В одном из вариантов осуществления настоящего изобретения, применимом для декодирования, если заключено, что прямоугольный слайс может содержать либо кирпичи тайла, либо полные тайлы, декодируют, из битового потока или вместе с ним, содержит ли прямоугольный слайс кирпичи тайла или полные тайлы.
[0286] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, если логически определено или указано (как часть кодирования), или декодировано, что прямоугольный слайс содержит кирпичи тайла, переменную, например, с именем numDeltaValues задают равной количеству кирпичей, следующих за местоположением верхнего левого кирпича прямоугольного слайса и находящихся в этом же тайле. Если numDeltaValues равно 1, делают вывод о том, что прямоугольный слайс содержит ровно один кирпич. В противном случае переменную numDeltaValues используют для вычисления длины первого синтаксического элемента, указывающего на нижний правый кирпич прямоугольного слайса, или второго синтаксического элемента, указывающего на количество кирпичей в прямоугольном слайсе, или третьего синтаксического элемента, указывающего на высоту (в кирпичах) прямоугольного слайса, или любого аналогичного синтаксического элемента. Например, упомянутые первый, второй или третий синтаксический элемент или любой аналогичный синтаксический элемент могут быть кодированы в формате u(v), а его длина может составлять Ceil(Log2(numDeltaValues)) бит.
[0287] В одном из примеров осуществления настоящего изобретения применяют следующий синтаксис:
[0288] Семантика синтаксических элементов может быть определена в соответствии с предшествующим описанием, за исключением того, что значение 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], вычисляют следующим образом:
[0289] Длина синтаксического элемента bottom_right_brick_idx_delta [i] составляет Ceil(Log2(numDeltaValues)) бит. Переменная NumBricksIntile [brickIdx] определяет количество кирпичей в тайле, содержащем кирпич с порядковым номером brickIdx при сканировании кирпичей изображения. Переменная BrickIdxlntile[brickIdx] определяет порядковый номер кирпича внутри тайла, содержащего этот кирпич, когда кирпич имеет порядковый номер brickIdx при сканировании кирпичей изображения.
[0290] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, местоположение верхнего левого кирпича прямоугольного слайса получают логически. Вначале все местоположения кирпичей маркируют как свободные. Цикл назначения кирпичей в прямоугольные слайсы включают, в битовом потоке или вместе с ним, или декодируют, из битового потока или вместе с ним. При каждом входе в цикл считают, что верхний левый кирпич прямоугольного слайса будет следующим свободным местоположением кирпича в заранее заданном, указанном или декодированном порядке сканирования. К примеру, может быть заранее определено, например, в стандарте кодирования, что используется порядок сканирования кирпичей в изображении. Нижний правый кирпич прямоугольного слайса может быть определен логически, указан или декодирован, например, в соответствии с предшествующим описанием, а кирпичи, образующие прямоугольник с верхним левым кирпичом и правым нижним кирпичом в углах, маркируют как назначенные. Эту же, или аналогичную, процедуру выполняют при каждом входе в цикл.
[0291] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, когда заключено (как часть кодирования или декодирования) или указано (как часть кодирования), или декодировано (как часть декодирования), что прямоугольный слайс включает полные тайлы, синтаксический элемент для указания на нижний правый кирпич прямоугольного слайса вычисляют на основе одного или более из следующего:
- Получают набор возможных местоположений нижнего правого кирпича. Этот набор может включать только те местоположения кирпичей, которые являются последними местоположениями кирпича в пределах тайла, расположены в строке или под строкой тайлов, содержащей левый верхний кирпич прямоугольного тайла, расположены в столбце тайлов или справа от столбца тайлов, содержащего верхний левый кирпич прямоугольного тайла, и включают прямоугольный набор свободных местоположений тайлов (еще не назначенных ни в какие прямоугольные слайсы).
- Записи в наборе возможных местоположений нижнего правого кирпича индексируют, или нумеруют.
- Длину синтаксического элемента, кодированного в формате u(v), для указания на нижний правый кирпич прямоугольного слайса вычисляют на основе количества записей в наборе возможных местоположений нижнего правого кирпича. Если количество записей numEnt равно 1, порядковый номер нижнего правого кирпича не нужно указывать или декодировать. В противном случае длина этого синтаксического элемента равна Ceil(Log2(numEnt)) бит.
- Синтаксический элемент для указания на нижний правый кирпич прямоугольного слайса представляет собой порядковый номер в пронумерованном наборе возможных местоположений нижнего правого кирпича.
[0292] Способ кодирования в соответствии со вторым аспектом настоящего изобретения включает:
- указание, в битовом потоке или вместе с ним, или логическое определение местоположения верхнего левого кирпича прямоугольного слайса;
- заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов;
- если прямоугольный слайс содержит один или более кирпичей тайла, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, в противном случае, если левый верхний кирпич находится в самом правом столбце тайлов, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, и в противном случае, указание, в битовом потоке или вместе с ним, на ширину прямоугольного слайса в столбцах тайлов;
- если прямоугольный слайс содержит один или более кирпичей тайлов, указание, в битовом потоке или вместе с ним, или логическое определение количества кирпичей в прямоугольном слайсе; в противном случае, если верхний левый кирпич находится в самой нижней строке тайлов, логическое заключение о том, что высота прямоугольного слайса равна одной строке тайлов, и в противном случае, указание, в битовом потоке или вместе с ним, высоты прямоугольного слайса в строках тайлов.
[0293] Способ декодирования в соответствии со вторым аспектом настоящего изобретения включает:
- декодирование, из битового потока или вместе с ним, или логическое определение местоположения верхнего левого кирпича прямоугольного слайса;
- заключение, на основе местоположения, включает ли прямоугольный слайс, один или более кирпичей тайлов;
- если прямоугольный слайс содержит один или более кирпичей тайла, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, в противном случае, если левый верхний кирпич находится в самом правом столбце тайлов, логическое заключение о том, что ширина прямоугольного слайса равна одному столбцу тайлов, и в противном случае, декодирование, из битового потока или вместе с ним, ширины прямоугольного слайса в столбцах тайлов;
- если прямоугольный слайс включает один или более кирпичей тайлов, декодирование, из битового потока или вместе с ним, или логическое определение количества кирпичей в прямоугольном слайсе; в противном случае, если верхний левый кирпич находится в самой нижней строке тайлов, логическое заключение о том, что высота прямоугольного слайса равна одной строке тайлов, и в противном случае, декодирование, из битового потока или вместе с ним, высоты прямоугольного слайса в строках тайлов.
[0294] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования и применимом для первого аспекта и/или второго аспекта, количество кирпичей в прямоугольном слайсе принимают равным 1 (в кирпичах), когда заключено, или указано, или декодировано, что прямоугольный слайс содержит кирпичи тайла, и либо тайл содержит два кирпича и текущий кирпич (т.е. верхний левый кирпич прямоугольного слайса) является самым верхним кирпичом тайла, либо текущий кирпич является самым нижним кирпичом тайла.
[0295] В одном из примеров осуществления настоящего изобретения применяют следующий синтаксис:
[0296] Переменные и семантика синтаксических элементов могут быть определены в соответствии с предшествующим описанием, со следующими дополнениями:
- Переменная tlBrickIdx может быть определена как следующее свободное местоположение кирпича в заранее заданном порядке сканирования, например, сканирования кирпичей изображения, как это было описано ранее. Значение tlBrickIdx заново вычисляют для каждого значения i, то есть, при каждом входе в цикл.
- Переменная numFreeColumnsOnTheRight[brickIdx] - это переменная, указывающая количество столбцов тайлов справа от кирпича с порядковым номером brickIdx.
- Значение slice_width_minus1[i] плюс 1 определяет ширину i-го прямоугольного слайса в столбцах тайлов. В случае его отсутствия значение slice_width_minus1[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, когда BrickIdxlntile[tlBrickIdx] больше 0 (т.е. когда верхний левый кирпич прямоугольного слайса не является верхним левым кирпичом ни одного из тайлов). Флаг full_tiles_in_slice_flag [i] принимают равным 1, когда slicewidthminus 1 [i] больше 0 или когда BrickIdxlntile [tlBrickIdx] равно 0 и NumBricksIntile[tlBrickIdx] равно 1.
- Если флаг full_tiles_in_slice_flag [i] равен 0, numFreeRowsBelow[brickIdx] -это переменная, указывающая количество кирпичей в тайле под кирпичом с порядковым номером brickIdx в этом же тайле. В противном случае numFreeRowsBelowfbrickIdx] -это переменная, указывающая количество строк тайлов под тайлом, содержащем кирпич с порядковым номером brickIdx.
- Если флаг full_tiles_in_slice_flag [i] равен 0, значение slice_height_minus1[i] плюс 1 определяет высоту i-го прямоугольного слайса в кирпичах. В противном случае значение slice_height_minus1[i] плюс 1 определяет высоту i-го прямоугольного слайса в строках тайлов. В случае его отсутствия значение slice_height_minus1[i] принимают равным 0.
[0297] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, длину синтаксического элемента ширины слайса (например, slice_width_minus1) вычисляют на основе количества возможных значений, исходя из местоположения верхнего левого кирпича прямоугольного слайса. С помощью описанных выше переменных и синтаксических элементов, длину slice width minus 1 получают как равную Ceil(Log2(numFreeColumnsOnTheRight[tlBrickIdx]+1)).
[0298] В одном из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, длину синтаксического элемента высоты слайса (например, slice_height_minus 1) вычисляют на основе количества возможных значений, исходя из местоположения верхнего левого кирпича прямоугольного слайса, и того, содержит ли прямоугольный слайс кирпичи одного тайла или полные тайлы. С помощью описанных выше переменных и синтаксических элементов, длину slice_height_minus1 вычисляют как равную Ceil(Log2(numDeltaValues)), где numDeltaValues вычисляют следующим образом:
[0299] В следующих параграфах представлены варианты осуществления настоящего изобретения для усовершенствованных способов кодирования и/или декодирования сигнализации прямоугольных слайсов. Эти варианты осуществления настоящего изобретения могут применяться совместно с вариантами осуществления изобретения для разбиения на тайлы и кирпичи или независимо от них. Эти варианты осуществления настоящего изобретения основаны на определениях и свойствах тайлов, кирпичей, прямоугольных слайсов и субизображений, принятых в версии 6 проекта VVC. С помощью предложенных вариантов осуществления настоящего изобретения число битов, необходимых для указания прямоугольных слайсов (например, указания или получения местоположения, ширины и высоты прямоугольных слайсов), может быть сокращено.
[0300] В соответствии с одним из вариантов осуществления настоящего изобретения кодируют один и только один прямоугольный слайс для каждого субизображения. Кодер указывает, в битовом потоке или вместе с ним, например, в PPS, что для изображений в области действия этого указания кодируют один и только один прямоугольный слайс для каждого субизображения. Упомянутая область действия указания может, например, включать изображения, ссылающиеся на PPS, содержащий указание на то, что используют один и только один прямоугольный слайс для каждого субизображения. Кодер опускает явную сигнализацию границ прямоугольных слайсов. Кодер логически заключает, что границы прямоугольных слайсов совпадают с границами субизображений.
[0301] В соответствии с одним из вариантов осуществления настоящего изобретения декодер декодирует, из битового потока или вместе с ним, например, из PPS, указание на то, что каждое субизображение содержит один и только один прямоугольный слайс для всех изображений в области действия этого указания. Упомянутая область действия указания может, например, включать изображения, ссылающиеся на PPS, содержащий упомянутое указание. Декодер опускает явную сигнализацию границ прямоугольных слайсов. Декодер логически заключает, что границы прямоугольных слайсов совпадают с границами субизображений.
[0302] В описанных выше вариантах осуществления настоящего изобретения может применяться приведенный ниже, или аналогичный, синтаксис, где флаг single_slice_per_subpic_flag, равный 0, определяет, что субизображения могут содержать любое количество прямоугольного слайса, а флаг single_slice_per_subpic_flag, равный 1, определяет, что каждое субизображение содержит один и только один прямоугольный слайс:
[0303] В соответствии с одним из вариантов осуществления настоящего изобретения кодер указывает, в битовом потоке или вместе с ним, например, в PPS, и/или декодер декодирует, из битового потока или вместе с ним, например из PPS, состоит ли субизображение из одного и только одного прямоугольного слайса, или оно содержит более одного прямоугольного слайса. К примеру, синтаксический элемент, кодируемый в формате u(1), например, с именем subpic_split_flag[i], может указывать (когда он равен 0) на то, что i-e субизображения состоит ровно из одного прямоугольного слайса, или (когда он равен 1), на то, что i-e субизображение состоит более чем из одного прямоугольного слайса.
[0304] В соответствии с одним из вариантов осуществления настоящего изобретения кодер указывает и/или декодер декодирует разбиение субизображения на прямоугольные слайсы с использованием порядковых номеров кирпичей в субизображении. Кирпичи внутри субизображения нумеруют, например, начиная с 0 и с шагом, равным 1, в заранее заданном порядке сканирования, например, в порядке сканирования кирпичей в субизображении, т.е. сканирование растра тайлов в субизображении является основным порядком, а сканирование растра кирпичей в тайле является вторичным порядком. Поскольку диапазон значений порядковых номеров кирпичей внутри субизображения меньше, чем диапазон значений порядковых номеров кирпичей в изображении, синтаксические элементы для указания порядковых номеров кирпичей внутри субизображения, вероятно, будут короче, чем соответствующие синтаксические элементы для порядковых номеров кирпичей в изображении, и следовательно, сигнализация с большой вероятностью будет более компактной.
[0305] В соответствии с одним из вариантов осуществления настоящего изобретения может применяться следующий, или аналогичный, синтаксис:
[0306] Флаг rect_slice_splitting_present_flag, равный 0, определяет, что в каждом субизображении имеется ровно один прямоугольный слайс. Флаг rect_slice_splitting_present_flag, равный 1, определяет, что в каждом субизображении имеется один или более прямоугольных слайсов. Значение bottom_right_brick_idx_length_minus1 плюс 1 определяет длину синтаксического элемента bottom_right_brick_idx_delta[i]. Переменную NumSubPics получают как равную количеству субизображений в изображении, например, на основе сигнализации субизображений в наборе SPS. Флаг subpic_split_flag[i], равный 0, определяет, что i-e субизображение состоит ровно из одного прямоугольного слайса. Флаг subpic_split_flag[i], равный 1, определяет, что -ое субизображение состоит из одного или более прямоугольных слайсов. Значение num_slices_in_subpic_minus2[i] плюс 2 определяет количество прямоугольных слайсов в i-м субизображении. Кирпичи в i-м субизображении нумеруют в порядке сканирования кирпичей, bottom_right_brick_idx_delta[i][j] и sign_bottom_right_brick_idx_delta[i][j] определяют значение разности, со знаком, которое используют для вычисления порядкового номера нижнего правого кирпича j-го прямоугольного слайса в i-м субизображении относительно нижнего правого кирпича (j-l)-го прямоугольного слайса i-го субизображения, когда j больше 0, или относительно 0 (т.е. верхнего левого угла i-го субизображения), когда j равно 0. Это значение разности, со знаком, может быть определено равным bottom_right_brick_idx_delta[i][j], когда sign_bottom_right_brick_idx_delta[i][j] равно 1, a bottom_right_brick_idx_delta[i][j], sign_bottom_right_brick_idx_delta[i][j] равны 0, однако может быть также определено с установлением обратных значений sign_bottom_right_brick_idx_delta[i][j].
Обозначение некодированных прямоугольных слайсов
[0307] В некоторых применениях желательно иметь возможность назначить контент, который должен быть кодирован и/или декодирован, в прямоугольные слайсы таким образом, чтобы было занято только подмножество прямоугольных слайсов. Например, при потоковой передаче 360-градусного видео, зависящей от порта просмотра, может приниматься только подмножество прямоугольных слайсов. В другом примере может применяться кодирование, на основе патчей, объемного видео или видео облака точек, где патчи занимают только подмножество прямоугольных слайсов изображения.
[0308] В соответствии с одним из вариантов осуществления настоящего изобретения, для кодирования, некодированные прямоугольные слайсы указывают в битовом потоке или вместе с ним, например, в PPS. Некодированные прямоугольные слайсы не кодируют в битовый поток в виде блоков NAL VCL. Некодированные прямоугольные слайсы восстанавливают (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения восстановленных отсчетов в массивах отсчетов равными 0.
[0309] В соответствии с одним из вариантов осуществления настоящего изобретения, для декодирования, некодированные прямоугольные слайсы декодируют из битового потока или вместе с ним, например, из PPS. Некодированные прямоугольные слайсы не декодируют из битового потока в виде блоков NAL VCL. Вместо этого некодированные прямоугольные слайсы декодируют (например, в декодированное опорное изображение) с использованием заранее заданного или указанного способа, например, устанавливают значения декодированных отсчетов в массивах отсчетов равными 0.
[0310] В соответствии с одним из вариантов осуществления настоящего изобретения, применимом для кодирования и/или декодирования, для каждого прямоугольного слайса указывают и/или декодируют флаг, который указывает, является ли прямоугольный слайс некодированным или нет.
[0311] В соответствии с одним из вариантов осуществления настоящего изобретения количество некодированных прямоугольных слайсов указывают и/или декодируют с использованием кодового слова переменной длины, например, в формате ue(v). Прямоугольные слайсы проходят в заранее заданном порядке сканирования (например в обратном порядке сканирования растра верхних левых CTU прямоугольных слайсов). Для каждого пройденного прямоугольного слайса указывают и/или декодируют флаг, позволяющий заключить, является ли прямоугольный слайс некодированным или нет. Если прямоугольный слайс не кодирован, количество прямоугольных слайсов, оставшихся для обозначения как некодированные, уменьшают на 1. Процедура продолжается до тех пор, пока не останется прямоугольных слайсов, которые можно обозначить некодированными.
[0312] Фиг. 15 является графическим представлением типовой системы мультимедийной связи, в которой могут быть реализованы различные варианты осуществления настоящего изобретения. В соответствии с иллюстрацией фиг. 8, источник 1510 данных предоставляет исходный сигнал в аналоговом, несжатом цифровом или сжатом цифровом формате, или в любой комбинации из этих форматов. Кодер 1520 может иметь в своем составе средства предварительной обработки, например, средства преобразования формата данных и/или средства фильтрации исходного сигнала, или может иметь соединение с такими средствами. Кодер 1520 кодирует исходный сигнал в кодированный битовый поток медиаданных. Следует отметить, что кодируемый битовый поток может приниматься, напрямую или опосредованно, от удаленного устройства, расположенного в сети практически любого типа. Также, битовый поток может приниматься от локального аппаратного или программного обеспечения. Кодер 1520 может быть способен кодировать более одного типа медиаданных, например, аудио- и видеоданные, или могут требоваться более одного кодера 1520 для кодирования различных типов исходного сигнала. Кодер 1520 может также получать входные данные, полученные при помощи синтеза, такие как графику или текст, или может быть способен формировать кодированные битовые потоки синтезированных медиаданных. Ниже, для простоты описания, будет рассмотрена обработка только одного кодированного битового потока, содержащего однотипные мультимедийные данные. Однако нужно отметить, что обычно сервисы вещания реального времени включают несколько потоков (как правило, по меньшей мере один аудиопоток, видеопоток и текстовый поток субтитров). Также, нужно отметить, что система может включать множество кодеров, однако на фиг. 8, для простоты описания, без потери общности, показан только один кодер 1520. Описание и примеры в настоящем документы описывают именно процедуру кодирования, однако при этом специалисты в данной области техники должны понимать, что те же самые принципы и идеи применимы и для соответствующей процедуры декодирования, и наоборот.
[0313] Кодированный битовый поток медиаданных может быть передан в хранилище 1530. Хранилище 1530 может включать любой тип запоминающего устройства большой емкости для хранения кодированного битового потока медиаданных. Формат кодированного битового потока медиаданных в хранилище 1530 может быть элементарным автономным форматом битового потока, или один или более кодированных битовых потоков медиаданных могут быть инкапсулированы в контейнерный файл, или кодированные медиаданные могут быть инкапсулированы в формат сегмента (Segment), подходящего для DASH или аналогичной системы потоковой передачи), и храниться в виде последовательности сегментов. Если один или более битовых потоков медиаданных инкапсулируют в контейнерный файл, может применяться формирователь файлов (не показан на чертеже) для сохранения одного или более битовых потоков медиаданных в файл и для формирования метаданных формата файла, которые также сохраняют в файл. Кодер 1520 и/или хранилище 1530 могут включать формирователь файлов, или же формирователь файлов может быть функционально связан кодером 1520 и/или хранилищем 1530. Некоторые системы работают «на лету», то есть не используют память и передают кодированный битовый поток медиаданных из кодера 1520 непосредственно в передатчик 1540. Затем кодированный битовый поток медиаданных передают, когда это необходимо, в передатчик 1540, также именуемый сервером. Формат, используемый при передаче, может быть элементарным автономным форматом битового потока, пакетным форматом потока, форматом сегментов (Segment), подходящих для DASH или аналогичной системы потоковой передачи, или один или более кодированных битовых потоков медиаданных могут быть инкапсулированы в контейнерный файл. Кодер 1520, хранилище 1530 и передатчик 1540 могут располагаться в одном и том же физическом устройстве, или же они могут входить в состав отдельных устройств. Кодер 1520 и сервер 1540 могут работать с данными реального времени, и в этом случае кодированный битовый поток медиаданных, как правило, не хранят на постоянной основе, а буферизуют в течение небольших промежутков времени в кодере 1520 видеоданных и/или на сервере 230 для сглаживания колебаний задержек на обработку, задержек на передачу и битрейта кодированных медиаданных.
[0314] Сервер 1540 передает кодированный битовый поток медиаданных с использованием стека протоколов связи. Стек может включать, без ограничения перечисленным, одно или более из следующего: протокол передачи в реальном времени (RTP), протокол пользовательских датаграмм (UDP), протокол передачи гипертекста (Hypertext Transfer Protocol, HTTP), протокол управления передачей (Transmission Control Protocol, TCP) и протокол Интернета (IP). Когда стек протоколов связи является пакетным, сервер 1540 инкапсулирует кодированный битовый поток медиаданных в пакеты. Например, когда используется протокол RTP, сервер 1540 инкапсулирует кодированный битовый поток медиаданных в пакеты RTP согласно формату полезной нагрузки протокола RTP. Как правило, каждый тип медиаданных имеет отдельный формат полезной нагрузки RTP. Следует еще раз отметить, что система может содержать более одного сервера 1540, но для простоты в последующем описании рассмотрен только один сервер 1540.
[0315] Если мультимедийные данные инкапсулированы в контейнерный файл для хранилища 1530 или для ввода данных в передатчик 1540, передатчик 1540 может иметь в своем составе «анализатор передаваемого файла» (не показан на чертеже) или может быть функционально связан с подобным элементом. В частности, если контейнерный файл сам по себе не передают, но по меньшей мере один содержащийся в нем кодированный битовый поток медиаданных инкапсулируют для передачи по протоколу связи, анализатор передаваемого файла находит соответствующие фрагменты кодированного битового потока медиаданных, подлежащие передаче по протоколу связи. Анализатор передаваемого файла может также быть полезен при создании корректного формата для протокола связи, например, заголовков и полезной нагрузки пакетов. Мультимедийный контейнерный файл может содержать инструкции по инкапсуляции, такие как треки указаний в ISOBMFF, используемые для инкапсуляции по меньшей мере одного кодированного битового потока медиаданных в протокол связи.
[0316] Сервер 1540, опционально, может быть соединен со шлюзом 1550 по сети связи, которая может представлять собой, например, комбинацию из CDN, Интернета и/или одной или более сетей доступа. В дополнение или альтернативно, шлюз может называться промежуточным узлом. В случае DASH шлюз может быть пограничным сервером (сети CDN) или веб-прокси-сервером. Следует отметить, что в общем случае система может включать любое количество шлюзов или аналогичных элементов, однако для простоты в приведенном ниже описании рассмотрен только один шлюз 1550. Шлюз 1550 может выполнять функции различных типов, например, трансляцию потока пакетов, соответствующую одному стеку протоколов связи, в другой стек протоколов связи, слияние и разветвление потоков данных и манипуляцию потоками данных согласно возможностям нисходящей линии связи и/или приемника, например, управление битовой скоростью передачи данных перенаправляемого потока согласно превалирующим сетевым условиям в нисходящей линии связи. Шлюз 1550 в различных вариантах осуществления настоящего изобретения может быть серверным объектом.
[0317] Система включает один или более приемников 1560, которые, в общем случае, способны принимать, демодулировать и/или декапсулировать переданный сигнал с получением кодированного битового потока мультимедийных данных. Кодированный битовый поток медиаданных может быть передан в записывающее хранилище 1570. Записывающее хранилище 1570 может включать любой тип запоминающего устройства большой емкости для хранения кодированного битового потока медиаданных. Записывающие хранилище 1570 может, дополнительно или альтернативно, включать вычислительную память, например, память с произвольным доступом. Формат кодированного битового потока медиаданных в записывающем хранилище 1570 может быть элементарным автономны форматом битового потока, или один или более кодированных битовых потоков медиаданных могут быть инкапсулированы в контейнерный файл. Если имеются несколько кодированных битовых потоков медиаданных, например, аудиопоток и видеопоток, связанные друг с другом, то, как правило, применяют контейнерный файл, и при этом приемник 1560 содержит формирователь контейнерного файла (или связан с подобным формирователем), формирующий контейнерный файл на основе входных потоков. Некоторые системы работают «на лету», то есть передают кодированный битовый поток медиаданных из приемника 1560 непосредственно в декодер 1580, без задействования записывающего хранилища 1570. В некоторых системах в записывающем хранилище 1570 хранят только последнюю по времени часть записанного потока, например, последний 10-минутный фрагмент записанного потока, тогда как все ранее записанные данные удаляют из записывающего хранилища 1570.
[0318] Кодированный битовый поток медиаданных из записывающего хранилища 1570 может быть передан в декодер 1580. Если имеются несколько кодированных битовых потоков медиаданных, например, аудиопоток и видеопоток, связанные друг с другом и инкапсулированные в контейнерный файл, или один битовый поток, который инкапсулирован в контейнерный файл, например, для более простого доступа, то применяют анализатор файлов (не показан на чертеже) для декапсуляции всех кодированных битовых потоков медиаданных из контейнерного файла. Записывающее хранилище 1570 или декодер 1580 могут иметь анализатор файлов в своем составе, или анализатор файлов может быть связан с записывающим хранилищем 1570, или с декодером 1580. Также, нужно отметить, что система может включать множество декодеров, однако в данном документе, для простоты описания, без потери общности, показан только один кодер 1570.
[0319] Кодированный битовый поток медиаданных может далее обрабатываться декодером 1570, на выходе которого получают один или более несжатых потоков медиаданных. Наконец, устройство 1590 воспроизведения может воспроизводить несжатые потоки медиаданных, например, с помощью громкоговорителя или дисплея. Приемник 1560, записывающее хранилище 1570, декодер 1570 и устройство 1590 воспроизведения могут располагаться в одном и том же физическом устройстве, или же они могут входить в состав отдельных устройств.
[0320] Выше часть вариантов осуществления настоящего изобретения была описана на примере стандарта VVC/H.266 и/или с использованием соответствующей терминологии. Нужно понимать, что варианты осуществления настоящего изобретения могут быть аналогичным образом реализованы с любым видеокодерами и/или видеодекодерами.
[0321] Выше некоторые из примеров осуществления настоящего изобретения были описаны с упоминанием конкретных синтаксических структур и/или синтаксических элементов. Следует понимать, что варианты осуществления настоящего изобретения могут быть аналогичным образом реализованы с использованием других синтаксических структур и/или синтаксических элементов. Например, когда варианты осуществления настоящего изобретения описаны с упоминанием синтаксических элементов в синтаксисе PPS, необходимо понимать, что варианты осуществления настоящего изобретения могут быть реализованы с использованием этих же или аналогичных синтаксических элементов в других синтаксических структурах, например, в наборе SPS.
[0322] Выше некоторые из вариантов осуществления настоящего изобретения описаны с использованием термина «указание». Следует понимать, что термин «указание» можно понимать как кодирование или формирование одного или более синтаксических элементов в одной или более синтаксических структурах, в битовом потоке или вместе с ним.
[0323] Выше некоторые из вариантов осуществления настоящего изобретения описаны с использованием термина «декодирование». Следует понимать, что термин «декодирование» можно понимать как декодирование или анализ одного или нескольких синтаксических элементов из одной или более синтаксических структур, из битового потока или вместе с ним.
[0324] В приведенном выше описании, там, где примеры осуществления настоящего изобретения были описаны со ссылками на кодер, нужно понимать, что результирующий поток и декодер также могут включают соответствующие элементы. Аналогично, там, где примеры осуществления настоящего изобретения были описаны со ссылками на декодер, нужно понимать, что кодер может иметь структуру и/или компьютерную программу для формирования битового потока, декодируемого декодером. К примеру, часть вариантов осуществления настоящего изобретения была описана в связи с формированием блока предсказания как части кодирования. Варианты осуществления настоящего изобретения могут быть аналогичным образом реализованы с формированием блока предсказания как части декодирования, с той разницей, что параметры кодирования, такие как горизонтальное смещение и вертикальное смещение, декодируют из битового потока, а не определяются кодером.
[0325] В рассмотренных выше вариантах осуществления настоящего изобретения кодек описан на примере отдельных устройств кодирования и декодирования - для упрощения понимания применяемых процедур. Однако нужно понимать, что устройство, структуры и операции могут быть реализованы в виде единого устройства/структуры/операции кодирования-декодирования. Также допускается, что кодер и декодер могут совместно использовать часть общих элементов, или что всех элементы могут быть общими.
[0326] Рассмотренные выше примеры описывают работу вариантов осуществления настоящего изобретения в кодеке электронного устройства, однако нужно понимать, что настоящее изобретение, определенное приложенной формулой изобретения, может быть реализовано как часть любого видеокодека. Так, например, варианты осуществления настоящего изобретения могут быть реализованы в видеокодеке, в котором видеокодирование может быть реализовано по фиксированным, или проводным, каналам связи.
[0327] Соответственно, абонентское оборудование может включать в свой состав видеокодек, например, аналогичный рассмотренным в приведенном выше описании настоящего изобретения. Нужно понимать, что выражение «абонентское оборудование» используется как охватывающие любые подходящие типы беспроводного абонентского оборудования, например, мобильные телефоны, портативные устройства обработки данных или портативные веб-браузеры.
[0328] При этом элементы наземной сети мобильной связи общего пользования (public land mobile network, PLMN) также могут включать видеокодеки в соответствии с предшествующим описанием.
[0329] В общем случае различные варианты осуществления настоящего изобретения могут быть реализованы в виде аппаратного обеспечения или схем специального назначения, программного обеспечения, логики или какой-либо их комбинации. К примеру, некоторые из аспектов могут быть реализованы в виде аппаратного обеспечения, тогда как другие аспекты могут быть реализованы в виде микропрограммного или программного обеспечения, которое может исполняться контроллером, микропроцессором или иным вычислительным устройством, без ограничения настоящего изобретения перечисленным. Различные аспекты настоящего изобретения допускают иллюстрацию и описание в виде блок-схем, блок-схем алгоритмов или с помощью некоторых других наглядных представлений, но при этом нужно понимать, что блоки, устройства, системы, методы или способы, описанные в настоящем документе, могут быть реализованы, в качестве неограничивающих примеров, в виде аппаратного обеспечения, программного обеспечения, микропрограммного обеспечения, схем или логики специального назначения, аппаратного обеспечения или контроллера общего назначения, или же иных вычислительных устройств, или некоторой их комбинации.
[0330] Варианты осуществления настоящего изобретения могут быть реализованы с помощью программного обеспечения, исполняемого процессором данных мобильного устройства, например, процессорным элементом, или с помощью аппаратного обеспечения, или с помощью комбинации программного и аппаратного обеспечения. Также в этом отношении следует отметить, что любые блоки последовательностей логических операций, проиллюстрированные на чертежах, могут представлять собой шаги программы или взаимосвязанные логические схемы, блоки и функции, или комбинацию программных шагов и логических схем, блоков и функций. Программное обеспечение может храниться на таких физических носителях, как микросхемы памяти или блоки памяти, реализованные внутри процессора, магнитные носители, например, жесткий диск или гибкий диск, и оптические носители, например, DVD и их варианты для хранения данных, CD.
[0331] Память может относиться к любому типу, соответствующему локальному техническому окружению, при этом она может быть реализована с использованием любой подходящей технологии хранения данных, например, запоминающие устройства на полупроводниках, магнитные запоминающие устройства и системы, оптические запоминающие устройства и системы, несъемная или съемная память. Процессоры данных могут относиться к любому типу, соответствующему локальному техническому окружению и могут включать одно или более из следующего: компьютеры общего назначения, компьютеры специального назначения, микропроцессоры, цифровые сигнальные процессоры (digital signal processors, DSP), процессоры на основе многоядерной архитектуры - в качестве неограничивающих примеров.
[0332] Варианты осуществления настоящего изобретения могут применяться на практике в различных компонентах, например, в модулях интегральных схем. Процесс разработки интегральных схем, в целом, в высокой степени автоматизирован. Существуют сложные и мощные программные инструменты для преобразования проектов логического уровня в конструкции полупроводниковых схем, готовые для вытравливания и формовки на полупроводниковой подложке.
[0333] Программы, подобные поставляемой фирмой Synopsys, Inc (Маунтин-Вью, Калифорния) или фирмой Cadence Design (Сан-Хосе, Калифорния), осуществляют автоматическую разводку проводников и позиционирование компонентов на полупроводниковом кристалле с использованием общепринятых правил разработки, а также с использованием библиотек заранее сохраненных модулей проектов. По завершении разработки полупроводниковой схемы результирующая конструкция, в стандартизированном электронном формате (например, Opus, GDSII и т.п.) может быть передана на полупроводниковое производство для изготовления микросхемы.
[0334] В предшествующем изложении с помощью иллюстративных и неограничивающих примеров было представлено полное и информативное описание одного из примеров осуществления настоящего изобретения. Однако в свете предшествующего описания, рассматриваемого в сочетании с приложенными чертежами, специалистам в соответствующих областях техники могут быть очевидны различные модификации и доработки. Тем не менее, любые такие или аналогичные им модификации изобретения находятся в его объеме.