УПРАВЛЕНИЕ ОПОРНЫМ ИЗОБРАЖЕНИЕМ ПРИ ВИДЕОКОДИРОВАНИИ
REFERENCE PICTURE CONTROL IN VIDEO ENCODING

Область техники, к которой относится изобретение
Настоящее раскрытие, в целом, связано с технологиями управления опорным изображением при видеокодировании. Более конкретно, это раскрытие описывает технологии построения списков опорных изображений и маркировки опорных изображений.
Уровень техники
Объем видеоданных, необходимый для показа даже относительно короткого видео, может быть значительным, что может привести в результате к трудностям, когда данные должны передаваться потоком или как-либо иначе по сети связи с ограниченными возможностями полосы пропускания. Таким образом, прежде чем передать видеоданные через современные телекоммуникационные сети, видеоданные обычно сжимаются. Размер видео также может быть проблемой, когда видео запоминаются в запоминающем устройстве, так как ресурсы памяти могут быть ограничены. Устройства видеосжатия часто используют программное обеспечение и/или аппаратные средства в источнике данных, чтобы кодировать видеоданные до передачи или запоминания, уменьшая, таким образом, объем данных, необходимых для представления изображений цифрового видео. Сжатые данные затем принимаются в месте назначения устройством развертывания видео, которое декодирует видеоданные. При ограниченных сетевых ресурсах и постоянно растущих требованиях к более высокому качеству видео, необходимы улучшенные технологии сжатия и развертывания, которые повышают степень сжатия с небольшой или вообще никакой потерей качества изображения.
Раскрытие сущности изобретения
Первый вариант относится к способу декодирования кодированного битового видеопотока. Способ содержит этапы, на которых получают первый список опорных изображений текущей секции, представленной в кодированном битовом видеопотоке, и второй список опорных изображений текущей секции; маркируют состояние опорного изображения в буфере декодированных изображений (decoded picture buffer, DPB), основываясь на первом списке опорных изображений и на втором списке опорных изображений, когда текущая секция является первой секцией в текущем изображении, к которому принадлежит текущая секция, причем состояние опорного изображения в буфере декодированных изображений является состоянием, используемым для кратковременной ссылки, используемым для долговременной ссылки или не используемым для ссылки; и используют опорное изображение в процессе реконструкции текущего изображения или изображения, следующего за текущим изображением, когда состоянием опорного изображения является состояние, используемое для кратковременной ссылки или используемое для долговременной ссылки.
Второй вариант относится к способу декодирования кодированного битового видеопотока, реализуемому видеодекодером. Способ содержит этапы, на которых декодируют посредством видеодекодера первое изображение, содержащее все его секции, чтобы получить первое декодированное изображение; запоминают посредством видеодекодера первое декодированное изображение в буфере декодированных изображений (decoded picture buffer, DPB) после декодирования; маркируют посредством видеодекодера первое изображение как используемое для кратковременной ссылки, после всех секций первого изображения, которые были декодированы; и декодируют посредством видеодекодера первую секцию текущего изображения, причем декодирование первой секции текущего изображения содержит этапы, на которых: получают посредством видеодекодера первый список опорных изображений и второй список опорных изображений; перемаркируют посредством видеодекодера первое изображение как используемое для долговременной ссылки, когда на первое изображение ссылаются посредством записи долговременного опорного изображения (long-term reference picture, LTRP) в первом списке опорных изображений или во втором списке опорных изображений; и перемаркируют посредством видеодекодера первое изображение как неиспользуемое для ссылки, когда на первое изображение не делается ссылка в первом списке опорных изображений или во втором списке опорных изображений.
Способы обеспечивают технологии, которые упрощают и делают более эффективным сообщение списков опорных изображений. Поэтому общий процесс кодирования улучшается.
В первой форме реализации способа, соответствующего, по существу, первому или второму варианту, первый список опорных изображений обозначается как RefPictList[0].
Во второй форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предыдущей форме реализации первого или второго варианта, второй список опорных изображений обозначается как RefPictList[1].
В третьей форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предшествующей форме реализации первого или второго варианта, текущее изображение содержит изображение точки произвольного доступа с отсутствующим внутрикадровым предсказанием (non-intra random access point, IRAP).
В четвертой форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предшествующей форме реализации первого или второго варианта, первое изображение упоминается как кратковременное опорное изображение (short-term reference picture, STRP), когда оно маркируется как используемое для кратковременной ссылки.
В пятой форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предшествующей форме реализации первого или второго варианта, STRP идентифицируется значением подсчета порядка изображения (picture order count value, PicOrderCntVal).
В шестой форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предшествующей форме реализации первого или второго варианта, LTRP идентифицируется логарифмической функцией младших значащих битов максимального подсчета порядка долговременного изображения (Log2(MaxLtPicOrderCntLsb)) значения подсчета порядка изображения (PicOrderCntVal).
В седьмой форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предыдущей форме реализации первого или второго варианта, DPB содержит множество опорных изображений в дополнение к первому декодированному изображению после декодирования текущего изображения.
В восьмой форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предшествующей форме реализации первого или второго варианта, в любой заданный момент времени первое изображение маркируется или перемаркируется только как одно из используемых для кратковременной ссылки, используемых для кратковременной ссылки или неиспользуемых для ссылки.
В девятой форме реализации способа, соответствующей, по существу, первому или второму варианту или любой предшествующей форме реализации первого или второго варианта, маркировка или перемаркировка первого изображения в качестве используемого для кратковременной ссылки, используемого для кратковременной ссылки или неиспользуемого для ссылки удаляет любую другую маркировку для первого изображения.
Третий и четвертый варианты относятся к устройству декодирования, содержащему приемник, выполненный с возможностью приема изображения для кодирования или приема битового потока для декодирования, передатчик, связанный с приемником, причем передатчик выполнен с возможностью передачи битового потока декодеру или передачи декодированного изображения на дисплей, память, связанную, по меньшей мере, с приемником или передатчиком, причем память выполнена с возможностью хранения команд, и процессор, связанный с памятью, причем процессор выполнен с возможностью исполнения команд, хранящихся в памяти, чтобы выполнить способ, соответствующий любым из предшествующих вариантов или реализаций.
Устройство декодирования обеспечивает технологии, которые упрощают и делают более эффективной сообщение списков опорных изображений. Поэтому общий процесс кодирования улучшается.
В первой форме реализации устройства декодирования, соответствующего, по существу, третьему и четвертому вариантам, устройство декодирования дополнительно содержит дисплей, выполненный с возможностью отображения текущего изображения.
Четвертый вариант относится к устройству кодирования, которое содержит приемник, выполненный с возможностью приема битового потока для декодирования; передатчик, связанный с приемником, причем передатчик выполнен с возможностью передачи декодированного изображения на дисплей; память, связанную, по меньшей мере, с приемником или передатчиком, причем память выполнена с возможностью хранения команд; и процессор, связанный с памятью, причем процессор выполнен с возможностью исполнения команд, хранящихся в памяти, чтобы выполнить способ, соответствующий любому из предшествующих вариантов или реализаций.
Пятый вариант относится к системе, содержащей кодер и декодер, осуществляющий связь с кодером. Кодер или декодер содержит устройство декодирования или устройство кодирования, соответствующие любому из предшествующих вариантов или реализаций.
Система обеспечивает технологии, которые упрощают и делают более эффективным сообщение списков опорных изображений. Поэтому общий процесс кодирования улучшается.
Шестой вариант относится к средству кодирования, содержащему приемное средство, выполненное с возможностью приема изображения для кодирования или приема битового потока для декодирования, передающее средство, связанное с приемным средством, причем передающее средство выполнено с возможностью передачи битового потока декодеру или передачи декодированного изображения на средство дисплея, средство хранения, связанное, по меньшей мере, с приемным средством или с передающим средством, причем средство хранения информации выполнено с возможностью хранения команд, и средство обработки, связанное со средством хранения, причем средство обработки выполнено с возможностью исполнения команд, хранящихся в средстве хранения, для выполнения способов в соответствии с любым из предшествующих вариантов или реализаций.
Средство кодирования обеспечивает технологии, упрощающие и делающие более эффективной сообщение списков опорных изображений. Поэтому общий процесс кодирования улучшается.
Краткое описание чертежей
Для более полного понимания настоящего раскрытия ссылка теперь делается на последующее краткое описание, рассматриваемое в сочетании с сопроводительными чертежами и подробным описанием, в котором схожие ссылочные позиции представляют схожие части.
Фиг. 1 - блок-схема примерной системы кодирования, которая может использовать двусторонние технологии предсказания.
Фиг. 2 - блок-схема примерного видеокодера, который может реализовывать двусторонние технологии предсказания.
Фиг. 3 - блок-схема примерного видеодекодера, который может реализовать двусторонние технологии предсказания.
Фиг. 4 - набор опорных изображений (reference picture set, RPS), имеющий изображение с записями во все субнаборы RPS.
Фиг. 5 - вариант осуществления способа декодирования кодированного битового видеопотока.
Фиг. 6 - вариант осуществления способа декодирования кодированного битового видеопотока.
Фиг. 7 - схематичное представление устройства видеокодирования.
Фиг. 8 - схематичное представление варианта осуществления средства кодирования.
Осуществление изобретения
На фиг. 1 представлена блок-схема примерной системы 10 кодирования, которая может использовать описанные здесь технологии видеокодирования. Как показано на фиг. 1, система 10 кодирования содержит устройство 12 источника, обеспечивающее кодированные видеоданные, которые должны быть позже декодированы устройством 14 в месте назначения. В частности, устройство 12 источника может обеспечивать видеоданные для устройства 14 в месте назначения через считываемый компьютером носитель 16. Устройство 12 источника и устройство 14 в месте назначения могут содержать любое устройство из широкого диапазона устройств, таких как настольные компьютеры, портативные компьютеры (например, ноутбук), планшетные компьютеры, телевизионные приставки, переносные телефоны, такие как так называемые смарт-телефоны, так называемые смарт-клавиатуры, телевизионные приемники, камеры, дисплеи, цифровые медиапроигрыватели, видеоигровые пульты, устройство потоковой передачи видео и т.п. В некоторых случаях, устройство 12 источника и устройство 14 в месте назначения могут быть оборудованы для осуществления беспроводной связи.
Устройство 14 в месте назначения может принимать кодированные видеоданные, подлежащие декодированию, через считываемый компьютером носитель 16. Считываемый компьютером носитель 16 может содержать любой тип носителя или устройства, способный перемещать кодированные видеоданные от устройства 12 источника к устройству 14 в месте назначения. В одном из примеров считываемый компьютером носитель 16 может содержать среду связи, чтобы позволить устройству 12 источника передавать кодированные видеоданные непосредственно устройству 14 в месте назначения в реальном времени. Кодированные видеоданные могут модулироваться в соответствии со стандартом связи, таким как протокол радиосвязи, и передаваться устройству 14 в месте назначения. Среда связи может содержать любую беспроводную или проводную среду связи, такую как радиочастотный (radio frequency, RF) спектр или одна или более физических линий передачи. Среда связи может формировать часть сети пакетной связи, такой как локальная сеть, территориальная сеть или глобальная сеть, такая как Интернет. Среда связи может содержать маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезным для облегчения связи от устройства 12 источника к устройству 14 в месте назначения.
В некоторых примерах кодированные данные могут выводиться из выходного интерфейса 22 на запоминающее устройство. Точно также, входной интерфейс может получить доступ от запоминающего устройства к кодированным данным. Запоминающее устройство может содержать любой из множества распределенных или локально доступных носителей данных, таких как жесткий диск, диски Blu-ray, цифровые видеодиски (DVD), постоянное запоминающее устройство на компактных дисках (Compact Disc Read-Only Memory, CD-ROM), флэш-память, энергозависимая или энергонезависимая память или любые другие соответствующие носители цифрового запоминающего устройства для хранения кодированных видеоданных. В дополнительном примере запоминающее устройство может соответствовать файловому серверу или другому промежуточному запоминающему устройству, которое может хранить кодированное видео, сформированное устройством 12 источника. Устройство 14 в месте назначения может получать доступ к хранящимся видеоданным от запоминающего устройства через потоковую передачу или загрузку. Файловый сервер может быть любым типом сервера, способным хранить кодированные видеоданные и передавать эти кодированные видеоданные устройству 14 в месте назначения. Примеры файловых серверов содержат веб-сервер (например, для веб-сайта), сервер, действующий по протоколу передачи файлов (file transfer protocol, FTP), запоминающие устройства, присоединенные к сети (network attached storage, NAS) или локальный дисковод. Устройство 14 в месте назначения может получать доступ к кодированным видеоданным посредством любого стандартного соединения для передачи данных, в том числе, Интернет-соединения. Оно может содержать беспроводной канал (например, соединение Wi-Fi), проводное соединение (например, цифровая абонентская линия (digital subscriber line, DSL), кабельный модем и т.д.) или их сочетание, пригодное для получения доступа к кодированным видеоданным, хранящимся на файловом сервере. Передача кодированных видеоданных от запоминающего устройства может быть потоковой передачей, загрузкой или их сочетанием.
Технологии этого раскрытия не обязательно ограничиваются беспроводными применениями или установками. Технологии могут быть применимы к видеокодированию в поддержку любого из множества мультимедийных применений, таких как радиотелевизионное вещание, передачи кабельного телевидения, передачи спутникового телевидения, интернет-передачи потокового видео, такие как динамическая адаптивная потоковая передача через HTTP (DASH), цифровое видео, которое кодируется на носителе данных запоминающего устройства, декодирование цифрового видео, хранящегося на носителе данных, или другие применения. В некоторых примерах, система 10 кодирования может быть выполнена с возможностью поддержки однонаправленной или двунаправленной видеопередачи, чтобы поддерживать такие применения, как потоковая передача видео, воспроизведение видео, широковещательная передача видео и/или видеотелефония.
В примере, показанном на фиг. 1, устройство 12 источника содержит источник 18 видео, видеокодер 20 и выходной интерфейс 22. Устройство 14 в месте назначения содержит входной интерфейс 28, видеодекодер 30 и дисплей 32. В соответствии с настоящим раскрытием, видеокодер 20 устройства 12 источника и/или видеодекодер 30 приемного устройства 14 могут быть выполнены с возможностью применения технологий видеокодирования. В других примерах устройство источника и устройство в месте назначения могут содержать другие компоненты или структуры. Например, устройство 12 источника может принимать видеоданные от внешнего видеоисточника, такого как внешняя камера. Аналогично, устройство 14 в месте назначения может взаимодействовать через интерфейс с внешним дисплеем, вместо наличия интегрированного дисплея.
Показанная на фиг. 1 система 10 кодирования является просто одним из примеров. Технологии видеокодирования могут выполняться любым цифровым устройством видеокодирования и/или декодирования. Хотя технологии настоящего раскрытия обычно выполняются устройством видеокодирования, технологии могут также выполняться видеокодером/декодером, обычно называемым "кодек" (CODEC). Кроме того, технологии настоящего раскрытия могут также выполняться предварительным видеопроцессором. Видеокодер и/или декодер могут быть графическим процессором (graphics processing unit, GPU) или подобным устройством.
Устройство 12 источника и устройство 14 в месте назначения являются просто примерами таких устройств кодирования, в которых устройство 12 формирует кодированные видеоданные для передачи устройству 14 в месте назначения. В некоторых примерах устройство 12 источника и устройство 14 в месте назначения могут работать, по существу, симметричным способом так, чтобы каждое из устройства 12 источника и устройства 14 в месте назначения содержало компоненты видеокодирования и декодирования. Следовательно, система 10 кодирования может поддерживать однонаправленную или двунаправленную передачу видео между видеоустройствами 12, 14, например, для потоковой передачи видео, воспроизведения видео, широковещательного видео или видеотелефонии.
Источник 18 видео устройства 12 источника может содержать устройство видеосъемки, такое как видеокамера, видеоархив, содержащий ранее снятое видео, и/или интерфейс внешнего видео, чтобы принимать видео от провайдера видеоконтента. Как дополнительная альтернатива, источник 18 видео может формировать данные, основанные на компьютерной графике, в качестве видеоисточника или содержать сочетание живого видео, архивного видео и видео, формируемого компьютером.
В некоторых случаях, когда источником 18 видео является видеокамера, устройство 12 источника и устройство 14 в месте назначения могут образовывать так называемые телефоны с камерой или видеотелефоны. Как упомянуто выше, однако, технологии, описанные в этом раскрытии, могут быть применимы к видеокодированию в целом и могут применяться к приложениям беспроводной и/или проводной связи. В каждом случае полученное, заранее полученное или машинно сформированное видео может кодироваться видеокодером 20. Кодированная видеоинформация может затем быть выведена выходным интерфейсом 22 на считываемый компьютером носитель 16.
Считываемые компьютером носители 16 могут содержать переносные носители, такие как беспроводная широковещательная или проводная сетевая передача, или носители запоминающего устройства (то есть непереносимые носители), такие как жесткий диск, карта флэш-памяти, компакт-диск, цифровой видеодиск, диск Blu-ray или другие считываемые компьютером носители. В некоторых примерах сетевой сервер (не показан) может принимать кодированные видеоданные от устройства 12 источника и предоставлять кодированные видеоданные устройству 14 в месте назначения, например, через сетевую передачу. Точно также, компьютерное устройство средства создания носителя, такого как средство штамповки дисков, может принимать кодированные видеоданные от устройства 12 источника и создавать диск, содержащий кодированные видеоданные. Поэтому считываемый компьютером носитель 16 в разных примерах может пониматься как содержащий один или более считываемых компьютером носителей в различных формах.
Входной интерфейс 28 устройства 14 в месте назначения принимает информацию от считываемого компьютером носителя 16. Информация со считываемого компьютером носителя 16 может содержать информацию о синтаксисе, определяемую видеокодером 20, которая также используется видеодекодером 30, содержащим элементы синтаксиса, описывающие характеристики и/или обработку блоков и других кодированных блоков, например, группы изображений (group of pictures, GOP). Дисплей 32 отображает декодированные видеоданные пользователю и может представлять собой большое многообразие дисплеев, таких как электронно-лучевая трубка (cathode ray tube, CRT), жидкокристаллический дисплей (liquid crystal display, LCD), плазменный дисплей, органический светодиодный (organic light emitting diode, OLED) дисплей или другой тип дисплея.
Видеокодер 20 и видеодекодер 30 могут действовать в соответствии со стандартом видеокодирования, таким как стандарт высокоэффективного видеокодирования (High Efficiency Video Coding, HEVC), разрабатываемый в настоящее время, и может соответствовать тестовой модели HEVC (HEVC Test Model, HM). Альтернативно, видеокодер 20 и видеодекодер 30 могут действовать согласно другим собственным или промышленным стандартам, таким как стандарт H.264 сектора стандартизации телекоммуникаций Международного союза электросвязи (International Telecommunications Union Telecommunication Standardization Sector, ITU-T), альтернативно упоминаемый как стандарт экспертной группы по кинематографии (Moving Picture Expert Group, MPEG)-4, часть 10, Перспективное видеокодирование (Advanced Video Coding, AVC), H.265/HEVC, или расширения таких стандартов. Технологии этого раскрытия, однако, не ограничиваются никаким конкретным стандартом кодирования. Другие примеры стандартов видеокодирования включают в себя MPEG-2 и ITU-T H.263. Хотя на фиг. 1 не показано, в некоторых вариантах видеокодер 20 и видеодекодер 30 могут каждый быть интегрирован с аудиокодером и аудиодекодером и могут содержать соответствующие блоки мультиплексора-демультиплексора (multiplexer-demultiplexer, MUX-DEMUX) или другие аппаратные и программные средства, чтобы обрабатывать как аудиокодирование, так и видеокодирование, в общем потоке данных или в отдельных потоках данных. Если это применимо, блоки MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, таким как протокол дейтаграммы пользователя (user datagram protocol, UDP).
Видеокодер 20 и видеодекодер 30 каждый может быть реализован как любая из множества соответствующих схем кодера, таких как один или более микропроцессоров, цифровых сигнальных процессоров (digital signal processor, DSP), специализированных прикладных интегральных схем (application specific integrated circuit, ASIC), программируемых логических интегральных схем (field programmable gate array, FPGA), дискретная логика, программное обеспечение, аппаратные средства, встроенное микропрограммное обеспечение или любое их сочетание. Когда технологии реализуются частично программным обеспечением, устройство может хранить команды для программного обеспечения на соответствующем, непереносном считываемом компьютером носителе и исполнять команды аппаратными средствами, используя один или более процессоров для выполнения технологий этого раскрытия. Каждый видеокодер 20 и видеодекодер 30 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть объединенного кодера/декодера (encoder/decoder, CODEC) в соответствующее устройство. Устройство, содержащее видеокодер 20 и/или видеодекодер 30, может иметь интегральную схему, микропроцессор, и/или устройство беспроводной связи, такое как мобильный телефон.
На фиг. 2 представлена блок-схема примера видеокодера 20, который может реализовывать технологии видеокодирования. Видеокодер 20 может выполнять внутрикадровое и межкадровое кодирование видеоблоков внутри видеосекций. Внутрикадровое кодирование основано на пространственном предсказании, предназначенном для уменьшения или удаления пространственной избыточности в видео внутри заданного видеокадра или изображения. Межкадровое кодирование основано на временном предсказании, предназначенном для уменьшения или удаления временной избыточности в видео внутри соседних кадров или изображений видеопоследовательности. Внутрикадровый режим (режим I) может относиться к любому из нескольких режимов кодирования на пространственной основе. Межкадровые режимы, такие как однонаправленное предсказание (известное также как уни-предсказание) (режим P) или би-предсказание (известное также как би-предсказание) (режим В), может относиться к любому из нескольких режимов кодирования на временной основе.
Как показано на фиг. 2, видеокодер 20 принимает текущий видеоблок в пределах видеокадра, который должен быть кодирован. В примере на фиг. 2 видеокодер 20 содержит блок 40 выбора режима, память 64 опорного кадра, сумматор 50, блок 52 преобразования, блок квантования 54 и блок 56 статистического кодирования. Блок 40 выбора режима, в свою очередь, содержит блок 44 компенсации движения, блок 42 оценки движения, блок 46 внутрикадрового предсказания (известный также, блок внутрикадрового прогнозирования) и блок 48 деления. Для реконструкции видеоблока видеокодер 20 также содержит блок 58 обратного квантования, блок 60 обратного преобразования и сумматор 62. Деблокирующий фильтр (не показан на фиг. 2) может также содержаться в границах блока фильтров, чтобы удалять из реконструированного видео артефакты распада изображения на квадраты. При желании, деблокирующий фильтр обычно может фильтровать выходной сигнал сумматора 62. Дополнительные фильтры (в цикле или после цикла) также могут использоваться в дополнение к деблокирующему фильтру. Такие фильтры не показаны для краткости, но при желании могут фильтровать выходной сигнал сумматора 50 (как контурный фильтр).
Во время процесса кодирования видеокодер 20 принимает видеокадр или сектор, которые должны кодироваться. Кадр или сектор могут быть разделены на множество видеоблоков. Блок 42 оценки движения и блок 44 компенсации движения выполняют кодирование с межкадровым предсказанием для принимаемого видеоблока относительно одного или более блоков в одном или более опорных кадрах, чтобы обеспечить временное предсказание. Блок 46 внутрикадрового предсказания может альтернативно выполнять кодирование с внутрикадровым предсказанием для принятого видеоблока относительно одного или более соседних блоков в том же кадре или секции, что и блок, который должен быть кодирован, чтобы обеспечить пространственное предсказание. Видеокодер 20 может выполнять многочисленные процессы кодирования, например, чтобы выбрать соответствующий режим кодирования для каждого блока видеоданных.
Кроме того, блок 48 деления может делить блоки видеоданных на субблоки, основываясь на оценке предыдущих схем деления при предыдущих процессах кодирования. Например, блок 48 деления может первоначально разделить кадр или секцию на максимально большие блоки кодирования (largest coding unit, LCU) и разделить каждый из LCU на блоки субкодирования (sub-coding unit, суб-CU), основываясь на анализе уровня искажений (например, на оптимизации уровня искажений). Блок 40 выбора режима может дополнительно создать структуру данных квадродерева, указывающую деление LCU на суб-CU. Вершины CU квадродерева могут содержать один или более блоков предсказания (prediction unit, PU) и один или более блоков преобразования (transform unit, TU).
Настоящее раскрытие использует термин "блок", относящийся к любому из CU, PU или TU в контексте HEVC или аналогичных структур данных в контексте других стандартов (например, их макроблоки и субблоки в H.264/AVC). CU содержит узел кодирования, PU и TU, связанные с узлом кодирования. Размер CU соответствует размеру узла кодирования и имеет квадратную форму. Размер CU может иметь диапазон от 8×8 пикселей до размера дерева блоков с максимумом 64×64 пикселей или больше. Каждый CU может содержать один или более PU и один или более TU. Данные синтаксиса, связанные с CU, могут описывать, например, деление CU на один или более PU. Режимы деления могут различаться между тем, пропускается ли CU или является прямым кодированным режимом, кодированным режимом внутрикадрового предсказания или кодированным режимом межкадрового предсказания (также называемым межкадровым прогнозированием). PU может быть разделен так, чтобы быть неквадратным по форме. Данные синтаксиса, связанные с CU, могут также описывать, например, деление CU на один или более TU в соответствии с квадродеревом. TU может быть квадратным или неквадратным (например, прямоугольным) по форме.
Блок 40 выбора режима может выбрать один из режимов кодирования, внутрикадровый или межкадровый, основываясь, например, на результатах определения ошибки, и предоставляет результирующий блок с внутрикадровым или межкадровым кодированием на сумматор 50, чтобы сформировать остаточные блочные данные, и на сумматор 62, чтобы реконструировать кодированный блок для использования в качестве опорного кадра. Блок 40 выбора режима также предоставляет блоку 56 статистического кодирования элементы синтаксиса, такие как векторы движения, индикаторы режима внутрикадрового предсказания, информация о делении и другая такая информация о синтаксисе.
Блок 42 оценки движения и блок 44 компенсации движения могут быть в значительной степени интегрированы, но показываются как отдельные для концептуальных целей. Оценка движения, выполняемая блоком 42 оценки движения, является процессом формирования векторов движения, которые оценивают движение для видеоблоков. Вектор движения, например, может указать смещение PU видеоблока в пределах текущего видеокадра или изображения относительно предсказываемого блока в пределах опорного кадра (или другого кодированного блока) относительно текущего блока, кодируемого в пределах текущего кадра (или другого кодированного блока). Предсказываемый блок является блоком, который считают близко совпадающим с блоком, который должен быть кодирован, с точки зрения пиксельной разности, которая может определяться суммой абсолютной разности (sum of absolute difference, SAD), суммой разности квадратов (sum of square difference, SSD) или другой разностной метрикой. В некоторых примерах видеокодер 20 может вычислять значения для субцелочисленных пиксельных позиций опорных изображений, хранящихся в памяти 64 опорного кадра. Например, видеокодер 20 может интерполировать значения одночетвертных пиксельных позиций, одновосьмых пиксельных позиций или других дробных пиксельных позиций опорного изображения. Поэтому блок 42 оценки движения может выполнять поиск движения относительно полнопиксельных позиций и дробных пиксельных позиций и выводить вектор движения с дробной пиксельной точностью.
Блок 42 оценки движения вычисляет вектор движения для PU видеоблока в межкадрово кодированной секции, сравнивая позицию PU с позицией прогнозируемого блока опорного изображения. Опорное изображение может быть выбрано из первого списка опорных изображений (список 0, List 0) или из второго списка опорных изображений (список 1, List 1), каждый из которых идентифицируют одно или более опорных изображений, хранящихся в памяти 64 опорного кадра. Блок 42 оценки движения посылает расчетный вектор движения на блок 56 статистического кодирования и на блок 44 компенсации движения.
Компенсация движения, выполняемая блоком 44 компенсации движения, может содержать выборку или формирование предсказываемого блока, основываясь на векторе движения, определяемом блоком 42 оценки движения. Опять же, блок 42 оценки движения и блок 44 компенсации движения в некоторых примерах могут быть функционально интегрированы. После приема вектора движения для PU текущего видеоблока блок 44 компенсации движения может определить местоположение предсказываемого блока, на который вектор движения указывает в одном из списков опорных изображений. Сумматор 50 формирует остаточный видеоблок, вычитая пиксельные значения предсказываемого блока из пиксельных значений текущего кодируемого видеоблока, формируя пиксельные значения разности, как обсуждается ниже. В целом, блок 42 оценки движения выполняет оценку движения относительно компонент яркости и блок 44 компенсации движения использует векторы движения, вычисленные на основе компонент яркости как для компонент цветности, так и для компонент яркости. Блок 40 выбора режима может также формировать элементы синтаксиса, связанные с видеоблоками и видеосекцией для использования видеодекодером 30 при декодировании видеоблоков видеосекции.
Блок 46 внутрикадрового предсказания может осуществлять внутрикадровое предсказание текущего блока в качестве альтернативы межкадровому предсказанию, выполняемому блоком 42 оценки движения и блоком 44 компенсации движения, как описано выше. В частности, блок 46 внутрикадрового предсказания может определить режим внутрикадрового предсказания для использования при кодировании текущего блока. В некоторых примерах блок 46 внутрикадрового предсказания может кодировать текущий блок, используя различные режимы внутрикадрового предсказания, например, во время отдельных процессов кодирования, и блок 46 внутрикадрового предсказания (или блок 40 выбора режима в некоторых примерах) может выбрать из протестированных режимов соответствующий режим внутрикадрового предсказания для использования.
Например, блок 46 внутрикадрового предсказания может вычислить значения уровня искажения, используя анализ уровня искажения для различных протестированных режимов внутрикадрового предсказания, и выбрать режим внутрикадрового предсказания, имеющий наилучшие характеристики уровня искажения среди протестированных режимов. Анализ уровня искажения обычно определяет величину искажения (или ошибку) между кодированным блоком и оригинальным, некодированным блоком, который был кодирован, чтобы создать кодированный блок, а также скорость передачи (то есть, количество битов), используемую для создания кодированного блока. Блок 46 внутрикадрового предсказания может вычислять соотношения, исходя из искажений и скоростей для различных кодированных блоков, чтобы определить, какой режим внутрикадрового предсказания демонстрирует наилучшее значение уровня искажения для блока.
Кроме того, блок 46 внутрикадрового предсказания может быть выполнен с возможностью кодирования блоков глубины на карте глубины, используя режим моделирования глубины (depth modeling mode, DMM). Блок 40 выбора режима может определить, приводит ли доступный режим DMM к более лучшим результатам кодирования, чем режим внутрикадрового предсказания и другие режимы DMM, например, использование оптимизации уровня искажения (rate-distortion optimization, RDO). Данные для изображения текстуры, соответствующей карте глубины, могут храниться в памяти 64 опорного кадра. Блок 42 оценки движения и блок 44 компенсации движения могут также быть выполнены с возможностью межкадрового предсказания блоков глубины на карте глубины.
После выбора режима внутрикадрового предсказания для блока (например, традиционного режима внутрикадрового предсказания или одного из режимов DMM), блок 46 внутрикадрового предсказания может предоставить информацию, указывающую блоку 56 статистического кодирования выбранный режим внутрикадрового предсказания. Блок 56 статистического кодирования может кодировать информацию, указывающую выбранный режим внутрикадрового предсказания. Видеокодер 20 может вводить в передаваемый битовый поток данные конфигурации, которые могут содержать множество таблиц индексов режимов внутрикадрового предсказания и множество модифицированных таблиц индексов режимов внутрикадрового предсказания (также называемых таблицами отображения кодовых слов), определения кодирования контекстов для различных блоков, и индикации наиболее вероятного режима внутрикадрового предсказания, таблицу индексов режимов внутрикадрового предсказания и модифицированную таблицу индексов режимов внутрикадрового предсказания для использования в отношении каждого из контекстов.
Видеокодер 20 формирует остаточный видеоблок, вычитая данные предсказания блока 40 выбора режима из исходного кодируемого видеоблока. Сумматор 50 предоставляет компонент или компоненты, которые выполняют эту операцию вычитания.
Блок 52 процесса преобразования применяет преобразование, такое как дискретное косинусное преобразование (discrete cosine transform, DCT) или концептуально подобное преобразование, к остаточному блоку, создавая видеоблок, содержащий остаточные значения коэффициентов преобразования. Блок 52 преобразования может выполнять и другие преобразования, концептуально подобные DCT. Вейвлет-преобразования, целочисленные преобразования, преобразования с разделением на поддиапазоны или другие типы преобразований также могут использоваться.
Блок 52 процесса преобразования применяет преобразование к остаточному блоку, создавая блок остаточных коэффициентов преобразования. Преобразование может преобразовать остаточную информацию из области пиксельных значений в область преобразования, такую как частотная область. Блок 52 преобразования может послать результирующие коэффициенты преобразования на блок 54 квантования. Блок 54 квантования квантует коэффициенты преобразования, чтобы дополнительно понизить битовую скорость передачи. Процесс квантования может уменьшить битовую глубину, связанную с некоторыми или со всеми коэффициентами. Степень квантования может модифицироваться, регулируя параметр квантования. В некоторых примерах блок 54 квантования может затем выполнять сканирование матрицы, содержащей квантованные коэффициенты преобразования. Альтернативно, сканирование может выполнить блок 56 статистического кодирования.
Вслед за квантованием блок 56 статистического кодирования кодирует квантованные коэффициенты преобразования. Например, блок 56 статистического кодирования может выполнять контекстное адаптивное кодирование переменной длины (context adaptive variable length coding, CAVLC), контекстное адаптивное двоичное арифметическое кодирование (context adaptive binary arithmetic coding, CABAC), контекстно адаптивное двоичное арифметическое кодирование, основанное на синтаксисе, (syntax-based context-adaptive binary arithmetic coding, SBAC), статистическое кодирование с делением вероятностного интервала (probability interval partitioning entropy (PIPE) или другие технологии статистического кодирования. В случае основанного на контексте статистического кодирования контекст может быть основан на соседних блоках. После статистического кодирования посредством блока 56 статистического кодирования кодированный битовый поток может быть передан другому устройству (например, видеодекодеру 30) или архивирован для более поздней передачи или извлечения.
Блок 58 обратного квантования и блок 60 обратного преобразования применяют обратное квантование и обратное преобразование, соответственно, для реконструкции остаточного блока в пиксельной области, например, для более позднего использования в качестве опорного блока. Блок 44 компенсации движения может вычислить опорный блок, прибавляя остаточный блок к предсказываемому блоку одного из кадров памяти 64 опорных кадров. Блок 44 компенсации движения может также применять один или более интерполяционных фильтров к реконструированному остаточному блоку, чтобы вычислить субцелочисленные пиксельные значения для использования при оценке движения. Сумматор 62 добавляет реконструированный остаточный блок к блоку компенсированного предсказания движения, полученному блоком 44 компенсации движения, чтобы создать реконструированный видеоблок для хранения в памяти 64 опорного кадра. Реконструированный видеоблок может использоваться блоком 42 оценки движения и блоком 44 компенсации движения в качестве опорного блока для межкадрового кодирования блока в последующем видеокадре.
На фиг. 3 представлен пример блок-схемы видеодекодера 30, который может реализовывать технологии видеокодирования. В примере, показанном на фиг. 3, видеодекодер 30 содержит блок 70 статистического декодирования, блок 72 компенсации движения, блок 74 внутрикадрового предсказания, блок 76 обратного квантования, блок 78 обратного преобразования, память 82 опорных кадров и сумматор 80. Видеодекодер 30 в некоторых примерах может выполнять процесс декодирования, обычно обратный процессу кодирования, описанному в отношении видеокодера 20 (фиг. 2). Блок 72 компенсации движения может формировать данные предсказания, основываясь на векторах движения, принимаемых от блока 70 статистического декодирования в то время, как блок 74 внутрикадрового предсказания может формировать данные предсказания, основываясь на индикаторах режима внутрикадрового предсказания, принятых от блока 70 статистического декодирования.
Во время процесса декодирования видеодекодер 30 принимает от видеокодера 20 кодированный битовый видеопоток, который представляет видеоблоки кодированной видеосекции и связанные элементы синтаксиса. Блок 70 статистического декодирования видеодекодера 30 статистически декодирует битовый поток, чтобы сформировать квантованные коэффициенты, векторы движения или индикаторы режима внутрикадрового предсказания и другие элементы синтаксиса. Блок 70 статистического декодирования направляет векторы движения и другие элементы синтаксиса на блок 72 компенсации движения. Видеодекодер 30 может принимать элементы синтаксиса на уровне видеосекции и/или на уровне видеоблоков.
Когда видеосекция кодируется как внутрикадрово кодированная (I) секция, блок 74 внутрикадрового предсказания может формировать данные предсказания для видеоблока текущей видеосекции, основываясь на сообщенном режиме внутрикадрового предсказания и данных, получаемых от ранее декодированных блоков текущего кадра или изображения. Когда видеокадр кодируется как межкадрово кодированная (например, B, P, или GPB) секция, блок 72 компенсации движения создает прогнозируемые блоки для видеоблока текущей видеосекции, основываясь на векторах движения и других элементах синтаксиса, получаемых от блока 70 статистического декодирования. Прогнозируемые блоки могут быть получены из одного из опорных изображений в пределах одного из списков опорных изображений. Видеодекодер 30 может создавать списки опорных кадров, список 0 и список 1, используя по умолчанию технологии построения, основанные на опорных изображениях, хранящихся в памяти 82 опорных кадров.
Блок 72 компенсации движения определяет информацию предсказания для видеоблока текущей видеосекции, синтаксически анализируя векторы движения и другие элементы синтаксиса, и использует информацию предсказания, чтобы создать прогнозируемые блоки для текущего декодируемого видеоблока. Например, блок 72 компенсации движения использует некоторые из принятых элементов синтаксиса, чтобы определить режим предсказания (например, внутрикадровое предсказание или межкадровое предсказание), используемый для кодирования видеоблоков видеосекции, тип секции межкадрового предсказания (например, секция B, секция P или секция GPB), информацию о построении одного или более списков опорных изображений для секции, векторы движения для каждого межкадрово кодированного видеоблока секции, состояние межкадрового предсказания для каждого межкадрово кодированного видеоблока секции, и другую информацию для декодирования видеоблоков текущей видеосекции.
Блок 72 компенсации движения может также выполнять интерполяцию, основываясь на интерполяционных фильтрах. Блок 72 компенсации движения может использовать интерполяционные фильтры так, как они используются видеокодером 20 во время кодирования видеоблоков, чтобы вычислять интерполированные значения для субцелочисленных пикселей опорных блоков. В этом случае блок 72 компенсации движения может определять интерполяционные фильтры, используемые видеокодером 20, из числа принятых элементов синтаксиса и использовать интерполяционные фильтры для создания прогнозируемых блоков.
Данные для изображения текстуры, соответствующей карте глубин, могут храниться в памяти 82 опорных кадров. Блок 72 компенсации движения может также быть выполнен с возможностью межкадрового предсказания блоков глубины карты глубин.
Сжатие изображения и видео прошло быстрое развитие, приводя к различным стандартам кодирования. Такие стандарты видеокодирования содержат ITU-T H.261, ISO/IEC Экспертная группа по цифровой записи видео и звука (Motion Picture Experts Group, MPEG)-1 часть 2, ITU-T H.261, Экспертная группа по цифровой записи видео и звука ISO/IEC (MPEG)-1 Часть 2, ITU-T H.262 или Международная организация по стандартизации (ISO)/Международная электротехническая комиссия (IEC) MPEG-2 часть 2, ITU-T H.263, ISO/IEC MPEG-4 часть 2, Перспективное видеокодирование (Advanced Video Coding, AVC), также известный как ITU-T H.264 или ISO/IEC MPEG-4 часть 10, и Высокоэффективное видеокодирование (High Efficiency Video Coding, HEVC), также известный как ITU-T H.265 или MPEG-H часть 2. Стандарт AVC содержит расширения, такие как Масштабируемое видеокодирование (Scalable Video Coding, SVC), Мультипроекционное видеокодирование (Multiview Video Coding, MVC) и Мультипроекционное видеокодирование плюс глубина (Multiview Video Coding plus Depth, MVC+D), и Трехмерное AVC (3D AVC). HEVC содержит расширения, такие как Масштабируемое HEVC (Scalable HEVC, SHVC), Мультипроекционное HEVC (Multiview HEVC, MV-HEVC) и Трехмерное HEVC (3D-HEVC).
Универсальное видеокодирование (Versatile Video Coding, VVC) является новым стандартом видеокодирования, разрабатываемым объединенной группой экспертов по видео (joint video experts team, JVET) из ITU-T и ISO/IEC. На момент написания самый последний рабочий проект (Working Draft, WD) VVC включен в JVET-K1001-v1. Документ JVET JVET-K0325-v3 содержит обновление высокоуровневого синтаксиса VVC.
В целом, настоящее раскрытие описывает технологии, основываясь на разрабатываемом стандарте VVC. Однако, технологии также применимы к другим спецификациям видео/медиа кодеков.
Технологии видеосжатия выполняют пространственное предсказание (внутрикадровое предсказание изображения) и/или временное предсказание (межкадровое предсказание изображения), чтобы уменьшить или исключить избыточность, свойственную видеопоследовательностям. Для видеокодирования, основанного на блоках, видеосекция (например, видеоизображение или часть видеоизображения) может быть разделена на видеоблоки, которые могут также упоминаться как древовидные блоки (treeblock), древовидные блоки кодирования (coding tree block, CTB), древовидные блоки кодирования (coding tree unit, CTU), блоки кодирования (coding unit, CU) и/или узлы кодирования. Видеоблоки во внутрикадрово кодированной (I) секции изображения кодируются, используя пространственное предсказание в отношении опорных выборок в соседних блоках в том же самом изображении. Видеоблоки в межкадрово кодированной (P или B) секции изображения могут использовать пространственное предсказание в отношении опорных выборок в соседних блоках в одном и том же самом изображении или временное предсказание в отношении опорных выборок в других опорных изображениях. Изображения могут упоминаться как кадры, а опорные изображения могут упоминаться как опорные кадры.
Пространственное или временное предсказание приводит в результате к прогнозируемому блоку для блока, который должен кодироваться. Остаточные данные представляют пиксельные разности между исходным блоком, который должен кодироваться, и прогнозируемый блок. Межкадрово кодированный блок кодируется в соответствии с вектором движения, который указывает на блок опорных выборок, формирующих прогнозируемый блок, и остаточные данные, указывающие разность между кодированным блоком и прогнозируемым блоком. Внутрикадрово кодированный блок кодируется в соответствии с режимом внутрикадрового кодирования и остаточными данными. Для дополнительного сжатия остаточные данные могут быть преобразованы из пиксельной области в область преобразования, приводя в результате к остаточным коэффициентам преобразования, которые затем могут быть квантованы. Квантованные коэффициенты преобразования, первоначально расположенные в двумерной матрице, могут сканироваться, чтобы создать одномерный вектор коэффициентов преобразования, и статистическое кодирование может быть применено, чтобы достигнуть еще большей степени сжатия.
В описании видеокодека изображения идентифицируются для множества целей, в том числе, для использования в качестве опорного изображения при межкадровом предсказании, для вывода изображений из буфера декодированных изображений (DPB), для масштабирования векторов движения, для взвешенного предсказания и т.д. В AVC и HEVC изображения могут быть идентифицированы посредством подсчета порядка изображения (picture order count, POC). В AVC и HEVC изображения в DPB могут быть маркированы как "используемые для кратковременной ссылки", "используемые для долговременной ссылки" или “неиспользуемые для ссылки". Когда изображение было маркировано как "неиспользуемое для ссылки", изображение больше не может использоваться для предсказания. Когда изображение больше не требуется для вывода, изображение может быть удалено из DPB.
В AVC имеется два типа опорных изображений, кратковременное и долговременное. Опорное изображение может быть маркировано как "неиспользуемое для ссылки", когда оно становится больше ненужным для ссылки при предсказании. Преобразование между этими тремя состояниями (кратковременное, долговременное и неиспользуемое для ссылки) управляется процессом маркировки декодированного опорного изображения. Существуют два альтернативных механизма маркировки декодированных опорных изображений, процесс неявного скользящего окна и процесс явного управления работой памяти (memory management control operation, MMCO). Процесс скользящего окна маркирует кратковременное опорное изображение как "неиспользуемое для ссылки", когда количество опорных кадров равно заданному максимальному количеству (max_num_ref_frames в наборе параметров последовательности (sequence parameter set, SPS). Кратковременные опорные изображения сохраняются по принципу "первым вошел-первым вышел", так чтобы в DPB хранились самые последние декодированные кратковременные изображения.
Процесс явного MMCO может содержать многочисленные команды MMCO. Команда MMCO может маркировать одно или более кратковременных или долговременных опорных изображений как "неиспользуемое для ссылки" или может маркировать все изображения как "неиспользуемые для ссылки" или может маркировать текущее опорное изображение или существующее кратковременное опорное изображение как долговременное и затем присвоить индекс долговременного изображения этому долговременному опорному изображению.
В AVC операции маркировки опорного изображения, а также процессы для вывода и удаления изображений из DPB выполняются после того, как изображение было декодировано.
HEVC вводит другой подход управления опорным изображением, называемый набором опорных изображений (reference picture set, RPS). Главное принципиальное отличие концепции RPS по сравнению с процессом MMCO/скользящего окна в AVC состоит в том, что для каждой конкретной секции обеспечивается полный набор опорных изображений, используемых текущим изображением, или любое последовательное изображение. Таким образом, сообщается полный набор всех изображений, которые должны храниться в DPB для использования текущим или будущим изображением. В этом состоит отличие от схемы AVC, где сообщаются только относительные изменения в DPB. При концепции RPS никакая информация из более ранних в порядке декодирования изображений не требуется для поддержания правильного состояния опорных изображений в DPB.
Порядок декодирования изображений и операций DPB в HEVC изменяется по сравнению с AVC, чтобы использовать преимущества RPS и повысить устойчивость к ошибкам. В AVC маркировка изображения и буферные операции (вывод и удаление декодированных изображений из DPB) обычно применяются после того, как текущее изображение было декодировано. В HEVC RPS сначала декодируется из заголовка секции текущего изображения и затем маркировка изображения и буферные операции, в целом, применяются перед декодированием текущего изображения.
Каждый заголовок секции в HEVC должен содержать параметры для сообщения RPS для изображения, содержащего секции. Единственное исключение состоит в том, что никакой RPS не сообщается для секций мгновенного обновления декодирования (Instantaneous Decoding Refresh, IDR). Вместо этого RPS предполагается пустым. Для секций I, которые не принадлежат изображению IDR, может обеспечиваться RPS, даже если они принадлежат изображению I, поскольку могут существовать изображения, следующие за изображением I в порядке декодирования, которые используют межкадровое предсказание из изображений, которые предшествовали изображению I в порядке декодирования. Количество изображений в RPS не должно превышать предельный размер DPB, указываемый в элементе синтаксиса sps_max_dec_pic_buffering в SPS.
Каждое изображение связывается со значением POC, которое представляет порядок вывода. Заголовки секций содержат кодовое слово фиксированной длины, pic_order_cnt_lsb, представляющее младшие значащие биты (least significant bit, LSB) полного значения POC, также известные как POC LSB. Длина кодового слова сообщается в SPS и может быть, например, между 4 и 16 битами. Концепция RPS использует POC для идентификации опорных изображений. Помимо его собственного значения POC, каждый заголовок секции непосредственно содержит или получает из SPS кодированное представление значений POC (или LSB) каждого изображения в RPS.
RPS для каждого изображения состоит из пяти различных списков опорных изображений, также упоминаемых как пять субнаборов RPS. RefPicSetStCurrBefore состоит из всех кратковременных опорных изображений, которые предшествуют текущему изображению как в порядок декодирования, так и в порядке вывода, и это может использоваться при межкадровом предсказании текущего изображения. RefPicSetStCurrAfter состоит из всех кратковременных опорных изображений, которые предшествуют текущему изображению в порядке декодирования, которые следуют за текущим изображением в порядке вывода и которые могут использоваться при межкадровом предсказании текущего изображения. RefPicSetStFoll состоит из всех кратковременных опорных изображений, которые могут использоваться при межкадровом предсказании одного или более изображений после текущего изображения в порядке декодирования и которые не используются при межкадровом предсказании текущего изображения. RefPicSetLtCurr состоит из всех долговременных опорных изображений, которые могут использоваться при межкадровом предсказании текущего изображения. RefPicSetLtFoll всех длительных опорных изображений, которые могут использоваться при межкадровом предсказании одного или более изображений после текущего изображения в порядке декодирования и которые не используются при межкадровом предсказании текущего изображения.
RPS сообщается, используя до трех циклических итераций по различным типам опорных изображений: кратковременные опорные изображения с более низким значением POC, чем текущее изображение, кратковременные опорные изображения с более высоким значением POC, чем текущее изображение, и долговременные опорные изображения. Кроме того, флаг (used_by_curr_pic_X_flag) посылается для каждого опорного изображения, указывая, используется ли опорное изображение для ссылки текущим изображением (содержится в одном из списков RefPicSetStCurrBefore, RefPicSetStCurrAfter или RefPicSetLtCurr) или нет (содержится в одном из списков RefPicSetStFoll или RefPicSetLtFoll).
На фиг. 4 показан RPS 400, имеющий текущее изображение B14 с записями (например, изображения) во всех субнаборах 402 RPS 400. В примере, показанном на фиг. 4, текущее изображение B14 содержит точно одно изображение в каждом из этих пяти субнаборов 402 (также называемых субнаборами RPS). P8 является изображением в субнаборе 402, называемом RefPicSetStCurrBefore, поскольку изображение находится раньше в порядке вывода и используется B14. P12 является изображением в субнаборе 402, называемом RefPicSetStCurrAfter, потому что изображение находится позже в порядке вывода и используется B14. P13 является изображением в субнаборе 402, называемом RefPicSetStFoll, потому что изображение является кратковременным опорным изображением, не используемым B14 (но должно храниться в DPB, поскольку оно используется B15). P4 является изображением в субнаборе 402, называемом RefPicSetLtCurr, потому что изображение является долговременным опорным изображением, используемым B14. I0 является изображением в субнаборе 402, называемом RefPicSetLtFoll, потому что изображение является долговременным опорным изображением, не используемым текущим изображением (но должно храниться в DPB, поскольку оно используется B15).
Кратковременная часть RPS 400 может быть включена непосредственно в заголовок секции. Альтернативно, заголовок секции может содержать только элемент синтаксиса, который представляет индекс, ссылающийся на заданный список RPS, посланный в активном SPS. Кратковременная часть RPS 402 может быть сообщена, используя любую из двух различных схем: Inter RPS, как описано ниже, или Intra RPS, как описано здесь. Когда используется Intra RPS, то сообщаются num_negative_pics и num_positive_pics, представляющие длину двух различных списков опорных изображений. Эти списки содержат опорные изображения с отрицательной разностью POC и положительной разностью POC относительно текущего изображения, соответственно. Каждый элемент в этих списках кодируется с помощью кода переменной длины, представляющего разность значения POC относительно предыдущего элемента в списке минус единица. Для первого изображения в каждом списке сигнализация определяется относительно значения POC текущего изображения минус единица.
При кодировании повторяющихся RPS в наборе параметров последовательности можно кодировать элементы одного RPS (например, RPS 400) со ссылкой на другой RPS, уже кодированный в наборе параметров последовательности. Это упоминается как Inter RPS. Нет никаких проблем устойчивости к ошибкам, связанным с этим способом, поскольку все RPS набора параметров последовательности находятся в одном и том же блоке уровня сетевой абстракции (network abstraction layer, NAL). Синтаксис Inter RPS использует тот факт, что RPS текущего изображения может быть предсказан из RPS ранее декодированного изображения. Поэтому все опорные изображения текущего изображения должны либо быть опорными изображениями предыдущего изображения, либо сами должны быть ранее декодированным изображением. Необходимо только указать, какие из этих изображений должны быть опорными изображениями и использоваться для предсказания текущего изображения. Поэтому синтаксис содержит следующее: индекс, указывающий RPS, чтобы использовать его в качестве предиктора, delta_POC, который должен быть добавлен к delta_POC предиктора, чтобы получить разностный POC текущего RPS, и набор индикаторов, указывающий, какие изображения являются опорными изображения и используются ли они только для предсказания будущих изображений.
Кодеры, которые могли бы использовать применение долговременных опорных изображений, должны установить единицу для элемента синтаксиса SPS long_term_ref_pics_present_flag. Долговременные опорные изображения могут затем быть сообщены в заголовке секции с помощью кодовых слов фиксированной длины, poc_lsb_lt, представляя младшие значащие биты полного значения POC каждого долговременного изображения. Каждая poc_lsb_lt является копией pic_order_cnt_lsb кодового слова, которая сообщается для конкретного долговременного изображения. Также возможно сообщить набор долговременных изображений в SPS как список значений POC LSB. POC LSB для долговременного изображения может затем быть сообщен в заголовке секции как индекс в этом списке.
Элемент синтаксиса delta_poc_msb_cycle_lt_minus1 может дополнительно быть сообщен, чтобы позволить вычисление полного расстояния POC долговременного опорного изображения относительно текущего изображения. Требуется, чтобы кодовое слово delta_poc_msb_cycle_lt_minus1 было сообщено для каждого длительного опорного изображения, которое имеет одно и то же значение POC LSB в качестве любого другого опорного изображения в RPS.
Для маркировки опорных изображений в HEVC обычно будет существовать множество изображений, присутствующих в DPB перед декодированием изображения. Некоторые из изображений могут быть доступны для предсказания и в этом качестве маркируются как "используемые для ссылки". Другие изображения могут быть недоступны для предсказания, но ожидают вывода и в этом качестве маркируются как “неиспользуемые для ссылки". Когда заголовок секции был проанализирован, процесс маркировки изображения выполняется перед тем, как декодируются данные секции. Изображения, которые присутствуют в DPB и маркированы как "используемые для ссылки", но не содержатся в RPS, маркируются как "неиспользуемые для ссылки". Изображения, которые не присутствуют в DPB, но содержатся в наборе опорных изображений, игнорируются, когда used_by_curr_pic_X_flag равен нулю. Однако, когда used_by_curr_pic_X_flag вместо этого равен единице, это опорное изображение предназначается для использования при предсказании в текущем изображении, но пропускается. Тогда предполагается неумышленная потеря изображения и декодер должен принять соответствующие меры.
После декодирования текущего изображения оно маркируется как "используемое для кратковременной ссылки".
Далее обсуждается список опорных изображений в HEVC. В HEVC термин "межкадровое предсказание" используется, чтобы обозначить предсказание, полученное из элементов данных (например, значения выборки или векторы движения) опорных изображений, отличных от текущего декодированного изображения. Подобно AVC, изображение может быть предсказано из множества опорных изображений. Опорные изображения, которые используются для межкадрового предсказания, организуются в один или более списков изображений. Ссылочный индекс идентифицирует, какое из опорных изображений в списке должно использоваться для создания сигнала предсказания.
Единый список опорных изображений, список 0, используется для секции P и двух списков опорных изображений, где список 0 и список 1 используются для секций B. Аналогично AVC, построение списка опорных изображений в HEVC содержит инициализацию списка опорных изображений и модификацию списка опорных изображений.
В AVC процесс инициализации для списка 0 различен для секции P (для которой используется порядок декодирования) и для секции B (для которой используется порядок вывода). В HEVC в обоих случаях используется порядок вывода.
Инициализация списка опорных изображений создает по умолчанию список 0 и список 1 (если секция является секцией B), основываясь на трех субнаборах RPS: RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetLtCurr. Кратковременные изображения с более раним (поздним) порядком вывода сначала вставляются в список 0 (список 1) в порядке возрастания расстояния POC до текущего изображения, затем кратковременные изображения с более поздним (ранним) порядком вывода вставляются в список 0 (список 1) в порядке возрастания расстояния POC до текущего изображения и затем, наконец, в конце вставляются долговременные изображения. С точки зрения RPS, для списка 0 записи в RefPicSetStCurrBefore вставляются в начальный список, сопровождаемый вводами в RefPicSetStCurrAfter. Впоследствии, при наличии, добавляются записи в RefPicSetLtCurr.
В HEVC представленный выше процесс повторяется (опорные изображения, которые были уже добавлены к списку опорных изображений, добавляются снова), когда количество записей в списке меньше заданного количества активных опорных изображений (сообщаемого в наборе параметров изображения или в заголовке секции). Когда количество записей больше заданного количества, список усекается.
После того, как список опорных изображений был инициализирован, он может модифицироваться таким образом, что опорные изображения для текущего изображения могут быть расположены в любом порядке, включая случай, когда одно конкретное опорное изображение может появляться более чем в одной позиции в списке, основываясь на командах модификации списка опорных изображений. Когда флаг, указывающий присутствие модификаций списка, устанавливается как единица, сообщается фиксированное количество команд (равное заданному количеству записей в список опорных изображений) и каждая команда вставляет одну запись в список опорных изображений. Опорное изображение идентифицируется в команде посредством индекса в списке опорных изображений для текущего изображения, полученного из сообщения RPS. В этом состоит отличие от модификации списка опорных изображений в H.264/AVC, в котором изображение идентифицируется либо номером изображения (получаемым из элемента синтаксиса frame_num), либо индексом долговременного опорного изображения, и, возможно, что потребуется меньше команд, например, для подкачки первых двух записей начального списка или для вставки одной записи в начало исходного списка и смещения остальных.
В список опорных изображений не разрешается включать никакое опорное изображение с TemporalId, большим, чем для текущего изображения. Битовый поток HEVC может состоять из нескольких временных субуровней. Каждый блок NAL принадлежит конкретному субуровню, как указывается TemporalId (равным temporal_id_plus1 - 1).
Управление опорными изображениями непосредственно основано на списках опорных изображений. Документ JCT-VC, обозначенный JCTVC-G643, содержит подход, чтобы напрямую использовать три списка опорных изображений, а именно, список 0 опорных изображений, список 1 опорных изображений и список бездействующих опорных изображений, для управления опорными изображениями в DPB, избегая, таким образом, необходимости процессов сигнализации и декодирования процессов, содержащих 1) в AVC скользящее окно и процессы MMCO, а также процессы инициализации списка опорных изображений и модификации, или 2) в HEVC набор опорных изображений, а также процессы инициализации списка опорных изображений и модификации.
Подходы к управлению опорными изображениями могут иметь несколько проблем. Подход AVC содержит скользящее окно, процессы MMCO и процессы инициализации списка опорных изображений и модификации, которые являются сложными. Дополнительно, потеря изображений может привести к потере состояния DPB с точки зрения того, какие изображения должны находиться в DPB с целью дополнительной ссылки для межкадрового предсказания. Подход HEVC не имеет проблемы потери состояния DPB. Однако подход HEVC содержит сложную сигнализацию набора опорных изображений и процесс получения, а также процессы инициализации списка опорных изображений и модификации, которые являются сложными. Подход в документе JCTVC-G643, чтобы напрямую использовать три списка опорных изображений, а именно, список 0 опорных изображений, список 1 опорных изображений, а также список бездействующих опорных изображений, для управления опорными изображениями в DPB, включает следующие варианты: третий список опорных изображений, то есть, список бездействующих опорных изображений; кодирование двумя частями разностей POC как "кратковременной" части и ue(v)- кодированной "долговременная" ue(v)-части; гранулярность POC на основе TemporalId для кодирования разности POC, использования состоящего из двух частей кодирования разностей POC для определения маркировки между "используемым для кратковременной ссылки" или "используемым для долговременной ссылки"; описание субнабора списков опорных изображений, которое позволяет иметь возможность описывать список опорных изображений, удаляя опорные изображения из остатка описания более раннего списка опорных изображений; режим копирования списка опорных изображений, разрешаемый элементом синтаксиса ref_pic_list_copy_flag; и процесс описания списка опорных изображений. Каждый из предшествующих вариантов делает подход излишне сложным. Кроме того, процесс декодирования для списков опорных изображений в JCTVC-G643 также является сложным. Сигнализация долговременных опорных изображений, возможно, потребует сигнализации цикла POC в заголовках секций. Это неэффективно.
Чтобы рассмотреть проблемы, упомянутые выше, здесь раскрываются следующие решения, каждое из которых может применяться индивидуально и некоторые из которых могут применяться в сочетании. 1) Маркировка опорных изображений непосредственно основана на двух списках опорных изображений, а именно, списке 0 опорных изображений и списке 1 опорных изображений. 1a) Информация для получения двух списков опорных изображений сообщается, основываясь на элементах синтаксиса и структурах синтаксиса в SPS, PPS и/или в заголовке секции. 1b) Каждый из двух списков опорных изображений для изображения сообщается явно в структуре списка опорных изображений. 1b.i) Одна или более структур списков опорных изображений может сообщаться в SPS и на каждую из них можно ссылаться посредством индекса, полученного из заголовка секции. 1b.ii) Каждый из списков 0 и 1 опорных изображений может сообщаться непосредственно в заголовке секции. 2) Информация для получения двух списков опорных изображений сообщается для всех типов секций, то есть, B (би-предиктивная), P (уни-предиктивная) и I (внутрикадровая) секции. Термин "секция" относится к набору собраний древовидных блоков кодирования, таких как секция в HEVC или в самом последнем WD VVC; он может также относиться к некоторому другому собранию древовидных блоков кодирования, таких как мозаика в HEVC. 3) Два списка опорных изображений формируются для всех типов секций, то есть, секций B, P и I. 4) Два списка опорных изображений создаются напрямую, без использования процесса инициализации списка опорных изображений и процесса модификации списка опорных изображений. 5) В каждом из двух списков опорных изображений на опорные изображения, которые могут использоваться для межкадрового предсказания текущего изображения, можно ссылаться только количеством записей в начале списка. Эти записи упоминаются в списке как активные записи, в то время как другие записи упоминаются в списке как неактивные записи. Могут быть получены общее количество записей и количество активных записей в списке. 6) Изображение, ссылка на которое делается неактивной записью в списке опорных изображений, запрещается для упоминания другой записью в списке опорных изображений или любой записью в другом списке опорных изображений. 7) Долговременные опорные изображения идентифицируются только определенным количеством POC LSB, где это количество может быть больше, чем количество POC LSB, сообщаемое в заголовке секции для получения значений POC, и это количество указывается в SPS. 8) Структуры списка опорных изображений сообщаются только в заголовках секций, причем кратковременные опорные изображения и долговременные опорные изображения идентифицируются их POC LSB, которые могут быть представлены количеством битов, которое отличаются от количества битов, используемых для представления POC LSB, сообщаемых в заголовках секций для получения значений POC, и количества битов, используемые для представления POC LSB для идентификации кратковременных опорных изображений и долговременных опорных изображений, могут различаться. 9) Структуры списков опорных изображений сообщаются только в заголовках секций, причем не делается никакого различия между кратковременными и долговременными опорными изображениями, все опорные изображения называются просто опорными изображениями и опорные изображения идентифицируются их POC LSB, которые могут быть представлены количеством битов, которое отличается от количества битов, используемых для представления POC LSB, сообщаемых в заголовках секций для получения значений POC.
Представляется первый вариант осуществления настоящего раскрытия. Описание дается со ссылкой на самый последний рабочий проект WD VVC. В этом варианте осуществления в SPS сообщаются два набора структур списков опорных изображений, по одному для каждого списка 0 опорных изображений и списка 1 опорных изображений.
Приводятся определения некоторых из используемых здесь терминов. "Изображение внутрикадровой точки произвольного доступа" (intra random access point, IRAP): кодированное изображение, для которого блок NAL каждого уровня видеокодирования (video coding layer, VCL) имеет тип nal_unit_type, равный IRAP_NUT. "Изображение non-IRAP": кодированное изображение, для которого каждый блок VCL NAL имеет nal_unit_type, равный NON_IRAP_NUT. "Список опорных изображений": список опорных изображений, который используется для межкадрового предсказания секции P или B. Для каждой секции изображения non-IRAP формируются два списка опорных изображений, список 0 опорных изображений и список 1 опорных изображений. Набор уникальных изображений, упомянутых всеми записями в двух списках опорных изображений, связанных с изображением, состоит из всех опорных изображений, которые могут использоваться для межкадрового предсказания соответствующего изображения или любого изображения, следующего за соответствующим изображением в порядке декодирования. При декодировании данных секции для секции P для межкадрового предсказания используется только список 0 опорных изображений. При декодировании данных секции для секции B для межкадрового предсказания используются оба списка опорных изображений. При декодировании данных секции для секции I для межкадрового предсказания не используется никакой список опорных изображений. "Долговременное опорное изображение" (long-term reference picture, LTRP): изображение, которое маркируется как "используемое для долговременной ссылки". Кратковременное опорное изображение (short-term reference picture, STRP): изображение, которое маркируется как "используемое для кратковременной ссылки".
Термины "используемое для кратковременной ссылки", "используемое для долговременной ссылки" или "неиспользуемое для ссылки" определяются в VVC в разделе 8.3.3 "Процесс декодирования для маркировки опорных изображений" (Decoding process for reference picture marking), определяются в HEVC в разделе 8.3.2 "Процесс декодирования набора опорных изображений" (Decoding process for reference picture set) и определяются в AVC в разделе 7.4.3.3 "Семантика маркировки декодированных опорных изображений" (Decoded reference picture marking semantics). Эти термины, как они используются здесь, имеют одно и то же значение.
Соответствующие синтаксис и семантика для первого варианта осуществления представлены ниже.
Синтаксис заголовка блока NAL.
Синтаксис набора параметров последовательности Raw Byte Sequence Payload (RBSP).
Синтаксис набора параметров изображения RBSP.
Синтаксис заголовка секции.
Синтаксис структуры списка опорных изображений.
Семантика заголовка блока NAL.
forbidden_zero_bit должен быть равен 0. nal_unit_type определяет тип структуры данных RBSP, содержащейся в блоке NAL.
Таблица 7-1Коды типов блоков NAL и классы типов блоков NAL
nal_unit_type
Название nal_unit_type
Контент блока NAL и структура синтаксиса RBSP
Тип класса блока NAL
0
NON_IRAP_NUT
Сегмент кодированной секции изображения non-IRAPslice_layer_rbsp( )
VCL
1
IRAP_NUT
Кодированная секция изображения IRAPslice_layer_rbsp( )
VCL
2-15
RSV_VCL_NUT
Резервные блоки VCL NAL
VCL
16
SPS_NUT
Набор параметров последовательности seq_parameter_set_rbsp( )
non-VCL
17
PPS_NUT
Набор параметров изображения pic_parameter_set_rbsp( )
non-VCL
18
EOS_NUT
Конец последовательностиend_of_seq_rbsp( )
non-VCL
19
EOB_NUT
Конец битового потока end_of_bitstream_rbsp( )
non-VCL
20, 21
PREFIX_SEI_NUT SUFFIX_SEI_NUT
Дополнительная улучшающая информация sei_rbsp( )
non-VCL
22-26
RSV_NVCL
Резерв
non-VCL
27-31
UNSPEC
Не описывается
non-VCL
nuh_temporal_id_plus1 минус 1 определяет временной идентификатор для блока NAL. Значение nuh_temporal_id_plus1 не должно быть равно 0. Переменная TemporalId определяется следующим образом: TemporalId = nuh_temporal_id_plus1 - 1. Когда nal_unit_type равен IRAP_NUT, кодированная секция принадлежит изображению IRAP, TemporalId должен быть равным 0. Значение TemporalId должно быть одним и тем же для всех блоков VCL NAL блока доступа. Значение TemporalId кодированного изображения или блока доступа является значением TemporalId для блоков VCL NAL кодированного изображения или блок доступа. Значение TemporalId для блоков non-VCL NAL ограничивается следующим образом: если nal_unit_type равен SPS_NUT, то TemporalId должен быть равным 0 и TemporalId блока доступа, содержащего блок NAL, должен быть равным 0. В противном случае, если nal_unit_type будет равен EOS_NUT или EOB_NUT, то TemporalId должен быть равным 0. Иначе, TemporalId должен быть больше или равен TemporalId блока доступа, содержащего блок NAL. Когда блок NAL является блоком non-VCL NAL, значение TemporalId равно минимальному значению значений TemporalId всех блоков доступа, к которым применяется блок non-VCL NAL. Когда nal_unit_type равен PPS_NUT, TemporalId может быть больше или равен TemporalId блока, содержащего доступ, поскольку все наборы параметров изображения (picture parameter set, PPS) могут быть включены в начале битового потока, в котором первое кодированное изображение имеет TemporalId, равный 0. Когда nal_unit_type равен PREFIX_SEI_NUT или SUFFIX_SEI_NUT, TemporalId может быть больше или равен TemporalId блока, содержащего доступ, поскольку блок SEI NAL может содержать информацию, которая применяется к субнабору битового потока, содержащего блоки доступа, для которых значения TemporalId больше, чем TemporalId блока доступа, содержащего блок SEI NAL. nuh_reserved_zero_7bits должен быть равен '0000000'. Другие значения nuh_reserved_zero_7bits могут быть определены в будущем ITU-T | ISO/IEC. Декодеры должны игнорировать (то есть, удалять из битового потока и отбрасывать) блоки NAL со значениями nuh_reserved_zero_7bits, не равными '0000000'.
Семантика RBSP набора параметров последовательности.
log2_max_pic_order_cnt_lsb_minus4 определяет значение переменной MaxPicOrderCntLsb, которая используется в процессе декодирования для подсчета порядка изображения следующим образом: MaxPicOrderCntLsb = 2 (log2_max_pic_order_cnt_lsb_minus4 + 4). Значение log2_max_pic_order_cnt_lsb_minus4 должно быть в диапазоне от 0 до 12, включительно. sps_max_dec_pic_buffering_minus1 плюс 1 определяет максимальный требуемый размер буфера декодированного изображения для CVS в единицах буферов хранения изображения. Значение sps_max_dec_pic_buffering_minus1 должно быть в диапазоне от 0 до MaxDpbSize - 1, включительно, где MaxDpbSize определяется в другом месте. long_term_ref_pics_flag, равный 0, определяет, что никакой LTRP не используется для межкадрового предсказания никакого кодированного изображения в CVS. long_term_ref_pics_flag, равный 1, определяет, что LTRP могут использоваться для межкадрового предсказания одного или более кодированных изображений в CVS. additional_lt_poc_lsb определяет значение переменной MaxLtPicOrderCntLsb, которая используется в процессе декодирования для списков опорных изображений следующим образом: MaxLtPicOrderCntLsb = 2 (log2_max_pic_order_cnt_lsb_minus4+4+additional_lt_poc_lsb).Значение additional_lt_poc_lsb должно быть в диапазоне от 0 до 32 - log2_max_pic_order_cnt_lsb_minus4 - 4, включительно. При его отсутствии, значение additional_lt_poc_lsb принимается равным 0. num_ref_pic_lists_in_sps[i] определяет количество структур синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) с listIdx, равным i, включенным в SPS. Значение num_ref_pic_lists_in_sps[i] должно быть в диапазоне от 0 до 64, включительно. Для каждого значения listIdx (равного 0 или 1), декодер должен выделить память для общего количества структур синтаксиса num_ref_pic_lists_in_sps[i]+1 ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag), поскольку может иметься одна структура синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag), непосредственно сообщаемая в заголовках секций текущего изображения.
Семантика набора параметров изображения RBSP.
num_ref_idx_default_active_minus1[i] плюс 1, когда i равно 0, определяет предполагаемое значение переменной NumRefIdxActive [0] для секций P или B с num_ref_idx_active_override_flag, равным 0, и когда i равно 1, определяет предполагаемое значение NumRefIdxActive[1] для секций B с num_ref_idx_active_override_flag, равным 0. Значение num_ref_idx_default_active_minus1[i] должно быть в диапазоне от 0 до 14, включительно.
Семантика заголовка секции.
При наличии, значение каждого из элементов синтаксиса заголовка секции slice_pic_parameter_set_id и slice_pic_order_cnt_lsb должно быть одним и тем же во всех заголовках секций кодированного изображения. … slice_type определяет тип кодирования секции в соответствии с таблицей 7-3.
Таблица 7-3Связь названия с slice_type
slice_type
Название slice_type
0
B (секция B)
1
P (секция P)
2
I (секция I)
Когда nal_unit_type равен IRAP_NUT, то есть изображение является изображением IRAP, slice_type должен быть равным 2. … slice_pic_order_cnt_lsb определяет подсчет порядка изображения по модулю MaxPicOrderCntLsb для текущего изображения. Длина элемента синтаксиса slice_pic_order_cnt_lsb равна log2_max_pic_order_cnt_lsb_minus4 + 4 бита. Значение slice_pic_order_cnt_lsb должно находиться в диапазоне от 0 до MaxPicOrderCntLsb - 1, включительно. При отсутствии slice_pic_order_cnt_lsb, slice_pic_order_cnt_lsb предполагается равным 0. ref_pic_list_sps_flag[i], равный 1, определяет, что список i опорных изображений текущего изображения получается, основываясь на одной из структур синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) с listIdx, равным i в активном SPS. ref_pic_list_sps_flag[i], равный 0, определяет, что список i опорных изображений из текущего изображения получается, основываясь на структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) с listIdx, равным i, который непосредственно включается в заголовки секций текущего изображения. Когда num_ref_pic_lists_in_sps[i] равен 0, значение ref_pic_list_sps_flag[i] будет равен 0. ref_pic_list_idx[i] определяет в списке структур синтаксиса индекс ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) с listIdx, равный i, включенный в активный SPS структуры синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) с listIdx, равным i, который используется для получения списка i опорных изображений текущего изображения. Элемент синтаксиса ref_pic_list_idx[i] представляется битами Ceil(Log2(num_ref_pic_lists_in_sps[i])). При его отсутствии значение ref_pic_list_idx[i] предполагается равным 0. Значение ref_pic_list_idx[i] должно быть в диапазоне от 0 до num_ref_pic_lists_in_sps[i] - 1, включительно. num_ref_idx_active_override_flag, равный 1, определяет, что элемент синтаксиса num_ref_idx_active_minus1[0] присутствует для секций P и B и элемент синтаксиса num_ref_idx_active_minus1[1] присутствует для секций B. num_ref_idx_active_override_flag, равный 0, определяет, что элементы синтаксиса num_ref_idx_active_minus1[0] и num_ref_idx_active_minus1[1] отсутствуют. num_ref_idx_active_minus1[i], когда они присутствуют, определяют значение переменной NumRefIdxActive[i] следующим образом: NumRefIdxActive[i]=num_ref_idx_active_minus1[i] + 1. Значение num_ref_idx_active_minus1[i] будет в диапазоне от 0 до 14, включительно.
Значение NumRefIdxActive[i] - 1 определяет максимальный ссылочный индекс для списка i опорных изображений, который может использоваться для декодирования секции. Когда значение NumRefIdxActive[i] равно 0, никакой ссылочный индекс для списка i опорных изображений не может использоваться для декодирования секции. Для i, равного 0 или 1, когда текущая секция является секцией B и num_ref_idx_active_override_flag равен 0, NumRefIdxActive[i] предполагается равным num_ref_idx_default_active_minus1[i] + 1. Когда текущая секция является секцией P и num_ref_idx_active_override_flag равен 0, NumRefIdxActive [0] предполагается равным num_ref_idx_default_active_minus1[0] + 1. Когда текущая секция является секцией P, NumRefIdxActive[1] предполагается равным 0. Когда текущая секция является секцией I, оба NumRefIdxActive[0] и NumRefIdxActive[1] предполагаются равными 0.
Альтернативно, для i, равного 0 или 1, после приведенного выше применяется нижеследующее: пусть rplsIdx1 будет установлено равным ref_pic_list_sps_flag[i] ? ref_pic_list_idx[i] : num_ref_pic_lists_in_sps[i] и numRpEntries[i] равно num_strp_entries[i] [rplsIdx1] + num_ltrp_entries[i][rplsIdx1]. Когда NumRefIdxActive[i] больше, чем numRpEntries[i], значение NumRefIdxActive[i] устанавливается равным numRpEntries[i].
Семантика структуры списка опорных изображений.
Структура синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) может присутствовать в SPS или в заголовке секции. В зависимости от того, содержится ли структура синтаксиса в заголовке секции или в SPS, применяется следующее: если она присутствует в заголовке секции, ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) структура синтаксиса определяет список опорных изображений listIdx текущего изображения (изображение, содержащее секцию). В противном случае (присутствует в SPS), структура синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) определяет возможного кандидата на список опорных изображений listIdx и термин "текущее изображение" в семантике, определенной в остаточном члене этой секции, относится к каждому изображению, которое 1) имеет одну или более секций, содержащих ref_pic_list_idx [listIdx], равный индексу в списке структур синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag), содержащемся в SPS, и 2) находится в CVS, который имеет SPS в качестве активного SPS. num_strp_entries [listIdx] [rplsIdx] определяет количество записей STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). num_ltrp_entries [listIdx] [rplsIdx] определяет количество записей LTRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Если это количество записей отсутствует, то значение num_ltrp_entries [listIdx] [rplsIdx] предполагается равным 0. Переменная NumEntriesInList [listIdx] [rplsIdx] получается следующим образом: NumEntriesInList [listIdx] [rplsIdx] = num_strp_entries [listIdx] [rplsIdx] + num_ltrp_entries [listIdx] [rplsIdx]. Значение NumEntriesInList [listIdx] [rplsIdx] должно быть в диапазоне от 0 до sps_max_dec_pic_buffering_minus1, включительно. Значение lt_ref_pic_flag [listIdx] [rplsIdx][i], равное 1, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) является записью LTRP. lt_ref_pic_flag [listIdx] [rplsIdx][i] равное 0, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) является записью STRP. При отсутствии, значение lt_ref_pic_flag [listIdx] [rplsIdx][i] предполагается равным 0. Это является требованием правильности битового потока, согласно которому сумма lt_ref_pic_flag [listIdx] [rplsIdx][i] для всех значений i в диапазоне от 0 до NumEntriesInList [listIdx] [rplsIdx] - 1, включительно, должна равняться num_ltrp_entries [listIdx] [rplsIdx]. delta_poc_st [listIdx] [rplsIdx][i], когда i-ая запись является первой записью STRP в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), определяют разность между значениями подсчета порядка изображения текущего изображения и изображения, упоминаемого i-ой записью, или, когда i-ая запись является запись STRP, но не первой записью STRP в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), определяет разность между значениями подсчета порядка изображения изображений, упомянутых i-ой записью и предыдущей записью STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Значение delta_poc_st [listIdx] [rplsIdx][i] будет находиться в диапазоне от -215 до 215 - 1, включительно. poc_lsb_lt [listIdx] [rplsIdx][i] определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb для изображения, упоминаемого i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt [listIdx] [rplsIdx][i] равняется Log2 (MaxLtPicOrderCntLsb) битов.
Далее обсуждается процесс декодирования. Процесс декодирования действует следующим образом для текущего изображения CurrPic. Декодирование блоков NAL определяется ниже. Процессы, представленные ниже, определяют последующие процессы декодирования, использующие элементы синтаксиса на уровне заголовка секции и выше. Переменные и функции, связанные с подсчетом порядка изображения получают в ходе выполнения процессов. Их необходимо вызывать только для первой секции изображения. В начале процесса декодирования для каждой секции изображения non-IRAP процесс декодирования для построения списка опорных изображений вызывается для получения списка 0 опорных изображений (RefPicList[0]) и списка 1 опорных изображений (RefPicList [1]). Вызывается процесс декодирования для маркировки опорного изображения, в котором опорные изображения могут быть маркированы как "неиспользуемые для ссылки" или "используемые для долговременной ссылки". Их необходимо получать только для первой секции изображения. Процессы декодирования получают для кодирования древовидных блоков, масштабирования, преобразования, циклической фильтрации и т.д. После того, как все секции текущего изображения были декодированы, текущее декодированное изображение маркируется как "используемое для кратковременной ссылки".
Далее обсуждается процесс декодирования блока NAL. Вводами в этот процесс являются блоки NAL текущего изображения и их соответствующие блоки non-VCL NAL. Результатами этого процесса являются проанализированные структуры синтаксиса RBSP, инкапсулированные внутри блоков NAL. Процесс декодирования для каждого блока NAL извлекает структуру синтаксиса RBSP из блока NAL и затем анализирует структуру синтаксиса RBSP.
Далее обсуждается процесс декодирования секции, содержащий процесс декодирования для подсчета порядка изображения. Результатом этого процесса является PicOrderCntVal, подсчет порядка изображения для текущего изображения. Подсчеты порядка изображения используются для идентификации изображений, для получения параметров движения в режиме слияния и для предсказания вектора движения, а также для проверки пригодности декодера. Каждое кодированное изображение связывается с переменной подсчета порядка изображения, обозначенной как PicOrderCntVal. Когда текущее изображение не является изображением IRAP, переменные prevPicOrderCntLsb и prevPicOrderCntMsb получают следующим образом: пусть prevTid0Pic будет предыдущим изображением в порядке декодирования, который имеет TemporalId, равный 0. Переменная prevPicOrderCntLsb устанавливается равной slice_pic_order_cnt_lsb для prevTid0Pic. Переменная prevPicOrderCntMsb устанавливается равной PicOrderCntMsb для prevTid0Pic.
Переменную PicOrderCntMsb текущего изображения получают следующим образом: если текущее изображение является изображением IRAP, PicOrderCntMsb устанавливается равным 0. В противном случае, PicOrderCntMsb получают следующим образом:
PicOrderCntVal получают следующим образом: PicOrderCntVal = PicOrderCntMsb + slice_pic_order_cnt_lsb.
Все изображения IRAP будут иметь PicOrderCntVal, равное 0, так как slice_pic_order_cnt_lsb получают как равное 0 для изображений IRAP и prevPicOrderCntLsb, и prevPicOrderCntMsb оба устанавливаются равными 0. Значение PicOrderCntVal должно быть в диапазоне от -231 до 231 - 1, включительно. В одном CVS значения PicOrderCntVal для любых двух кодированных изображений не должны быть одинаковы.
В любой момент во время процесса декодирования значения PicOrderCntVal & (MaxLtPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковыми. Функция PicOrderCnt (picX) определяется следующим образом: PicOrderCnt (picX) = PicOrderCntVal для изображения picX. Функция DiffPicOrderCnt (picA, picB) определяется следующим образом: DiffPicOrderCnt (picA, picB) = PicOrderCnt (picA) - PicOrderCnt (picB). Битовый поток битов не должен содержать данные, которые приводят в результате к значениям DiffPicOrderCnt (picA, picB), используемым в процессе декодирования, которые не находятся в диапазоне от -215 до 215 - 1, включительно. Пусть X - текущее изображение и Y и Z - два других изображения в одной и той же кодированной видеопоследовательности (coded video sequence, CVS), Y, и Z предполагаются находящимися в одном и том же направлении порядка вывода от X, когда оба DiffPicOrderCnt (X, Y) и DiffPicOrderCnt (X, Z) являются положительными или оба являются отрицательными.
Далее обсуждается процесс декодирования для построения списков опорных изображений. Этот процесс активируется в начале процесса декодирования для каждой секции изображения non-IRAP. Опорные изображения адресуются через ссылочные индексы. Ссылочный индекс является индексом в списке опорных изображений. При декодировании секции I для декодирования данных секции никакой список опорных изображений не используется. При декодировании секции P для декодирования данных секции используется только список 0 опорных изображений 0 (то есть, RefPicList [0]). При декодировании секции B для декодирования данных секции используются оба списка, список 0 опорных изображений и список 1 опорных изображений (то есть, RefPicList[1]). В начале процесса декодирования для каждой секции изображения non-IRAP получают списки опорных изображений RefPicList [0] и RefPicList[1]. Списки опорных изображений используются при маркировке опорных изображений или при декодировании данных секции. Для секции I изображения non-IRAP, которая не является первой секцией изображения, RefPicList [0] и RefPicList [1] могут быть получены для цели проверки правильности битового потока, но их получение не является необходимым для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Для секции P, которая является не первой секцией изображения, RefPicList[1] может быть получен для цели проверки правильности битового потока, но его получение не является необходимым для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Списки опорных изображений RefPicList[0] и RefPicList[1] получают следующим образом:
Для каждого i, равного 0 или 1, применяется следующее: первые записи NumRefIdxActive[i] в RefPicList[i] упоминаются как активные записи в RefPicList[i], а другие записи в RefPicList[i] упоминаются как неактивные записи в RefPicList[i]. Каждая запись в RefPicList[i] [j] для j в диапазоне от 0 до NumEntriesInList[i] [RplsIdx[i]] - 1, включительно, упоминается как запись STRP, если lt_ref_pic_flag[i] [RplsIdx[i]] [j] равно 0, а в противном случае, как запись LTRP. Возможно, что на конкретное изображение ссылка делается как записью в RefPicList[0], так и записью в RefPicList[1]. Также возможно, что конкретное изображение упоминается более, чем одной записью в RefPicList[0], или более, чем одной записью в RefPicList[1]. Активные записи в RefPicList[0] и активные записи в RefPicList[1] все вместе относятся ко всем опорным изображениям, которые могут использоваться для межкадрового предсказания текущего изображения и одного или более изображений, которые следуют за текущим изображением в порядке декодирования. Неактивные записи в RefPicList[0] и неактивные записи в RefPicList[1] совместно относятся ко всем опорным изображениям, которые не используются для межкадрового предсказания текущего изображения, но могут использоваться при межкадровом предсказании для одного или более изображений, которые следуют за текущим изображением в порядке декодирования. В RefPicList[0] или RefPicList[1] могут иметься одна или более записей, которые соответствуют "нет опорного изображения", потому что соответствующие изображения не присутствуют в DPB. Каждая неактивная запись в RefPicList[0] или RefPicList[0], которая равна "нет опорного изображения", должна игнорироваться. Неумышленная потеря изображения может быть получена для каждой активной записи в RefPicList[0] или RefPicList[1], которая равна "нет опорного изображения".
Существует требование правильности битового потока, при котором применяются следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList[i] [RplsIdx[i]] не должно быть меньше, чем NumRefIdxActive[i]. Изображение, упоминаемое каждой активной записью в RefPicList[0] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId, меньший или равный идентификатору из текущего изображения. Как вариант, дополнительно может быть введено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве индекса ссылки для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: неактивная запись в RefPicList[0] или RefPicList[1] не должна относиться к тому же самому изображению, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] той же самой секции или другой секции того же самого изображения не должна относиться к одному и тому же изображению. Текущее изображение само не должно упоминаться никакой записью в RefPicList[0] или RefPicList[1]. Не должно быть никакой записи LTRP в RefPicList[0] или RefPicList[1], для которой разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упоминаемого записью, больше или равна 224. Пусть setOfRefPics будет набором уникальных изображений, упоминаемых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Количество изображений в setOfRefPics должно быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одним и тем же для всех секций изображения.
Процесс декодирования для маркировки опорного изображения.
Этот процесс вызывается один раз для каждого изображения после декодирования заголовка секции и процесса декодирования для создания списка опорных изображений для секции, но до декодирования данных секции. Этот процесс может привести в результате к одному или более опорным изображениям в DPB, маркируемым как "неиспользуемые для ссылки" или "используемые для долговременной ссылки". Декодированное изображение в DPB может быть маркировано как "неиспользуемое для ссылки", "используемое для кратковременной ссылки" или "используемое для долговременной ссылки", но только как одно из этих трех в любой заданный момент в течение работы процесса декодирования. Назначение одной из этих маркировок изображению неявно удаляет другие такие маркировки, когда они применяются. Когда изображение упоминается как маркированное "используемое для ссылки", это относится совместно к изображению, маркированному как "используемое для кратковременной ссылки” или "используемое для долговременной ссылки” (но не к обеим маркировкам). Когда текущее изображение является изображением IRAP, все опорные изображения, присутствующие в настоящий момент в DPB (если имеются) маркируются как “неиспользуемые для ссылки". STRP идентифицируются их значениями PicOrderCntVal. LTRP идентифицируются их значениями Log2 (MaxLtPicOrderCntLsb) LSB для их значений PicOrderCntVal. Применяется следующее: для каждой записи LTRP в RefPicList[0] или RefPicList[1], когда ссылочным изображением является STRP, изображение маркируется как "используемое для долговременной ссылки". Каждое опорное изображение в DPB, для которого нет никакой записи в RefPicList[0] или RefPicList[1], маркируется как "неиспользуемое для ссылки".
Представляется подробное описание второго варианта осуществления раскрытия. В этом разделе документально показан второй вариант осуществления раскрытия, как описано выше. Описание соответствует самому последнему рабочему проекту WD VVC. В этом варианте осуществления один набор структур списков опорных изображений сообщается в SPS, совместно используемом списком 0 опорных изображений и списком 1 опорных изображений.
Синтаксис набора RBSP параметров последовательности.
Синтаксис RBSP набора параметров изображения.
Синтаксис заголовка секции.
Синтаксис структуры списка опорных изображений.
Далее обсуждается семантика заголовка блока NAL.
Семантика набора параметров последовательности RBSP.
log2_max_pic_order_cnt_lsb_minus4 определяет значение переменной MaxPicOrderCntLsb, которая используется в процессе декодирования для подсчета порядка изображения следующим образом: MaxPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4). Значение log2_max_pic_order_cnt_lsb_minus4 должно быть в диапазоне от 0 до 12, включительно. sps_max_dec_pic_buffering_minus1 плюс 1 определяет максимальный требуемый размер буфера декодированного изображения для CVS в единицах буферов хранения изображения. Значение sps_max_dec_pic_buffering_minus1 должно быть в диапазоне от 0 до MaxDpbSize - 1, включительно, где MaxDpbSize, как определяется в другом месте. num_ref_pic_lists_in_sps определяет количество структур синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), включенных в состав SPS. Значение num_ref_pic_lists_in_sps должно быть в диапазоне от 0 до 128, включительно. Декодер должен выделить память для общего количества структур синтаксиса num_short_term_ref_pic_sets + 2 ref_pic_list_struct (rplsIdx, ltrpFlag) строения синтаксиса, поскольку могут существовать две структуры синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), напрямую сообщаемые в заголовках секций текущего изображения. long_term_ref_pics_flag, равный 0, определяет, что никакой LTRP не используется для межкадрового предсказания любого кодированного изображения в CVS. long_term_ref_pics_flag, равный 1, определяет, что LTRP могут использоваться для межкадрового предсказания одного или более кодированных изображений в CVS. additional_lt_poc_lsb определяет значение переменной MaxLtPicOrderCntLsb, которая используется в процессе декодирования для списков опорных изображений следующим образом: MaxLtPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4+ additional_lt_poc_lsb)). Значение additional_lt_poc_lsb должно быть в диапазоне от 0 до 32 - log2_max_pic_order_cnt_lsb_minus4 - 4, включительно. Если оно отсутствует, значение additional_lt_poc_lsb принимается равным 0.
Далее обсуждаются семантики набора параметров изображения RBSP.
Семантики заголовков секций.
При наличии, значения каждого из элементов синтаксиса заголовка секции slice_pic_parameter_set_id и slice_pic_order_cnt_lsb должны быть одинаковы во всех заголовках секций кодированного изображения. slice_type определяет тип кодирования секции в соответствии с таблицей 7-3.
Таблица 7-3Связь названия с slice_type
slice_type
Название slice_type
0
B (секция B)
1
P (секция P)
2
I (секция I)
Когда nal_unit_type равен IRAP_NUT, то есть, изображение является изображением IRAP, slice_type должен быть равным 2. … slice_pic_order_cnt_lsb определяет подсчет порядка изображения по модулю MaxPicOrderCntLsb для текущего изображения. Длина элемента синтаксиса slice_pic_order_cnt_lsb равна log2_max_pic_order_cnt_lsb_minus4 + 4 бита. Значение slice_pic_order_cnt_lsb должно быть в диапазоне от 0 до MaxPicOrderCntLsb - 1, включительно. Когда slice_pic_order_cnt_lsb отсутствует, slice_pic_order_cnt_lsb принимается равным 0. ref_pic_list_sps_flag[i], равный 1, определяет, что список i опорных изображений текущего изображения получают, основываясь на одной из структур синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag) в активном SPS. ref_pic_list_sps_flag[i], равный 0, определяет, что список I опорных изображений текущего изображения получают, основываясь на структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), которая ненапрямую включается в заголовок секции текущего изображения. Когда num_ref_pic_lists_in_sps равен 0, значение ref_pic_list_sps_flag[i] будет равно 0. ref_pic_list_idx[i] определяю индекс в списке структур синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), включенном в активный SPS структуры синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), которая используется для получения списка i опорного изображения текущего изображения. Элемент синтаксиса ref_pic_list_idx[i] представляется битами (Log2 (num_ref_pic_lists_in_sps)). При отсутствии, значение ref_pic_list_idx[i] принимается равным 0. Значение ref_pic_list_idx[i] будет находиться в диапазоне от 0 до num_ref_pic_lists_in_sps - 1, включительно. num_ref_idx_active_override_flag, равный 1, определяет, что элемент синтаксиса num_ref_idx_active_minus1[0] присутствует для секций P и B и что элемент синтаксиса num_ref_idx_active_minus1[1] присутствует для секций B. num_ref_idx_active_override_flag, равный 0, определяет, что элементы синтаксиса num_ref_idx_active_minus1[0] и num_ref_idx_active_minus1[1] отсутствуют.
num_ref_idx_active_minus1[i], когда присутствует, определяет значение переменной NumRefIdxActive[i] следующим образом: NumRefIdxActive[i] = num_ref_idx_active_minus1[i] + 1. Значение num_ref_idx_active_minus1[i] должно быть в диапазоне от 0 до 14, включительно. Значение NumRefIdxActive[i] - 1 определяет максимальный ссылочный индекс для списка i опорных изображений, который может использоваться для декодирования секции. Когда значение NumRefIdxActive[i] равно 0, никакой ссылочный индекс для списка i опорных изображений не может использоваться для декодирования секции. Для i, равного 0 или 1, когда текущая секция является секцией B и num_ref_idx_active_override_flag равен 0, NumRefIdxActive[i] принимается равным num_ref_idx_default_active_minus1[i] + 1. Когда текущая секция является секцией P и num_ref_idx_active_override_flag равен 0, NumRefIdxActive [0] принимается равным num_ref_idx_default_active_minus1[0] + 1. Когда текущая секция является секцией P, NumRefIdxActive [1] принимается равным 0. Когда текущая секция является секцией I, NumRefIdxActive [0] и NumRefIdxActive [1] оба принимаются равными 0.
Альтернативно, для i, равного 0 или 1, после приведенного выше применяется следующее: пусть rplsIdx1 устанавливается равным ref_pic_list_sps_flag[i]? ref_pic_list_idx[i]: num_ref_pic_lists_in_sps[i] и numRpEntries[i] принимается равным num_strp_entries[i] [rplsIdx1] + num_ltrp_entries[i] [rplsIdx1]. Когда NumRefIdxActive[i] больше, чем numRpEntries[i], значение NumRefIdxActive[i] устанавливается равным numRpEntries[i].
Семантики структуры списка опорных изображений.
Структура синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag) может присутствовать в SPS или в заголовке секции. В зависимости от того, включена ли структура синтаксиса в заголовок секции или в SPS, применяется следующее: Если структура синтаксиса присутствует в заголовке секции, структура синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag) определяет список опорных изображений текущего изображения (изображения, содержащего секцию). В противном случае (присутствует в SPS), структура синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag) определяет возможный список опорных изображений и термин "текущее изображение" в семантике, определенной в остаточной части этого раздела, относится к каждому изображению, которое 1) имеет одну или более секций, содержащих ref_pic_list_idx[i], равный индексу в списке структур синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), включенных в SPS, и 2) находится в CVS, который имеет SPS как активный SPS. num_strp_entries [rplsIdx] определяет количество записей STRP в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag). num_ltrp_entries [rplsIdx] определяет количество записей LTRP в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag). При отсутствии, значение num_ltrp_entries [rplsIdx] принимается равным 0.
Переменную NumEntriesInList[rplsIdx] получают следующим образом: NumEntriesInList [rplsIdx] = num_strp_entries [rplsIdx] + num_ltrp_entries [rplsIdx]. Значение NumEntriesInList [rplsIdx] должно быть в диапазоне от 0 до sps_max_dec_pic_buffering_minus1, включительно. lt_ref_pic_flag [rplsIdx][i], равный 1, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag) является записью LTRP. lt_ref_pic_flag [rplsIdx][i], равный 0, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag) является записью STRP. При его отсутствии, значение lt_ref_pic_flag [rplsIdx][i] принимается равным 0. Требованием правильности битового потока является то, чтобы сумма lt_ref_pic_flag [rplsIdx][i] для всех значений i в диапазоне от 0 до NumEntriesInList [rplsIdx] - 1, включительно, была равна num_ltrp_entries [rplsIdx]. delta_poc_st [rplsIdx][i], когда i-ая запись является первой записью STRP в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), определяет разность между значениями подсчета порядка изображения текущего изображения и изображение, упоминаемое i-ой записью или когда i-ая запись является записью STRP, но не является первой записью STRP в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag), определяет разность между значениями подсчета порядка изображения для изображений, упоминаемых i-ой записью и предыдущей записью STRP в структуре синтаксиса_pic_list_struct (rplsIdx, ltrpFlag). Значение delta_poc_st [rplsIdx][i] должно быть в диапазоне от 0 до 215 - 1, включительно. poc_lsb_lt [rplsIdx][i] определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb для изображения, упоминаемого i-ой записью в структуре синтаксиса ref_pic_list_struct (rplsIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt [rplsIdx][i] равна Log2 (MaxLtPicOrderCntLsb) битов.
Применяется общий процесс декодирования, определяемый как часть подробного описания первого варианта осуществления этого раскрытия. Описывается процесс декодирования блока NAL. Применяется процесс декодирования блока NAL, определяемый как часть подробного описания первого варианта осуществления этого раскрытия.
Далее представляется процесс декодирования секции.
Процесс декодирования для подсчета порядка изображения.
Применяется процесс декодирования для подсчета порядка изображения, определяемый как часть подробного описания первого варианта осуществления этого раскрытия.
Процесс декодирования для построения списков опорных изображений.
Этот процесс начинается в начале процесса декодирования для каждой секции изображения non-IRAP. Опорные изображения адресуются через ссылочные индексы. Ссылочный индекс является индексом в списке опорных изображений. При декодировании секции I для декодирования данных секции никакой список опорных изображений не используется. При декодировании секции P только список 0 опорных изображений (то есть, RefPicList [0]) используется для декодирования данных секции. При декодировании секции B список 0 опорных изображений и список 1 опорных изображений (то есть, RefPicList[1]) используются для декодирования данных секции. В начале процесса декодирования для каждой секции изображения non-IRAP получают списки опорных изображений RefPicList[0] и RefPicList[1]. Списки опорных изображений используются при маркировке опорных изображений или при декодировании данных секции. Для секции I изображения non-IRAP, которая не является первой секцией изображения, RefPicList [0] и RefPicList [1] могут быть получены для цели проверки правильности битового потока, но их получение не требуется для того, чтобы декодировать текущее изображение или изображения, следующие за текущим изображением в порядке декодирования. Для секции P, которая не является первой секцией изображения, RefPicList[1] может быть получен для цели проверки правильности битового потока, но его получение не является необходимым для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования.
Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Для каждого i, равного 0 или 1, применяется следующее: первые записи NumRefIdxActive[i] в RefPicList[i] упоминаются как активные записи в RefPicList[i], а другие записи в RefPicList[i] упоминаются как неактивные записи в RefPicList[i]. Каждая запись RefPicList[i][j] для j в диапазоне от 0 до NumEntriesInList [RplsIdx[i]] - 1, включительно, упоминается как запись STRP, если lt_ref_pic_flag [RplsIdx[i]] [j] равен 0, а в противном случае, как запись LTRP. Возможно, что конкретное изображение упоминается как записью в RefPicList[0], так и записью в RefPicList[1]. Также возможно, что конкретное изображение упоминается более чем одной записью в RefPicList[0] или более чем одной записью в RefPicList[1]. Активные записи в RefPicList[0] и активные записи в RefPicList [1] все вместе относятся ко всем опорным изображениям, которые могут использоваться для межкадрового предсказания текущего изображения и одного или более изображений, которые следуют за текущим изображением в порядке декодирования. Неактивные записи в RefPicList[0] и неактивные записи в RefPicList[1] все вместе относятся ко всем опорным изображениям, которые не используются для межкадрового предсказания текущего изображения, но могут использоваться при межкадровом предсказании для одного или более изображений, которые следуют за текущим изображением в порядке декодирования. Могут иметься одна или более записей в RefPicList[0] или RefPicList[1], которые соответствуют "нет опорного изображения", потому что соответствующие изображения не присутствуют в DPB. Каждая неактивная запись в RefPicList[0] или RefPicList[1], которая равна "никакому опорному изображению", должна игнорироваться. Неумышленная потеря изображения должна быть приниматься для каждой активной записи в RefPicList[0] или RefPicList[1], как равная "нет опорного изображения".
Существует требование проверки правильности битового потока, при котором применяются следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList [RplsIdx[i]] не должно быть меньше, чем NumRefIdxActive[i]. Изображение, упоминаемое каждой активной записью в RefPicList [0] или RefPicList [1], должно присутствовать в DPB и должно иметь TemporalId, меньший или равный TemporalId текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве опорного индекса для декодирования текущего изображения. Как вариант, следующее дополнительно может быть определено следующее ограничение: неактивная запись в RefPicList[0] или RefPicList[1] не должна относиться к тому же самому изображению, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] одной и той же секции или другой секции того же самого изображения не должна относится к тому же самому изображению. Само текущее изображение не должно упоминаться ни в какой записи в RefPicList[0] или RefPicList[1]. Не должно быть никакой записи LTRP в RefPicList[0] или RefPicList[1], для которого разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics является набором уникальных изображений, упоминаемых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Количество изображений в setOfRefPics должен быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должен быть одним и тем же для всех секций изображения.
Далее обсуждается процесс декодирования маркировки опорных изображений.
Этот процесс вызывается один раз для каждого изображения после декодирования заголовка секции и процесса декодирования для построения списка опорных изображений для секции, но перед декодирования данных секции. Этот процесс может давать в результате одно или более опорных изображений в DPB, маркируемых как "неиспользуемое для ссылки" или "используемое для долговременной ссылки". Декодированное изображение в DPB может быть маркировано как "неиспользуемое для ссылки", "используемое для кратковременной ссылки" или "используемое для долговременной ссылки", но только как одна из этих трех маркировок в любой заданный момент времени во время работы процесса декодирования. Назначение одной из этих маркировок изображению неявно удаляет другие такие маркировки, когда они имеются. Когда изображение маркируется как "используемое для ссылки", это, в целом, относится к изображению, маркируемому как "используемое для кратковременной ссылки" или как "используемое для долговременной ссылки" (но не обе маркировки). Когда текущее изображение является изображением IRAP, все опорные изображения, находящиеся в настоящий момент в DPB (если имеются), маркируются как "неиспользуемые для ссылки". STRP идентифицируются их значениями PicOrderCntVal. LTRP идентифицируются Log2 (MaxLtPicOrderCntLsb) LSB их значений PicOrderCntVal.
Применяется следующее: для каждой записи LTRP в RefPicList[0] или RefPicList[1], когда упомянутым изображением является STRP, изображение маркируется как "используемое для долговременной ссылки". Каждое опорное изображение, присутствующее в DPB, на которое не делается ссылка никакой записью в RefPicList[0] или RefPicList[1], маркируется как "неиспользуемое для ссылки".
На фиг. 5 представлен вариант осуществления способа 500 декодирования кодированного битового видеопотока, реализуемого видеодекодером (например, видеодекодером 30). Способ 500 может выполняться после того, как декодированный битовый поток был прямо или косвенно принят от видеокодера (например, от видеокодера 20). Способ 500 может быть выполнен для улучшения процесса декодирования (например, чтобы сделать процесс декодирования более эффективным, быстрый и т.д., чем стандартные процессы декодирования).
На этапе 502 получают первый список опорных изображений текущей секции, представленных в кодированном битовом видеопотоке, и второй список опорных изображений текущей секции. В варианте осуществления первый список опорных изображений обозначается RefPictList[0], а второй список опорных изображений обозначается RefPictList[1].
На этапе 504 состояние опорного изображения в буфере декодированных изображений (decoded picture buffer, DPB) маркируется, основываясь на первом списке опорных изображений и на втором списке опорных изображений, когда текущая секция является первой секцией в текущем изображении, к которому принадлежит текущая секция. В варианте осуществления состояние опорного изображения в буфере декодированных изображений является состоянием, используемым для кратковременной ссылки, используемым для долговременной ссылки или неиспользуемым для ссылки.
На этапе 506 опорное изображение используется в процессе реконструкции текущего изображения (или изображения, следующего после текущего изображения), когда состояние опорного изображения является состоянием, используемым для кратковременной ссылки или используемым для долговременной ссылки. После процесса реконструкции видеодекодер имеет возможность вывести видео или изображение. В варианте осуществления это видео или изображение может отображаться на дисплее электронного устройства (например, смартфона, планшета, ноутбука и т.д.).
На фиг. 6 представлен вариант осуществления способа 600 декодирования кодированного битового видеопотока, реализуемого видеодекодером (например, видеодекодером 30). Способ 600 может быть выполнен после того, как декодированный битовый поток был прямо или косвенно принят от видеокодера (например, от видеокодера 20). Способ 600 может выполняться, чтобы улучшить процесс декодирования (например, сделать процесс декодирования более эффективным, быстрым и т.д., чем стандартные процессы декодирования).
На этапе 602 первое изображение (содержащее все его секции) декодируется видеодекодером, чтобы получить первое декодированное изображение. На этапе 604 первое декодированное изображение после декодирования сохраняется видеодекодером в буфере декодированных изображений (decoded picture buffer, DPB). В варианте осуществления DPB содержит множество опорных изображений в дополнение к первому декодированному изображению. Контент DPB управляется, чтобы гарантировать синхронизацию между кодером и декодером. Сохраненный набор изображений в DPB упоминается как набор опорных изображения (Reference Picture Set, RPS).
На этапе 606 первое изображение маркируется как используемое для кратковременной ссылки после того, как все секции первого изображения были декодированы. В варианте осуществления первое изображение упоминается как STRP, когда маркируется как используемое для кратковременной ссылки. В варианте осуществления STRP идентифицируется значением подсчета порядка изображения (PicOrderCntVal).
На этапе 608 декодируют первую секцию текущего изображения. В варианте осуществления процесс декодирования для первой секции текущего изображения содержит получение первого списка опорных изображений и второго списка опорных изображений, перемаркируя посредством видеодекодера первое изображение как используемое для долговременной ссылки, когда на первое изображение делается ссылка записью долговременного опорного изображения (long-term reference picture, LTRP) в первом списке опорных изображений или во втором списке опорных изображений, и перемаркируя видеодекодером первое изображение как неиспользуемое для ссылки, когда первое изображение не упоминается в первом списке опорных изображений или во втором списке опорных изображений. Таким образом, состояние первого изображения изменяется или обновляется от STRP до неиспользуемого для ссылки, когда первое изображение не упоминается записью LTRP в первом списке опорных изображений или во втором списке опорных изображений.
В варианте осуществления первый список опорных изображений обозначается как RefPictList[0], а второй список опорных изображений обозначается как RefPictList[1]. В варианте осуществления текущее изображение содержит изображение non-IRAP. В варианте осуществления LTRP идентифицируется логарифмической функцией младших значащих битов максимального подсчета порядка долговременного изображения (Log2 (MaxLtPicOrderCntLsb)) для значения подсчета порядка изображения (PicOrderCntVal).
В варианте осуществления в любой заданный момент времени первое изображение маркируется или перемаркируется только как используемое для кратковременной ссылки, используемое для кратковременной ссылки или как неиспользуемое для ссылки. В варианте осуществления, маркировка или перемаркировка первого изображения как используемого для кратковременной ссылки, используемого для кратковременной ссылки или неиспользуемого для ссылки удаляет любую другую маркировку для первого изображения.
Обеспечивается подборка альтернативных вариантов осуществления, основанных на первом и втором вариантах осуществления.
В этом разделе приводится краткая подборка других альтернативных вариантов осуществления раскрытия. Подборки относятся к описанию первого варианта осуществления. Однако, базовая концепция раскрытия последующих альтернативных вариантов осуществления также применима для реализации в дополнение к раскрытию второго варианта осуществления. Такая реализация обладает той же самой сущностью того, как варианты реализуются в дополнение к первому варианту осуществления.
Семантика разности POC для записей кратковременных опорных изображений.
В одном альтернативном варианте осуществления раскрытия семантика элемента синтаксиса, который определяет разностную POC i-ой записи в структуре ref_pic_list_struct () списка опорных изображений, определяется как разность POC между текущим изображением и опорным изображением, связанным с этой i-ой записью. Часть описания, используемого здесь, относится к настоящему проекту стандарта (например, к рабочему проекту VVC), где показывается или описывается только различие. Удаленный текст обозначается перечеркиванием и любой добавленный текст выделяется.
Семантика delta_poc_st[listIdx][rplsIdx][i] определяется следующим образом: delta_poc_st[listIdx][rplsIdx][i] определяет разность между значениями подсчета порядка изображения текущего изображения и изображения, упомянутого i-ой записью. Значение delta_poc_st [listIdx] [rplsIdx][i] должно быть в диапазоне от -215 до 215 - 1, включительно.
Уравнение в процессе построения списка опорных изображений должно быть обновлено. Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
В одном из альтернативных вариантов осуществления раскрытия записи долговременных опорных изображений не сообщаются в одной и той же структуре списка опорных изображений, которая содержит записи кратковременных опорных изображений. Записи долговременных опорных изображений сообщаются в отдельной структуре и для каждой записи в структуре существует элемент синтаксиса, который описывает намеченную позицию записи долговременного опорного изображения для получения соответствующего индекса записи в окончательном списке опорных изображений.
Синтаксис набора параметров RBSP.
Синтаксис заголовка секции.
Синтаксис структуры списка опорных изображений.
Синтаксис структуры списка долговременных опорных изображений.
Семантика набора параметров последовательности RBSP.
num_ref_pic_lists_lt_in_sps определяет количество структур синтаксиса ref_pic_list_lt_struct (ltRplsIdx), содержащихся в SPS. Значение num_ref_pic_lists_lt_in_sps должно быть в диапазоне от 0 до 64, включительно. Если оно отсутствует, значение num_ref_pic_lists_lt_in_sps принимается равным 0.
Семантика заголовка секции.
ref_pic_list_lt_idx[i] определяет индекс в списке структур синтаксиса ref_pic_list_lt_struct (ltRplsIdx), содержащихся в активном SPS, который используется для получения списка i опорных изображений текущего изображения. Элемент синтаксиса ref_pic_list_lt_idx[i] представляется битами Ceil(Log2 (num_ref_pic_lists_lt_in_sps)). Значение ref_pic_list_lt_idx должно быть в диапазоне от 0 до num_ref_pic_lists_lt_in_sps - 1, включительно.
Семантика структуры списка опорных изображений.
Структура синтаксиса ref_pic_list_struct(listIdx, rplsIdx) может быть представлена в SPS или в заголовке секции. В зависимости от того, содержится ли структура синтаксиса в заголовке секции или в SPS, применяется следующее: если она присутствует в заголовке секции, структура синтаксиса ref_pic_list_struct (listIdx, rplsIdx) определяет список кратковременных опорных изображений listIdx текущего изображения (изображения, содержащего секцию). В противном случае (структура присутствует в SPS), ref_pic_list_struct (listIdx, rplsIdx) структура синтаксиса определяет возможного кандидата на список кратковременных опорных изображений listIdx и термин "текущее изображение" в семантике, определяемый в остаточном члене этого раздела, относится к каждому изображению, которое 1) имеет одну или более секций, содержащих ref_pic_list_idx [listIdx], равный индексу в списке структур синтаксиса ref_pic_list_struct (listIdx, rplsIdx), содержащемся в SPS, и 2) находится в CVS, который имеет SPS в качестве активного SPS. num_strp_entries [listIdx] [rplsIdx] определяет количество записей STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx).
num_ltrp_entries [listIdx] [rplsIdx] определяет количество записей LTRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). При отсутствии этого количества, значение num_ltrp_entries [listIdx] [rplsIdx]получают равным 0.
Переменную NumEntriesInList [listIdx][rplsIdx] получают следующим образом:
NumRefPicEntriesInRpl [listIdx] [rplsIdx] = num_strp_entries [listIdx] [rplsIdx] +num_ltrp_entries [listIdx] [rplsIdx] …(7-34)
Значение NumRefPicEntries [listIdx] [rplsIdx] должно быть в диапазоне от 0 до sps_max_dec_pic_buffering_minus1, включительно.
lt_ref_pic_flag [listIdx] [rplsIdx][i], равный 1, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) является записью LTRP. lt_ref_pic_flag [listIdx] [rplsIdx][i], равный 0, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) является записью STRP. При отсутствии, значение lt_ref_pic_flag [listIdx][rplsIdx][i] принимается равным 0.
Требование проверки правильности битового потока состоит в том, чтобы сумма lt_ref_pic_flag [listIdx] [rplsIdx][i] для всех значений i в диапазоне от 0 до NumRefPicEntries [listIdx] [rplsIdx] - 1, включительно, равнялась num_ltrp_entries [listIdx] [rplsIdx].
delta_poc_st [listIdx][rplsIdx][i], когда i-ая запись является первой записью STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx), определяет разность между значениями подсчета порядка изображения текущего изображения и изображения, упомянутого i-ой записью, или, когда i-ая запись является записью STRP, но не первой записью STRP в структуре синтаксиса ref_pic_list_struct(listIdx, rplsIdx), определяет разность между значениями подсчета порядка изображения для изображений, упомянутых i-ой записью и предыдущей записью STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx). Значение delta_poc_st [listIdx] [rplsIdx][i] должно быть в диапазоне от -215 до 215 - 1, включительно.
poc_lsb_lt [listIdx] [rplsIdx][i] определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb для изображения, упомянутого i-ой записью в структуре синтаксиса ref_pic_list_struct(listIdx, rplsIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt[listIdx [rplsIdx][i] равняется Log2 (MaxLtPicOrderCntLsb) битам.
Семантика структуры списка долговременных опорных изображений.
Структура синтаксиса ref_pic_list_lt_struct (ltRplsIdx) может присутствовать в SPS или в заголовке секции. В зависимости от того, содержится ли структура синтаксиса в заголовке секции или в SPS, применяется следующее: при присутствии в заголовке секции структура синтаксиса ref_pic_list_lt_struct(ltRplsIdx) определяет список долговременных опорных изображений текущего изображения (изображения, содержащего секцию). В противном случае, (присутствует в SPS), структура синтаксиса ref_pic_list_struct(listIdx, rplsIdx) определяет возможного кандидата на список долговременных опорных изображений и термин "текущее изображение" в семантике, определяемый в остаточном члене этого раздела, относится к каждому изображению, которое 1) имеет одну или более секций, содержащих ref_pic_list_lt_idx[i], равный индексу в списке структур синтаксиса ref_pic_list_lt_struct(ltRplsIdx), содержащихся в SPS, и 2) находится в CVS, который имеет SPS в качестве активного SPS. num_ltrp_entries [ltRplsIdx] определяет количество записей LTRP в структуре синтаксиса ref_pic_list_lt_struct (ltRplsIdx). poc_lsb_lt [rplsIdx][i] определяет значение порядка изображения по модулю MaxLtPicOrderCntLsb изображения, упомянутого i-ой записью в структуре синтаксиса ref_pic_list_lt_struct(rplsIdx). Длина элемента синтаксиса poc_lsb_lt [rplsIdx][i] равняется Log2 (MaxLtPicOrderCntLsb) бит. lt_pos_idx [rplsIdx][i] определяет индекс i-ой записи в структуре синтаксиса ref_pic_list_lt_struct(rplsIdx) в списке опорных изображений после создания списка опорных изображений. Длина lt_pos_idx [rplsIdx][i] элемент синтаксиса равняется Log2 (sps_max_dec_pic_buffering_minus1 + 1) бит. Когда num_ltrp_entries [ltRplsIdx] больше 1, poc_lsb_lt [rplsIdx][i] и lt_pos_idx [rplsIdx][i] должны следовать в нисходящем порядке значений lt_pos_idx [rplsIdx][i].
Далее описывается процесс декодирования.
Процесс декодирования для построения списков опорных изображений.
Этот процесс вызывается в начале процесса декодирования для каждой секции изображения non-IRAP. Опорные изображения адресуются через ссылочные индексы. Ссылочный индекс является индексом в списке опорных изображений. При декодировании секции I для декодирования данных секции никакой список опорных изображений не используется. При декодировании секции P для декодирования данных секции используется только список опорных изображений 0 (то есть, RefPicList[0]). При декодировании секции B для декодирования данных секции используются как список 0 опорных изображений, так и список 1 опорных изображений (то есть, RefPicList[1]). В начале процесса декодирования для каждой секции изображения non-IRAP определяются списки опорных изображений RefPicList[0] и RefPicList[1]. Списки опорных изображений используются при маркировке опорных изображений или при декодировании данных секции. Для секции i изображения non-IRAP, которая не является первой секцией изображения, RefPicList[0] и RefPicList[1] могут быть получены для цели проверки правильности битового потока, но их получение не является обязательным для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Для секции P, которая не является первой секцией изображения, RefPicList[1] может быть получен для цели проверки правильности битового потока, но его получение не является обязательным для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Для каждого i, равного 0 или 1, применяется следующее: первые записи NumRefIdxActive[i] в RefPicList[i] упоминаются как активные записи в RefPicList[i], а другие записи в RefPicList[i] упоминаются как неактивные записи в RefPicList[i]. Каждая запись в RefPicList[i][j] для j в диапазоне от 0 до NumEntriesInList[i][RplsIdx[i]] - 1, включительно, упоминается как запись STRP, если lt_ref_pic_flag[i] [RplsIdx[i]] [j] равен 0, а в противном случае, как запись LTRP. Возможно, что конкретное изображение упоминается двумя записями, записью в RefPicList[0] и записью в RefPicList[1]. Также возможно, что конкретное изображение упоминается более чем одной записью в RefPicList[0] или более чем одной записью в RefPicList[1]. Активные записи в RefPicList[0] и активные записи в RefPicList[1] все вместе относятся ко всем опорным изображениям, которые могут использоваться для межкадрового предсказания текущего изображения и одного или более изображений, следующих за текущим изображением в порядке декодирования. Неактивные записи в RefPicList[0] и неактивные записи в RefPicList[1] все вместе относятся ко всем опорным изображениям, которые не используются для межкадрового предсказания, но могут использоваться при межкадровом предсказании для одного или более изображений, следующих за текущим изображением в порядке декодирования. В RefPicList[0] или RefPicList[1] могут иметься одна или более записей, которые соответствуют "нет опорного изображения", потому что соответствующие изображения не присутствуют в DPB. Каждая неактивная запись в RefPicList[0] или RefPicList[0], которая соответствует "нет опорного изображения", должна игнорироваться. Неумышленная потеря изображения должна приниматься для каждой активной записи в RefPicList[0] или в RefPicList[1], соответствующей "нет опорного изображения".
Требование правильности битового потока состоит в том, что применяются следующие ограничения: для каждого i, равного 0 или 1, количество записей в RefPicList[i] должно быть не меньше, чем NumRefIdxActive[i]. Изображение, упомянутое каждой активной записью в RefPicList[0] или в RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId, меньше или равный TemporalId текущего изображения. Дополнительно может быть определено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве ссылочного индекса для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: неактивная запись в RefPicList[0] или в RefPicList[1] не должна ссылаться на то же самое изображение, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] одной и той же секции или другой секции того же самого изображения не должны ссылаться на одно и то же изображение. Само текущее изображение не должно упоминаться никакой записью в RefPicList[0] или RefPicList[1]. Не должно быть никакой записи LTRP в RefPicList[0] или RefPicList[1], для которых разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics является набором уникальных изображений, на которые ссылаются все записи в RefPicList[0] и все записи в RefPicList[1]. Количество изображений в setOfRefPics должен быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одним и тем же для всех секций изображения.
Далее обсуждается сообщение количества записей кратковременных опорных изображений.
В одном из альтернативных вариантов осуществления раскрытия элемент синтаксиса, который определяет количество записей, связанных с кратковременными опорными изображениями в структуре списка опорных изображений ref_pic_list_struct (), определяется как num_strp_entries_minus1[listIdx][rplsIdx] вместо num_strp_entries[listIdx] [rplsIdx]. Изменение имеет два результата для сообщения списка опорных изображений: оно может сберечь биты для сообщения количества записей, связанных с кратковременным опорным изображением в структуре списка опорных изображений, поскольку элемент кодируется, используя ue(v). Это неявно налагает ограничение, что каждый список опорных изображений должен содержать по меньшей мере одно кратковременное опорное изображение. Чтобы воспользоваться этой идеей, необходимы некоторые изменения в отношении первого варианта осуществления.
Для сообщения списка опорных изображений в заголовках секций сообщается только необходимый список опорных изображений, соответствующий типу секции, то есть, один список опорных изображений (то есть, список 0 опорных изображений) для секций I или P и два списка опорных изображений (то есть, список 0 опорных изображений и список 1 опорных изображений) для секций B. Синтаксис заголовка секции изменяется следующим образом:
Применяя вышеупомянутое изменение в заголовке секции (то есть, в списке 0 опорных изображений для секций I или P; опорное изображение 0 и опорное изображение 1 для секций B), можно тем самым избежать схемы, связанной с проблемой, когда для секции P существует только одно кратковременное опорное изображение. Однако дублированное кратковременное опорное изображение не может сообщаться в списке 0 опорных изображений и в списке 1 опорных изображений, где запись в списке 1 опорных изображений является неактивной записью, поскольку количество активных записей в списке 1 опорных изображений должно быть равным 0. Семантика в num_strp_entries_minus1[listIdx][rplsIdx] изменяется следующим образом: num_strp_entries_minus1 [listIdx] [rplsIdx] плюс 1 определяет количество записей STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Переменную NumEntriesInList [listIdx] [rplsIdx] получают следующим образом: NumRefPicEntriesInRpl [listIdx][rplsIdx] = num_strp_entries_minus1[listIdx][rplsIdx]+1+num_ltrp_entries[listIdx][rplsIdx]. Значение NumRefPicEntries[listIdx][rplsIdx] должно быть в диапазоне от 1 до sps_max_dec_pic_buffering_minus1, включительно.
Разрешение включения текущего изображения в списки опорных изображений.
В одном из альтернативных вариантов осуществления раскрытия текущее изображение разрешается включить в его списки опорных изображений. Чтобы поддержать этот признак, не существует никакого изменения синтаксиса и семантики, требуемого в отношении их описаний в первом и вторых вариантах осуществления. Однако, ограничения правильности битового потока, которые описываются в процессе декодирования для построения списка опорных изображений, нуждаются в модификации следующим образом: требованием правильности битового потока является применение следующих ограничений: для каждого i, равного 0 или 1, NumEntriesInList[i] [RplsIdx[i]] не должно быть меньше, чем NumRefIdxActive[i]. Изображение, упоминаемое каждой активной записью в RefPicList[0] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId, меньший или равный TemporalId текущего изображения. Как вариант, может быть дополнительно определено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве ссылочного индекса для декодирования текущего изображения. Как вариант, может быть дополнительно определено следующее ограничение: неактивная запись в RefPicList[0] или RefPicList[1] не должна упоминаться в том же самом изображении, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] одной и той же секции или другой секции того же самого изображения не должна упоминаться в том же самом изображении. Само текущее изображение не должно упоминаться никакой записью в RefPicList[0] или RefPicList[1]. Когда текущее изображение RefPicList[i]. Когда текущее изображение упоминается записью в RefPicList[i], для i, равного 0 или 1, индекс записи должен быть меньше, чем NumRefIdxActive[i]. Не должно быть никакой записи LTRP в RefPicList[0] или RefPicList[1], для которой разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics будет набором уникальных изображений, упомянутых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Если текущее изображение не включается в setOfRefPics, количество изображений в setOfRefPics должен быть меньше или равно sps_max_dec_pic_buffering_minus1, в противном случае, количество изображений в setOfRefPics должно быть меньше или равно sps_max_dec_pic_buffering_minus1 + 1. setOfRefPics должен быть одним и тем же для всех секций изображения.
Использование различных битов POC LSB для записей LTRP в списках опорных изображений.
В одном из альтернативных вариантов осуществления раскрытия количество битов, используемых для идентификации долговременных опорных изображений в структуре списка опорных изображений, разрешается иметь различным для списка 0 опорных изображений и списка 1 опорных изображений. Чтобы поддержать этот признак, необходимы следующие изменения:
additional_lt_poc_lsb[i] определяет значение переменной MaxLtPicOrderCntLsb[i], которая используется в процессе декодирования для списка опорных изображений listIdx, равного i, следующим образом: MaxLtPicOrderCntLsb[i] = 2 (log2_max_pic_order_cnt_lsb_minus4+4+additional_lt_poc_lsb[i]). Значение additional_lt_poc_lsb[i] должно быть в диапазоне от 0 до 32-log2_max_pic_order_cnt_lsb_minus4-4, включительно. При его отсутствии, значение additional_lt_poc_lsb[i] принимается равным 0.
poc_lsb_lt [listIdx] [rplsIdx][i] определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb[listIdx] для изображения, упомянутого i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt[listIdx][rplsIdx][i] равняется Log2 (MaxLtPicOrderCntLsb [listIdx]) бит.
Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Использование одного и того же ref_pic_list_sps_flag для списков 0 и 1 опорных изображений.
В одном из альтернативных вариантов осуществления раскрытия вместо использования двух флагов, чтобы указать, получают ли список 0 опорных изображений и список 1 опорных изображений, основываясь на структуре синтаксиса ref_pic_list_struct () в активном SPS, используют один флаг для обоих списков опорных изображений. Такие альтернативные ограничения, которые получают, когда оба списка опорных изображений получают, основываясь на ref_pic_list_struct () в активном SPS, или когда их получают, основываясь на структурах синтаксиса ref_pic_list_struct(), которые непосредственно содержатся в заголовке секции текущего изображения. Чтобы поддержать этот признак, необходимы следующие изменения:
ref_pic_list_sps_flag[i], равный 1, определяет, что списки i опорных изображений для текущего изображения получают, основываясь на одной из структур синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) с listIdx, равным i в активном SPS. ref_pic_list_sps_flag[i], равный 0, определяет, что списки i опорных изображений текущего изображения получают, основываясь на структурах синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag), которые напрямую включены в заголовки секций текущего изображения. Когда num_ref_pic_lists_in_sps[0] или num_ref_pic_lists_in_sps[1] равняется 0, значение ref_pic_list_sps_flag[i] будет равно 0. Когда pic_lists_in_sps [1] равен 0, значение ref_pic_list_sps_flag должно равняться 0.
Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Сообщение старшего значащего бита (Most Significant Bit, MSB) разностного POC для записей долговременных опорных изображений.
В одном из альтернативных вариантов осуществления раскрытия, вместо использования дополнительных битов, чтобы представлять LSB POC записей долговременных опорных изображения в ref_pic_list_struct (), сообщается цикл MSB POC, чтобы дифференцировать долговременные опорные изображения. После сообщения информация о цикле MSB POC сообщается для каждой записи в ref_pic_list_struct (), которая относится к долговременному опорному изображению. Структура синтаксиса ref_pic_list_struct() сообщается не в SPS, а только в заголовках секции. Чтобы поддержать этот признак, необходимы следующие изменения:
Структура синтаксиса ref_pic_list_struct(listIdx, ltrpFlag) может быть представлена в заголовке секции. При ее присутствии в заголовке секции структура синтаксиса ref_pic_list_struct(listIdx, ltrpFlag) определяет listIdx списка опорных изображения для текущего изображения (изображения, содержащего секцию). num_strp_entries [listIdx][rplsIdx] определяет количество записей STRP в структуре синтаксиса ref_pic_list_struct(listIdx, rplsIdx, ltrpFlag). num_ltrp_entries[listIdx][rplsIdx] определяет количество записей LTRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). При отсутствии, значение num_ltrp_entries[listIdx][rplsIdx] принимают равным 0.
Перемену.NumEntriesInList[listIdx][rplsIdx] получают следующим образом:
NumRefPicEntriesInRpl [listIdx] [rplsIdx] = num_strp_entries [listIdx] [rplsIdx] +
num_ltrp_entries [listIdx] [rplsIdx]
15
15
Значение NumRefPicEntries [listIdx] [rplsIdx] должно быть в диапазоне от 0 до sps_max_dec_pic_buffering_minus1, включительно. lt_ref_pic_flag [listIdx] [rplsIdx][i], равный 1, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) является записью LTRP. lt_ref_pic_flag [listIdx] [rplsIdx][i], равный 0, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag) является записью STRP. При его отсутствии, значение lt_ref_pic_flag [listIdx] [rplsIdx][i] принимается равным 0. Требование правильности битового потока состоит в том, чтобы сумма lt_ref_pic_flag [listIdx] [rplsIdx][i] для всех значений i в диапазоне от 0 до NumRefPicEntries [listIdx] [rplsIdx] - 1, включительно, равнялась num_ltrp_entries [listIdx] [rplsIdx]. delta_poc_st [listIdx] [rplsIdx][i], когда i-ая запись является первой записью STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag), определяет разность между значениями подсчета порядка изображения текущего изображения и изображения, упомянутого i-ой записью, или, когда i-ая запись является записью STRP, но не первой записью STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag), определяет разность между значениями подсчета порядка изображения для изображений, упоминаемых i-ой записью, и предыдущей записью STRP в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Значение delta_poc_st [listIdx] [rplsIdx][i] должно быть в диапазоне от -2 до 2 - 1, включительно. poc_lsb_lt [listIdx][rplsIdx][i] определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb для изображения, упомянутого i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt [listIdx] [rplsIdx][i] равна Log2 (MaxLtPicOrderCntLsb) битов. delta_poc_msb_present_flag [listIdx][i], равный 1, определяет, что delta_poc_msb_cycle_lt [listIdx][i] присутствует. delta_poc_msb_present_flag[listIdx][i], равный 0, определяет, что delta_poc_msb_cycle_lt [listIdx][i] не присутствует. Когда num_ltrp_entries [listIdx] больше 0 и в DPB существует больше одного опорного изображения в то время, когда декодируется этот заголовок секции, для которого PicOrderCntVal MaxPicOrderCntLsb по модулю равен poc_lsb_lt [listIdx][i], delta_poc_msb_present_flag [listIdx][i] должно быть равно 1. Если значение не присутствует, значение delta_poc_msb_cycle_lt [listIdx][i] принимают равным 0. delta_poc_msb_cycle_lt [listIdx][i] используют, чтобы определить значение старших значащих битов значения подсчета порядка изображения i-ой записи в структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag). Когда delta_poc_msb_cycle_lt [listIdx][i] не присутствует, принимается, что он равен 0. Изменения в процессе декодирования для подсчета порядка изображения: В любой момент во время процесса декодирования, значения PicOrderCntVal & (MaxLtPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковыми.
Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Альтернативно, семантика delta_poc_msb_cycle_lt [listIdx][i] может быть выражена как разность от дельты, так чтобы построение списка опорных изображений могло быть обновлено следующим образом: списки опорных изображений RefPicList[0] и RefPicList [1] создаются следующим образом:
Требование правильности битового потока состоит в том, чтобы применялись следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList[i] [RplsIdx[i]] не должны быть меньше, чем NumRefIdxActive[i]. Изображение, упомянутое каждой активной записью в RefPicList[0] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId, меньший или равный TemporalId текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве опорного индекса для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: неактивная запись в RefPicList[0] или RefPicList[1] не должна упоминаться в том же самом изображении, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] той же самой секции или другой секции того же самого изображения не должна относиться к одному и тому же изображению. Само текущее изображение не должно упоминаться никакой записью в RefPicList[0] или RefPicList[1]. В RefPicList[0] или RefPicList[1] не должно иметься никакой записи LTRP, для которой разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics является набором уникальных изображений, упомянутых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Количество изображений в setOfRefPics должен быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одинаковым для всех секций изображения.
Каждый STRP идентифицируется его значением PicOrderCntVal. Для каждого LTRP, если он упоминается записью в RefPicList[0] или в RefPicList[1] с delta_poc_msb_present_flag [listIdx][i], равным 1, он идентифицируется его значением PicOrderCntVal, в противном случае, он идентифицируется Log2 (MaxPicOrderCntLsb) LSB его значения PicOrderCntVal.
Альтернатива 1 сообщений MSB разностного РОС для записей долговременных опорных изображений.
Этот вариант осуществления обеспечивает альтернативу для варианта осуществления, описанного в предыдущем разделе. Подобно идее предыдущего раздела, вместо того чтобы использовать дополнительные биты, чтобы представить POC LSB долговременного опорного изображения в ref_pic_list_struct(), сообщается цикл POC MSB, чтобы дифференцировать долговременные опорные изображения. Однако, в этом варианте при таком сообщении информация о цикле POC MSB не сообщается в пределах ref_pic_list_struct (), вместо этого, когда необходима информация о цикле MSB POC, она сообщается в заголовке секции. Структура синтаксиса ref_pic_list_struct() синтаксис strucure может быть сообщена в SPS и в заголовках секций.
delta_poc_msb_present_flag[i] [j], равный 1, определяет, что delta_poc_msb_cycle_lt [j] присутствует. delta_poc_msb_present_flag[i] [j], равный 0, определяет, что delta_poc_msb_cycle_lt [j] отсутствует. Когда NumLtrpEntries[i] больше 0 и для j-ой записи LTRP в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1), в DPB существует более одного опорного изображение в то время, когда декодируется этот заголовок секции, для которого PicOrderCntVal по модулю MaxPicOrderCntLsb равен poc_lsb_lt[i] [rplsIdx] [jj], где jj - индекс записи для записи в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1), которая является j-ой записью LTRP в структуре синтаксиса ref_pic_list_struct(i,rplsIdx,1), delta_poc_msb_present_flag[i] [j] должен равняться 1. Если не присутствует, значение delta_poc_msb_cycle_lt[i] [j] принимается равным 0. delta_poc_msb_cycle_lt[i] [j] используется для определения значения старших значащих битов значения подсчета порядка изображения j-ой записи LTRP в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1). Когда delta_poc_msb_cycle_lt[i] [j] не присутствует, его значение принимается равным 0.
delta_poc_msb_present_flag[i] [j], равный 1, определяет, что delta_poc_msb_cycle_lt [j] присутствует. delta_poc_msb_present_flag[i] [j], равный 0, определяет, что delta_poc_msb_cycle_lt [j] отсутствует. Когда NumLtrpEntries[i] больше 0 и в DPB присутствует более одного опорного изображения в то время, когда декодируется этот заголовок секции, для которого PicOrderCntVal MaxPicOrderCntLsb по модулю равен poc_lsb_lt[i] [rplsIdx] [j], delta_poc_msb_present_flag[i] [j] будет равен 1. При отсутствии значение delta_poc_msb_cycle_lt[i][j] принимается равным 0. delta_poc_msb_cycle_lt[i] [j] используется для определения значения старших значащих битов значения подсчета порядка изображения j-ой записи в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1). Когда delta_poc_msb_cycle_lt[i] [j] отсутствует, его значение принимается равным 0. poc_lsb_lt [listIdx] [rplsIdx][i] определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb MaxPicOrderCntLsb изображения, упомянутого i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx, rplsIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt [listIdx] [rplsIdx][i] равняется Log2 (MaxLtPicOrderCntLsb MaxPicOrderCntLsb) битов.
Изменения в процессе декодирования для подсчета порядка изображения: В любой момент во время процесса декодирования значения PicOrderCntVal & (MaxLtPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковы.
Для варианта 1 заголовка секции списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Альтернативно, для варианта 1 заголовка секции, семантика delta_poc_msb_cycle_lt [listIdx][i] может быть выражена как дельта дельты, так чтобы построение списка опорных изображений могло быть обновлено следующим образом: списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Для варианта 2 заголовка секции списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Альтернативно, для варианта 2 заголовка секции, семантика delta_poc_msb_cycle_lt [listIdx][i] может быть выражена как разностная дельта, так чтобы построение списка опорных изображений могло быть обновлено следующим образом: списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Требованием правильности битового потока является то, чтобы применялись следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList[i] [RplsIdx[i]] должен быть меньше NumRefIdxActive[i]. Изображение, упомянутое каждой активной записью в RefPicList[0] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId меньше или равный TemporalId текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве ссылочного индекса для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: неактивная запись в RefPicList[0] или RefPicList[1] не должна делать ссылку на то самое изображение, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] той же самой секции или другой секции того же самого изображения не должны ссылаться на одно и то же изображение. На само текущее изображение не должно быть ссылки никакой записью в RefPicList[0] или RefPicList[1]. Не должно быть никакой записи LTRP в RefPicList[0] или RefPicList[1], для которых разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics будет набором уникальных изображений, на которые делают ссылки все записи в RefPicList[0] и все записи в RefPicList[1]. Количество изображений в setOfRefPics должен быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одним и тем же для всех секций изображения.
Каждый STRP идентифицируется его значением PicOrderCntVal. Для каждого LTRP, если он упоминается записью в RefPicList[0] или RefPicList[1] с delta_poc_msb_present_flag[i][j], равным 1, оно идентифицируется его значением PicOrderCntVal, в противном случае, оно идентифицируется его Log2 (MaxPicOrderCntLsb) LSB его значения PicOrderCntVal.
Вариант 2 сообщения MSB разностного POC для записей долговременных опорных изображений.
В одном из альтернативных вариантов осуществления раскрытия, описанном в первом варианте осуществления или во втором варианте осуществления раскрытие может быть объединено с вариантами осуществления, описанными выше, и называться "Сообщение MSB разностного POC для записей долговременных опорных изображений" и "Вариант 1 сообщения MSB разностного POC для записей долговременных опорных изображения", соответственно. Варианты раскрытий, которые объединяются, сообщаются с помощью additional_lt_poc_lsb (то есть, из первого варианта осуществления или второго варианта осуществления) и информации о цикле MSB POC (то есть, из варианта осуществления, описанного выше и названного "Сообщение MSB разностного POC для записей долговременных опорных изображений" и "Вариант 1 сообщения MSB разностного POC для записей долговременных опорных изображения"). Один из примеров того, как может быть сделано объединение первого варианта осуществления и варианта осуществления, описанного выше и названного "Вариант 1 сообщения MSB разностного POC для записей долговременных опорных изображения", описывается следующим образом:
delta_poc_msb_present_flag[i] [j], равный 1, определяет, что delta_poc_msb_cycle_lt [j] присутствует. delta_poc_msb_present_flag[i][i], равный 0, определяет, что delta_poc_msb_cycle_lt[i] [j] отсутствует. Когда NumLtrpEntries[i] больше 0 и для j-ой записи LTRP в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1), в DPB существует более одного опорного изображения в то время, когда декодируется заголовок секции, для которого PicOrderCntVal MaxPicOrderLtCntLsb по модулю равен poc_lsb_lt[i] [rplsIdx] [jj], где jj - индекс записи для записи в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1), которая является j-ой записью LTRP в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1), delta_poc_msb_present_flag[i] [j] будет равняться 1. При отсутствии, значение delta_poc_msb_cycle_lt[i] [j] принимается равным 0. delta_poc_msb_cycle_lt[i][j] используют для определения значения старших значащих битов значения подсчета порядка изображения j-ой записи LTRP в структуре синтаксиса ref_pic_list_struct (i, rplsIdx, 1). Когда delta_poc_msb_cycle_lt[i][j] отсутствует, принимается, что оно равно 0.
Изменения в процессе декодирования для подсчета порядка изображения: в любой момент во время процесса декодирования, значения PicOrderCntVal & (MaxLtPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковыми.
Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Альтернативно, семантика delta_poc_msb_cycle_lt [listIdx][i] может быть выражена как дельта дельты, так чтобы построение списка опорных изображений могло быть обновлено следующим образом: списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Требование правильности битового потока состоит в том, чтобы применять следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList[i] [RplsIdx[i]] не должно быть меньше NumRefIdxActive[i]. Изображение, упомянутое каждой активной записью в RefPicList[0] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId меньше или равный TemporalId текущего изображения. Как вариант, дополнительно определяется следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве ссылочного индекса для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: неактивная запись в RefPicList[0] или RefPicList[1] не должна делать ссылку на то же самое изображение, что и любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и запись LTRP в RefPicList[0] или RefPicList[1] той же самой секции или другой секции того же самого изображения не должна обращаться к одному и тому же изображению. Само текущее изображение не должно делать ссылку никакой записью в RefPicList[0] или RefPicList[1]. В RefPicList[0] или RefPicList[1] не должно быть никакой записи LTRP, для которой разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics является уникальных изображений, упомянутых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Количество изображений в setOfRefPics должно быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одним и тем же для всех секций изображения.
Каждое STRP идентифицируется его значением PicOrderCntVal. Для каждого LTRP, если ссылка на него делается записью в RefPicList[0] или в RefPicList[1] с delta_poc_msb_present_flag[i] [j], равным 1, оно идентифицируется его значением PicOrderCntVal, в противном случае, оно идентифицируется его Log2 (MaxLtPicOrderCntLsb) LSB его значения PicOrderCntVal.
Списки опорных изображений в заголовках секций всегда сообщаются с дифференцированием между кратковременными и долговременными опорными изображениями.
Этот раздел описывает другой альтернативный вариант осуществления раскрытия. Описание относится к самому последнему рабочему проекту WD VVC (то есть, описывается только отличие относительно самого последнего WD VVC в JVET-K1001-v1, тогда как тексты из самого последнего WD VVC, которые не упоминаются ниже, применяются такими, как есть). Этот альтернативный вариант осуществления принимается в итоге следующим образом: Структуры списков опорных изображений сообщаются только в заголовках секций. Как кратковременные опорные изображения, так и долговременные опорные изображения идентифицируются их LSB POC, которые могут быть представлены количеством битов, которое отличается от количества битов, используемых для представления POC LSB, сообщаемых в заголовках секций для получения значений POC. Дополнительно, количество битов, используемое, чтобы представить POC LSB для идентификации кратковременных опорных изображений и долговременных опорных изображений может быть различным.
Синтаксис заголовка блока NAL.
Синтез набора параметров последовательности RBSP.
Синтаксис набора параметров изображения RBSP.
Синтаксис заголовка секции.
Синтаксис структуры списка опорных изображений.
Семантика заголовка блока NAL.
forbidden_zero_bit должен равняться 0. nal_unit_type определяет тип структуры данных RBSP, содержавшей в блоке NAL.
Таблица 7-1Коды типов блока NAL и классы типов блока NAL
nal_unit_type
Название nal_unit_type
Содержание блока NAL и структура синтаксиса RBSP
Класс типа блока NAL
0
NON_IRAP_NUT
Кодированный сегмент секции изображения non-IRAPslice_layer_rbsp( )
VCL
1
IRAP_NUT
Кодированная секция изображения IRAPslice_layer_rbsp( )
VCL
2-15
RSV_VCL_NUT
Резервные блоки NAL VCL
VCL
16
SPS_NUT
Набор параметров последовательностиseq_parameter_set_rbsp( )
non-VCL
17
PPS_NUT
Набор параметров изображенияpic_parameter_set_rbsp( )
non-VCL
18
EOS_NUT
Конец последовательности end_of_seq_rbsp( )
non-VCL
19
EOB_NUT
Конец битового потока end_of_bitstream_rbsp( )
non-VCL
20, 21
PREFIX_SEI_NUT SUFFIX_SEI_NUT
Дополнительная улучшающая информация sei_rbsp( )
non-VCL
22-26
RSV_NVCL
Резерв
non-VCL
27-31
UNSPEC
Не определено
non-VCL
nuh_temporal_id_plus1 минус 1 определяет временный идентификатор для блока NAL. Значение nuh_temporal_id_plus1 не должно равняться 0. Переменная TemporalId определяется следующим образом: TemporalId = nuh_temporal_id_plus1 - 1.
Когда nal_unit_type равен IRAP_NUT, кодированная секция принадлежит изображению IRAP и TemporalId должен быть равен 0. Значение TemporalId должно быть одним и тем же для всех блоков NAL VCL блока доступа. Значение TemporalId кодированного изображения или блока доступа равно значению TemporalId для блоков NAL VCL кодированного изображения или блока доступа. Значение TemporalId для блоков NAL non-VCL ограничивается следующим образом: если nal_unit_type равен SPS_NUT, то TemporalId должен быть равен 0 и TemporalId блока доступа, содержащего блок NAL, должен быть равен 0. В противном случае, если nal_unit_type будет равен EOS_NUT или EOB_NUT, то TemporalId должен быть равен 0. В противном случае, TemporalId должен быть больше или равен TemporalId блока доступа, содержащего блок NAL. Когда блок NAL является блоком NAL non-VCL блок, значение TemporalId равняется минимальному значению значений TemporalId всех модулей доступа, к которым применяется блок NAL non-VCL. Когда nal_unit_type равен PPS_NUT, TemporalId может быть больше или равен TemporalId, содержащего блока доступа, поскольку все наборы параметров изображения (picture parameter set, PPS) могут быть включены в начало битового потока, в котором первое кодированное изображение имеет TemporalId, равный 0. Когда nal_unit_type равен PREFIX_SEI_NUT или SUFFIX_SEI_NUT, TemporalId может быть больше или равен TemporalId, содержащему блок доступа, поскольку блок NAL дополнительной улучшающей информации (supplemental enhancement information, SEI) может содержать информацию, которая применяется к субнабору битового потока, который содержит в себе блоки доступа, для которых значения TemporalId больше, чем TemporalId для блока доступа, содержащего блок NAL с SEI. nuh_reserved_zero_7bits должно быть равно '0000000'. Другие значения nuh_reserved_zero_7bits могут быть определены в будущем с помощью ITU-T | ISO/IEC. Декодеры должны игнорировать (то есть, удалять из битового потока и отбрасывать) блоки NAL со значениями nuh_reserved_zero_7bits, не равными '0000000'.
Семантика набора параметров последовательности RBSP.
log2_max_pic_order_cnt_lsb_minus4 определяет значение переменной MaxPicOrderCntLsb, которое используется в процессе декодирования для подсчета порядка изображения следующим образом:
(log2_max_pic_order_cnt_lsb_minus4 + 4)
MaxPicOrderCntLsb = 2
Значение log2_max_pic_order_cnt_lsb_minus4 должно быть в диапазоне от 0 до 12, включительно. sps_max_dec_pic_buffering_minus1 плюс 1 определяет максимальный требуемый размер буфера декодированного изображения для CVS в единицах буферов хранения изображения. Значение sps_max_dec_pic_buffering_minus1 должно быть в диапазоне от 0 до MaxDpbSize-1, включительно, где MaxDpbSize определяется в другом месте. additional_st_poc_lsb определяет значение переменной MaxStPicOrderCntLsb, которое используется в процессе декодирования для списков опорных изображений следующим образом:
(log2_max_pic_order_cnt_lsb_minus4 + 4 + additional_st_poc_lsb)
MaxStPicOrderCntLsb = 2
Значение additional_st_poc_lsb должно быть в диапазоне от 0 до 32-log2_max_pic_order_cnt_lsb_minus4 - 4, включительно. long_term_ref_pics_flag, равный 0, определяет, что никакой LTRP не используется для межкадрового предсказания любого кодированного изображения в CVS. long_term_ref_pics_flag, равный 1, определяет, что LTRP могут использоваться для межкадрового предсказания одного или более кодированных изображений в CVS. additional_lt_poc_lsb определяет значение переменной MaxLtPicOrderCntLsb, которое используется в процессе декодирования для списков опорных изображений следующим образом:
(log2_max_pic_order_cnt_lsb_minus4 + 4 + additional_st_poc_lsb + additional_lt_poc_lsb)
MaxLtPicOrderCntLsb = 2
Значение additional_lt_poc_lsb должно быть в диапазоне от 0 до 32-log2_max_pic_order_cnt_lsb_minus4 - 4 - additional_st_poc_lsb, включительно. Если оно отсутствует, значение additional_lt_poc_lsb принимается равным 0.
Семантика набора параметров изображения RBSP.
num_ref_idx_default_active_minus1[i] плюс 1, когда i равно 0, определяет предполагаемое значение переменной NumRefIdxActive [0] для секций P или B с num_ref_idx_active_override_flag, равным 0, и когда i равно 1, определяет предполагаемое значение NumRefIdxActive [1] для секций B с num_ref_idx_active_override_flag, равным 0. Значение num_ref_idx_default_active_minus1[i] должно быть в диапазоне от 0 до 14, включительно.
Семантика заголовка секции.
Когда значение присутствует, то значение каждого из элементов slice_pic_parameter_set_id и slice_pic_order_cnt_lsb синтаксиса заголовка секции должны быть одинаковы во всех заголовках секций кодированного изображения. slice_type определяет тип кодирования секции согласно таблице 7-3.
Таблица 7-3Связь названия с slice_type
slice_type
Название slice_type
0
B (секция B)
1
P (секция P)
2
I (секция I)
Когда nal_unit_type равен IRAP_NUT, то есть, изображение является изображением IRAP, slice_type должен быть равен 2.
slice_pic_order_cnt_lsb определяет подсчет порядка изображения по модулю MaxPicOrderCntLsb для текущего изображения. Длина элемента синтаксиса slice_pic_order_cnt_lsb равна log2_max_pic_order_cnt_lsb_minus4 + 4 битов. Значение slice_pic_order_cnt_lsb должно быть в диапазоне от 0 до MaxPicOrderCntLsb-1, включительно. Когда slice_pic_order_cnt_lsb отсутствует, slice_pic_order_cnt_lsb принимается равным 0. num_ref_idx_active_override_flag, равный 1, определяет, что элемент синтаксиса num_ref_idx_active_minus1[0] присутствует для секций P и B и что элемент синтаксиса num_ref_idx_active_minus1[1] присутствует для секций B. num_ref_idx_active_override_flag, равный 0, определяет, что элементы синтаксиса num_ref_idx_active_minus1[0] и num_ref_idx_active_minus1[1] отсутствуют. num_ref_idx_active_minus1[i], когда присутствует, определяет значение переменной NumRefIdxActive[i] следующим образом:
NumRef
IdxActive[i] = num_ref_idx_active_minus1[i] + 1
Значение num_ref_idx_active_minus1[i] должно быть в диапазоне от 0 до 14, включительно. Значение NumRefIdxActive[i] - 1 определяет максимальный ссылочный индекс для списка i опорных изображений, который может использоваться для декодирования секции. Когда значение NumRefIdxActive[i] равно 0, для декодирования секции не может использоваться никакой ссылочный индекс списка опорных изображений. Для i, равного 0 или 1, когда текущая секция является секцией B и num_ref_idx_active_override_flag равен 0, NumRefIdxActive[i] принимается равным num_ref_idx_default_active_minus1[i] + 1. Когда текущая секция является секцией P и num_ref_idx_active_override_flag равен 0, NumRefIdxActive [0] принимается равным num_ref_idx_default_active_minus1 [0] + 1. Когда текущая секция является секцией P, NumRefIdxActive [1] принимается равным 0. Когда текущая секция является секцией I, NumRefIdxActive [0] и NumRefIdxActive [1] принимаются равными 0. Альтернативно, для i, равного 0 или 1, после приведенного выше применяется следующее: пусть rplsIdx1 устанавливается равным ref_pic_list_sps_flag[i]? ref_pic_list_idx[i]: num_ref_pic_lists_in_sps[i] и numRpEntries[i] равен num_strp_entries[i] [rplsIdx1] + num_ltrp_entries[i] [rplsIdx1]. Когда NumRefIdxActive[i] больше numRpEntries[i], значение NumRefIdxActive[i] устанавливается равным numRpEntries[i].
Семантика структуры списка опорных изображений.
Структура синтаксиса ref_pic_list_struct (listIdx, ltrpFlag) может присутствовать в заголовке секции. Когда она присутствует в заголовке секции, структура синтаксиса ref_pic_list_struct (listIdx, ltrpFlag) определяет список опорных изображений listIdx текущего изображения (изображения, содержащего секцию). num_strp_entries [listIdx] определяет количество записей STRP в структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag). num_ltrp_entries [listIdx] определяет количество записей LTRP в структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag). Если она отсутствует, значение num_ltrp_entries [listIdx] принимается равным 0. Переменную NumEntriesInList [listIdx] получают следующим образом:
NumEntriesInList [listIdx] = num_strp_entries [listIdx] + num_ltrp_entries [listIdx]
Значение NumEntriesInList [listIdx] должно быть в диапазоне от 0 до sps_max_dec_pic_buffering_minus1, включительно. lt_ref_pic_flag [listIdx][i], равный 1, определяет, что i-ая запись структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag) является записью LTRP. lt_ref_pic_flag [listIdx][i], равный 0, определяет, что i-ая запись в структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag) является записью STRP. При отсутствии, значение lt_ref_pic_flag [listIdx][i] принимают равным 0. Требование правильности битового потока состоит в том, чтобы сумма lt_ref_pic_flag [listIdx][i] для всех значений i в диапазоне от 0 до NumEntriesInList [listIdx] - 1, включительно, была равна num_ltrp_entries [listIdx]. poc_lsb_st [listIdx][i], когда lt_ref_pic_flag[listIdx][i] равно 0, определяет значение подсчета порядка изображения по модулю MaxStPicOrderCntLsb изображения, упоминаемого i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_st [listIdx][i] равна Log2 (MaxStPicOrderCntLsb) битов. poc_lsb_lt [listIdx][i], когда lt_ref_pic_flag [listIdx][i] равен 1, определяет значение подсчета порядка изображения по модулю MaxLtPicOrderCntLsb, на которое делается ссылка i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx, ltrpFlag). Длина элемента синтаксиса poc_lsb_lt [listIdx][i] равна Log2 (MaxLtPicOrderCntLsb) битов.
Далее обсуждается процесс декодирования.
Общий процесс декодирования.
Процесс декодирования для текущего изображения CurrPic действует следующим образом: ниже описывается декодирование блоков NAL. Представленные ниже процессы определяют следующие процессы декодирования, использующие элементы синтаксиса на уровне заголовка секции и выше: определяются переменные и функции, связанные с подсчетом порядка изображения. Это необходимо проделывать только для первой секции изображения. В начале процесса декодирования для каждой секции изображения non-IRAP процесс декодирования для построения списков опорных изображений проделывается для определения списка 0 опорных изображений (RefPicList[0]) и списка 1 опорных изображений (RefPicList[1]). Проделывается процесс декодирования для маркировки опорных изображений, при котором опорные изображения могут быть маркированы как "неиспользуемое для ссылки" или "используемое для долговременной ссылки". Это должно быть проделано только для первой секции изображения. Проделываются процессы декодирования для кодирования древовидных блоков, масштабирования, преобразования, циклической фильтрации и т.д. После того, как все секции текущего изображения были декодированы, текущее декодированное маркируется как "используемое для кратковременной ссылки".
Процесс декодирования блока NAL.
Вводами для этого процесса являются блоки NAL текущего изображения и связанные с ними блоки NAL non-VCL. Результатами этого процесса являются проанализированные структуры синтаксиса RBSP, инкапсулировавшие внутри блоков NAL. Процесс декодирования для каждого блока NAL извлекает структуру синтаксиса RBSP из блока NAL и затем анализирует структуру синтаксиса RBSP.
Процесс декодирования секции.
Процесс декодирования подсчета порядка изображения.
Результатом этого процесса является PicOrderCntVal, подсчет порядка изображения для текущего изображения. Подсчеты порядка изображения используются для идентификации изображений, для получения параметров движения в режиме слияния и предсказания вектора движения и для проверки правильности работы декодера. Каждое кодированное изображение связывается с переменной подсчета порядка изображения, обозначенной как PicOrderCntVal. Когда текущее изображение не является изображением IRAP, переменные prevPicOrderCntLsb и prevPicOrderCntMsb получают следующим образом: пусть prevTid0Pic является предыдущим изображением в порядке декодирования, который имеет TemporalId, равный 0. Переменная prevPicOrderCntLsb устанавливается равной slice_pic_order_cnt_lsb prevTid0Pic. Переменная prevPicOrderCntMsb устанавливается равной PicOrderCntMsb prevTid0Pic. Переменную PicOrderCntMsb текущего изображения получают следующим образом: если текущее изображение является изображением IRAP, PicOrderCntMsb устанавливается равной 0. В противном случае, PicOrderCntMsb получают следующим образом:
PicOrderCntVal получают следующим образом:
PicOrderCntVal = PicOrderCntMsb + slice_pic_order_cnt_lsb
Все изображения IRAP будут иметь PicOrderCntVal, равное 0, так как slice_pic_order_cnt_lsb принимается равным 0 для изображений IRAP, и prevPicOrderCntLsb и prevPicOrderCntMsb оба устанавливаются равными 0. Значение PicOrderCntVal должно быть в диапазоне от -231 до 231 - 1, включительно. В одном CVS значения PicOrderCntVal для любых двух кодированных изображений не должны быть одинаковы. В любой момент во время процесса декодирования, значения PicOrderCntVal & (MaxStPicOrderCntLsb - 1) для любых двух кратковременных опорных изображений в DPB не должны быть одинаковы. В любой момент во время процесса декодирования значения PicOrderCntVal & (MaxLtPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковы.
Функция PicOrderCnt (picX) определяется следующим образом:
PicOrderCnt (picX) = PicOrderCntVal изображения picX
Функция DiffPicOrderCnt (picA, picB) определяется следующим образом:
DiffPicOrderCnt (picA, picB) = PicOrderCnt (picA) - PicOrderCnt (picB)
15
15
Битовый поток не должен содержать данные, которые приводят к значениям DiffPicOrderCnt (picA, picB) используемым в процессе декодирования, которые не находятся в диапазоне jn -2 lj 2 - 1, включительно. Пусть X является текущим изображением и Y и Z - два других изображения в одном и том же CVS, Y и Z рассматриваются как находящиеся в одном и том же направлении порядка вывода от X, когда DiffPicOrderCnt (X, Y) и DiffPicOrderCnt (X, Z) оба положительны или оба - отрицательны.
Процесс декодирования для построения списков опорных изображений.
Этот процесс используют в начале процесса декодирования для каждой секции изображения non-IRAP. Опорные изображения адресуются через ссылочные индексы. Ссылочный индекс является индексом в списке опорных изображений. При декодировании секции I для декодирования данных секции никакой список опорных изображений не используется. При декодировании секции P для декодирования данных секции используется только список 0 опорных изображений (то есть, RefPicList [0]). При декодировании секции B для декодирования данных секции используются как список 0 опорных изображений, так и список 1 опорных изображений (то есть, RefPicList [1]). В начале процесса декодирования для каждой секции изображения non-IRAP получают списки опорных изображений RefPicList [0] и RefPicList [1]. Списки опорных изображений используются при маркировке опорных изображений или при декодировании данных секции. Для секции I изображения non-IRAP, которая не является первой секцией изображения, RefPicList[0] и RefPicList[1] могут быть получены для цели проверки правильности битового потока, но их получение не требуется для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Для секции P, которая не является первой секцией изображения, RefPicList[1] может быть получен для цели проверки правильности битового потока, но его получение не требуется для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования.
Списки опорных изображений RefPicList[0] и RefPicList[1] создаются следующим образом:
Для каждого i, равного 0 или 1, применяется следующее:
Первые записи NumRefIdxActive[i] в RefPicList[i] упоминаются как активные записи в RefPicList[i], а другие записи в RefPicList[i] упоминаются как неактивные записи в RefPicList[i]. Каждая запись в RefPicList[i] [j] для j в диапазоне от 0 до NumEntriesInList[i] - 1, включительно, упоминается как запись STRP, если lt_ref_pic_flag[i] [j] равен 0, и как запись LTRP в противном случае. Возможно, что конкретное изображение упоминается как записью в RefPicList[0], так и записью в RefPicList[1]. Также возможно, что на конкретное изображение делается ссылка более чем одной записью в RefPicList [0] или более чем одной записью в RefPicList[1]. Активные записи в RefPicList[0] и активные записи в RefPicList[1] все вместе ссылаются на все опорные изображения, которые могут использоваться для межкадрового предсказания текущего изображения и одного или более изображений, которые следуют за текущим изображением в порядке декодирования. Неактивные записи в RefPicList[0] и неактивные записи в RefPicList [1] все вместе ссылаются на все опорные изображения, которые не используются для межкадрового предсказания текущего изображения, но могут использоваться при межкадровом предсказании для одного или более изображений, следующих за текущим изображением в порядке декодирования. В RefPicList[0] или RefPicList[1] могут присутствовать одна или более записей, которые равны "нет опорного изображения", потому что соответствующие изображения не присутствуют в DPB. Каждая неактивная запись в RefPicList[0] или RefPicList[0], которая равна "нет опорного изображения", должна игнорироваться. Неумышленная потеря изображения должна быть принята для каждой активной записи в RefPicList[0] или RefPicList[1], которая равна "нет опорного изображения".
Требование правильности битового потока состоит в том, чтобы применить следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList[i] не должен быть меньше NumRefIdxActive[i]. Изображение, на которое ссылается каждая активная запись в RefPicList [0] или RefPicList [1], должно присутствовать в DPB и должно иметь TemporalId меньше или равный TemporalId текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: индекс записи любой неактивной записи в RefPicList [0] или RefPicList [1] не должен использоваться в качестве ссылочного индекса для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: на неактивную запись в RefPicList[0] или RefPicList[1] не должна делаться ссылка в том же самом изображении, что любая другая запись в RefPicList[0] или RefPicList[1]. Запись STRP в RefPicList[0] или RefPicList[1] секции изображения и на запись LTRP в RefPicList[0] или RefPicList[1] одной и той же секции или другой секции одного и того же изображения не должна ссылаться на одно и то же изображение. На само текущее изображение не должна делаться ссылка никакой записью в RefPicList[0] или RefPicList[1]. Не должно быть никакой записи LTRP в RefPicList [0] или RefPicList [1], для которой разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упомянутого записью, больше или равна 224. Пусть setOfRefPics является набором уникальных изображений, упомянутых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Количество изображений в setOfRefPics должно быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одним и тем же для всех секций изображения.
Процесс декодирования для маркировки опорного изображения.
Этот процесс проделывается один раз для каждого изображения после декодирования заголовка секции и процесса декодирования для построения списка опорных изображений для секции, но до декодирования данных секции. Этот процесс может давать в результате одно или более опорных изображений в DPB, маркируемых как "неиспользуемое для ссылки" или как "используемое для долговременной ссылки". Декодированное изображение в DPB может маркироваться как "неиспользуемое для ссылки", "используемое для кратковременной ссылки” или “используемое для долговременной ссылки”, но только как одно из этих трех в любой заданный момент во время работы процесса декодирования. Назначение одной из этих маркировок изображению неявно удаляет другие такие маркировки, если они применяются. Когда на изображение делается ссылка как на маркированное "используемое для ссылки", это все вместе относится к изображению, маркированному как "используемое для кратковременной ссылки" или как "используемое для долговременной ссылки" (но не обеими маркировками). Когда текущее изображение является изображением IRAP, все опорные изображения, присутствующие в настоящий момент в DPB (если имеются), маркируются как "неиспользуемые для ссылки". STRP идентифицируются битами LSB Log2 (MaxStPicOrderCntLsb) их значений PicOrderCntVal. LTRP идентифицируются битами LSB Log2 (MaxLtPicOrderCntLsb) их значений PicOrderCntVal.
Здесь применяется следующее: для каждой записи LTRP в RefPicList[0] или RefPicList[1], когда упомянутым изображением является STRP, изображение маркируется как "используемое для долговременной ссылки". Каждое опорное изображение в DPB, на которое не делается ссылка никакой записью в RefPicList[0] или RefPicList[1], маркируется "неиспользуемое для ссылки".
Списки опорных изображений в заголовках секций всегда сообщаются без дифференцирования между кратковременными и долговременными опорными изображениями.
Этот раздел описывает другой альтернативный вариант осуществления раскрытия. Описание связано с самой последней версией WD VVC (то есть, описывается только отличие относительно самого последнего WD VVC в JVET-K1001-v1, тогда как тексты из самого последнего WD VVC, которые не упоминаются ниже, применяются такими, какие они есть). Этот альтернативный вариант осуществления принимается в итоге следующим образом: структуры списков опорных изображений сообщаются только в заголовках секций. Между кратковременными и долговременными опорными изображениями не делается никакого различия. Все опорные изображения называются только опорными изображениями. Опорные изображения идентифицируются их битами LSB POC, которые могут быть представлены любым количеством битов, которое отличается от количества битов, используемых для представления битов LSB POC, сообщаемых в заголовках секций для получения значений POC.
Сокращения. Применяется текст, содержащийся в пункте 4 WD VVC.
Синтаксис заголовка блока NAL.
Синтаксис набора параметров последовательности RBSP.
Синтаксис набора параметров изображения RBSP.
Синтаксис заголовка секции.
Синтаксис структуры списка опорных изображений.
Семантика заголовка блока NAL.
forbidden_zero_bit должен быть равен 0. nal_unit_type определяет тип структуры данных RBSP, содержащейся в блоке NAL.
Таблица 7-1Коды типов блока NAL и классы типов блока NAL
nal_unit_type
Название nal_unit_type
Контент блока NAL и структура синтаксиса RBSP
Класс типа блока NAL
0
NON_IRAP_NUT
Кодированный сегмент секции изображения non-IRAPslice_layer_rbsp( )
VCL
1
IRAP_NUT
Кодированная секция изображения IRAPslice_layer_rbsp( )
VCL
2-15
RSV_VCL_NUT
Резервные блоки NAL VCL
VCL
16
SPS_NUT
Набор параметров последовательности seq_parameter_set_rbsp( )
non-VCL
17
PPS_NUT
Набор параметров изображения pic_parameter_set_rbsp( )
non-VCL
18
EOS_NUT
Конец последовательностиend_of_seq_rbsp( )
non-VCL
19
EOB_NUT
Конец последовательности end_of_bitstream_rbsp( )
non-VCL
20, 21
PREFIX_SEI_NUT SUFFIX_SEI_NUT
Дополнительная улучшающая информация sei_rbsp( )
non-VCL
22-26
RSV_NVCL
Резервировано
non-VCL
27-31
UNSPEC
Не определено
non-VCL
nuh_temporal_id_plus1 минус 1 определяет временный идентификатор для блока NAL. Значение nuh_temporal_id_plus1 не должно быть равным 0. Переменная TemporalId определяется следующим образом:
TemporalId = nuh_temporal_id_plus1 - 1
Когда nal_unit_type равен IRAP_NUT, кодированная секция принадлежит изображению IRAP, TemporalId должен быть равным 0. Значение TemporalId должно быть одинаковым для всех блоков NAL блока доступа. Значение TemporalId кодированного изображения или блока доступа является значением TemporalId блоков NAL VCL кодированного изображения или блока доступа. Значение TemporalId для блоков NAL non-VCL ограничивается следующим образом:
Если nal_unit_type равен SPS_NUT, то TemporalId должен быть равен 0, и TemporalId блока доступа, содержащего блок NAL, должен быть равен 0. В противном случае, если nal_unit_type будет равен EOS_NUT или EOB_NUT, то TemporalId должен быть равен 0. В противном случае, TemporalId должен быть больше или равен TemporalId блока доступа, содержащего блок NAL. Когда блок NAL является блоком NAL none-VCL, значение TemporalId равно минимальному значению значений TemporalId всех блоков доступа, к которым применяется блок NAL non-VCL. Когда nal_unit_type равен PPS_NUT, TemporalId может быть больше или равен TemporalId, содержащего блок доступа, поскольку все наборы параметров изображения (picture parameter set, PPS) могут содержаться в начале битового потока, в котором первое кодированное изображение имеет TemporalId, равный 0. Когда nal_unit_type равен PREFIX_SEI_NUT или SUFFIX_SEI_NUT, TemporalId может быть больше или равен TemporalId, содержащего блок доступа, поскольку блок NAL SEI может содержать информацию, которая применяется к поднабору битового потока, содержащего блоки доступа, для которых значения TemporalId больше, чем TemporalId блока доступа, содержащего блок NAL SEI. nuh_reserved_zero_7bits должно равняться '0000000'. Другие значения nuh_reserved_zero_7bits могут быть определены в будущем организациями ITU-T | ISO/IEC. Декодеры должны игнорировать (то есть, удалять из битового потока и отбрасывать) блоки NAL со значениями nuh_reserved_zero_7bits, не равными '0000000'.
Семантика набора параметров последовательности RBSP.
log2_max_pic_order_cnt_lsb_minus4 определяет значение переменной MaxPicOrderCntLsb, которая используется в процессе декодирования для подсчета порядка изображения следующим образом:
(log2_max_pic_order_cnt_lsb_minus4 + 4)
MaxPicOrderCntLsb = 2
Значение log2_max_pic_order_cnt_lsb_minus4 должно быть в диапазоне от 0 до 12, включительно. sps_max_dec_pic_buffering_minus1 плюс 1 определяет максимальный требуемый размер буфера декодированного изображения для CVS в единицах буферов хранения изображения. Значение sps_max_dec_pic_buffering_minus1 должно быть в диапазоне от 0 до MaxDpbSize - 1, включительно, где MaxDpbSize определяется в другом месте. additional_ref_poc_lsb определяет значение переменной MaxRefPicOrderCntLsb, которое используется в процессе декодирования для списков опорных изображений следующим образом:
(log2_max_pic_order_cnt_lsb_minus4 + 4 + additional_ref_poc_lsb)
MaxRefPicOrderCntLsb = 2
Значение additional_ref_poc_lsb должно быть в диапазоне от 0 до 32 - log2_max_pic_order_cnt_lsb_minus4 - 4, включительно.
Семантика набора параметров изображения RBSP.
num_ref_idx_default_active_minus1[i] плюс 1, когда i равно 0, определяет предполагаемое значение переменной NumRefIdxActive[0] для секций P или B с num_ref_idx_active_override_flag, равным 0, и, когда i равно 1, определяет предполагаемое значение NumRefIdxActive [1] для секций B с num_ref_idx_active_override_flag, равным 0. Значение num_ref_idx_default_active_minus1[i] должно быть в диапазоне от 0 до 14, включительно.
Семантика заголовка секции.
Когда присутствует, значение каждого из элементов синтаксиса заголовка секции slice_pic_parameter_set_id и slice_pic_order_cnt_lsb должны быть одинаковы самым во всех заголовках секций кодированного изображения. … slice_type определяет тип кодирования секции в соответствии с таблицей 7-3.
Таблица 7-3Связь названия с slice_type
slice_type
Название slice_type
0
B (секция B)
1
P (секция P)
2
I (секция I)
Когда nal_unit_type равен IRAP_NUT, то есть, изображение является изображением IRAP, slice_type должен быть равен 2. … slice_pic_order_cnt_lsb определяет подсчет порядка изображения по модулю MaxPicOrderCntLsb для текущего изображения. Длина элемента синтаксиса slice_pic_order_cnt_lsb равна log2_max_pic_order_cnt_lsb_minus4 + 4 бита. Значение slice_pic_order_cnt_lsb должно быть в диапазоне от 0 до MaxPicOrderCntLsb - 1, включительно. Когда slice_pic_order_cnt_lsb отсутствует, slice_pic_order_cnt_lsb принимается равным 0. num_ref_idx_active_override_flag, равный 1, определяет, что элемент синтаксиса num_ref_idx_active_minus1[0] присутствует для секций P и B и что элемент синтаксиса num_ref_idx_active_minus1[1] присутствует для секций B. num_ref_idx_active_override_flag, равный 0, определяет, что элементы синтаксиса num_ref_idx_active_minus1[0] и num_ref_idx_active_minus1[1] отсутствуют. num_ref_idx_active_minus1[i], когда присутствует, определяет значение переменной NumRefIdxActive[i] следующим образом:
NumRefIdxActive[i] = num_ref_idx_active_minus1[i] + 1
Значение num_ref_idx_active_minus1[i] должно быть в диапазоне от 0 до 14, включительно. Значение NumRefIdxActive[i], - 1 определяет максимальный ссылочный индекс для списка i опорных изображений, который может использоваться для декодирования секции. Когда значение NumRefIdxActive[i] равно 0, никакой ссылочный индекс для списка i опорных изображений не может использоваться для декодирования секции. Для i, равного 0 или 1, когда текущая секция является секцией B и num_ref_idx_active_override_flag равен 0, NumRefIdxActive[i] принимают равным num_ref_idx_default_active_minus1[i] + 1. Когда текущая секция является секцией P и num_ref_idx_active_override_flag равен 0, NumRefIdxActive[0] принимают равным num_ref_idx_default_active_minus1 [0] + 1. Когда текущая секция является секцией P, NumRefIdxActive[1] принимают равным 0. Когда текущая секция является секцией i, NumRefIdxActive[0] и NumRefIdxActive[1] принимают равными 0. Альтернативно, для i, равного 0 или 1, после вышеупомянутого применяется следующее: пусть rplsIdx1 устанавливается равным ref_pic_list_sps_flag[i]? ref_pic_list_idx[i]: num_ref_pic_lists_in_sps[i] и numRpEntries[i] равняется num_strp_entries[i] [rplsIdx1] + num_ltrp_entries[i] [rplsIdx1]. Когда NumRefIdxActive[i] больше numRpEntries[i], значение NumRefIdxActive[i] устанавливают равным numRpEntries[i].
Семантика структуры списка опорных изображений.
Структура синтаксиса ref_pic_list_struct (listIdx) может присутствовать в заголовке секции. Когда она присутствует в заголовке секции, структура синтаксиса ref_pic_list_struct (listIdx) определяет listIdx списка опорных изображений текущего изображения (изображения, содержащего секцию). num_ref_entries [listIdx] определяет количество записей в структуре синтаксиса ref_pic_list_struct (listIdx). Переменную NumEntriesInList [listIdx] получают следующим образом:
NumRefPicEntriesInRpl [listIdx] = num_ref_entries [listIdx]
Значение NumRefPicEntries [listIdx] должно быть в диапазоне от 0 до sps_max_dec_pic_buffering_minus1, включительно. poc_ref_lsb [listIdx][i] определяет значение подсчета порядка изображения по модулю MaxRefPicOrderCntLsb для изображения, упомянутого i-ой записью в структуре синтаксиса ref_pic_list_struct (listIdx). Длина элемента синтаксиса poc_ref_lsb [listIdx][i] равняется Log2 (MaxRefPicOrderCntLsb) битов.
Далее обсуждается процесс декодирования.
Общий процесс декодирования.
Процесс декодирования работает следующим образом для текущего изображения CurrPic: декодирование блоков NAL описывается ниже. Процессы, представленные ниже, определяют следующие процессы декодирования, используя элементы синтаксиса на уровне заголовка секции и выше: определяются переменные и функции, связанные с подсчетом порядка изображения. Это должно быть проделано только для первой секции изображения. В начале процесса декодирования для каждой секции изображения non-IRAP процесс декодирования для списков опорных изображений выполняется для получения списка 0 опорных изображений (RefPicList[0]) и списка опорных изображений 1 (RefPicList[1]). Для маркировки опорных изображений выполняется процесс декодирования, в котором опорные изображения могут маркироваться как "неиспользуемые для ссылки". Это должно проделываться только для первой секции изображения. Выполняются процессы декодирования для кодирования древовидных блоков, масштабирования, преобразования, циклической фильтрации и т.д. После того, как все секции текущего изображения декодированы, текущее декодированное изображение маркируется как "используемое для ссылки".
Процесс декодирования блока NAL.
На входе в этот процесс присутствуют блоки NAL текущего изображения и связанного с ними блоки NAL non-VCL. Результатами этого процесса являются проанализированные структуры синтаксиса RBSP, инкапсулированные внутри блоков NAL. Процесс декодирования для каждого блока NAL извлекает структуру синтаксиса RBSP из блока NAL и затем анализирует структуру синтаксиса RBSP.
Процесс декодирования секции.
Процесс декодирования для подсчета порядка изображения.
Результатом этого процесса является PicOrderCntVal, подсчет порядка изображения для текущего изображения. Подсчеты порядка изображения используются для идентификации изображений, для получения параметров движения в режиме слияния и предсказания вектора движения и для проверки правильности работы декодера. Каждое кодированное изображение связывается с переменной подсчета порядка изображения, обозначенной как PicOrderCntVal. Когда текущее изображение не является изображением IRAP, переменные prevPicOrderCntLsb и prevPicOrderCntMsb получают следующим образом: пусть prevTid0Pic является предыдущим изображением в порядке декодирования, который имеет TemporalId, равный 0. Переменная prevPicOrderCntLsb устанавливается равной slice_pic_order_cnt_lsb prevTid0Pic. Переменная prevPicOrderCntMsb устанавливается равной PicOrderCntMsb prevTid0Pic. Переменную PicOrderCntMsb текущего изображения получают следующим образом: если текущее изображение является изображением IRAP, PicOrderCntMsb устанавливается равным 0. В противном случае, PicOrderCntMsb получают следующим образом:
PicOrderCntVal получают следующим образом:
PicOrderCntVal = PicOrderCntMsb + slice_pic_order_cnt_lsb
Все изображения IRAP будут иметь PicOrderCntVal равный 0, так как slice_pic_order_cnt_lsb принимается равным 0 для изображений IRAP и prevPicOrderCntLsb и prevPicOrderCntMsb оба устанавливаются равными 0. Значение PicOrderCntVal должно быть в диапазоне от -231 до 231 - 1, включительно. В одном CVS значения PicOrderCntVal для любых двух кодированных изображений не должны быть одинаковы. В любой момент во время процесса декодирования значения PicOrderCntVal & (MaxRefPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковы.
Функция PicOrderCnt (picX) определяется следующим образом:
PicOrderCnt (picX) = PicOrderCntVal для изображения picX
Функция DiffPicOrderCnt (picA, picB) определяется следующим образом:
DiffPicOrderCnt (picA, picB) = PicOrderCnt (picA) - PicOrderCnt (picB)
Битовый поток не должен содержать данные, результатом которых являются значения DiffPicOrderCnt (picA, picB), используемые в процессе декодирования, которые не находятся в диапазоне от -215 до 215 - 1, включительно. Пусть X будет текущим изображением и Y и Z будут двумя другими изображениями в том же самом CVS, тогда Y и Z рассматриваются в одном том же направлении порядка вывода от X, когда оба DiffPicOrderCnt (X, Y) и DiffPicOrderCnt (X, Z) положительны или оба отрицательны.
Процесс декодирования для построения списка опорных изображений.
Этот процесс используется в начале процесса декодирования для каждой секции изображения non-IRAP. Опорные изображения адресуются через ссылочные индексы. Ссылочный индекс является индексом в списке опорных изображений. Когда декодируют секцию I, при декодировании данных секции никакой список опорных изображений не используется. Когда декодируется секция P, при декодировании данных секции используется только список 0 опорных изображений (то есть, RefPicList[0]). Когда декодируется секция B, при декодировании данных секции используются оба списка опорных изображений, список 0 опорных изображений и список 1 опорных изображений (то есть, RefPicList [1]). В начале процесса декодирования для каждой секции изображения non-IRAP получают списки опорных изображений RefPicList[0] и RefPicList[1]. Списки опорных изображений используются при маркировке опорных изображений или при декодировании данных секции. Для секции i изображения non-IRAP, которая не является первой секцией изображения, списки RefPicList[0] и RefPicList[1] могут быть получены для цели проверки правильности битового потока, но их получение не является обязательным для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Для секции P, которая не является первой секцией изображения, RefPicList[1] может быть получен для цели проверки правильности битового потока, но его получение не является обязательным для декодирования текущего изображения или изображений, следующих после текущего изображения в порядке декодирования. Списки опорных изображений RefPicList[0] и RefPicList[1] получают следующим образом:
Для каждого i, равного 0 или 1, первые записи NumRefIdxActive[i] в RefPicList[i] упоминаются как активные записи в RefPicList[i], а другие записи в RefPicList[i] упоминаются как неактивные записи в RefPicList[i]. Возможно, что на конкретное изображение ссылаются как записью в RefPicList[0], так и записью в RefPicList[1]. Также возможно, что конкретное изображение упоминается более чем одной записью в RefPicList[0] или более чем одной записью в RefPicList [1]. Активные записи в RefPicList[0] и активные записи в RefPicList[1] все вместе относятся ко всем опорным изображениям, которые могут использоваться для межкадрового предсказания текущего изображения и одного или более изображений, которые следуют за текущим изображением в порядке декодирования. Неактивные записи в RefPicList[0] и неактивные записи в RefPicList[1] все вместе относятся ко всем опорным изображениям, которые не используются для межкадрового предсказания, но могут использоваться при межкадровом предсказании для одного или более изображений, следующих за текущим изображением в порядке декодирования. В RefPicList[0] или RefPicList[1] могут существовать одна или более записей, которые не равны "нет опорного изображения", потому что соответствующие изображения не присутствуют в DPB. Каждая неактивная запись в RefPicList[0] или RefPicList[1], которая не равна "нет опорного изображения", должна игнорироваться. Неумышленная потеря изображения должна приниматься для каждой активной записи в RefPicList[0] или RefPicList[1], как равная "нет опорного изображения".
Требование правильности битового потока состоит в том, чтобы применить следующие ограничения: для каждого i, равного 0 или 1, NumEntriesInList[i] не должен быть меньше NumRefIdxActive[i]. Изображение, на которое ссылается каждая активная запись в RefPicList[0] или RefPicList[1], должно присутствовать в DPB и должно иметь TemporalId меньше или равный TemporalId текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: индекс записи любой неактивной записи в RefPicList[0] или RefPicList[1] не должен использоваться в качестве ссылочного индекса для декодирования текущего изображения. Как вариант, дополнительно может быть определено следующее ограничение: на неактивную запись в RefPicList[0] или RefPicList[1] не должна делаться ссылка в том же самом изображении, что любая другая запись в RefPicList[0] или RefPicList[1]. На само текущее изображение не должна делаться ссылка никакой записью в RefPicList[0] или RefPicList[1]. Не должно быть никакой записи в RefPicList[0] или RefPicList[1], для которой разность между PicOrderCntVal текущего изображения и PicOrderCntVal изображения, упоминаемого записью, больше или равна 224. Пусть setOfRefPics является набором уникальных изображений, упоминаемых всеми записями в RefPicList[0] и всеми записями в RefPicList[1]. Количество изображений в setOfRefPics должно быть меньше или равно sps_max_dec_pic_buffering_minus1 и setOfRefPics должно быть одним и тем же для всех секций изображения.
Процесс декодирования для маркировки опорного изображения.
Этот процесс проделывается один раз для каждого изображения после декодирования заголовка секции и процесса декодирования для построения списка опорных изображений для секции, но перед декодированием данных секции. Этот процесс может давать в результате одно или более опорных изображений в DPB, маркируемых как "неиспользуемое для ссылки". Декодированное изображение в DPB может быть маркировано как "неиспользуемое для ссылки" или "используемое для ссылки", но только как одна из этих двух маркировок в любой заданный момент во время работы процесса декодирования. Назначение одной из этих маркировок изображению неявно удаляет другие из этих маркировок, когда они применяются. Когда текущее изображение является изображением IRAP, все опорные изображения, присутствующие в настоящий момент в DPB (если присутствуют) маркируются как "неиспользуемые для ссылки". Опорные изображения в DPB идентифицируются битами Log2 (MaxRefPicOrderCntLsb) LSB их значений PicOrderCntVal. Каждое опорное изображение в DPB, который не упоминается никакой записью в RefPicList[0] или в RefPicList[1], маркируется как "неиспользуемое для ссылки".
Еще один альтернативный вариант осуществления.
Этот раздел описывает альтернативный вариант осуществления подхода, описанного выше, который называется "списки опорных изображений в заголовках секций всегда сообщаются с дифференцированием между кратковременными и долговременными опорными изображениями" (always signaling of reference picture lists in slice headers with differentiation between short-term and long-term reference pictures). В этом альтернативном варианте осуществления, цикл MSB POC может сообщаться в заголовке секции для каждой записи LTRP, так же как в HEVC, или как в подходах, описанных выше, и последующее ограничение удаляется: в любой момент во время процесса декодирования значения PicOrderCntVal & (MaxLtPicOrderCntLsb - 1) для любых двух опорных изображений в DPB не должны быть одинаковы.
На фиг. 7 схематично представлено устройство 700 видеокодирования (например, видеокодер 20 или видеодекодер 30), соответствующее варианту осуществления раскрытия. Устройство 700 видеокодирования пригодно для реализации раскрытые варианты осуществления, как описано здесь. Устройство видеокодирования 700 содержит входные порты 710 и приемные блоки (Rx) 720 для приема данных; процессор, логическое устройство или центральный процессор (central processing unit, CPU) 730 для обработки данных; передающие блоки (Tx) 740 и выходные порты 750 для передачи данных; и память 760 для хранения данных. Устройство 700 видеокодирования может также содержать оптоэлектронные компоненты (optical-to-electrical, OE) и электроннооптические компоненты (electrical-to-optical, EO), связанные с входными портами 710, приемными блоками 720, передающими блоками 740 и выходными портами 750 для вывода или ввода оптических или электрических сигналов.
Процессор 730 реализуется аппаратно и программно. Процессор 730 может быть реализован как одна или более микросхем CPU, одно или более ядер (например, многоядерный процессор), программируемые логические интегральные схемы (field-programmable gate array, FPGA), специализированные прикладные интегральные схемы (application specific integrated circuit, ASIC) и цифровые сигнальные процессоры (digital signal processor, DSP). Процессор 730 осуществляет связь с портами 710 ввода, приемными блоками 720, передающими блоками 740, портами 750 вывода и памятью 760. Процессор 730 содержит блок 770 кодирования. Блок 770 кодирования реализует раскрытые варианты осуществления, описанные выше. Например, блок 770 кодирования реализует, обрабатывает, подготавливает или обеспечивает различные сетевые функции. Использование блока 770 кодирования поэтому обеспечивает существенное улучшение функциональных возможностей устройства 700 видеокодирования и производит преобразование устройства 700 видеокодирования в различные состояния. Альтернативно, блок 770 кодирования реализуется как команды, хранящиеся в памяти 760 и исполняемые процессором 730.
Устройство 700 видеокодирования может также содержать устройства 780 ввода и/или вывода для передачи данных пользователю и от пользователя. Устройства 780 ввода-вывода могут содержать устройства вывода, такие как дисплей для отображения видеоданных, громкоговорители для вывода аудиоданных и т.д. Устройства 780 ввода-вывода могут также содержать устройства ввода данных, такие как клавиатура, мышь, шаровой манипулятор и т.д., и/или соответствующие интерфейсы для взаимодействия с такими устройствами ввода.
Память 760 содержит один или более дисков, лентопротяжные устройства и твердотельные диски и может использоваться в качестве дополнительного запоминающего устройства, чтобы хранить программы, когда такие программы выбираются для исполнения, и для хранения команд и данных, которые считываются во время исполнения программы. Память 760 может быть энергозависимой и/или энергонезависимой и может быть постоянным запоминающим устройством (read-only memory, ROM), оперативной памятью (random access memory, RAM), троичной ассоциативной памятью с адресацией по содержимому (ternary content-addressable memory,TCAM), и/или статическим оперативным запоминающим устройством (static random-access memory, SRAM).
На фиг. 8 представлена схема варианта осуществления средства 800 кодирования. В варианте осуществления средство 800 кодирования реализуется в устройстве 802 видеокодирования (например, в видеокодере 20 или в видеодекодере 30). Устройство 802 видеокодирования содержит приемное средство 801. Приемное средство 801 выполнено с возможностью приема изображения для кодирования или приема битового поток для декодирования. Устройство 802 видеокодирования содержит передающее средство 807, связанное с приемным средством 801. Передающее средство 807 выполнено с возможностью передачи битового потока декодеру или передачи декодированного изображения на средство отображения (например, на одно из устройств 780 ввода-вывода).
Устройство 802 видеокодирования содержит средство 803 хранения информации. Средство 803 хранения информации связано по меньшей мере с приемным средством 801 или передающим средством 807. Средство 803 хранения информации выполнено с возможностью хранения команд. Устройство 802 видеокодирования также содержит средство 805 обработки. Средство 805 обработки, связывается со средством 803 хранения информации. Средство 805 обработки выполнено с возможностью исполнения команд, хранящихся в средстве 803 хранения информации, чтобы выполнять раскрытые здесь способы.
Хотя в настоящем раскрытии были представлены несколько вариантов осуществления, следует понимать, что раскрытые системы и способы могут быть реализованы во многих других конкретных формах, не отступая от сущности или объема настоящего раскрытия. Представленные примеры должны рассматриваться как иллюстративные и не создающие ограничений и намерение состоит не в том, чтобы ограничиваться представленными здесь подробностями. Например, различные элементы или компоненты могут объединяться или интегрироваться в другой системе или определенные признаки могут отсутствовать или не реализовываться.
Кроме того, технологии, системы, субсистемы и способы, описанные и показанные в различных вариантах осуществления как дискретные или отдельные, могут быть объединены или интегрированы с другими системами, блоками, технологиями или способами, не отступая от объема настоящего раскрытия. Другие элементы, показанные или обсуждавшиеся как связанные или непосредственно связанные или осуществляющие связь друг с другом, могут быть косвенно связаны или осуществлять связь через некоторый интерфейс, устройство или промежуточный компонент, возможно, электрически, механически или как-либо иначе. Другие примеры изменений, замен и модификаций могут осуществляться специалистами в данной области техники и могут быть сделаны, не отступая от раскрытых здесь сущности и объема изобретения.