RU2800009C2 - Set of history-based non-adjacent mvp for video encoding wave-front processing - Google Patents
Set of history-based non-adjacent mvp for video encoding wave-front processing Download PDFInfo
- Publication number
- RU2800009C2 RU2800009C2 RU2020143566A RU2020143566A RU2800009C2 RU 2800009 C2 RU2800009 C2 RU 2800009C2 RU 2020143566 A RU2020143566 A RU 2020143566A RU 2020143566 A RU2020143566 A RU 2020143566A RU 2800009 C2 RU2800009 C2 RU 2800009C2
- Authority
- RU
- Russia
- Prior art keywords
- motion information
- motion
- history
- mvp
- buffer
- Prior art date
Links
Images
Abstract
Description
[0001] Настоящая заявка испрашивает приоритет предварительной заявки США № 62/696,281, поданной 10 июля 2018, предварительной заявки США № 62/713,944, поданной 2 августа 2018 и заявки США № 16/506,720 поданной 9 июля 2019, все содержание каждой из которых включено в настоящий документ посредством ссылки. [0001] This application claims priority of U.S. Provisional Application No. 62/696,281, filed July 10, 2018, U.S. Provisional Application No. 62/713,944, filed August 2, 2018, and U.S. Application No. 16/506,720, filed July 9, 2019, the entire contents of each of which are incorporated herein by reference.
ОБЛАСТЬ ТЕХНИКИFIELD OF TECHNOLOGY
[0002] Настоящее раскрытие относится к кодированию видео, включая кодирование видео и декодирование видео.[0002] The present disclosure relates to video coding, including video coding and video decoding.
Предшествующий уровень техникиPrior Art
[0003] Функциональные возможности цифрового видео могут быть включены в широкий диапазон устройств, в том числе, цифровые телевизоры, цифровые системы прямого вещания, системы беспроводного вещания, персональные цифровые ассистенты (PDA), ноутбуки или стационарные компьютеры, планшетные компьютеры, электронные книги, цифровые камеры, цифровые записывающие устройства, цифровые медиаплееры, видеоигровые устройства, видеоигровые консоли, сотовые или спутниковые радиотелефоны, так называемые “смартфоны”, устройства видео-телеконференций, устройства потоковой передачи (стриминга) видео и тому подобное. Цифровые видеоустройства реализуют методы кодирования видео, такие как методы, описанные в стандартах, определенных MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, часть 10, Расширенное кодирование видео (AVC), стандарте Высокоэффективное кодирование видео (HEVC), ITU-T H.265/Высокоэффективное кодирование видео (HEVC) и расширениях таких стандартов. Видеоустройства могут передавать, принимать, кодировать, декодировать и/или хранить информацию цифрового видео более эффективно путем реализации таких методов кодирования видео. [0003] Digital video functionality can be incorporated into a wide range of devices, including digital televisions, digital live broadcast systems, wireless broadcast systems, personal digital assistants (PDAs), laptop or desktop computers, tablet computers, e-readers, digital cameras, digital recorders, digital media players, video game devices, video game consoles, cellular or satellite radio telephones, so-called “smartphones”, video teleconferencing devices, streaming devices transmission (streaming) of video and the like. Digital video devices implement video coding techniques such as those described in the standards defined by MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4 Part 10, Advanced Video Coding (AVC), High Efficiency Video Coding (HEVC) standard, ITU-T H.265/High Efficiency Video Coding (HEVC), and extensions to such standards. Video devices can transmit, receive, encode, decode and/or store digital video information more efficiently by implementing such video coding techniques.
[0004] Методы кодирования видео выполняют пространственное (внутри изображения, внутрикадровое) предсказание и/или временное (между изображениями, межкадровое) предсказание, чтобы уменьшить или удалить избыточность, присущую последовательностям видео. Для кодирования видео на блочной основе, вырезка (слайс) видео (т.е. изображение видео или часть изображения видео) может разбиваться на блоки видео, которые могут также упоминаться как единицы дерева кодирования (CTU), единицы кодирования (CU) и/или узлы кодирования. Блоки видео в интра-кодированной (I) вырезке изображения кодируются с использованием пространственного предсказания по отношению к опорным выборкам в соседних блоках в том же самом изображении. Блоки видео в интер-кодированной (P или B) вырезке изображения могут использовать пространственное предсказание по отношению к опорным выборкам в соседних блоках в том же самом изображении или временное предсказание по отношению к опорным выборкам в других опорных изображениях. Изображения могут упоминаться как кадры, и опорные изображения могут упоминаться как опорные кадры. [0004] Video coding techniques perform spatial (intra-picture, intra-picture) prediction and/or temporal (inter-picture, inter-picture) prediction to reduce or remove redundancy inherent in video sequences. For block-based video coding, a video slice (i.e., a video image or a portion of a video image) may be divided into video blocks, which may also be referred to as coding tree units (CTUs), coding units (CUs), and/or coding nodes. Video blocks in an intra-coded (I) slice of a picture are encoded using spatial prediction with respect to reference samples in neighboring blocks in the same picture. Video blocks in an inter-coded (P or B) slice of a picture may use spatial prediction with respect to reference samples in neighboring blocks in the same picture, or temporal prediction with respect to reference samples in other reference pictures. Pictures may be referred to as frames, and reference pictures may be referred to as reference frames.
Краткое описание сущности изобретения Brief description of the essence of the invention
[0005] В общем, настоящее раскрытие описывает технологии для кодирования информации движения блоков данных видео. Эти технологии могут использоваться во время параллельной обработки волнового фронта. Информация движения может включать в себя вектора движения, которые предсказываются из основывающихся на истории предсказателей (предикторов) векторов движения (HMVP). Потенциально подходящий (кандидат) HMVP может соответствовать информации движения ранее кодированного блока. Устройство кодирования видео (кодер или декодер) может поддерживать таблицу с множеством кандидатов HMVP во время процесса кодирования (кодирования и декодирования). Устройство кодирования видео может опустошать таблицу, когда появляется новая вырезка. Когда имеется интер-кодированный блок, устройство кодирования видео может присоединять информацию движения, ассоциированную с интер-кодированным блоком, к таблице. [0005] In general, the present disclosure describes technologies for encoding motion information of video data blocks. These technologies can be used during parallel wavefront processing. The motion information may include motion vectors that are predicted from history-based motion vector predictors (HMVPs). A potentially suitable (candidate) HMVP may correspond to motion information of a previously encoded block. A video encoding device (encoder or decoder) may maintain a table with multiple HMVP candidates during the encoding (encoding and decoding) process. The video encoder may empty the table when a new cut appears. When there is an inter-coded block, the video encoding device may append motion information associated with the inter-coded block to a table.
[0006] В одном примере, способ кодирования (кодирования или декодирования) данных видео включает в себя сохранение информации движения для первой строки единиц дерева кодирования (CTU) изображения в первом буфере предиктора векторов движения, основывающегося на истории (MVP истории), в памяти; сброс второго буфера MVP истории в памяти; и, после сброса второго буфера MVP истории, сохранение информации движения для второй строки CTU изображения во втором буфере MVP истории, причем вторая строка CTU отличается от первой строки CTU. В некоторых примерах, первый подпроцесс (тред) процесса кодирования видео может кодировать первую строку CTU, и второй подпроцесс процесса кодирования видео, отличающийся от первого подпроцесса, может кодировать вторую строку CTU.[0006] In one example, a method for encoding (encoding or decoding) video data includes storing motion information for a first row of coding tree units (CTUs) of an image in a first history-based motion vector predictor (history MVP) buffer in memory; flushing the second MVP history buffer in memory; and, after flushing the second history MVP buffer, storing motion information for the second image CTU row in the second history MVP buffer, the second CTU row being different from the first CTU row. In some examples, a first sub-process (thread) of the video encoding process may encode the first CTU line, and a second sub-process of the video encoding process, different from the first sub-process, may encode the second CTU line.
[0007] В другом примере, устройство для кодирования данных видео включает в себя память, сконфигурированную, чтобы хранить данные видео; и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы: сохранять информацию движения для первой строки единиц дерева кодирования (CTU) изображения в первом буфере предиктора векторов движения, основывающегося на истории (MVP истории), в памяти; сбрасывать второй буфер памяти MVP истории; и, после сброса второго буфера MVP истории, сохранять информацию движения для второй строки CTU изображения во втором буфере MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0007] In another example, the device for encoding video data includes a memory configured to store video data; and one or more processing units implemented in the circuitry and configured to: store motion information for the first row of coding tree units (CTUs) of the picture in a first history-based motion vector predictor (history MVP) buffer in memory; flush the second history MVP memory buffer; and, after flushing the second history MVP buffer, store motion information for the second image CTU line in the second history MVP buffer, the second CTU line being different from the first CTU line.
[0008] В другом примере, считываемый компьютером носитель данных имеет сохраненные в нем инструкции, которые, при их исполнении, предписывают процессору: сохранять информацию движения для первой строки единиц дерева кодирования (CTU) изображения в первом буфере предиктора векторов движения, основывающегося на истории (MVP истории), в памяти; сбрасывать второй буфер MVP истории в памяти; и, после сброса второго буфера MVP истории, сохранять информацию движения для второй строки CTU изображения во втором буфере MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0008] In another example, a computer-readable storage medium has instructions stored therein that, when executed, cause the processor to: store motion information for the first row of coding tree units (CTUs) of an image in a first history-based motion vector predictor (history MVP) buffer in memory; flush the second history MVP buffer in memory; and, after flushing the second history MVP buffer, store motion information for the second image CTU line in the second history MVP buffer, the second CTU line being different from the first CTU line.
[0009] В другом примере, устройство для кодирования данных видео включает в себя память, сконфигурированную, чтобы хранить данные видео; средство для сохранения информации движения для первой строки единиц дерева кодирования (CTU) изображения в первом буфере предиктора векторов движения, основывающегося на истории (MVP истории), в памяти; средство для сброса второго буфера MVP истории в памяти; и средство для сохранения информации движения для второй строки CTU изображения во втором буфере MVP истории после сброса второго буфера MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0009] In another example, the device for encoding video data includes a memory configured to store video data; means for storing motion information for a first row of coding tree units (CTUs) of an image in a first history-based motion vector predictor (history MVP) buffer in a memory; means for flushing a second history MVP buffer in memory; and means for storing motion information for the second row CTU of the image in the second history MVP buffer after flushing the second history MVP buffer, wherein the second CTU row is different from the first CTU row.
[0010] Детали одного или более примеров представлены на приложенных чертежах и в описании ниже. Другие признаки, задачи и преимущества будут очевидны из описания и чертежей, а также из формулы изобретения.[0010] Details of one or more examples are shown in the accompanying drawings and in the description below. Other features, objectives and advantages will be apparent from the description and drawings, as well as from the claims.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙBRIEF DESCRIPTION OF THE DRAWINGS
[0011] Фиг. 1 представляет собой блок-схему, иллюстрирующую примерную систему кодирования и декодирования видео, которая может выполнять методы настоящего раскрытия. [0011] FIG. 1 is a block diagram illustrating an exemplary video encoding and decoding system that can perform the techniques of the present disclosure.
[0012] Фиг. 2A и 2B представляют собой концептуальные диаграммы, иллюстрирующие примерную структуру квадродерева-двоичного дерева (QTBT) и соответствующую единицу дерева кодирования (CTU).[0012] FIG. 2A and 2B are conceptual diagrams illustrating an exemplary quadtree-binary tree (QTBT) structure and corresponding coding tree unit (CTU).
[0013] Фиг. 3 представляет собой блок-схему, иллюстрирующую примерный процесс для кодирования информации движения с использованием предсказателей векторов движения, основывающихся на истории (HMVP).[0013] FIG. 3 is a flowchart illustrating an exemplary process for encoding motion information using history-based motion vector predictors (HMVPs).
[0014] Фиг. 4 представляет собой концептуальную диаграмму, иллюстрирующую пример обновления таблицы HMVP.[0014] FIG. 4 is a conceptual diagram illustrating an example of updating an HMVP table.
[0015] Фиг. 5 представляет собой концептуальную диаграмму, иллюстрирующую примерный выбор несмежных блоков для кодирования информации движения.[0015] FIG. 5 is a conceptual diagram illustrating an exemplary selection of non-contiguous blocks for encoding motion information.
[0016] Фиг. 6 представляет собой концептуальную диаграмму, иллюстрирующую примерный выбор несмежных блоков на основе родительского (порождающего) блока.[0016] FIG. 6 is a conceptual diagram illustrating exemplary selection of non-contiguous blocks based on a parent (parent) block.
[0017] Фиг. 7 представляет собой концептуальную диаграмму, иллюстрирующую пример желательной обработки волнового фронта единиц дерева кодирования (CTU).[0017] FIG. 7 is a conceptual diagram illustrating an example of desired coding tree unit (CTU) wavefront processing.
[0018] Фиг. 8 представляет собой концептуальную диаграмму, иллюстрирующую пример информации движения, используемой для HMVP.[0018] FIG. 8 is a conceptual diagram illustrating an example of motion information used for HMVP.
[0019] Фиг. 9 представляет собой концептуальную диаграмму, иллюстрирующую пример изображения, разделенной на множество строк единиц дерева кодирования (CTU).[0019] FIG. 9 is a conceptual diagram illustrating an example of an image divided into multiple lines of coding tree units (CTUs).
[0020] Фиг. 10А и 10В представляют собой блочные диаграммы, иллюстрирующие примерные пространственные соседние векторы движения, являющиеся кандидатами для режимов слияния и расширенного предсказания вектора движения (AMVP).[0020] FIG. 10A and 10B are block diagrams illustrating exemplary spatial neighbor motion vectors that are candidates for merging and advanced motion vector prediction (AMVP) modes.
[0021] Фиг. 11A и 11B представляют собой концептуальные диаграммы для иллюстрации кандидатов временного предсказания векторов движения (TMPV).[0021] FIG. 11A and 11B are conceptual diagrams for illustrating temporal motion vector prediction (TMPV) candidates.
[0022] Фиг. 12 представляет собой блочную схему, иллюстрирующую пример единицы дерева кодирования (CTU) и соседних блоков. [0022] FIG. 12 is a block diagram illustrating an example of a coding tree unit (CTU) and neighboring blocks.
[0023] Фиг. 13 представляет собой блочную схему, иллюстрирующую текущую CU в текущей CTU.[0023] FIG. 13 is a block diagram illustrating the current CU in the current CTU.
[0024] Фиг. 14 представляет собой блок-схему, иллюстрирующую примерный кодер видео, который может выполнять методы настоящего раскрытия.[0024] FIG. 14 is a block diagram illustrating an exemplary video encoder that may perform the techniques of the present disclosure.
[0025] Фиг. 15 представляет собой блок-схему, иллюстрирующую примерный декодер видео, который может выполнять методы настоящего раскрытия.[0025] FIG. 15 is a block diagram illustrating an exemplary video decoder that may perform the techniques of the present disclosure.
[0026] Фиг. 16 представляет собой блок-схему последовательности операций, иллюстрирующую примерный способ для кодирования текущего блока данных видео в соответствии с методами настоящего раскрытия.[0026] FIG. 16 is a flowchart illustrating an exemplary method for encoding a current block of video data in accordance with the techniques of the present disclosure.
[0027] Фиг. 17 представляет собой блок-схему последовательности операций, иллюстрирующую примерный способ для декодирования текущего блока данных видео в соответствии с методами настоящего раскрытия.[0027] FIG. 17 is a flowchart illustrating an exemplary method for decoding a current block of video data in accordance with the techniques of the present disclosure.
[0028] Фиг. 18 представляет собой блок-схему последовательности операций, иллюстрирующую примерный способ кодирования (кодирования или декодирования) данных видео в соответствии с методами данного раскрытия.[0028] FIG. 18 is a flowchart illustrating an exemplary method for encoding (encoding or decoding) video data in accordance with the techniques of this disclosure.
ДЕТАЛЬНОЕ ОПИСАНИЕ DETAILED DESCRIPTION
[0029] Фиг. 1 представляет собой блок-схему, иллюстрирующую примерную систему 100 кодирования и декодирования видео, которая может выполнять методики согласно настоящему раскрытию. Методики по настоящему раскрытию, в основном, направлены на кодирование (кодирование и/или декодирование) данных видео. В принципе, данные видео включают в себя любые данные для обработки видео. Таким образом, данные видео могут включать необработанное, некодированное видео, кодированное видео, декодированное (например, восстановленное) видео и метаданные видео, такие как данные сигнализации.[0029] FIG. 1 is a block diagram illustrating an exemplary video encoding and
[0030] Как показано на фиг. 1, система 100 включает в себя устройство 102 источника, которое обеспечивает кодированные данные видео, подлежащие декодированию и отображению устройством 116 места назначения (получателем), в данном примере. В частности, устройство 102 источника предоставляет данные видео на устройство 116 места назначения посредством считываемого компьютером носителя 110. Устройство 102 источника и устройство 116 места назначения могут содержать любое из широкого спектра устройств, включая настольные компьютеры, ноутбуки, планшетные компьютеры, телевизионные приставки, телефоны, такие как смартфоны, телевизоры, камеры, устройства отображения, цифровые медиаплееры, видеоигровые консоли, устройства потоковой передачи видео и тому подобное. В некоторых случаях, устройство 102 источника и устройство 116 места назначения могут быть оснащены для беспроводной связи и, таким образом, могут упоминаться как устройства беспроводной связи.[0030] As shown in FIG. 1,
[0031] В примере на фиг. 1, устройство 102 источника включает в себя источник 104 видео, память 106, кодер 200 видео и выходной интерфейс 108. Устройство 116 места назначения включает в себя входной интерфейс 122, декодер 300 видео, память 120 и устройство 118 отображения. В соответствии с настоящим раскрытием, кодер 200 видео устройства 102 источника и декодер 300 видео устройства 116 места назначения могут быть сконфигурированы, чтобы применять методы для кодирования информации движения. Таким образом, устройство 102 источника представляет собой пример устройства кодирования видео, в то время как устройство 116 места назначения представляет собой пример устройства декодирования видео. В других примерах, устройство источника и устройство места назначения могут включать в себя другие компоненты или устройства. Например, устройство 102 источника может принимать данные видео от внешнего источника видео, такого как внешняя камера. Аналогично, устройство 116 места назначения может взаимодействовать с внешним устройством отображения вместо того, чтобы включать в себя встроенное устройство отображения.[0031] In the example of FIG. 1, the
[0032] Система 100, как показано на фиг. 1, является лишь одним примером. В принципе, любое цифровое устройство кодирования и/или декодирования видео может выполнять методы для кодирования информации движения. Устройство 102 источника и устройство 116 места назначения являются лишь примерами таких кодирующих устройств, в которых устройство 102 источника генерирует кодированные данные видео для передачи на устройство 116 места назначения. Настоящее раскрытие ссылается на “кодирующее” устройство как на устройство, которое выполняет кодирование (кодирование и/или декодирование) данных. Таким образом, кодер 200 видео и декодер 300 видео представляют собой примеры кодирующих устройств, в частности, кодер видео и декодер видео, соответственно. В некоторых примерах, устройство 102 источника и устройство 116 места назначения могут работать по существу симметрично, так что каждое из устройства 102 источника и устройства 116 места назначения включает в себя компоненты кодирования и декодирования видео. Следовательно, система 100 может поддерживать однонаправленную или двунаправленную передачу видео между устройством 102 источника и устройством 116 места назначения, например, для потоковой передачи видео, воспроизведения видео, видеовещания или видеотелефонии. [0032]
[0033] В общем случае, источник 104 видео представляет источник данных видео (т.е. необработанных, некодированных данных видео) и предоставляет последовательность картинок (также упоминаемых как “кадры”) данных видео на кодер 200 видео, который кодирует данные для картинок. Источник 104 видео устройства 102 источника может включать в себя устройство захвата видео, такое как видеокамера, видеоархив, содержащий ранее захваченное необработанное видео, и/или интерфейс подачи видео для приема видео от поставщика видеоконтента. В качестве дополнительной альтернативы, источник 104 видео может генерировать данные на основе компьютерной графики в качестве исходного видео или комбинацию живого видео, архивного видео и генерируемого компьютером видео. В каждом случае, кодер 200 видео кодирует захваченные, предварительно захваченные или сгенерированные компьютером данные видео. Кодер 200 видео может переупорядочивать изображения из принятого порядка (иногда называемого “порядком отображения”) в порядок кодирования для кодирования. Кодер 200 видео может генерировать битовый поток, включающий кодированные данные видео. Устройство 102 источника может затем выводить кодированные данные видео через выходной интерфейс 108 на считываемый компьютером носитель 110 для приема и/или извлечения данных, например, входным интерфейсом 122 устройства 116 места назначения.[0033] In general, video source 104 represents a source of video data (i.e., raw, unencoded video data) and provides a sequence of pictures (also referred to as “frames”) of video data to video encoder 200, which encodes the data for the pictures. Video source 104 of
[0034] Память 106 устройства 102 источника и память 120 устройства 116 места назначения представляют собой память общего назначения. В некоторых примерах, памяти 106 и 120 могут хранить необработанные данные видео, например необработанное видео из источника 104 видео и необработанные декодированные данные видео из декодера 300 видео. Дополнительно или альтернативно, памяти 106 и 120 могут хранить программные инструкции, исполняемые, например, кодером 200 видео и декодером 300 видео соответственно. Хотя показано отдельно от кодера 200 видео и декодера 300 видео, следует понимать, что кодер 200 видео и декодер 300 видео также могут включать в себя внутреннюю память для функционально сходных или эквивалентных целей. Кроме того, в памяти 106 и 120 могут храниться закодированные данные видео, например, выход с кодера 200 видео и вход в декодер 300 видео. В некоторых примерах, части памятей 106 и 120 могут быть выделены в качестве одного или более буферов видео, например, для хранения необработанных, декодированных и/или закодированных данных видео.[0034] The memory 106 of the
[0035] Считываемый компьютером носитель 110 может представлять собой любой тип носителя или устройства, способного транспортировать закодированные данные видео от устройства 102 источника к устройству 116 места назначения. В одном примере, считываемый компьютером носитель 110 представляет коммуникационную среду, позволяющую устройству 102 источника передавать закодированные данные видео непосредственно на устройство 116 места назначения в реальном времени, например, через радиочастотную сеть или компьютерную сеть. Выходной интерфейс 108 может модулировать сигнал передачи, включающий в себя закодированные данные видео, а входной интерфейс 122 может демодулировать принятый сигнал передачи в соответствии со стандартом связи, таким как протокол беспроводной связи. Коммуникационная среда может содержать любую беспроводную или проводную коммуникационную среду, такую как радиочастотный (RF) спектр или одна или более физических линий передачи. Коммуникационная среда может формировать часть пакетной сети, такой как локальная сеть, сеть широкого охвата или глобальная сеть, такая как Интернет. Коммуникационная среда может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезно для облегчения связи от устройства 102 источника к устройству 116 места назначения.[0035] Computer-
[0036] В некоторых примерах, устройство 102 источника может выводить закодированные данные из выходного интерфейса 108 в устройство 112 хранения. Аналогично, устройство 116 места назначения может получать доступ к закодированным данным из устройства 112 хранения через входной интерфейс 122. Устройство 112 хранения может включать в себя любое из множества распределенных или локально доступных носителей хранения данных, таких как накопитель на жестком диске, Blu-ray диски, DVD, CD-ROM, флэш-память, энергозависимая или энергонезависимая память или любые другие подходящие цифровые носители хранения для хранения закодированных данных видео.[0036] In some examples,
[0037] В некоторых примерах, устройство 102 источника может выводить кодированные данные видео на файловый сервер 114 или другое промежуточное устройство хранения, которое может хранить закодированное видео, сгенерированное устройством 102 источника. Устройство 116 места назначения может получать доступ к сохраненным данным видео с файлового сервера 114 посредством потоковой передачи или загрузки. Файловый сервер 114 может быть любым типом серверного устройства, способного хранить закодированные данные видео и передавать эти закодированные данные видео на устройство 116 места назначения. Файловый сервер 114 может представлять собой веб-сервер (например, для веб-сайта), сервер протокола передачи файлов (FTP), сетевое устройство доставки контента или сетевое устройство хранения (NAS). Устройство 116 места назначения может получать доступ к закодированным данным видео с файлового сервера 114 через любое стандартное соединение передачи данных, включая Интернет-соединение. Это может включать в себя беспроводной канал (например, соединение Wi-Fi), проводное соединение (например, цифровую абонентскую линию (DSL), кабельный модем и т.д.) или комбинацию обоих, которая подходит для доступа к закодированным данным видео, хранящимся на файловом сервере 114. Файловый сервер 114 и входной интерфейс 122 могут быть сконфигурированы для работы в соответствии с протоколом потоковой передачи, протоколом передачи загрузки или их комбинацией.[0037] In some examples,
[0038] Выходной интерфейс 108 и входной интерфейс 122 могут представлять собой беспроводные передатчики/приемники, модемы, проводные сетевые компоненты (например, Ethernet-карты), компоненты беспроводной связи, работающие в соответствии с любым из множества стандартов IEEE 802.11, или другие физические компоненты. В примерах, где выходной интерфейс 108 и входной интерфейс 122 содержат беспроводные компоненты, выходной интерфейс 108 и входной интерфейс 122 могут быть сконфигурированы для передачи данных, таких как закодированные данные видео, в соответствии со стандартом сотовой связи, таким как 4G, 4G-LTE (Долгосрочное развитие), LTE-Advanced (Расширенное LTE), 5G или тому подобное. В некоторых примерах, если выходной интерфейс 108 содержит беспроводной передатчик, выходной интерфейс 108 и входной интерфейс 122 могут быть сконфигурированы для передачи данных, таких как закодированные данные видео, в соответствии с другими беспроводными стандартами, такими как спецификация IEEE 802.11, спецификация IEEE 802.15 (например, ZigBee™), стандарт Bluetooth™ или тому подобное. В некоторых примерах, устройство 102 источника и/или устройство 116 места назначения могут включать в себя соответствующие однокристальные (SoC) устройства. Например, устройство 102 источника может включать в себя SoC-устройство для выполнения функциональности, относящейся к кодеру 200 видео и/или выходному интерфейсу 108, и устройство 116 места назначения может включать в себя SoC-устройство для выполнения функциональности, относящейся к декодеру 300 видео и/или входному интерфейсу 122.[0038]
[0039] Технологии согласно настоящему раскрытию могут быть применены к кодированию видео при поддержке любого из множества мультимедийных приложений, таких как эфирные телевизионные передачи, передачи кабельного телевидения, передачи спутникового телевидения, потоковые передачи видео через Интернет, такие как динамическая адаптивная потоковая передача по HTTP (DASH), цифровое видео, которое закодировано на носителе хранения данных, декодирование цифрового видео, сохраненного на носителе хранения данных, или других приложений.[0039] The techniques of the present disclosure may be applied to video encoding in support of any of a variety of multimedia applications such as terrestrial television transmissions, cable television transmissions, satellite television transmissions, Internet video streaming such as dynamic adaptive streaming over HTTP (DASH), digital video that is encoded on a storage medium, decoding of digital video stored on a storage medium, or other applications.
[0040] Входной интерфейс 122 устройства 116 места назначения принимает закодированный битовый поток видео со считываемого компьютером носителя 110 (например, устройства 112 хранения, файлового сервера 114 или тому подобного). Закодированный битовый поток видео может включать в себя информацию сигнализации, определенную кодером 200 видео, которая также используется декодером 300 видео, такую как синтаксические элементы, имеющие значения, которые описывают характеристики и/или обработку блоков видео или других кодированных единиц (например, вырезок, картинок, групп картинок, последовательностей или тому подобное). Устройство 118 отображения отображает пользователю декодированные изображения декодированных данных видео. Устройство 118 отображения может представлять собой любое из множества устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или другой тип устройства отображения.[0040] The input interface 122 of the destination device 116 receives an encoded video bitstream from a computer-readable medium 110 (eg,
[0041] Хотя не показано на фиг. 1, в некоторых примерах, кодер 200 видео и декодер 300 видео могут быть интегрированы с кодером аудио и/или декодером аудио и могут включать соответствующие модули мультиплексирования-демультиплексирования (MUX-DEMUX) или другие аппаратные средства и/или программное обеспечение для обработки мультиплексированных потоков, включающих в себя как аудио, так и видео, в общем потоке данных. Если применимо, модули MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, таким как протокол пользовательских дейтаграмм (UDP).[0041] Although not shown in FIG. 1, in some examples, video encoder 200 and video decoder 300 may be integrated with an audio encoder and/or audio decoder and may include appropriate multiplexing-demuxing (MUX-DEMUX) modules or other hardware and/or software for processing multiplexed streams, including both audio and video, in a common data stream. If applicable, MUX-DEMUX modules may conform to the ITU H.223 multiplexer protocol or other protocols such as User Datagram Protocol (UDP).
[0042] Как кодер 200 видео, так и декодер 300 видео могут быть реализованы как любая из множества подходящих схем кодера и/или декодера, таких как один или более микропроцессоров, цифровых сигнальных процессоров (DSP), специализированных интегральных схем (ASIC), программируемых вентильных матриц (FPGA), дискретной логики, программного обеспечения, аппаратных средств, микропрограммного обеспечения или любых их комбинаций. Когда методы частично реализованы в программном обеспечении, устройство может хранить инструкции для программного обеспечения на подходящем, не-временном считываемом компьютером носителе и исполнять инструкции в аппаратных средствах с использованием одного или более процессоров для выполнения методов настоящего раскрытия. Каждый из кодера 200 видео и декодера 300 видео может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть комбинированного кодера/декодера (CODEC) в соответствующем устройстве. Устройство, включающее в себя кодер 200 видео и/или декодер 300 видео, может содержать интегральную схему, микропроцессор и/или устройство беспроводной связи, такое как сотовый телефон.[0042] Both video encoder 200 and video decoder 300 may be implemented as any of a variety of suitable encoder and/or decoder circuits, such as one or more microprocessors, digital signal processors (DSPs), application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), discrete logic, software, hardware, firmware, or any combination thereof. When the methods are partially implemented in software, the device may store the instructions for the software on a suitable, non-transitory, computer-readable medium and execute the instructions in hardware using one or more processors to execute the methods of the present disclosure. Each of the video encoder 200 and video decoder 300 may be included in one or more encoders or decoders, any of which may be integrated as part of a combined encoder/decoder (CODEC) in a respective device. The device including the video encoder 200 and/or video decoder 300 may include an integrated circuit, a microprocessor, and/or a wireless communication device such as a cellular phone.
[0043] Кодер 200 видео и декодер 300 видео могут работать в соответствии со стандартом кодирования видео, таким как ITU-T H. 265, также упоминаемым как Высокоэффективное кодирование видео (HEVC), или его расширениями, такими как расширения многовидового и/или масштабируемого кодирования видео. В качестве альтернативы, кодер 200 видео и декодер 300 видео могут работать в соответствии с другими проприетарными или отраслевыми стандартами, такими как Тестовая модель совместного исследования (Joint Exploration Test Model, JEM) или ITU-T H.266, также упоминаемыми как Многоцелевое кодирование видео (Versatile Video Coding, VVC). Недавний проект стандарта VVC описан в Bross, et al. “Versatile Video Coding (Draft 5)”, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11, 14th Meeting: Geneva, CH, 19-27 March 2019, JVET-N1001-v3 (далее “VVC Draft 5”). Однако методы настоящего раскрытия не ограничиваются каким-либо конкретным стандартом кодирования.[0043] Video encoder 200 and video decoder 300 may operate in accordance with a video coding standard such as ITU-T H. 265, also referred to as High Efficiency Video Coding (HEVC), or extensions thereof, such as multiview and/or scalable video coding extensions. Alternatively, video encoder 200 and video decoder 300 may operate in accordance with other proprietary or industry standards such as the Joint Exploration Test Model (JEM) or ITU-T H.266, also referred to as Versatile Video Coding (VVC). A recent draft VVC standard is described in Bross, et al. “Versatile Video Coding (Draft 5)”, Joint Video Experts Team (JVET) of ITU-T SG 16
[0044] В общем, кодер 200 видео и декодер 300 видео могут выполнять блочное кодирование картинок. Термин “блок” обычно относится к структуре, включающей данные, подлежащие обработке (например, кодированию, декодированию или использованию иным образом в процессе кодирования и/или декодирования). Например, блок может включать в себя двумерную матрицу выборок данных яркости и/или цветности. В общем, кодер 200 видео и декодер 300 видео могут кодировать данные видео, представленные в формате YUV (например, Y, Cb, Cr). То есть вместо кодирования данных красного, зеленого и синего (RGB) для выборок изображения, кодер 200 видео и декодер 300 видео может кодировать компоненты в себя яркости и цветности, где компоненты цветности могут включать компоненты цветности как красного оттенка, так и синего оттенка. В некоторых примерах, кодер 200 видео преобразует принятые данные в формате RGB в представление YUV перед кодированием, а декодер 300 видео преобразует представление YUV в формат RGB. Альтернативно, эти преобразования могут выполняться модулями пред- и пост-обработки (не показаны).[0044] In general, video encoder 200 and video decoder 300 may perform block coding of pictures. The term “block” generally refers to a structure containing data to be processed (eg, encoded, decoded, or otherwise used in an encoding and/or decoding process). For example, the block may include a two-dimensional matrix of luma and/or chrominance data samples. In general, video encoder 200 and video decoder 300 may encode video data represented in YUV format (eg, Y, Cb, Cr). That is, instead of encoding the red, green, and blue (RGB) data for the image samples, video encoder 200 and video decoder 300 may encode luminance and chrominance components into itself, where the chrominance components may include both red tint and blue tint chrominance components. In some examples, video encoder 200 converts the received RGB data to a YUV representation prior to encoding, and video decoder 300 converts the YUV representation to RGB. Alternatively, these transformations may be performed by pre- and post-processing modules (not shown).
[0045] Настоящее раскрытие может, в общем, ссылаться на кодирование (например, кодирование и декодирование) картинок, включающее в себя процесс кодирования или декодирования данных изображения. Аналогично, настоящее раскрытие может ссылаться на кодирование блоков картинок, включающее в себя процесс кодирования или декодирования данных для блоков, например, кодирование предсказания и/или остатка. Кодированный битовый поток видео обычно включает в себя последовательность значений для синтаксических элементов, представляющих решения кодирования (например, режимы кодирования) и разбиение картинок на блоки. Таким образом, ссылки на кодирование изображения или блока, в общем, следует понимать как кодирование значений для синтаксических элементов, образующих изображение или блок.[0045] The present disclosure may generally refer to encoding (eg, encoding and decoding) of pictures, including the process of encoding or decoding image data. Likewise, the present disclosure may refer to picture block coding, including the process of encoding or decoding data for blocks, such as prediction and/or residual coding. The encoded video bitstream typically includes a sequence of values for syntax elements representing coding decisions (eg, coding modes) and picture blocking. Thus, references to encoding an image or block should generally be understood as encoding values for the syntax elements that make up the image or block.
[0046] HEVC определяет различные блоки, включая единицы кодирования (CU), единицы предсказания (PU) и единицы преобразования (TU). Согласно HEVC, устройство кодирования видео (такое как кодер 200 видео) разбивает единицу дерева кодирования (CTU) на CU в соответствии со структурой квадродерева. То есть устройство кодирования видео разбивает CTU и CU на четыре равных, непересекающихся квадрата, и каждый узел квадродерева имеет либо ноль, либо четыре дочерних узла. Узлы без дочерних узлов могут упоминаться как “листовые узлы”, и CU таких листовых узлов могут включать одну или более PU и/или одну или более TU. Устройство кодирования видео может дополнительно разбивать PU и TU. Например, в HEVC, остаточное квадродерево (RQT) представляет собой разбиение TU. В HEVC, PU представляют данные интер-предсказания, в то время как TU представляют остаточные данные. CU, которые являются интра-предсказанными, включают информацию интра-предсказания, такую как указание интра-режима. [0046] HEVC defines various blocks, including coding units (CU), prediction units (PU), and transform units (TU). According to HEVC, a video encoder (such as video encoder 200) partitions a coding tree unit (CTU) into CUs according to a quadtree structure. That is, the video encoder splits the CTU and CU into four equal, non-overlapping squares, and each quadtree node has either zero or four child nodes. Nodes without child nodes may be referred to as "leaf nodes" and the CUs of such leaf nodes may include one or more PUs and/or one or more TUs. The video encoder may further split the PU and TU. For example, in HEVC, the residual quadtree (RQT) is a partition of the TU. In HEVC, PUs represent inter-prediction data while TUs represent residual data. CUs that are intra predicted include intra prediction information such as an intra mode indication.
[0047] В качестве другого примера, кодер 200 видео и декодер 300 видео могут быть сконфигурированы для работы в соответствии с JEM или VVC. Согласно JEM или VVC, устройство кодирования видео (такое как кодер 200 видео) разбивает изображение на множество единиц дерева кодирования (CTU). Кодер 200 видео может разбивать CTU в соответствии со структурой дерева, такой как структура квадродерева-двоичного дерева (QTBT) или структура дерева множества типов (MTT). Структура QTBT исключает концепции множества типов разбиения, такие как разделение между CU, PU и TU в HEVC. Структура QTBT может включать в себя два уровня: первый уровень, разделенный в соответствии с разбиением квадродерева, и второй уровень, разделенный в соответствии с разбиением двоичного дерева. Корневой узел структуры QTBT соответствует CTU. Листовые узлы двоичных деревьев соответствуют единицам кодирования (CU).[0047] As another example, video encoder 200 and video decoder 300 may be configured to operate in accordance with JEM or VVC. According to JEM or VVC, a video encoder (such as video encoder 200) splits an image into multiple coding tree units (CTUs). The video encoder 200 may partition the CTU according to a tree structure, such as a quadtree-binary tree (QTBT) structure or a multiple type tree (MTT) structure. The QTBT structure eliminates the concept of multiple types of partitioning, such as partitioning between CUs, PUs, and TUs in HEVC. The QTBT structure may include two levels: a first level divided according to a quadtree split and a second level divided according to a binary tree split. The root node of the QTBT structure corresponds to the CTU. The leaf nodes of binary trees correspond to coding units (CUs).
[0048] В структуре разбиения MTT, блоки могут быть разделены с использованием разбиения квадродерева (QT), разбиения двоичного дерева (BT) и одного или более типов разбиений троичного дерева (TT). Разбиение троичного дерева представляет собой разбиение, когда блок разделяется на три подблока. В некоторых примерах, разбиение троичного дерева делит блок на три подблока без деления исходного блока через центр. Типы разбиения в MTT (например, QT, BT и TT) могут быть симметричными или асимметричными.[0048] In an MTT split structure, blocks may be split using a quadtree split (QT), a binary tree split (BT), and one or more types of ternary tree splits (TT). A ternary tree split is a split when a block is split into three subblocks. In some examples, splitting a ternary tree divides a block into three subblocks without dividing the original block through the center. Partition types in MTT (for example, QT, BT, and TT) can be symmetric or asymmetric.
[0049] В некоторых примерах, кодер 200 видео и декодер 300 видео могут использовать одну структуру QTBT или МТТ для представления компонентов как яркости, так и цветности, в то время как в других примерах, кодер 200 видео и декодер 300 видео могут использовать две или более структур QTBT или МТТ, например, одну структуру QTBT или МТТ для компонента яркости и другую структуру QTBT или МТТ для обоих компонентов цветности (или две структуры QTBT или МТТ для соответствующих компонентов цветности).[0049] In some examples, video encoder 200 and video decoder 300 may use a single QTBT or MTT structure to represent both luminance and chrominance components, while in other examples, video encoder 200 and video decoder 300 may use two or more QTBT or MTT structures, such as one QTBT or MTT structure for the luma component and another QTBT or MTT structure for both chrominance components (or two Q structures). TBT or MTT for the respective chrominance components).
[0050] Кодер 200 видео и декодер 300 видео могут быть сконфигурированы для использования разбиения квадродерева в HEVC, разбиения QTBT в соответствии с JEM или других структур разбиения. В целях пояснения, описание методов настоящего раскрытия представлено в отношении разбиения QTBT. Однако следует понимать, что методы настоящего раскрытия также могут быть применены к устройствам кодирования видео, сконфигурированным для использования разбиения квадродерева или других типов разбиения.[0050] Video encoder 200 and video decoder 300 may be configured to use HEVC quadtree splitting, JEM QTBT splitting, or other splitting structures. For purposes of explanation, a description of the methods of the present disclosure is provided in relation to splitting a QTBT. However, it should be understood that the techniques of the present disclosure may also be applied to video encoders configured to use quadtree partitioning or other types of partitioning.
[0051] Настоящее раскрытие может использовать “N×N” и “N на N” взаимозаменяемым образом для ссылки на размеры выборки блока (такого как CU или другой блок видео), в терминах вертикального и горизонтального размеров, например, 16×16 выборок или 16 на 16 выборок. В общем случае, CU размером 16×16 будет иметь 16 выборок в вертикальном направлении (y=16) и 16 выборок в горизонтальном направлении (x=16). Аналогично, CU размером N×N обычно имеет N выборок в вертикальном направлении и N выборок в горизонтальном направлении, где N представляет неотрицательное целое значение. Выборки в CU могут быть расположены в строках и столбцах. Кроме того, CU не обязательно должны иметь одинаковое количество выборок в горизонтальном направлении и в вертикальном. Например, CU может содержать N×M выборок, где M не обязательно равно N. [0051] The present disclosure may use “N×N” and “N by N” interchangeably to refer to sample sizes of a block (such as a CU or other video block), in terms of vertical and horizontal dimensions, such as 16×16 samples or 16 by 16 samples. In general, a 16×16 CU will have 16 samples in the vertical direction (y=16) and 16 samples in the horizontal direction (x=16). Similarly, an N×N CU typically has N samples in the vertical direction and N samples in the horizontal direction, where N represents a non-negative integer value. Samples in a CU can be arranged in rows and columns. In addition, CUs do not need to have the same number of samples in the horizontal direction and in the vertical direction. For example, a CU may contain N×M samples, where M is not necessarily equal to N.
[0052] Кодер 200 видео кодирует данные видео для CU, представляющих информацию предсказания и/или остаточную информацию и другую информацию. Информация предсказания указывает, как должна предсказываться CU, чтобы формировать блок предсказания для CU. Остаточная информация обычно представляет собой разности от выборки к выборке между выборками CU перед кодированием и блоком предсказания.[0052] The video encoder 200 encodes video data for CUs representing prediction information and/or residual information and other information. The prediction information indicates how the CU should be predicted in order to generate a prediction block for the CU. The residual information is typically the sample-to-sample differences between pre-coding CU samples and the prediction block.
[0053] Для предсказания CU, кодер 200 видео может обычно формировать блок предсказания для CU посредством интер-предсказания или интра-предсказания. Интер-предсказание обычно относится к предсказанию CU из данных ранее кодированной изображения, в то время как интра-предсказание обычно относится к предсказанию СU из ранее кодированных данных той же самой изображения. Чтобы выполнить интер-предсказание, кодер 200 видео может генерировать блок предсказания с использованием одного или более векторов движения. Кодер 200 видео обычно может выполнять поиск движения для идентификации опорного блока, который близко согласуется с CU, например, с точки зрения разностей между CU и опорным блоком. Кодер 200 видео может вычислить метрику разности с использованием суммы абсолютных разностей (SAD), суммы квадратов разностей (SSD), средней абсолютной разности (MAD), средне-квадратичных разностей (МSD) или других подобных разностных вычислений для определения, является ли опорный блок близко согласованным с текущей CU. В некоторых примерах, кодер 200 видео может предсказать текущую CU с использованием однонаправленного предсказания или двунаправленного предсказания. [0053] For CU prediction, video encoder 200 may typically generate a prediction block for the CU via inter-prediction or intra-prediction. Inter-prediction generally refers to CU prediction from previously encoded image data, while intra-prediction generally refers to CU prediction from previously encoded same image data. To perform inter prediction, video encoder 200 may generate a prediction block using one or more motion vectors. The video encoder 200 can typically perform a motion search to identify a reference block that closely matches the CU, eg, in terms of differences between the CU and the reference block. Video encoder 200 may compute a difference metric using sum of absolute differences (SAD), sum of squared differences (SSD), mean absolute difference (MAD), root mean square differences (MSD), or other similar difference calculations to determine if a reference block is closely matched to the current CU. In some examples, video encoder 200 may predict the current CU using unidirectional prediction or bidirectional prediction.
[0054] JEM также обеспечивает режим аффинной компенсации движения, который может рассматриваться как режим интер-предсказания. В режиме аффинной компенсации движения, кодер 200 видео может определять два или более вектора движения, которые представляют непоступательное движение, такое как увеличение или уменьшение масштаба, вращение, движение в перспективе или другие типы нерегулярного движения. [0054] JEM also provides an affine motion compensation mode, which can be thought of as an inter-prediction mode. In the affine motion compensation mode, video encoder 200 may determine two or more motion vectors that represent non-translational motion such as zoom in or out, rotation, perspective movement, or other types of irregular motion.
[0055] Для выполнения интра-предсказания, кодер 200 видео может выбрать режим интра-предсказания для генерации блока предсказания. JEM обеспечивает шестьдесят семь режимов интра-предсказания, включая различные направленные режимы, а также планарный режим и режим DC. В общем случае, кодер 200 видео выбирает режим интра-предсказания, который описывает соседние выборки для текущего блока (например, блока CU), из которых следует предсказывать выборки текущего блока. Такие выборки обычно могут находиться сверху, сверху и слева или слева от текущего блока в том же изображении, где и текущий блок, в предположении, что кодер 200 видео кодирует CTU и CU в порядке растрового сканирования (слева направо, сверху вниз). [0055] To perform intra prediction, video encoder 200 may select an intra prediction mode to generate a prediction block. JEM provides sixty-seven intra-prediction modes, including various directional modes as well as planar and DC modes. In general, video encoder 200 selects an intra-prediction mode that describes adjacent samples for the current block (eg, CU) from which the current block samples should be predicted. Such samples may typically be above, above and to the left or left of the current block in the same picture as the current block, assuming that video encoder 200 encodes CTUs and CUs in raster scan order (left to right, top to bottom).
[0056] Кодер 200 видео кодирует данные, представляющие режим предсказания для текущего блока. Например, для режимов интер-предсказания, кодер 200 видео может кодировать данные, представляющие, какой из различных доступных режимов интер-предсказания используется, а также информацию движения для соответствующего режима. Например, для однонаправленного или двунаправленного интер-предсказания, кодер 200 видео может кодировать векторы движения с использованием расширенного предсказания векторов движения (AMVP) или режима слияния. Кодер 200 видео может использовать аналогичные режимы для кодирования векторов движения для режима аффинной компенсации движения.[0056] The video encoder 200 encodes data representing the prediction mode for the current block. For example, for inter prediction modes, video encoder 200 may encode data representing which of the various available inter prediction modes is in use, as well as motion information for the corresponding mode. For example, for unidirectional or bidirectional inter-prediction, video encoder 200 may encode motion vectors using advanced motion vector prediction (AMVP) or merge mode. Video encoder 200 may use similar modes to encode motion vectors for the affine motion compensation mode.
[0057] После предсказания, такого как интра-предсказание или интер-предсказание блока, кодер 200 видео может вычислить остаточные данные для блока. Остаточные данные, такие как остаточный блок, представляют разности от выборки к выборке между данным блоком и блоком предсказания для данного блока, сформированным с использованием соответствующего режима предсказания. Кодер 200 видео может применять одно или более преобразований к остаточному блоку для получения преобразованных данных в области преобразования вместо области выборок. Например, кодер 200 видео может применять дискретное косинусное преобразование (DCT), целочисленное преобразование, вейвлет-преобразование или концептуально аналогичное преобразование к остаточным данным видео. Кроме того, кодер 200 видео может применять вторичное преобразование после первого преобразования, такое как зависимое от режима неделимое вторичное преобразование (MDNSST), зависимое от сигнала преобразование, преобразование Карунена-Лоэва (KLT) и т.п. Кодер 200 видео формирует коэффициенты преобразования после применения одного или более преобразований.[0057] After prediction, such as intra-prediction or inter-prediction of a block, video encoder 200 may calculate residual data for the block. Residual data, such as a residual block, represents the sample-to-sample differences between a given block and a prediction block for a given block generated using the corresponding prediction mode. Video encoder 200 may apply one or more transforms to the residual block to obtain transformed data in the transform region instead of the sample region. For example, video encoder 200 may apply a discrete cosine transform (DCT), an integer transform, a wavelet transform, or a conceptually similar transform to the video residual data. In addition, the video encoder 200 may apply a secondary transform after the first transform, such as mode-dependent indivisible secondary transform (MDNSST), signal-dependent transform, Karhunen-Loeve transform (KLT), and the like. Video encoder 200 generates transform coefficients after applying one or more transforms.
[0058] Как отмечалось выше, после любых преобразований для получения коэффициентов преобразования, кодер 200 видео может выполнять квантование коэффициентов преобразования. Квантование обычно относится к процессу, в котором коэффициенты преобразования квантуются, чтобы по возможности уменьшить объем данных, используемых для представления коэффициентов, обеспечивая дальнейшее сжатие. Путем выполнения процесса квантования, кодер 200 видео может уменьшить битовую глубину, ассоциированную с некоторыми или всеми из коэффициентов. Например, кодер 200 видео может округлять n-битовое значение до m-битового значения во время квантования, где n больше, чем m. В некоторых примерах, чтобы выполнить квантование, кодер 200 видео может выполнить побитовое смещение вправо значения, подлежащего квантованию. [0058] As noted above, after any transformations to obtain transform coefficients, video encoder 200 may perform quantization of the transform coefficients. Quantization generally refers to a process in which transform coefficients are quantized to reduce the amount of data used to represent the coefficients as much as possible, allowing for further compression. By performing a quantization process, video encoder 200 may reduce the bit depth associated with some or all of the coefficients. For example, video encoder 200 may round an n-bit value to an m-bit value during quantization, where n is greater than m. In some examples, to perform quantization, video encoder 200 may perform a bitwise right shift of the value to be quantized.
[0059] После квантования, кодер 200 видео может сканировать коэффициенты преобразования, формируя одномерный вектор из двумерной матрицы, включающей квантованные коэффициенты преобразования. Сканирование может быть спроектировано так, чтобы помещать коэффициенты преобразования более высокой энергии (и, следовательно, более низкой частоты) в начале вектора и помещать коэффициенты преобразования более низкой энергии (и, следовательно, более высокой частоты) в конце вектора. В некоторых примерах, кодер 200 видео может использовать предопределенный порядок сканирования для сканирования квантованных коэффициентов преобразования для получения преобразованного в последовательную форму вектора, а затем энтропийно кодировать квантованные коэффициенты преобразования вектора. В других примерах, кодер 200 видео может выполнять адаптивное сканирование. После сканирования квантованных коэффициентов преобразования для формирования одномерного вектора, кодер 200 видео может энтропийно кодировать одномерный вектор, например, в соответствии с контекстно-адаптивным двоичным арифметическим кодированием (CABAC). Кодер 200 видео может также энтропийно кодировать значения для синтаксических элементов, описывающих метаданные, ассоциированные с кодированными данными видео, для использования декодером 300 видео при декодировании данных видео.[0059] After quantization, video encoder 200 may scan the transform coefficients, forming a one-dimensional vector from a two-dimensional matrix including the quantized transform coefficients. The scan can be designed to place the higher energy (and therefore lower frequency) transform coefficients at the beginning of the vector, and to place the lower energy (and hence higher frequency) transform coefficients at the end of the vector. In some examples, video encoder 200 may use a predefined scan order to scan the quantized transform coefficients to obtain a serialized vector, and then entropy encode the quantized transform coefficients of the vector. In other examples, video encoder 200 may perform adaptive scanning. After scanning the quantized transform coefficients to generate a one-dimensional vector, video encoder 200 may entropy encode the one-dimensional vector, such as in accordance with context adaptive binary arithmetic coding (CABAC). Video encoder 200 may also entropy encode values for syntax elements describing metadata associated with encoded video data for use by video decoder 300 when decoding video data.
[0060] Для выполнения CABAC, кодер 200 видео может назначать контекст в рамках контекстной модели символу, который должен быть передан. Контекст может относиться, например, к тому, являются ли соседние значения символа нулевыми или нет. Определение вероятности может основываться на контексте, назначенном символу. [0060] To perform CABAC, video encoder 200 may assign a context within a context model to a character to be transmitted. The context may relate, for example, to whether adjacent symbol values are null or not. The probability determination may be based on the context assigned to the symbol.
[0061] Кодер 200 видео может дополнительно генерировать синтаксические данные, такие как синтаксические данные на блочной основе, синтаксические данные на основе изображения и синтаксические данные на основе последовательности, для декодера 300 видео, например, в заголовке изображения, заголовке блока, заголовке вырезки, или другие синтаксические данные, такие как набор параметров последовательности (SPS), набор параметров изображения (PPS) или набор параметров видео (VPS). Декодер 300 видео может также декодировать такие синтаксические данные, чтобы определить, как декодировать соответствующие данные видео.[0061] The video encoder 200 may further generate syntax data such as block-based syntax data, image-based syntax data, and sequence-based syntax data for the video decoder 300, such as in a picture header, block header, slice header, or other syntax data such as a sequence parameter set (SPS), a picture parameter set (PPS), or a video parameter set (VPS). The video decoder 300 may also decode such syntax data to determine how to decode the corresponding video data.
[0062] Таким образом, кодер 200 видео может генерировать битовый поток, включающий в себя кодированные данные видео, например, синтаксические элементы, описывающие разбиение изображения на блоки (например, CU), и информацию предсказания и/или остаточную информацию для блоков. В конечном счете, декодер 300 видео может принимать битовый поток и декодировать закодированные данные видео.[0062] Thus, video encoder 200 can generate a bitstream including encoded video data, such as syntax elements describing the partitioning of an image into blocks (eg, CUs), and prediction information and/or residual information for the blocks. Ultimately, the video decoder 300 may receive the bitstream and decode the encoded video data.
[0063] В принципе, декодер 300 видео выполняет процесс, обратный процессу, выполняемому кодером 200 видео, для декодирования закодированных данных видео битового потока. Например, декодер 300 видео может декодировать значения для синтаксических элементов битового потока с использованием CABAC, по существу аналогично, хотя и обратным образом, по отношению к процессу кодирования CABAC кодера 200 видео. Синтаксические элементы могут определять информацию разбиения изображения на CTU и разбиения каждой CTU согласно соответствующей структуре разбиения, такой как структура QTBT, для определения CU в CTU. Синтаксические элементы могут дополнительно определять предсказание и остаточную информацию для блоков (например, CU) данных видео.[0063] In principle, the video decoder 300 performs a reverse process to the process performed by the video encoder 200 to decode encoded video bitstream data. For example, video decoder 300 may decode values for bitstream syntax elements using CABAC in a substantially similar, albeit inverse manner to the CABAC coding process of video encoder 200. The syntax elements may define partitioning information of an image into CTUs and partitioning of each CTU according to an appropriate partitioning structure, such as a QTBT structure, to define a CU in a CTU. The syntax elements may further define prediction and residual information for blocks (eg, CUs) of video data.
[0064] Остаточная информация может быть представлена, например, квантованными коэффициентами преобразования. Декодер 300 видео может обратно квантовать и обратно преобразовывать квантованные коэффициенты преобразования блока для восстановления остаточного блока для данного блока. Декодер 300 видео использует сигнализированный режим предсказания (интра- или интер-предсказания) и связанную информацию предсказания (например, информацию движения для интер-предсказания) для формирования блока предсказания для данного блока. Декодер 300 видео может затем объединять блок предсказания и остаточный блок (на основе от выборки к выборке) для восстановления исходного блока. Декодер 300 видео может выполнять дополнительную обработку, такую как выполнение процесса устранения блочности для уменьшения визуальных артефактов вдоль границ блока.[0064] The residual information may be represented, for example, by quantized transform coefficients. Video decoder 300 may inversely quantize and inversely transform the quantized block transform coefficients to recover a residual block for that block. Video decoder 300 uses the signaled prediction mode (intra or inter prediction) and associated prediction information (eg, motion information for inter prediction) to generate a prediction block for that block. Video decoder 300 may then combine the prediction block and the residual block (sample-to-sample basis) to reconstruct the original block. Video decoder 300 may perform additional processing, such as performing a deblocking process to reduce visual artifacts along block boundaries.
[0065] Настоящее раскрытие может, в общем, ссылаться на “сигнализацию” определенной информации, такой как синтаксические элементы. Термин “сигнализация” может, в общем, относиться к сообщению значений для синтаксических элементов и/или других данных, используемых для декодирования закодированных данных видео. То есть, кодер 200 видео может сигнализировать значения для синтаксических элементов в битовом потоке. В общем, сигнализация относится к генерации значения в битовом потоке. Как отмечалось выше, устройство 102 источника может транспортировать битовый поток к устройству 116 места назначения по существу в реальном времени или не в реальном времени, как может происходить при сохранении синтаксических элементов в устройстве 112 хранения для последующего извлечения устройством 116 места назначения.[0065] The present disclosure may generally refer to "signaling" certain information, such as syntax elements. The term “signaling” may generally refer to reporting values for syntax elements and/or other data used to decode encoded video data. That is, video encoder 200 may signal values for syntax elements in the bitstream. In general, signaling refers to the generation of a value in a bitstream. As noted above,
[0066] В соответствии с методами настоящего раскрытия, кодер 200 видео и декодер 300 видео могут быть сконфигурированы для выполнения параллельной обработки волнового фронта при кодировании изображения данных видео. В общем, параллельная обработка волнового фронта может включать кодирование отдельных строк единиц дерева кодирования (CTU) с использованием отдельных подпроцессов обработки. Например, первый подпроцесс, исполняемый кодером 200 видео или декодером 300 видео, может обрабатывать первую строку CTU, второй подпроцесс может обрабатывать вторую строку CTU и т.д. Кодирование CTU включает в себя, среди прочего, кодирование информации движения для единиц кодирования (CU) с предсказанием движения в CTU, которые могут ссылаться на информацию движения в пределах той же самой CTU или ранее кодированной CTU (например, левой и/или верхней соседней CTU). Такая информация движения может сохраняться в буфере предсказателя вектора движения (MVP). В соответствии с методами настоящего раскрытия, кодер 200 видео и декодер 300 видео могут быть сконфигурированы, чтобы сбрасывать буфер MVP для текущей строки CTU перед кодированием данных видео текущей строки CTU. Буфер MVP может быть отдельным буфером MVP для текущей строки CTU, или общий буфер MVP может использоваться для множества строк CTU.[0066] In accordance with the techniques of the present disclosure, video encoder 200 and video decoder 300 may be configured to perform wavefront processing in parallel when encoding an image of video data. In general, parallel wavefront processing may involve encoding separate strings of coding tree units (CTUs) using separate processing sub-processes. For example, the first sub-process executed by video encoder 200 or video decoder 300 may process the first CTU row, the second sub-process may process the second CTU row, and so on. CTU encoding includes, among other things, encoding motion information for motion prediction coding units (CUs) in a CTU that may refer to motion information within the same CTU or a previously coded CTU (eg, left and/or upper neighbor CTU). Such motion information may be stored in a motion vector predictor (MVP) buffer. In accordance with the techniques of the present disclosure, video encoder 200 and video decoder 300 may be configured to flush the MVP buffer for the current CTU line before encoding the video data of the current CTU line. The MVP buffer may be a separate MVP buffer for the current CTU row, or a common MVP buffer may be used for multiple CTU rows.
[0067] В некоторых примерах, при сохранении информации движения в буфере MVP, кодер 200 видео и декодер 300 видео могут сохранять только уникальную информацию движения в буфере MVP. Например, кодер 200 видео и декодер 300 видео могут кодировать текущую CU с использованием текущего вектора движения, определять, сохранен ли в текущее время вектор движения в буфере MVP для текущей CU, и если да, запрещать сохранение вектора движения в буфере MVP, а если нет, то сохранять вектор движения в буфере MVP.[0067] In some examples, when storing motion information in the MVP buffer, video encoder 200 and video decoder 300 may only store unique motion information in the MVP buffer. For example, video encoder 200 and video decoder 300 may encode the current CU using the current motion vector, determine whether the motion vector is currently stored in the MVP buffer for the current CU, and if so, disable storing the motion vector in the MVP buffer, and if not, store the motion vector in the MVP buffer.
[0068] В некоторых примерах, кодер 200 видео и декодер 300 видео могут использовать правило “первым пришел - первым обслужен” (FIFO) для удаления векторов движения из буфера MVP, когда буфер MVP становится заполненным. То есть для того, чтобы добавить новый вектор движения в буфер MVP, кодер 200 видео и декодер 300 видео могут удалить самый ранний введенный вектор движения из буфера MVP и ввести новый вектор движения в буфер MVP. Таким образом, буфер MVP может реализовывать режим, подобный очереди.[0068] In some examples, video encoder 200 and video decoder 300 may use a first-come-first-served (FIFO) rule to remove motion vectors from the MVP buffer when the MVP buffer becomes full. That is, in order to add a new motion vector to the MVP buffer, video encoder 200 and video decoder 300 may remove the earliest input motion vector from the MVP buffer and insert a new motion vector into the MVP buffer. Thus, the MVP buffer can implement a queue-like behavior.
[0069] В некоторых примерах, кодер 200 видео и декодер 300 видео могут поддерживать отдельные буферы MVP для каждого из множества типов различных моделей движения. Например, кодер 200 видео и декодер 300 видео могут поддерживать буфер аффинного MVP для аффинной модели движения, буфер MVP внутриблочного копирования для информации движения режима внутриблочного копирования, буфер MVP компенсации освещения для информации движения компенсации локального освещения, буфер подблочного MVP для подблочного MVP и/или буфер временного MVP для временного предсказания движения.[0069] In some examples, video encoder 200 and video decoder 300 may maintain separate MVP buffers for each of a variety of different motion model types. For example, video encoder 200 and video decoder 300 may support an affine MVP buffer for an affine motion model, an intra-block copy MVP buffer for intra-block copy mode motion information, a lighting compensation MVP buffer for local lighting compensation motion information, a sub-block MVP buffer for sub-block MVP, and/or a temporal MVP buffer for temporal motion prediction.
[0070] В некоторых примерах, кодер 200 видео и декодер 300 видео могут генерировать синтетический MVP из двух или более MVP в одном или более буферах MVP и вводить синтетический MVP в один из буферов MVP. Два или более MVP могут соответствовать одной и той же или различным моделям движения (то есть иметь разные типы информации движения).[0070] In some examples, video encoder 200 and video decoder 300 may generate a synthetic MVP from two or more MVPs in one or more MVP buffers and input the synthetic MVP into one of the MVP buffers. Two or more MVPs may correspond to the same or different traffic models (that is, have different types of traffic information).
[0071] Фиг. 2A и 2B представляют собой концептуальную диаграмму, иллюстрирующую примерную структуру 130 квадродерева-двоичного дерева (QTBT) и соответствующую единицу дерева кодирования (CTU) 132. Сплошные линии представляют разбиение квадродерева, а пунктирные линии указывают разбиение двоичного дерева. В каждом разделенном (т.е. нелистовом) узле двоичного дерева сигнализируется один флаг, указывающий, какой тип разделения (т.е. горизонтальное или вертикальное) используется, где 0 указывает горизонтальное разделение, а 1 указывает вертикальное разделение в данном примере. Для разделения квадродерева, нет необходимости указывать тип разделения, так как узлы квадродерева разделяют блок по горизонтали и вертикали на 4 подблока одинакового размера. Соответственно, кодер 200 видео может кодировать, а декодер 300 видео может декодировать синтаксические элементы (такие как информация разделения) для уровня дерева области структуры QTBT 130 (т.е. сплошные линии) и синтаксические элементы (такие как информация разделения) для уровня дерева предсказания структуры QTBT 130 (т.е. пунктирные линии). Кодер 200 видео может кодировать, а декодер 300 видео может декодировать данные видео, такие как данные предсказания и преобразования, для CU, представленных конечными листовыми узлами структуры QTBT 130.[0071] FIG. 2A and 2B are a conceptual diagram illustrating an exemplary quadtree-binary tree (QTBT)
[0072] В общем, CTU 132 на фиг. 2B может ассоциироваться с параметрами, определяющими размеры блоков, соответствующих узлам структуры QTBT 130 на первом и втором уровнях (например, уровне дерева области и уровне дерева предсказания). Эти параметры могут включать в себя размер CTU (представляющий размер CTU 132 в выборках), минимальный размер квадродерева (MinQTSize, представляющий минимально допустимый размер листового узла квадродерева), максимальный размер двоичного дерева (MaxBTSize, представляющий максимально допустимый размер корневого узла двоичного дерева), максимальную глубину двоичного дерева (MaxBTDepth, представляющий максимально допустимую глубину двоичного дерева) и минимальный размер двоичного дерева (MinBTSize, представляющий минимально допустимый размер листового узла двоичного дерева). [0072] In general,
[0073] Корневой узел структуры QTBT, соответствующий CTU, может иметь четыре дочерних узла на первом уровне структуры QTBT, каждый из которых может разбиваться в соответствии с разбиением квадродерева. То есть узлы первого уровня являются либо листовыми узлами (не имеющими дочерних узлов), либо имеют четыре дочерних узла. Пример структуры QTBT 130 представляет такие узлы, как включающие родительский узел и дочерние узлы, имеющие сплошные линии для ветвей. Если узлы первого уровня не больше, чем максимально допустимый размер корневого узла двоичного дерева (MaxBTSize), то узлы могут дополнительно разбиваться на соответствующие двоичные деревья. Разделение двоичного дерева одного узла может повторяться до тех пор, пока узлы, полученные в результате разделения, не достигнут минимально допустимого размера листового узла двоичного дерева (MinBTSize) или максимально допустимой глубины двоичного дерева (MaxBTDepth). Пример структуры QTBT 130 представляет такие узлы как имеющие пунктирные линии для ветвей. Листовой узел двоичного дерева упоминается как единица кодирования (CU), которая используется для предсказания (например, предсказания внутри изображения или между изображениями) и преобразования, без какого-либо дальнейшего разбиения. Как обсуждалось выше, CU также могут упоминаться как “блоки видео” или “блоки”.[0073] The root node of the QTBT structure corresponding to the CTU may have four child nodes at the first level of the QTBT structure, each of which may be partitioned according to a quadtree split. That is, the first-level nodes are either leaf nodes (having no children) or have four children. An example structure of
[0074] В одном примере структуры разбиения QTBT, размер CTU устанавливается как 128×128 (выборки яркости и две соответствующие 64×64 выборки цветности), MinQTSize устанавливается как 16×16, MaxBTSize устанавливается как 64×64, MinBTSize (как для ширины, так и для высоты) устанавливается как 4, и MaxBTDepth устанавливается как 4. Разбиение квадродерева применяется к CTU сначала, чтобы сформировать листовые узлы квадродерева. Листовые узлы квадродерева могут иметь размер от 16×16 (т.е. MinQTSize) до 128×128 (т.е. размер CTU). Если листовой узел квадродерева равен 128×128, он не будет далее разделен на двоичное дерево, так как размер превышает MaxBTSize (т.е. 64×64, в данном примере). В противном случае, листовой узел квадродерева будет дополнительно разбиваться на двоичное дерево. Таким образом, листовой узел квадродерева также является корневым узлом для двоичного дерева и имеет глубину двоичного дерева, равную 0. Когда глубина двоичного дерева достигает MaxBTDepth (4, в данном примере), дальнейшее разделение не допускается. Когда узел двоичного дерева имеет ширину, равную MinBTSize (4, в данном примере), это означает, что дальнейшее вертикальное разделение не допускается. Аналогично, узел двоичного дерева, имеющий высоту, равную MinBTSize, подразумевает, что дальнейшее горизонтальное разделение для этого узла двоичного дерева не допускается. Как отмечено выше, листовые узлы двоичного дерева упоминаются как CU и далее обрабатываются в соответствии с предсказанием и преобразованием без дальнейшего разбиения.[0074] In one example of a QTBT split structure, the CTU size is set to 128x128 (luminance samples and two corresponding 64x64 chrominance samples), MinQTSize is set to 16x16, MaxBTSize is set to 64x64, MinBTSize (for both width and height) is set to 4, and MaxBTDepth is set to 4. Quadtree splitting is applied to the CTU first to form a leaf new nodes of the quadtree. The leaf nodes of the quadtree can be from 16x16 (ie MinQTSize) to 128x128 (ie CTU size). If a quadtree leaf node is 128x128, it will not be further split into a binary tree because the size is larger than MaxBTSize (ie 64x64, in this example). Otherwise, the leaf node of the quadtree will be further split into a binary tree. Thus, the leaf node of the quadtree is also the root node for the binary tree and has a binary tree depth of 0. When the binary tree depth reaches MaxBTDepth (4, in this example), no further splitting is allowed. When a binary tree node has a width equal to MinBTSize (4, in this example), this means that no further vertical splitting is allowed. Similarly, a binary tree node having a height equal to MinBTSize implies that no further horizontal splitting is allowed for that binary tree node. As noted above, the leaf nodes of the binary tree are referred to as CUs and are further processed according to prediction and transformation without further partitioning.
[0075] Фиг. 3 представляет собой блок-схему последовательности операций, иллюстрирующую примерный процесс для кодирования информации движения с использованием предсказателей векторов движения истории (HMVP). Первоначально устройство кодирования видео, такое как кодер 200 видео или декодер 300 видео, загружает таблицу с кандидатами HMVP (140). Затем устройство кодирования видео кодирует блок данных видео с использованием кандидатов HMVP (142). Затем устройство кодирования видео обновляет таблицу информацией движения кодированного блока (144).[0075] FIG. 3 is a flowchart illustrating an exemplary process for encoding motion information using history motion vector predictors (HMVPs). Initially, a video encoder, such as video encoder 200 or video decoder 300, downloads the HMVP candidate table (140). The video encoder then encodes the video data block using HMVP candidates (142). The video encoder then updates the table with motion information of the encoded block (144).
[0076] Фиг. 4 представляет собой концептуальную диаграмму, иллюстрирующую пример обновления таблицы HMVP. В JVET-K0104, размер таблицы установлен равным 16, и применяется правило “первым пришел - первым обслужен” (FIFO). Фиг. 4 изображает пример, в котором правило FIFO применяется для удаления кандидата HMVP и добавления нового в таблицу, используемую в примерах методов настоящего раскрытия. [0076] FIG. 4 is a conceptual diagram illustrating an example of updating an HMVP table. In JVET-K0104, the table size is set to 16 and the first-in-first-out (FIFO) rule is applied. Fig. 4 depicts an example in which a FIFO rule is applied to remove an HMVP candidate and add a new one to the table used in the example methods of the present disclosure.
[0077] Устройство кодирования видео, такое как кодер 200 видео или декодер 300 видео, может вводить кандидатов HMVP из последней записи в первую запись в таблице после кандидата временного предсказания вектора движения (TMVP) в список кандидатов. Устройство кодирования видео может применить обрезку (исключение) к кандидатам HMVP. Устройство кодирования видео может прекратить процесс обрезки, когда общее число доступных кандидатов слияния достигнет сигнализированного максимально допустимого числа кандидатов слияния.[0077] A video encoding device such as video encoder 200 or video decoder 300 may insert HMVP candidates from the last entry into the first entry in the table after a temporal motion vector prediction (TMVP) candidate in the candidate list. The video encoder may apply clipping (elimination) to HMVP candidates. The video encoding device may terminate the trimming process when the total number of available merge candidates reaches the signaled maximum allowable number of merge candidates.
[0078] В примере на фиг. 4, таблица перед обновлением содержит от MVP0 истории (HMVP0) до MVPL-1 истории (HMVPL-1), где нижние индексы от 0 до L-1 представляют порядок, в котором добавляются MVP истории. CL-1 представляет новый MVP истории, подлежащий добавлению в таблицу. Таким образом, согласно правилу FIFO, HMVP0 удаляется из таблицы перед добавлением CL-1, в данном примере.[0078] In the example of FIG. 4, the pre-update table contains history MVP 0 (HMVP 0 ) to history MVP L-1 (HMVP L-1 ), where
[0079] Фиг. 5 представляет собой концептуальную диаграмму, иллюстрирующую примерный выбор несмежных блоков для кодирования информации движения. В примере на фиг. 5, текущий блок, обозначенный “Curr”, представляет текущую единицу кодирования (CU), для которой информация движения может быть закодирована с использованием смежных и/или несмежных соседних блоков, обозначенных Ai, Bj и NAk. Предсказание несмежного вектора движения описано, например, в заявке США № 16/003,269, поданной 8 июня 2018. Устройство кодирования видео может применять правило FIFO и максимальный размер буфера кандидатов движения для несмежных блоков. [0079] FIG. 5 is a conceptual diagram illustrating an exemplary selection of non-contiguous blocks for encoding motion information. In the example in FIG. 5, the current block, denoted by “Curr”, represents the current coding unit (CU) for which motion information can be encoded using adjacent and/or non-adjacent adjacent blocks, denoted A i , B j , and NA k . Non-adjacent motion vector prediction is described, for example, in US Application No. 16/003,269, filed June 8, 2018. A video encoder may apply a FIFO rule and a maximum size of a motion candidate buffer for non-adjacent blocks.
[0080] Фиг. 6 представляет собой концептуальную диаграмму, иллюстрирующую примерный выбор несмежных блоков на основе родительского блока. То есть, родительский блок представляет собой блок, разбитый на подблоки, включая текущий блок. Например, родительский блок может представлять собой CTU или подблок, на который была разделена CTU. Подобно фиг. 5, на фиг. 6 текущая CU обозначена как “Curr”, и несмежные блоки, из которых информация движения может извлекаться и использоваться для предсказания информации движения текущей CU, обозначены как “NAi,j”. [0080] FIG. 6 is a conceptual diagram illustrating exemplary selection of non-contiguous boxes based on a parent box. That is, the parent block is a block divided into subblocks, including the current block. For example, the parent unit may be a CTU or a subunit into which the CTU has been partitioned. Like FIG. 5 in FIG. 6, the current CU is denoted as “Curr”, and non-contiguous blocks from which motion information can be extracted and used to predict motion information of the current CU are denoted as “NA i,j ”.
[0081] Векторы движения смежных пространственных блоков совмещенного блока могут быть использованы в качестве кандидатов предсказания вектора движения (MVP) для режима слияния, в дополнение к векторам движения H и C (то есть векторам движения в центре и снизу-справа от совмещенного блока).[0081] The motion vectors of adjacent spatial blocks of the aligned block can be used as motion vector prediction (MVP) candidates for the merge mode, in addition to the motion vectors H and C (i.e., the motion vectors at the center and bottom-right of the aligned block).
[0082] Методы настоящего раскрытия могут быть использованы для улучшения предсказания вектора движения, например, путем добавления кандидатов, используемых для режимов AMVP и/или кодирования со слиянием, где добавленные кандидаты могут быть взяты из несмежных блоков. Например, добавленные кандидаты могут соответствовать любым из NA1,1 до NA1,9 на фиг. 6.[0082] The techniques of the present disclosure can be used to improve motion vector prediction, for example, by adding candidates used for AMVP and/or merge coding modes, where the added candidates can be taken from non-contiguous blocks. For example, the added candidates may correspond to any of NA 1.1 to NA 1.9 in FIG. 6.
[0083] Фиг. 7 представляет собой концептуальную диаграмму, иллюстрирующую пример желательной обработки волнового фронта единиц дерева кодирования (CTU). Как показано на фиг. 7, для обработки различных строк CTU, могут быть назначены различные подпроцессы. То есть устройство кодирования видео, такое как кодер 200 видео или декодер 300 видео, может исполнять множество различных подпроцессов, например, для параллельной обработки волнового фронта (WPP) при кодировании различных строк CTU. В некоторых примерах, определенные вероятности, используемые для контекстного кодирования (например, кодирования CABAC) информации движения интер-предсказанных блоков, не могли бы определяться, если бы вероятности надо было определять из последнего блока предыдущей строки CTU, например, в предположении, что последний блок еще не был кодирован. Таким образом, в соответствии с методами настоящего раскрытия, кодер 200 видео и декодер 300 видео могут сбросить буфер CTU для строки CTU перед кодированием строки CTU, чтобы гарантировать, что строки CTU могут обрабатываться корректным образом.[0083] FIG. 7 is a conceptual diagram illustrating an example of desired coding tree unit (CTU) wavefront processing. As shown in FIG. 7, different sub-processes can be assigned to handle different CTU strings. That is, a video encoder, such as video encoder 200 or video decoder 300, may execute many different sub-processes, such as wavefront parallel processing (WPP) when encoding different CTU lines. In some examples, certain probabilities used for context encoding (e.g., CABAC encoding) of motion information of inter-predicted blocks could not be determined if the probabilities were to be determined from the last block of the previous CTU row, for example, assuming that the last block had not yet been encoded. Thus, in accordance with the techniques of the present disclosure, video encoder 200 and video decoder 300 may flush the CTU buffer for the CTU line before encoding the CTU line to ensure that the CTU lines can be processed correctly.
[0084] Фиг. 8 представляет собой концептуальную диаграмму, иллюстрирующую пример информации движения, используемой для HMVP. Фиг. 8 иллюстрирует, как использование FIFO может удалять векторы движения блоков, более близких к текущему блоку, из списка кандидатов, в то время как векторы движения последующих блоков могут приниматься во внимание. В частности, на фиг. 8, X представляет информацию движения, кодируемую в текущее время, и MV заштрихованных блоков находятся в буфере истории. Настоящее раскрытие признает, что традиционные методы HMVP не полностью используют векторы движения несмежных блоков, по меньшей мере частично, ввиду использования правила FIFO, как показано на фиг. 8.[0084] FIG. 8 is a conceptual diagram illustrating an example of motion information used for HMVP. Fig. 8 illustrates how the use of FIFO can remove the motion vectors of blocks closer to the current block from the list of candidates, while the motion vectors of subsequent blocks can be taken into account. In particular, in FIG. 8, X represents motion information encoded at the current time, and MVs of shaded blocks are in the history buffer. The present disclosure recognizes that conventional HMVP techniques do not fully utilize motion vectors of non-contiguous blocks, at least in part due to the use of the FIFO rule as shown in FIG. 8.
[0085] В частности, при кодировании блока X, информация движения несмежных блоков (TL0, T0, T1, TR0, TR1, TR2, TR3) верхней-левой CTU, верхней CTU и верхней-правой CTU была удалена из буфера истории. Поэтому информация движения этих блоков не рассматривается для добавления в список кандидатов, даже если несмежные блоки находятся ближе к X, чем, например, CTU LL0, CTU LL1 и CTU F0-F3, векторы движения которых находятся в буфере истории.[0085] In particular, when encoding block X, motion information of non-adjacent blocks (TL0, T0, T1, TR0, TR1, TR2, TR3) of the top-left CTU, top CTU, and top-right CTU was removed from the history buffer. Therefore, motion information of these blocks is not considered to be added to the candidate list even if non-adjacent blocks are closer to X than, for example, CTU LL0, CTU LL1 and CTU F0-F3 whose motion vectors are in the history buffer.
[0086] Настоящее раскрытие также признает, что один буфер для HVMP не применим для параллельной обработки волнового фронта. Если используется только один буфер, размер буфера должен быть очень большим для вмещения потенциальных пространственных кандидатов для блоков, обрабатываемых в каждом подпроцессе (например, строк CTU). Например, если четыре подпроцесса настроены, чтобы исполняться параллельно, размер буфера может достигать 64. В результате, потребуется больше битов, чтобы сигнализировать индекс MVP декодеру 300 видео. Аналогичным образом, могут возникать избыточные записи. То есть, запись в буфере истории может быть потенциально полезной для блока в этой строке, но может быть бесполезной для блоков в других строках (например, X и F на фиг. 8). Следовательно, может быть трудным найти оптимального кандидата для блока.[0086] The present disclosure also recognizes that a single buffer for HVMP is not applicable for parallel wavefront processing. If only one buffer is used, the buffer size must be very large to accommodate potential spatial candidates for blocks processed in each subprocess (eg, CTU rows). For example, if four sub-processes are configured to execute in parallel, the buffer size can be up to 64. As a result, more bits will be required to signal the MVP index to the video decoder 300. Similarly, redundant entries may occur. That is, an entry in the history buffer may be potentially useful for a block in that line, but may not be useful for blocks in other lines (eg, X and F in FIG. 8). Therefore, it may be difficult to find the optimal candidate for a block.
[0087] Фиг. 9 представляет собой концептуальную диаграмму, иллюстрирующую пример изображения, разбитой на множество строк единиц дерева кодирования (CTU). В частности, в примере фиг. 9, изображение 150 включает в себя строки CTU 152A-152E (строки CTU 152). Каждая из строк CTU 152 включает в себя соответствующий набор CTU: строка CTU 152А включает в себя CTU 154А-154J, строка CTU 152В включает в себя CTU 156А-156J, строка CTU 152C включает в себя CTU 158А-158J, строка CTU 152D включает в себя CTU 160А-160J, и строка CTU 152E включает в себя CTU 162А-162J. [0087] FIG. 9 is a conceptual diagram illustrating an example of an image broken into multiple coding tree unit (CTU) lines. In particular, in the example of FIG. 9,
[0088] Кодер 200 видео и декодер 300 видео могут быть сконфигурированы в соответствии с методами настоящего раскрытия для использования множества буферов для основанного на истории MVP. В некоторых примерах, кодер 200 видео и декодер 300 видео могут поддерживать отдельные буферы MVP истории для каждой из строк CTU 152 (каждая из которых может обрабатываться отдельным соответствующим подпроцессом обработки), или может иметься единственный буфер, который сбрасывается в начале каждой строки CTU при применении параллельной обработки волнового фронта.[0088] Video encoder 200 and video decoder 300 may be configured in accordance with the techniques of the present disclosure to use multiple buffers for history-based MVP. In some examples, video encoder 200 and video decoder 300 may maintain separate history MVP buffers for each of the CTU 152 rows (each of which may be processed by a separate respective processing sub-process), or there may be a single buffer that is flushed at the beginning of each CTU row when parallel wavefront processing is applied.
[0089] В одном примере, CTU 158C может представлять собой текущую CTU. Информация движения CTU 154F-154F, 156A-156D, 158A и 158B (показана с использованием серого затенения на фиг. 9) может быть доступна в одном или более соответствующих буферах MVP истории для использования при кодировании информации движения CTU 158C. [0089] In one example,
[0090] Дополнительно или альтернативно, кодер 200 видео и декодер 300 видео могут выполнять инициализацию буфера MVP истории с использованием любого или всех из следующих методов, отдельно или в комбинации. Кодер 200 видео и декодер 300 видео могут сбросить буфер MVP истории каждой строки CTU для очистки. Кодер 200 видео и декодер 300 видео могут предварительно заполнять буфер MVP истории каждой строки CTU нулевыми векторами движения с различным индексом опорного кадра и/или направлениями интер-предсказания или другой предопределенной или выведенной информации движения. Кодер 200 видео и декодер 300 видео могут предварительно заполнить буфер MVP истории каждой строки CTU информацией движения из кодированных кадров (картинок) в том же временном слое или нижних временных слоях (опорных картинок, доступных для текущего кадра/изображения).[0090] Additionally or alternatively, video encoder 200 and video decoder 300 may perform history MVP buffer initialization using any or all of the following methods, alone or in combination. Video encoder 200 and video decoder 300 may flush the history MVP buffer of each CTU row for cleanup. Video encoder 200 and video decoder 300 may pre-populate the history MVP buffer of each CTU row with null motion vectors with different reference frame index and/or inter-prediction directions or other predefined or derived motion information. Video encoder 200 and video decoder 300 may prefill the history buffer MVP of each CTU row with motion information from encoded frames (pictures) in the same time layer or lower time layers (reference pictures available for the current frame/picture).
[0091] Кодер 200 видео и декодер 300 видео могут масштабировать информацию движения, например, на основе временного расстояния, или обрабатывать/модифицировать информацию движения, например, комбинировать эту информацию движения с другим MV. В общем, кодер 200 видео и декодер 300 видео могут комбинировать информацию движения с информацией движения из буфера MVP предыдущей истории в кодированных кадрах/изображениях или информацией движения из совмещенной области (может быть CTU или больше, чем размер определенного блока, например, блока 4×4) в кодированных кадрах/изображениях. Кодер 200 видео и декодер 300 видео могут предварительно заполнить буфер MVP истории верхней строки CTU, когда кодируется верхняя-правая CTU от текущей CTU. Кодер 200 видео и декодер 300 видео могут использовать нулевые векторы движения с различными индексами опорных кадров и/или направлениями интер-предсказания, или другую предопределенную или выведенную информацию движения.[0091] The video encoder 200 and the video decoder 300 may scale the motion information, eg, based on temporal distance, or process/modify the motion information, eg, combine this motion information with another MV. In general, video encoder 200 and video decoder 300 may combine motion information with motion information from the previous history MVP buffer in coded frames/pictures, or motion information from a co-located area (may be a CTU or larger than a specific block size, e.g., a 4×4 block) in coded frames/pictures. Video encoder 200 and video decoder 300 may prefill the CTU top line history MVP buffer when the top-right CTU from the current CTU is encoded. Video encoder 200 and video decoder 300 may use null motion vectors with different reference frame indices and/or inter-prediction directions, or other predefined or derived motion information.
[0092] Дополнительно или альтернативно, кодер 200 видео и декодер 300 видео могут, когда кодируется (кодируется или декодируется) некоторая CTU из строк CTU, использовать ассоциированный буфер MVP истории для инициализации или модификации буферов истории строки CTU ниже текущей строки CTU.[0092] Additionally or alternatively, video encoder 200 and video decoder 300 may, when some CTU of the CTU rows is encoded (encoded or decoded), use an associated history buffer MVP to initialize or modify CTU row history buffers below the current CTU row.
[0093] Дополнительно или альтернативно, кодер 200 видео и декодер 300 видео могут применять правило FIFO для удаления записи из ассоциированного буфера MVP истории.[0093] Additionally or alternatively, video encoder 200 and video decoder 300 may apply a FIFO rule to remove an entry from an associated history MVP buffer.
[0094] Дополнительно или альтернативно, кодер 200 видео и декодер 300 видео могут очистить буфер MVP истории, когда ассоциированная строка CTU полностью закодирована/декодирована.[0094] Additionally or alternatively, video encoder 200 and video decoder 300 may clear the history MVP buffer when the associated CTU string is fully encoded/decoded.
[0095] Кодер 200 видео и декодер 300 видео могут поддерживать размер буфера MVP, который больше, чем списки кандидатов AMVP/слияния или других режимов. Любой MV или несколько MV из буфера могут выбираться в качестве кандидата(ов) MV для списка кандидатов, используемого в определенном режиме, например AMPV, режиме слияния, аффинном или любом другом интер-режиме. Правило может определять, как выбрать MV из буфера, например, взять N последних MV, добавленных в буфер, или взять несколько от начала буфера и/или несколько от середины буфера и/или несколько от конца буфера. Альтернативно, сигнализация может применяться для указания того, какие MV выбираются (например, кодер 200 видео может кодировать сигнализируемые данные, и декодер 300 видео может декодировать сигнализируемые данные). Размер буфера MVP может сигнализироваться в любом наборе параметров (например, наборе параметров видео, наборе параметров последовательности, наборе параметров изображения и т.п.), заголовке вырезки или еще где-либо. Буфер MVP может быть ассоциирован с вырезкой, изображением и/или последовательностью видео.[0095] Video encoder 200 and video decoder 300 may support an MVP buffer size that is larger than AMVP/merge candidate lists or other modes. Any MV or multiple MVs from the buffer may be selected as MV candidate(s) for a candidate list used in a particular mode, such as AMPV, merge mode, affine, or any other inter-mode. The rule may specify how to select MVs from the buffer, for example, take the last N MVs added to the buffer, or take a few from the start of the buffer and/or a few from the middle of the buffer and/or a few from the end of the buffer. Alternatively, signaling may be used to indicate which MVs are selected (eg, video encoder 200 may encode the signaled data and video decoder 300 may decode the signaled data). The MVP buffer size may be signaled in any parameter set (eg, video parameter set, sequence parameter set, image parameter set, etc.), slice header, or elsewhere. An MVP buffer may be associated with a clip, image, and/or video sequence.
[0096] Когда кодер 200 видео и декодер 300 видео обрабатывают интер-кодированный блок, MV, использованные в блоке, могут добавляться в буфер MVP, и только уникальные MV могут сохраняться в буфере. Когда буфер заполнен, более старые MV могут быть удалены из буфера, когда добавляются новые MV. Может иметься правило, согласно которому MV могут добавляться в буфер, например, могут добавляться только сигнализированные MV, как в режиме AMVP, и если блок кодирован в режиме слияния, то MV блока не добавляется в буфер.[0096] When the video encoder 200 and the video decoder 300 process an inter-coded block, the MVs used in the block may be added to the MVP buffer, and only unique MVs may be stored in the buffer. When the buffer is full, older MVs can be removed from the buffer when new MVs are added. There may be a rule that MVs can be added to the buffer, for example, only signaled MVs can be added, as in AMVP mode, and if the block is encoded in merge mode, then the MV of the block is not added to the buffer.
[0097] Кодер 200 видео и декодер 300 видео могут добавлять MV к уже существующему MV или нескольким MV в буфере. Например, если уже существующие MV в буфере являются однонаправленными, то при добавлении нового MV эти существующие MV могут быть модифицированы как двунаправленные путем добавления нового MV.[0097] Video encoder 200 and video decoder 300 may add MVs to an already existing MV or multiple MVs in the buffer. For example, if already existing MVs in the buffer are unidirectional, then when a new MV is added, these existing MVs can be modified to be bidirectional by adding the new MV.
[0098] Некоторая обработка MV может быть применена при добавлении нового MV. Например, если новый MV близок к уже существующим MV в буфере, то эти близкие MV могут быть удалены. Близкие может означать близость при сравнении значений компонентов MV (например, х- и y-компонентов). В некоторых примерах, в буфер могут быть добавлены только MV, которые отличаются от уже существующих MV в буфере на пороговое значение. То же самое пороговое значение может быть сконфигурировано для разных буферов.[0098] Some MV processing may be applied when a new MV is added. For example, if the new MV is close to existing MVs in the buffer, then those close MVs may be removed. Close can mean closeness when comparing the values of the MV components (eg x- and y-components). In some examples, only MVs that differ from already existing MVs in the buffer by a threshold value may be added to the buffer. The same threshold can be configured for different buffers.
[0099] Векторы движения в буфере могут быть однонаправленными (L0 или L1), двунаправленными или представлять собой MV любой другой модели движения.[0099] The motion vectors in the buffer can be unidirectional (L0 or L1), bidirectional, or represent the MV of any other motion model.
[0100] Информация о режиме может быть ассоциирована с MV в буфере, и если индекс MV в буфере сигнализируется в блоке или применяется другое правило о получении MV из буфера, то информация о режиме может быть получена из данных, ассоциированных с этой информацией MV. Например, если этой информацией является режим слияния, то блок кодируется в режиме слияния с указанным MV.[0100] The mode information may be associated with the MV in the buffer, and if the index of the MV in the buffer is signaled in the block or another rule is applied to obtain the MV from the buffer, then the mode information may be obtained from the data associated with this MV information. For example, if the information is merge mode, then the block is encoded in merge mode with the specified MV.
[0101] Настоящее раскрытие далее признает, что традиционные, основанные на истории MVP содержат только регулярные предсказатели движения и используются только для регулярного предсказания движения без модифицирования информации движения. В соответствии с методами настоящего раскрытия, кодер 200 видео и декодер 300 видео могут использовать по меньшей мере один буфер MVP истории, который содержит не только кодированную информацию движения, но и другие типы предсказателей движения, таких как для аффинной модели движения, информацию движения режима внутриблочного копирования, информацию движения компенсации локального освещения, подблочный MVP или временной предсказатель движения.[0101] The present disclosure further recognizes that traditional, history-based MVPs contain only regular motion predictors and are only used for regular motion prediction without modifying motion information. In accordance with the techniques of the present disclosure, video encoder 200 and video decoder 300 may use at least one history MVP buffer that contains not only encoded motion information, but also other types of motion predictors, such as for affine motion model, intra-block copy mode motion information, local illumination compensation motion information, sub-block MVP, or temporal motion predictor.
[0102] Дополнительно или альтернативно, кодер 200 видео и декодер 300 видео могут использовать множество буферов MVP истории для различных моделей движения, таких как аффинная модель движения, информация движения режима внутриблочного копирования, информация движения компенсации локального освещения, подблочный MVP или временной предсказатель движения.[0102] Additionally or alternatively, video encoder 200 and video decoder 300 may use a plurality of history MVP buffers for different motion models, such as an affine motion model, intra-block copy mode motion information, local lighting compensation motion information, sub-block MVP, or temporal motion predictor.
[0103] Дополнительно или альтернативно, синтетический вектор движения, основанный на текущем MVP и другом предсказателе движения, таком как другой пространственный MVP или временной MVP, также может быть добавлен в список кандидатов. [0103] Additionally or alternatively, a synthetic motion vector based on the current MVP and another motion predictor such as another spatial MVP or temporal MVP may also be added to the list of candidates.
[0104] Дополнительно или альтернативно, кодер 200 видео и декодер 300 видео могут генерировать синтетический MVP из двух или более MVP в буфере MVP истории или одного или более MVP в буфере MVP истории с другими типами MVP, такими, как пространственные или временные MVP.[0104] Additionally or alternatively, video encoder 200 and video decoder 300 may generate a synthetic MVP from two or more MVPs in the story MVP buffer, or one or more MVPs in the story MVP buffer with other types of MVPs, such as spatial or temporal MVPs.
[0105] Кодер 200 видео и декодер 300 видео могут реализовывать схему блочного разбиения. В HEVC, изображения делятся на последовательность единиц дерева кодирования (CTU). Для изображения, которая имеет три массива выборок, CTU включает в себя блок N×N выборок яркости вместе с двумя соответствующими блоками выборок цветности. CTU разделяется на единицы кодирования (CU) с использованием древовидной структуры. Каждая листовая CU может дополнительно разделяться на одну, две или четыре единицы предсказания (PU) в соответствии с типом разделения PU. После получения остаточного блока, путем применения процесса предсказания, основанного на типе разделения PU, листовая CU может быть разделена на единицы преобразования (TU).[0105] Video encoder 200 and video decoder 300 may implement a block partitioning scheme. In HEVC, pictures are divided into a sequence of coding tree units (CTUs). For an image that has three sample arrays, the CTU includes an N×N luminance sample block along with two corresponding chrominance sample blocks. The CTU is divided into coding units (CU) using a tree structure. Each leaf-CU may be further partitioned into one, two, or four prediction units (PU) according to the partition type of the PU. After obtaining the residual block, by applying a prediction process based on the division type of the PU, the leaf-CU can be divided into transformation units (TUs).
[0106] В VVC, структура сегментации квадродерева с вложенным деревом множественного типа, использующим двоичные и троичные разделения, заменяет концепции множественных типов единиц разбиения, т.е. разбиение вложенного дерева множественного типа удаляет концепции разделения CU, PU и TU, за исключением необходимых для CU, которые имеют слишком большой размер для максимальной длины преобразования и поддерживают большую гибкость для форм разделения CU. В структуре дерева кодирования, CU может иметь квадратную или прямоугольную форму.[0106] In VVC, the multiple type nested tree quadtree segmentation structure using binary and ternary partitioning replaces the concepts of multiple partition unit types, i.e. multiple type nested tree splitting removes the concepts of CU, PU, and TU splitting, except for those needed for CUs that are too large for the maximum transform length and maintain more flexibility for CU splitting forms. In the coding tree structure, the CU may be square or rectangular.
[0107] Кодер 200 видео и декодер 300 видео могут использовать информацию движения для предсказания блока данных видео. Для каждого блока, может быть доступен набор информации движения. Набор информации движения содержит информацию движения для прямого и обратного направлений предсказания. Здесь прямое и обратное направления предсказания представляют собой два направления предсказания, соответствующие списку опорных картинок 0 (RefPicList0) и списку опорных картинок 1 (RefPicList1) текущей изображения или вырезки. Термины “прямое” и “обратное” не обязательно имеют геометрическое значение. Вместо этого, они используются, чтобы различать, на каком опорном изображении основан вектор движения. Прямое предсказание означает предсказание, сформированное на основе опорного списка 0, в то время как обратное предсказание означает предсказание, сформированное на основе опорного списка 1. В тех случаях, когда как опорный список 0, так и опорный список 1 используются для формирования предсказания для данного блока, это называется двунаправленным предсказанием. [0107] Video encoder 200 and video decoder 300 may use the motion information to predict a video data block. For each block, a set of motion information may be available. The motion information set contains motion information for forward and backward prediction directions. Here, forward and backward prediction directions are two prediction directions corresponding to reference picture list 0 (RefPicList0) and reference picture list 1 (RefPicList1) of the current picture or slice. The terms "forward" and "inverse" do not necessarily have a geometric meaning. Instead, they are used to distinguish which reference picture the motion vector is based on. Forward prediction means a prediction generated from
[0108] Для данной изображения или вырезки, если используется только один список опорных картинок, каждый блок внутри изображения или вырезки предсказывается в прямом направлении. Если оба списка опорных картинок используются для данной изображения или вырезки, блок внутри изображения или вырезки может быть предсказываемым в прямом направлении или предсказываемым в обратном направлении или двунаправленно предсказываемым.[0108] For a given image or slice, if only one reference picture list is used, each block within the picture or slice is forward predicted. If both reference picture lists are used for a given picture or slice, a block within the picture or slice may be forward predictable or backward predictable or bidirectionally predictable.
[0109] Для каждого направления предсказания, информация движения содержит опорный индекс и вектор движения. Опорный индекс используется для идентификации опорной изображения в соответствующем списке опорных картинок (например, RefPicList0 или RefPicList1). Вектор движения имеет как горизонтальную, так и вертикальную компоненту, причем каждая из них указывает значение смещения вдоль горизонтального и вертикального направлений соответственно. В некоторых описаниях, для простоты, слово “вектор движения” может использоваться взаимозаменяемо с информацией движения, чтобы указывать как вектор движения, так и ассоциированный с ним опорный индекс.[0109] For each prediction direction, the motion information contains a reference index and a motion vector. The reference index is used to identify the reference picture in the corresponding reference picture list (eg, RefPicList0 or RefPicList1). The motion vector has both a horizontal and a vertical component, each indicating an offset value along the horizontal and vertical directions, respectively. In some descriptions, for simplicity, the word "motion vector" may be used interchangeably with motion information to indicate both the motion vector and its associated reference index.
[0110] Отсчет порядка картинок (POC) широко используется в стандартах кодирования видео для идентификации порядка отображения изображения. Хотя бывают случаи, когда два изображения в одной кодированной последовательности видео могут иметь одинаковое значение POC, обычно это не происходит в пределах кодированной последовательности видео. Когда в битовом потоке присутствует несколько кодированных последовательностей видео, изображения с одинаковым значением POC могут быть ближе друг к другу с точки зрения порядка декодирования.[0110] The Picture Order Count (POC) is widely used in video coding standards to identify the display order of an image. While there are cases where two pictures in the same video coded sequence may have the same POC value, this usually does not happen within a video coded sequence. When multiple encoded video sequences are present in a bitstream, pictures with the same POC value may be closer to each other in terms of decoding order.
[0111] В HEVC, имеются два режима интер-предсказания, называемые режимом слияния (причем пропуск считается специальным случаем режима слияния) и режимом расширенного предсказания вектора движения (AMVP), соответственно для PU.[0111] In HEVC, there are two inter-prediction modes called merge mode (with skipping being considered a special case of merge mode) and advanced motion vector prediction (AMVP) mode, respectively for the PU.
[0112] В режиме AMVP или слияния, список кандидатов вектора движения (MV) поддерживается для множества предсказателей векторов движения. Вектор(ы) движения, как и опорные индексы в режиме слияния, текущей PU генерируются взятием одного кандидата из списка кандидатов MV.[0112] In AMVP or merge mode, a motion vector (MV) candidate list is maintained for a plurality of motion vector predictors. The motion vector(s), as well as the reference indexes in merge mode, of the current PU are generated by taking one candidate from the MV candidate list.
[0113] Список кандидатов MV содержит до 5 кандидатов для режима слияния и только два кандидата для режима AMVP. Кандидат слияния может содержать набор информации движения, например, векторов движения, соответствующих как спискам опорных картинок (список 0 и список 1), так и опорным индексам. Если кандидат слияния идентифицируется индексом слияния, то опорные изображения используются для предсказания текущих блоков, а также определяются ассоциированные векторы движения. Однако в режиме AMVP для каждого потенциального направления предсказания из списка 0 или списка 1 опорный индекс явно сигнализируется, вместе с индексом MVP в список кандидатов MV, поскольку кандидат AMVP содержит только вектор движения. В режиме AMVP, предсказанные векторы движения могут дополнительно уточняться.[0113] The MV candidate list contains up to 5 candidates for the merge mode and only two candidates for the AMVP mode. The merge candidate may contain a set of motion information, such as motion vectors, corresponding to both reference picture lists (
[0114] Как можно видеть из описанного выше, кандидат слияния соответствует полному набору информации движения, в то время как кандидат AMVP содержит только один вектор движения для конкретного направления предсказания и опорного индекса. Кандидаты для обоих режимов могут быть выведены аналогично из одних и тех же пространственных и временных соседних блоков.[0114] As can be seen from the above, the merge candidate corresponds to a complete set of motion information, while the AMVP candidate contains only one motion vector for a particular prediction direction and reference index. Candidates for both modes can be similarly derived from the same spatial and temporal neighboring blocks.
[0115] Фиг. 10А и 10В представляют собой блочные диаграммы, иллюстрирующие примерные пространственные соседние кандидаты векторов движения для режимов слияния и расширенного предсказания вектора движения (AMVP). Фиг. 10А показывает пример пространственных соседних кандидатов MV для режима слияния, а фиг. 10В показывает пример пространственных соседних кандидатов MV режима AMVP. Пространственные кандидаты MV выводятся из соседних блоков, как показано на фиг. 10А и 10В. Для конкретного PU (PU0), способы для генерации кандидатов из блоков различаются для режимов слияния и AMVP.[0115] FIG. 10A and 10B are block diagrams illustrating exemplary spatial neighbor motion vector candidates for merging and advanced motion vector prediction (AMVP) modes. Fig. 10A shows an example of spatial neighbor MV candidates for the merge mode, and FIG. 10B shows an example of spatial neighbor MV candidates of the AMVP mode. Spatial MV candidates are derived from adjacent blocks as shown in FIG. 10A and 10V. For a particular PU (PU0), the methods for generating block candidates differ between merge and AMVP modes.
[0116] В режиме слияния, можно вывести до четырех пространственных кандидатов MV в порядке, показанном на фиг. 10А. В частности, порядок является следующим: слева (0), сверху (1), сверху справа (2), снизу слева (3) и сверху слева (4), как показано на фиг. 10А.[0116] In the merge mode, up to four MV spatial candidates can be output in the order shown in FIG. 10A. Specifically, the order is left (0), top (1), top right (2), bottom left (3), and top left (4), as shown in FIG. 10A.
[0117] В режиме AVMP, соседние блоки делятся на две группы. Первой группой является левая группа, которая включает в себя блоки 0 и 1. Второй группой является верхняя группа, которая включает в себя блоки 2, 3 и 4, как показано на фиг. 10В. Для каждой группы, потенциальный кандидат в соседнем блоке, ссылающийся на то же самое опорное изображение, что и указанная сигнализированным опорным индексом, имеет наивысший приоритет, подлежащий выбору для формирования окончательного кандидата группы. Возможно, что все соседние блоки не содержат вектор движения, указывающий на одно и то же опорное изображение. Поэтому, если такой кандидат не может быть найден, первый доступный кандидат будет масштабироваться для формирования окончательного кандидата, таким образом, различия во временном расстоянии могут быть скомпенсированы.[0117] In AVMP mode, neighboring blocks are divided into two groups. The first group is the left group which includes
[0118] Фиг. 11A и 11B представляют собой концептуальные диаграммы, иллюстрирующие кандидатов временного предсказания вектора движения (TMPV). Фиг. 11А показывает пример кандидата TMPV. Кандидат TMVP, если он включен и доступен, добавляется в список кандидатов MV после кандидатов пространственного вектора движения. Процесс вывода вектора движения для кандидата TMPV является тем же самым для режимов слияния и АMPV, однако целевой опорный индекс для кандидата TMPV в режиме слияния всегда установлен в 0.[0118] FIG. 11A and 11B are conceptual diagrams illustrating temporal motion vector prediction (TMPV) candidates. Fig. 11A shows an example of a TMPV candidate. The TMVP candidate, if enabled and available, is added to the list of MV candidates after the space motion vector candidates. The motion vector derivation process for a TMPV candidate is the same for merge and AMPV modes, however, the target reference index for a TMPV candidate in merge mode is always set to 0.
[0119] Первичным местоположением блока для вывода кандидата TMVP является нижний правый блок вне совмещенного PU, как показано на фиг. 11А в виде блока “Т”, чтобы компенсировать смещение к верхнему и левому блокам, используемым для генерации пространственных соседних кандидатов. Однако, если этот блок расположен вне текущей строки CTB или информация движения недоступна, блок заменяется центральным блоком PU.[0119] The primary block location for deriving a TMVP candidate is the lower right block outside the collocated PU, as shown in FIG. 11A as a "T" block to compensate for the offset to the top and left blocks used to generate spatial neighbor candidates. However, if this block is located outside the current CTB row or motion information is not available, the block is replaced by the central PU.
[0120] Вектор движения для кандидата TMVP выводится из совмещенной PU совмещенной изображения, указанной на уровне вырезки. Вектор движения для совмещенной PU называется совмещенным MV.[0120] The motion vector for the TMVP candidate is derived from the merged PU of the merged image specified at the slice level. The motion vector for a shared PU is called a shared MV.
[0121] Фиг. 11В показывает пример масштабирования MV. Чтобы вывести вектор движения кандидата TMVP, совмещенный MV может потребовать масштабирования, чтобы скомпенсировать различия временных расстояний, как показано на фиг. 11В.[0121] FIG. 11B shows an example of MV scaling. To derive a TMVP candidate motion vector, the co-located MV may require scaling to compensate for time distance differences, as shown in FIG. 11V.
[0122] Некоторые другие аспекты режимов слияния и AMVP заслуживают упоминания следующим образом. Например, кодер 200 видео и декодер 300 видео могут выполнять масштабирование вектора движения. Предполагается, что значение векторов движения пропорционально расстоянию между изображениями во время представления. Вектор движения ассоциирует два изображения, опорное изображение и изображение, содержащее вектор движения (а именно, вмещающее изображение). Когда вектор движения используется для предсказания другого вектора движения, расстояние между вмещающим изображением и опорным изображением вычисляется на основе значений отсчета порядка изображения (POC).[0122] Some other aspects of the merge modes and AMVP deserve mention as follows. For example, video encoder 200 and video decoder 300 may perform motion vector scaling. It is assumed that the value of the motion vectors is proportional to the distance between the images during the presentation. The motion vector associates two images, a reference image and an image containing the motion vector (namely, an enclosing image). When a motion vector is used to predict another motion vector, the distance between the containing picture and the reference picture is calculated based on Picture Order Count (POC) values.
[0123] Для предсказания вектора движения, его ассоциированное вмещающее изображение и опорное изображение могут быть разными. Поэтому вычисляется новое расстояние (на основе POC). И вектор движения масштабируется на основе этих двух расстояний POC. Для пространственного соседнего кандидата, вмещающие изображения для двух векторов движения одинаковы, в то время как опорные изображения различны. В HEVC, масштабирование вектора движения применяется как к TMVP, так и к AMVP для пространственных и временных соседних кандидатов.[0123] For motion vector prediction, its associated containing picture and reference picture may be different. Therefore, a new distance is calculated (based on POC). And the motion vector is scaled based on these two POC distances. For a spatial neighbor candidate, the embedding pictures for the two motion vectors are the same, while the reference pictures are different. In HEVC, motion vector scaling is applied to both TMVP and AMVP for spatial and temporal neighbor candidates.
[0124] В качестве другого примера, кодер 200 видео и декодер 300 видео могут выполнять генерацию искусственных кандидатов вектора движения. Если список кандидатов вектора движения не является полным, искусственные кандидаты вектора движения генерируются и вставляются в конец списка до тех пор, пока в нем не будут содержаться все кандидаты.[0124] As another example, video encoder 200 and video decoder 300 may generate artificial motion vector candidates. If the list of motion vector candidates is not complete, artificial motion vector candidates are generated and inserted at the end of the list until it contains all candidates.
[0125] В режиме слияния, существует два типа искусственных кандидатов MV: комбинированный кандидат, выведенный только для B-вырезок, и нулевые кандидаты, используемые только для AMVP, если первый тип не обеспечивает достаточно искусственных кандидатов. Для каждой пары кандидатов, которые уже находятся в списке кандидатов и имеют необходимую информацию движения, двунаправленные комбинированные кандидаты вектора движения выводятся комбинацией вектора движения первого кандидата, ссылающегося на изображение в списке 0, и вектора движения второго кандидата, ссылающегося на изображение в списке 1.[0125] In the merge mode, there are two types of artificial MV candidates: a combined candidate derived only for B-slices, and null candidates used only for AMVP if the first type does not provide enough artificial candidates. For each pair of candidates that are already in the candidate list and have the required motion information, bidirectional combined motion vector candidates are derived by combining the motion vector of the first candidate referring to the image in
[0126] В качестве другого примера, кодер 200 видео и декодер 300 видео могут выполнять процесс обрезки для вставки кандидата. Кандидаты из разных блоков могут оказаться одинаковыми, что снижает эффективность списка кандидатов слияния/AMVP. Для решения этой проблемы применяется процесс обрезки. Он сравнивает одного кандидата с другими в текущем списке кандидатов, чтобы избежать вставки идентичного кандидата в определенной степени. Чтобы уменьшить сложность, применяется лишь ограниченное количество процессов обрезки вместо сравнения каждого потенциального кандидата со всеми другими существующими кандидатами. Если применимо, применяются только следующие сравнения: верхний кандидат слияния сравнивается с левым кандидатом слияния, верхний правый кандидат слияния сравнивается с верхним кандидатом слияния, нижний левый кандидат слияния сравнивается с левым кандидатом слияния, верхний левый кандидат слияния сравнивается с левым кандидатом слияния и верхним кандидатом слияния.[0126] As another example, video encoder 200 and video decoder 300 may perform a trimming process to insert a candidate. Candidates from different blocks may end up being the same, which reduces the effectiveness of the merger/AMVP candidate list. To solve this problem, the cropping process is applied. It compares one candidate with others in the current list of candidates to avoid inserting an identical candidate to a certain extent. To reduce complexity, only a limited number of pruning processes are applied instead of comparing each potential candidate with all other existing candidates. If applicable, only the following comparisons apply: the top merge candidate is compared to the left merge candidate, the top right merge candidate is compared to the top merge candidate, the bottom left merge candidate is compared to the left merge candidate, the top left merge candidate is compared to the left merge candidate and the top merge candidate.
[0127] Кодер 200 видео и декодер 300 видео также могут использовать другие способы предсказания движения. В развитии многоцелевого кодирования видео (VVC), основанный на истории способ предсказания вектора движения (HMVP) был предложен в L. Zhang etc., “CE4-related: History-based Motion Vector Prediction”, Joint Video Experts Team Document: JVET-K0104 (далее “K0104”). Способ HMVP позволяет каждому блоку найти свой предсказатель MV из списка MV, декодированных из предыдущего, в дополнение к непосредственно смежным причинно-обусловленным соседним полям движения. Таблица с множеством кандидатов HMVP поддерживается во время процесса кодирования/декодирования. Таблица опустошается, когда обнаруживается новая вырезка. Всякий раз, когда имеется интер-кодированный блок, ассоциированная информация движения вставляется в таблицу способом “первым поступил - первым обслужен” (FIFO) как новый кандидат HMVP. Затем может применяться ограниченное правило FIFO. При вставке HMVP в таблицу, сначала может применяться проверка избыточности, чтобы найти, имеется ли в таблице идентичный HMVP. Если он найден, то этот конкретный HMVP может быть удален из таблицы, и все кандидаты HMVP затем перемещаются.[0127] Video encoder 200 and video decoder 300 may also use other motion prediction techniques. In the development of multipurpose video coding (VVC), a history-based motion vector prediction (HMVP) method has been proposed in L. Zhang etc., “CE4-related: History-based Motion Vector Prediction”, Joint Video Experts Team Document: JVET-K0104 (hereinafter “K0104”). The HMVP method allows each block to find its MV predictor from a list of MVs decoded from the previous one, in addition to directly adjacent causal adjacent motion fields. A table with multiple HMVP candidates is maintained during the encoding/decoding process. The table is emptied when a new cut is found. Whenever there is an inter-coded block, the associated motion information is inserted into the table in a first-in-first-out (FIFO) manner as a new HMVP candidate. A limited FIFO rule can then be applied. When inserting an HMVP into a table, a redundancy check may first be applied to find if there is an identical HMVP in the table. If it is found, then that particular HMVP can be removed from the table and all HMVP candidates are then moved.
[0128] Кандидаты HMVP могут быть использованы в процессе построения списка кандидатов слияния. Например, все кандидаты HMVP от последней записи до первой записи в таблице могут быть вставлены после кандидата TMVP. Обрезка может быть применена к кандидатам HMVP. Как только общее число доступных кандидатов слияния достигает сигнализированного максимально допустимого числа кандидатов слияния, процесс построения списка кандидатов слияния завершается.[0128] The HMVP candidates may be used in the process of building a merge candidate list. For example, all HMVP candidates from the last entry to the first entry in the table may be inserted after the TMVP candidate. Pruning can be applied to HMVP candidates. Once the total number of available merge candidates reaches the signaled maximum allowable number of merge candidates, the merge candidate list building process ends.
[0129] Аналогично, кандидаты HMVP также могут быть использованы в процессе построения списка кандидатов AMVP. Векторы движения последних K кандидатов HMVP в таблице могут быть вставлены после кандидата TMVP. В некоторых примерах, для построения списка кандидатов AMVP используются только кандидаты HMVP с тем же опорным изображением, что и целевое опорное изображение AMVP. Обрезка может быть применена к кандидатам HMVP.[0129] Similarly, HMVP candidates can also be used in the process of building a list of AMVP candidates. The motion vectors of the last K HMVP candidates in the table may be inserted after the TMVP candidate. In some examples, only HMVP candidates with the same reference picture as the target AMVP reference picture are used to build the list of AMVP candidates. Pruning can be applied to HMVP candidates.
[0130] В HEVC, кодирование текущей CTU может зависеть только от CTU слева, сверху-слева, сверху и сверху-справа. Таким образом, параллельная обработка волнового фронта (WPP) может поддерживаться в HEVC. Однако способ HMVP в K0104 может вызвать зависимость между текущим блоком и всеми ранее кодированными CTU в вырезке. Таким образом, WPP не может быть применена, если используется способ HMVP. Настоящее раскрытие описывает методы для использования HMVP с инициализацией CTU, в которых зависимости остаются такими же, как и в HEVC. Настоящее раскрытие также описывает методы HMVP с инициализацией строки CTU (сброс).[0130] In HEVC, the encoding of the current CTU may only depend on the CTUs left, top-left, top, and top-right. Thus, parallel wavefront processing (WPP) can be supported in HEVC. However, the HMVP method in K0104 may cause a dependency between the current block and all previously encoded CTUs in the slice. Thus, WPP cannot be applied if the HMVP method is used. This disclosure describes methods for using HMVP with CTU initialization, in which the dependencies remain the same as in HEVC. This disclosure also describes HMVP methods with CTU string initialization (reset).
[0131] Согласно методам настоящего раскрытия, кодер 200 видео и декодер 300 видео могут выполнять HMVP с инициализацией CTU. Таблица HMVP инициализируется в начале каждой CTU. Инициализация может добавить MV из непосредственно соседних кодированных блоков текущей CTU в таблицу HMVP. Непосредственно соседний кодированный блок может находиться слева, сверху, сверху-слева или сверху-справа от текущей CTU, как в HEVC. Если включено временное предсказание вектора движения, то непосредственно соседний кодированный блок также может быть совмещенным блоком в опорном изображении.[0131] According to the techniques of the present disclosure, video encoder 200 and video decoder 300 may perform HMVP with CTU initialization. The HMVP table is initialized at the beginning of each CTU. The initialization may add MVs from the current CTU's immediately adjacent coded units to the HMVP table. An immediately adjacent coded block may be to the left, top, top-left, or top-right of the current CTU, as in HEVC. If temporal motion vector prediction is enabled, then the immediately adjacent encoded block may also be a co-located block in the reference picture.
[0132] На фиг. 12 представлена блочная диаграмма, иллюстрирующая пример единицы дерева кодирования (CTU) и соседних блоков. В одном примере, только пространственные и временные кандидаты слияния для текущего блока CTU используются для инициализации таблицы HMVP. Пример использования пространственных и временных кандидатов слияния HEVC показан на фиг. 12. Порядок вставки следующий: слева (0), сверху (1), сверху-справа (2) и сверху-слева (4). Местоположение временного кандидата слияния указывается как “Т”. Следует отметить, что нижний правый временной кандидат слияния и нижний левый (3) кандидат недоступны, так как их местоположения находится ниже текущей строки CTU.[0132] In FIG. 12 is a block diagram illustrating an example coding tree unit (CTU) and neighboring blocks. In one example, only the spatial and temporal merge candidates for the current CTU are used to initialize the HMVP table. An example of using spatial and temporal HEVC merge candidates is shown in FIG. 12. The insertion order is as follows: left (0), top (1), top-right (2), and top-left (4). The location of the temporary merger candidate is indicated as "T". Note that the lower right temporary merge candidate and the lower left (3) candidate are not available because their locations are below the current CTU line.
[0133] В другом примере, процесс вывода кандидата слияния для текущего блока CTU используется для инициализации таблицы HMVP. В дополнение к пространственным и временным кандидатам слияния, для инициализации могут также использоваться другие кандидаты слияния (например, искусственные кандидаты вектора движения). [0133] In another example, the merge candidate derivation process for the current CTU is used to initialize the HMVP table. In addition to the spatial and temporal merge candidates, other merge candidates (eg, artificial motion vector candidates) may also be used for initialization.
[0134] На фиг. 13 представлена блочная диаграмма, иллюстрирующая текущую CU в текущей CTU. В некоторых примерах, таблица HMVP инициализируется как пустая в начале кодирования текущей CTU. Однако, после того как первая CU кодирована, пространственные и временные кандидаты слияния первой CU, как показано на фиг. 13, добавляются в таблицу HMVP. И затем, MV первой CU также добавляется, если CU кодируется методом интер-предсказания. Следует отметить, что если первая CU не равна текущей CTU, то могут быть добавлены два временных кандидата слияния “T0” и “T1” по порядку. Фиг. 13 показывает пример кандидатов слияния первой CU в CTU.[0134] FIG. 13 is a block diagram illustrating the current CU in the current CTU. In some examples, the HMVP table is initialized to be empty at the start of encoding the current CTU. However, after the first CU is encoded, the spatial and temporal merge candidates of the first CU, as shown in FIG. 13 are added to the HMVP table. And then, the MV of the first CU is also added if the CU is encoded by the inter-prediction method. It should be noted that if the first CU is not equal to the current CTU, then two temporary merge candidates “T0” and “T1” may be added in order. Fig. 13 shows an example of first CU merge candidates in CTU.
[0135] В другом примере, таблица HMVP инициализируется как пустая в начале кодирования текущей CTU. Однако после кодирования первой CU, все кандидаты слияния первой CU добавляются в таблицу HMVP. И затем MV первой CU также добавляется, если она кодирована методом интер-предсказания.[0135] In another example, the HMVP table is initialized to be empty at the start of encoding the current CTU. However, after encoding the first CU, all merge candidates of the first CU are added to the HMVP table. And then the MV of the first CU is also added if it is encoded by the inter-prediction method.
[0136] Кодер 200 видео и декодер 300 видео также могут выполнять HMVP с инициализацией строки CTU. В другом примере, описанная выше инициализация CTU для HMVP применяется только к первой CTU в строке CTU. Подобно HMVP в K0104, процесс обрезки может быть применен к инициализированной таблице для удаления некоторых или всех дубликатов. Процесс обрезки также может не применяться к инициализированной таблице для снижения сложности.[0136] Video encoder 200 and video decoder 300 can also perform HMVP with CTU string initialization. In another example, the HMVP CTU initialization described above only applies to the first CTU in the CTU line. Similar to HMVP in K0104, a pruning process can be applied to an initialized table to remove some or all of the duplicates. The pruning process may also not be applied to the initialized table to reduce complexity.
[0137] Фиг. 14 представляет собой блок-схему, иллюстрирующую примерный кодер 200 видео, который может выполнять методы настоящего раскрытия. Фиг. 14 приведена в целях пояснения и не должна рассматриваться как ограничение методов, широко иллюстрируемых и описываемых в настоящем раскрытии. В целях пояснения, настоящее раскрытие описывает кодер 200 видео в контексте стандартов кодирования видео, таких как стандарт кодирования видео HEVC и разрабатываемый стандарт кодирования видео H.266. Однако методы настоящего раскрытия не ограничиваются этими стандартами кодирования видео и применимы в общем к кодированию и декодированию видео.[0137] FIG. 14 is a block diagram illustrating an exemplary video encoder 200 that may perform the techniques of the present disclosure. Fig. 14 is provided for purposes of explanation and should not be construed as limiting the methods broadly illustrated and described in this disclosure. For purposes of explanation, the present disclosure describes the video encoder 200 in the context of video coding standards such as the HEVC video coding standard and the emerging H.266 video coding standard. However, the techniques of the present disclosure are not limited to these video coding standards and apply in general to video coding and decoding.
[0138] В примере на фиг. 14, кодер 200 видео включает в себя память 230 данных видео, модуль 202 выбора режима, модуль 204 генерации остатка, модуль 206 обработки преобразования, модуль 208 квантования, модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, модуль 216 фильтрации, буфер 218 декодированных картинок (DPB) и модуль 220 энтропийного кодирования. Любое или все из памяти 230 данных видео, модуля 202 выбора режима, модуля 204 генерации остатка, модуля 206 обработки преобразования, модуля 208 квантования, модуля 210 обратного квантования, модуля 212 обработки обратного преобразования, модуля 214 восстановления, модуля 216 фильтрации, DPB 218 и модуля 220 энтропийного кодирования могут быть реализованы в одном или более процессорах или в схемах обработки. Кроме того, кодер 200 видео может включать в себя дополнительные или альтернативные процессоры или схемы обработки для выполнения этих и других функций.[0138] In the example of FIG. 14, the video encoder 200 includes a
[0139] Память 230 данных видео может хранить данные видео, подлежащие кодированию компонентами кодера 200 видео. Кодер 200 видео может принимать данные видео, хранящиеся в памяти 230 данных видео, например, от источника 104 видео (фиг. 1). DPB 218 может действовать как память опорных картинок, которая хранит опорные данные видео для использования в предсказании последующих данных видео кодером 200 видео. Память 230 данных видео и DPB 218 могут быть образованы любым из множества устройств памяти, таких как динамическая память с произвольным доступом (DRAM), включая синхронную DRAM (SDRAM), магниторезистивную RAM (MRAM), резистивную RAM (RRAM) или другие типы устройств памяти. Память 230 данных видео и DPB 218 могут быть обеспечены одним и тем же устройством памяти или отдельными устройствами памяти. В различных примерах, память 230 данных видео может быть в чипе (однокристальной) с другими компонентами кодера 200 видео, как иллюстрируется, или вне чипа относительно этих компонентов.[0139] The
[0140] В настоящем раскрытии, ссылка на память 230 данных видео не должна интерпретироваться как ограниченная памятью внутренней для кодера 200 видео, если только она специально не описана как таковая, или памятью внешней для кодера 200 видео, если только она специально не описана как таковая. Скорее, ссылка на память 230 данных видео должна пониматься как опорная память, которая хранит данные видео, которые кодер 200 видео получает для кодирования (например, данные видео для текущего блока, который должен кодироваться). Память 106 на фиг. 1 может также обеспечивать временное хранение выходных данных из различных модулей кодера 200 видео.[0140] In this disclosure, reference to
[0141] Различные модули на фиг. 14 проиллюстрированы, чтобы способствовать пониманию операций, выполняемых кодером 200 видео. Модули могут быть реализованы как фиксированные функциональные схемы, программируемые схемы или их комбинация. Фиксированные функциональные схемы относятся к схемам, которые обеспечивают определенную функциональность и заранее настроены на операции, которые могут выполняться. Программируемые схемы относятся к схемам, которые могут быть запрограммированы для выполнения различных задач и обеспечивают гибкую функциональность в операциях, которые могут выполняться. Например, программируемые схемы могут исполнять программное обеспечение или микропрограммное обеспечение, которое побуждает программируемые схемы работать таким образом, как определяется инструкциями программного обеспечения или микропрограммного обеспечения. Фиксированные функциональные схемы могут исполнять программные инструкции (например, принимать параметры или выводить параметры), но типы операций, которые выполняют фиксированные функциональные схемы, обычно неизменны. В некоторых примерах, один или более модулей могут быть отдельными схемными блоками (фиксированными функциональными блоками или программируемыми блоками), а в некоторых примерах, один или более модулей могут быть интегральными схемами.[0141] The various modules in FIG. 14 are illustrated to aid in understanding the operations performed by the video encoder 200. The modules may be implemented as fixed function circuits, programmable circuits, or a combination of both. Fixed function charts refer to circuits that provide certain functionality and are preconfigured for operations that can be performed. Programmable circuits refer to circuits that can be programmed to perform various tasks and provide flexible functionality in the operations that can be performed. For example, the programmable circuits may execute software or firmware that causes the programmable circuits to operate in a manner determined by the instructions of the software or firmware. Fixed function circuits can execute program instructions (for example, accept parameters or output parameters), but the types of operations that fixed function circuits perform are usually immutable. In some examples, one or more modules may be separate circuit blocks (fixed functional blocks or programmable blocks), and in some examples, one or more modules may be integrated circuits.
[0142] Кодер 200 видео может включать в себя арифметико-логические модули (ALU), элементарные функциональные модули (EFU), цифровые схемы, аналоговые схемы и/или программируемые ядра, образованные программируемыми схемами. В примерах, где операции кодера 200 видео выполняются с использованием программного обеспечения, исполняемого программируемыми схемами, память 106 (фиг. 1) может хранить объектный код программного обеспечения, который кодер 200 видео принимает и исполняет, или другая память в кодере 200 видео (не показана) может хранить такие инструкции.[0142] The video encoder 200 may include arithmetic logic units (ALUs), elementary functional units (EFUs), digital circuits, analog circuits, and/or programmable cores formed by programmable circuits. In examples where operations of video encoder 200 are performed using software executable by programmable circuitry, memory 106 (FIG. 1) may store software object code that video encoder 200 receives and executes, or other memory in video encoder 200 (not shown) may store such instructions.
[0143] Память 230 данных видео сконфигурирована для хранения принятых данных видео. Кодер 200 видео может извлекать изображение данных видео из памяти 230 данных видео и передавать данные видео в модуль 204 генерации остатка и модуль 202 выбора режима. Данные видео в памяти 230 данных видео могут быть необработанными видеоданными, которые должны быть закодированы.[0143] The
[0144] Модуль 202 выбора режима включает в себя модуль 222 оценки движения, модуль 224 компенсации движения и модуль 226 интра-предсказания. Модуль 202 выбора режима может включать в себя дополнительные функциональные модули для выполнения предсказания видео в соответствии с другими режимами предсказания. В качестве примера, модуль 202 выбора режима может включать в себя модуль палитры, модуль внутриблочного копирования (который может быть частью модуля 222 оценки движения и/или модуля 224 компенсации движения), аффинный модуль, модуль линейной модели (LM) или тому подобное.[0144] The mode selection module 202 includes a motion estimation module 222, a motion compensation module 224, and an
[0145] Модуль 202 выбора режима обычно координирует множество проходов кодирования для тестирования комбинаций параметров кодирования и результирующих значений скорости-искажения для таких комбинаций. Параметры кодирования могут включать в себя разбиение CTU на CU, режимы предсказания для CU, типы преобразования для остаточных данных CU, параметры квантования для остаточных данных CU и т.д. Модуль 202 выбора режима может, в конечном счете, выбрать комбинацию параметров кодирования, имеющую значения скорости-искажения, которые лучше, чем у других тестируемых комбинаций.[0145] Mode selection module 202 typically coordinates multiple encoding passes to test combinations of encoding parameters and the resulting rate-distortion values for such combinations. The coding parameters may include splitting the CTU into CUs, prediction modes for the CUs, transform types for the CU residual data, quantization parameters for the CU residual data, and so on. The mode selector 202 may ultimately select a coding parameter combination having rate-distortion values that are better than the other tested combinations.
[0146] Кодер 200 видео может разбивать изображение, извлеченное из памяти 230 данных видео, в последовательность CTU и инкапсулировать одну или более CTU в пределах вырезки. Модуль 202 выбора режима может разбивать CTU изображения в соответствии с древовидной структурой, такой как структура QTBT или структура квадродерева HEVC, описанная выше. Как описано выше, кодер 200 видео может формировать одну или более CU из разбиения CTU в соответствии с древовидной структурой. Такая CU может также упоминаться, в общем, как “блок видео” или “блок”.[0146] Video encoder 200 may partition an image retrieved from
[0147] В общем, модуль 202 выбора режима также управляет своими компонентами (например, модулем 222 оценки движения, модулем 224 компенсации движения, и модулем 226 интра-предсказания), чтобы генерировать блок предсказания для текущего блока (например, текущей CU или, в HEVC, перекрывающейся части PU и TU). Для интер-предсказания текущего блока, модуль 222 оценки движения может выполнять поиск движения для идентификации одного или более близко согласующихся опорных блоков в одной или более опорных изображениях (например, в одной или более из ранее кодированных картинок, сохраненных в DPB 218). В частности, модуль 222 оценки движения может вычислить значение, представляющее, насколько сходен потенциальный опорный блок с текущим блоком, например, в соответствии с суммой абсолютных разностей (SAD), суммой квадратов разностей (SSD), средней абсолютной разностью (MAD), среднеквадратичными разностями (MSD) или тому подобным. Модуль 222 оценки движения может обычно выполнять эти вычисления с использованием разностей от выборки к выборке между текущим блоком и рассматриваемым опорным блоком. Модуль 222 оценки движения может идентифицировать опорный блок, имеющий наименьшее значение, полученное в результате этих вычислений, указывая опорный блок, который наиболее близко согласуется с текущим блоком.[0147] In general, mode selection module 202 also controls its components (e.g., motion estimation module 222, motion compensation module 224, and intra-prediction module 226) to generate a prediction block for the current block (e.g., the current CU or, in HEVC, the overlapping portion of the PU and TU). For inter-prediction of the current block, motion estimation module 222 may perform a motion search to identify one or more closely matching reference blocks in one or more reference pictures (eg, one or more of the previously encoded pictures stored in DPB 218). In particular, the motion estimation module 222 may calculate a value representing how similar the potential reference block is to the current block, for example, according to the sum of absolute differences (SAD), sum of squared differences (SSD), mean absolute difference (MAD), root mean square differences (MSD), or the like. Motion estimation module 222 can typically perform these calculations using the sample-to-sample differences between the current block and the reference block under consideration. Motion estimation module 222 may identify the reference block having the smallest value obtained from these calculations, indicating the reference block that most closely matches the current block.
[0148] Модуль 222 оценки движения может формировать один или более векторов движения (MV), которые определяют положения опорных блоков в опорных изображениях относительно положения текущего блока в текущем изображении. Модуль 222 оценки движения может затем предоставить векторы движения в модуль 224 компенсации движения. Например, для однонаправленного интер-предсказания, модуль 222 оценки движения может обеспечить один вектор движения, тогда как для двунаправленного интер-предсказания, модуль 222 оценки движения может обеспечить два вектора движения. Модуль 224 компенсации движения может затем генерировать блок предсказания с использованием векторов движения. Например, модуль 224 компенсации движения может извлекать данные опорного блока с использованием вектора движения. В качестве другого примера, если вектор движения имеет точность дробной выборки, модуль 224 компенсации движения может интерполировать значения для блока предсказания в соответствии с одним или более интерполяционными фильтрами. Кроме того, для двунаправленного интер-предсказания, модуль 224 компенсации движения может извлекать данные для двух опорных блоков, идентифицированных соответствующими векторами движения, и комбинировать извлеченные данные, например, путем усреднения от выборки к выборке или взвешенного усреднения.[0148] The motion estimation module 222 may generate one or more motion vectors (MVs) that define the positions of the reference blocks in the reference pictures relative to the position of the current block in the current picture. Motion estimation module 222 may then provide motion vectors to motion compensation module 224 . For example, for unidirectional inter prediction, motion estimation module 222 may provide one motion vector, while for bidirectional inter prediction, motion estimation module 222 may provide two motion vectors. Motion compensation module 224 may then generate a prediction block using the motion vectors. For example, motion compensation module 224 may extract reference block data using a motion vector. As another example, if the motion vector has fractional sampling precision, motion compensation module 224 may interpolate values for the prediction block in accordance with one or more interpolation filters. In addition, for bidirectional inter-prediction, motion compensation module 224 may extract data for two reference blocks identified by respective motion vectors and combine the extracted data, for example, by sample-to-sample averaging or weighted averaging.
[0149] В соответствии с методами настоящего раскрытия, буфер 218 декодированных картинок может включать в себя один или несколько буферов MVP истории для строк CTU. То есть, каждой строке CTU может быть выделен свой собственный буфер MVP, или один буфер MVP может быть использован для множества строк CTU. В любом случае, кодер 200 видео может сбросить буфер MVP для строки CTU в начале декодирования данных видео строки CTU. Модуль 224 компенсации движения или другой модуль кодера 200 видео может быть сконфигурирован для сохранения только уникальных векторов движения в буфере MVP. Как обсуждалось выше, модуль 224 компенсации движения или другой модуль кодера 200 видео может быть сконфигурирован для использования правила FIFO для управления информацией движения, сохраняемой в буфере MVP, так что при добавлении вектора движения в буфер MVP, если буфер MVP заполнен, модуль 224 компенсации движения может удалить самый ранний добавленный вектор движения из буфера MVP. В некоторых примерах, кодер 200 видео может поддерживать различные соответствующие буферы MVP для каждой из множества моделей движения, таких как, например, аффинная модель движения, информация движения режима внутриблочного копирования, информация движения компенсации локального освещения, подблочный MVP и временное предсказание движения.[0149] In accordance with the techniques of the present disclosure, decoded picture buffer 218 may include one or more history MVP buffers for CTU lines. That is, each CTU row can be allocated its own MVP buffer, or one MVP buffer can be used for multiple CTU rows. In any case, the video encoder 200 may flush the MVP buffer for the CTU line at the start of decoding the CTU line video data. Motion compensation module 224 or another module of video encoder 200 may be configured to store only unique motion vectors in the MVP buffer. As discussed above, motion compensation module 224 or another module of video encoder 200 may be configured to use a FIFO rule to control motion information stored in the MVP buffer such that when a motion vector is added to the MVP buffer, if the MVP buffer is full, motion compensation module 224 may remove the earliest added motion vector from the MVP buffer. In some examples, video encoder 200 may maintain different corresponding MVP buffers for each of a plurality of motion models, such as, for example, affine motion model, intra-block copy mode motion information, local illumination compensation motion information, sub-block MVP, and temporal motion prediction.
[0150] В качестве другого примера, для интра-предсказания или кодирования с интра-предсказанием, модуль 226 интра-предсказания может генерировать блок предсказания из выборок, соседних с текущим блоком. Например, для направленных режимов модуль 226 интра-предсказания может, обычно, математически комбинировать значения соседних выборок и заполнять этими вычисленными значениями в определенном направлении текущий блок для формирования блока предсказания. В качестве другого примера, для режима DC, модуль 226 интра-предсказания может вычислять среднее значение соседних выборок для текущего блока и генерировать блок предсказания так, чтобы включать это полученное среднее значение для каждой выборки блока предсказания.[0150] As another example, for intra-prediction or intra-prediction coding,
[0151] Модуль 202 выбора режима предоставляет блок предсказания в модуль 204 генерации остатка. Модуль 204 генерации остатка получает необработанную, некодированную версию текущего блока из памяти 230 данных видео и блок предсказания из модуля 202 выбора режима. Модуль 204 генерации остатка вычисляет от выборки к выборке разности между текущим блоком и блоком предсказания. Полученные разности от выборки к выборке определяют остаточный блок для текущего блока. В некоторых примерах, модуль 204 генерации остатка может также определять разности между значениями выборок в остаточном блоке для генерации остаточного блока с использованием дифференциальной импульсно-кодовой модуляции остатка (RDPCM). В некоторых примерах, модуль 204 генерации остатка может быть сформирован с использованием одной или нескольких схем вычитания, которые выполняют двоичное вычитание.[0151] The mode selection module 202 provides a prediction block to the
[0152] В примерах, где модуль 202 выбора режима разбивает CU на PU, каждая PU может быть ассоциирована с единицей предсказания яркости и соответствующими единицами предсказания цветности. Кодер 200 видео и декодер 300 видео могут поддерживать PU, имеющие различные размеры. Как указано выше, размер CU может относиться к размеру блока кодирования яркости CU, а размер PU может относиться к размеру единицы предсказания яркости PU. Предполагая, что размер конкретной CU равен 2N×2N, кодер 200 видео может поддерживать размеры PU 2N×2N или N×N для интра-предсказания и симметричные размеры PU 2N×2N, 2N×N, N×2N, N×N или аналогичные для интер-предсказания. Кодер 200 видео и декодер 300 видео также могут поддерживать асимметричное разбиение для размеров PU 2N×nU, 2N×nD, nL×2N и nR×2N для интер-предсказания.[0152] In examples where mode selector 202 partitions a CU into PUs, each PU may be associated with a luminance prediction unit and corresponding chrominance prediction units. Video encoder 200 and video decoder 300 may support PUs having different sizes. As mentioned above, the CU size may refer to the size of the luminance coding unit of the CU, and the size of the PU may refer to the size of the luminance prediction unit of the PU. Assuming a particular CU size is 2Nx2N, video encoder 200 may support 2Nx2N or NxN PU sizes for intra-prediction and symmetrical PU sizes of 2Nx2N, 2NxN, Nx2N, NxN or similar for inter-prediction. Video encoder 200 and video decoder 300 may also support asymmetric partitioning for PU sizes of 2N×nU, 2N×nD, nL×2N, and nR×2N for inter-prediction.
[0153] В примерах, где модуль выбора режима дополнительно не разбивает CU на PU, каждая CU может быть ассоциирована с блоком кодирования яркости и соответствующими блоками кодирования цветности. Как указано выше, размер CU может относиться к размеру блока кодирования яркости CU. Кодер 200 видео и декодер 120 видео могут поддерживать размеры CU 2N×2N, 2N×N или N×2N.[0153] In examples where the mode selector does not further partition the CU into PUs, each CU may be associated with a luminance coding block and corresponding chrominance coding blocks. As stated above, the size of the CU may refer to the size of the luminance coding unit of the CU. Video encoder 200 and video decoder 120 may support CU sizes of 2N×2N, 2N×N, or N×2N.
[0154] Для других методов кодирования видео, таких как кодирование в режиме внутриблочного копирования, кодирование в аффинном режиме и кодирование в режиме линейной модели (LM), в качестве нескольких примеров, модуль 202 выбора режима, посредством соответствующих модулей, ассоциированных с методами кодирования, генерирует блок предсказания для текущего кодируемого блока. В некоторых примерах, таких как кодирование в режиме палитры, модуль 202 выбора режима может не генерировать блок предсказания, а вместо этого генерировать синтаксические элементы, указывающие способ восстановления блока на основе выбранной палитры. В таких режимах, модуль 202 выбора режима может предоставлять эти синтаксические элементы модулю 220 энтропийного кодирования для кодирования. [0154] For other video coding methods, such as intra-block copy mode coding, affine mode coding, and linear model (LM) mode coding, as a few examples, the mode selection module 202, through the respective modules associated with the coding methods, generates a prediction block for the current block being coded. In some examples, such as palette mode coding, mode selector 202 may not generate a prediction block, but instead generate syntax elements indicating how the block is reconstructed based on the selected palette. In such modes, mode selector 202 may provide these syntax elements to
[0155] Как описано выше, модуль 204 генерации остатка принимает данные видео для текущего блока и соответствующего блока предсказания. Затем модуль 204 генерации остатка генерирует остаточный блок для текущего блока. Для генерации остаточного блока, модуль 204 генерации остатка вычисляет разности от выборки к выборке между блоком предсказания и текущим блоком.[0155] As described above, the
[0156] Модуль 206 обработки преобразования применяет одно или более преобразований к остаточному блоку для генерации блока коэффициентов преобразования (упоминаемого здесь как “блок коэффициентов преобразования”). Модуль 206 обработки преобразования может применять различные преобразования к остаточному блоку для формирования блока коэффициентов преобразования. Например, модуль 206 обработки преобразования может применять дискретное косинусное преобразование (DCT), направленное преобразование, преобразование Карунена-Лоэва (KLT) или концептуально аналогичное преобразование к остаточному блоку. В некоторых примерах, модуль 206 обработки преобразования может выполнять множественные преобразования к остаточному блоку, например, первичное преобразование и вторичное преобразование, такое как преобразование вращения. В некоторых примерах, модуль 206 обработки преобразования не применяет преобразования к остаточному блоку.[0156] The
[0157] Модуль 208 квантования может квантовать коэффициенты преобразования в блоке коэффициентов преобразования, чтобы сформировать блок квантованных коэффициентов преобразования. Модуль 208 квантования может квантовать коэффициенты преобразования блока коэффициентов преобразования в соответствии со значением параметра квантования (QP), ассоциированным с текущим блоком. Кодер 200 видео (например, посредством модуля 202 выбора режима) может регулировать степень квантования, применяемого к блокам коэффициентов преобразования, ассоциированным с текущим блоком, путем настройки значения QP, ассоциированного с CU. Квантование может вводить потери информации, и, таким образом, квантованные коэффициенты преобразования могут иметь более низкую точность, чем исходные коэффициенты преобразования, сформированные модулем 206 обработки преобразования.[0157]
[0158] Модуль 210 обратного квантования и модуль 212 обработки обратного преобразования могут применять обратное квантование и обратные преобразования к блоку квантованных коэффициентов преобразования, соответственно, для восстановления остаточного блока из блока коэффициентов преобразования. Модуль 214 восстановления может формировать восстановленный блок, соответствующий текущему блоку (хотя, возможно, с некоторой степенью искажения), на основе восстановленного остаточного блока и блока предсказания, генерируемого модулем 202 выбора режима. Например, модуль 214 восстановления может добавлять выборки восстановленного остаточного блока к соответствующим выборкам из блока предсказания, генерируемого модулем 202 выбора режима, чтобы сформировать восстановленный блок.[0158] The
[0159] Модуль 216 фильтрации может выполнять одну или более операций фильтрации на восстановленных блоках. Например, модуль 216 фильтрации может выполнять операции устранения блочности для уменьшения артефактов блочности вдоль краев CU. Операции модуля 216 фильтрации могут быть пропущены, в некоторых примерах.[0159] The
[0160] Кодер 200 видео сохраняет восстановленные блоки в DPB 218. Например, в случаях, где операции модуля 216 фильтрации не требуются, модуль 214 восстановления может сохранять восстановленные блоки в DPB 218. В примерах, где требуются операции модуля 216 фильтрации, модуль 216 фильтрации может сохранять отфильтрованные восстановленные блоки в DPB 218. Модуль 222 оценки движения и модуль 224 компенсации движения могут извлекать опорное изображение из DPB 218, сформированную из восстановленных (и потенциально отфильтрованных) блоков, для интер-предсказания блоков последующих кодированных картинок. Кроме того, модуль интра-предсказания 226 может использовать восстановленные блоки в DPB 218 текущей изображения для интра-предсказания других блоков в текущем изображении.[0160] The video encoder 200 stores the reconstructed blocks in the DPB 218. For example, in cases where the operations of the
[0161] В общем, модуль 220 энтропийного кодирования может энтропийно кодировать синтаксические элементы, принятые от других функциональных компонентов кодера 200 видео. Например, модуль 220 энтропийного кодирования может энтропийно кодировать блоки квантованных коэффициентов преобразования из модуля 208 квантования. В качестве другого примера, модуль 220 энтропийного кодирования может энтропийно кодировать синтаксические элементы предсказания (например, информации движения для интер-предсказания или информацию интра-режима для интра-предсказания) из модуля 202 выбора режима. Модуль 220 энтропийного кодирования может выполнять одну или более операций энтропийного кодирования на синтаксических элементах, которые являются другим примером данных видео, чтобы генерировать энтропийно-закодированные данные. Например, модуль 220 энтропийного кодирования может выполнять операцию контекстно-адаптивного кодирования переменной длины (CAVLC), операцию CABAC, операцию кодирования от переменной к переменной (В2В) длине, операцию основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), операцию энтропийного кодирования с разбиением интервалов вероятности (PIPE), операцию экспоненциального кодирования Голомба или другой тип операции энтропийного кодирования данных. В некоторых примерах, модуль 220 энтропийного кодирования может работать в режиме обхода, где синтаксические элементы не являются энтропийно кодируемыми.[0161] In general,
[0162] Кодер 200 видео может выводить битовый поток, который включает в себя энтропийно закодированные синтаксические элементы, необходимые для восстановления блоков вырезки или изображения. В частности, модуль 220 энтропийного кодирования может выводить битовый поток.[0162] The video encoder 200 may output a bitstream that includes the entropy encoded syntax elements needed to reconstruct slice or picture blocks. In particular,
[0163] Описанные выше операции описаны по отношению к блоку. Такое описание следует понимать как операции для блока кодирования яркости и/или блоков кодирования цветности. Как описано выше, в некоторых примерах, блоки кодирования яркости и цветности являются компонентами яркости и цветности CU. В некоторых примерах, блок кодирования яркости и блоки кодирования цветности являются компонентами яркости и цветности PU.[0163] The operations described above are described with respect to a block. Such description is to be understood as operations for the luminance coding block and/or chrominance coding blocks. As described above, in some examples, the luminance and chrominance coding blocks are the luminance and chrominance components of the CU. In some examples, the luma coding block and the chrominance coding blocks are the luma and chrominance components of the PU.
[0164] В некоторых примерах, операции, выполняемые в отношении блока кодирования яркости, не требуется повторять для блоков кодирования цветности. В качестве одного примера, операции для идентификации вектора движения (MV) и опорной изображения для блока кодирования яркости не требуется повторять для идентификации MV и опорной изображения для блоков цветности. Скорее, MV для блока кодирования яркости может быть масштабирован для определения MV для блоков цветности, и опорное изображение может быть тем же самым. В качестве другого примера, процесс интра-предсказания может быть одинаковым для блока кодирования яркости и блоков кодирования цветности.[0164] In some examples, operations performed on a luminance coding block do not need to be repeated for chrominance coding blocks. As one example, the operations for identifying a motion vector (MV) and a reference picture for a luminance coding block need not be repeated for identifying an MV and a reference picture for chrominance blocks. Rather, the MV for the luminance coding block may be scaled to determine the MV for the chrominance blocks, and the reference picture may be the same. As another example, the intra-prediction process may be the same for the luminance coding block and the chrominance coding blocks.
[0165] Кодер 200 видео представляет пример устройства, сконфигурированного для кодирования данных видео, включающего в себя память, сконфигурированную, чтобы хранить данные видео, и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы сохранять информацию движения для первой строки единиц дерева кодирования (CTU) в первом буфере памяти предсказателя вектора движения (MVP) истории и сохранять информацию движения для второй строки CTU во втором буфере памяти MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0165] The video encoder 200 is an example of an apparatus configured to encode video data, including a memory configured to store video data and one or more processing units implemented in circuits and configured to store motion information for a first row of coding tree units (CTUs) in a first history motion vector predictor (MVP) memory buffer and store motion information for a second CTU row in a second history MVP memory buffer, wherein the second CTU row is different from the first CTU row.
[0166] Кодер 200 видео также представляет пример устройства, сконфигурированного, чтобы кодировать данные видео, включающего в себя память, сконфигурированную, чтобы хранить данные видео, и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы сохранять кодированную информацию движения в буфере вектора движения предсказателя (MVP) истории, сохранять другой тип информации движения в буфере MVP истории, и кодировать информацию движения блока данных видео с использованием информации движения буфера MVP истории.[0166] The video encoder 200 also represents an example of an apparatus configured to encode video data, including a memory configured to store video data, and one or more processing units implemented in circuits and configured to store encoded motion information in a history motion vector predictor (MVP) buffer, store another type of motion information in the history MVP buffer, and encode motion information of a video data block using the motion information of the history MVP buffer.
[0167] Кодер 200 видео также представляет пример устройства, сконфигурированного для кодирования данных видео, включающего в себя память, сконфигурированную, чтобы хранить данные видео, и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы сохранять множество различных типов информации движения в соответствующих различных буферах предсказателя вектора движения (MVP) истории.[0167] The video encoder 200 also represents an example of an apparatus configured to encode video data, including a memory configured to store video data and one or more processing modules implemented in circuits and configured to store a plurality of different types of motion information in respective different history motion vector predictor (MVP) buffers.
[0168] Фиг. 15 представляет собой блок-схему, иллюстрирующую примерный декодер 300 видео, который может выполнять методы настоящего раскрытия. Фиг. 15 обеспечена в целях пояснения и не ограничивает методы, широко иллюстрируемые и описанные в настоящем раскрытии. Для целей пояснения, настоящее раскрытие описывает декодер 300 видео в соответствии с методами JEM и HEVC. Однако методы настоящего раскрытия могут выполняться устройствами кодирования видео, которые сконфигурированы в соответствии с другими стандартами кодирования видео.[0168] FIG. 15 is a block diagram illustrating an exemplary video decoder 300 that may perform the techniques of the present disclosure. Fig. 15 is provided for purposes of explanation and does not limit the methods broadly illustrated and described in this disclosure. For purposes of explanation, the present disclosure describes a video decoder 300 in accordance with JEM and HEVC techniques. However, the methods of the present disclosure may be performed by video coding devices that are configured in accordance with other video coding standards.
[0169] В примере на фиг. 15, декодер 300 видео включает в себя память 320 буфера кодированной изображения (CPB), модуль 302 энтропийного декодирования, модуль 304 обработки предсказания, модуль 306 обратного квантования, модуль 308 обработки обратного преобразования, модуль 310 восстановления, модуль 312 фильтрации и буфер 314 декодированных картинок (DPB). Любое или все из памяти CPB 320, модуля 302 энтропийного декодирования, модуля 304 обработки предсказания, модуля 306 обратного квантования, модуля 308 обработки обратного преобразования, модуля 310 восстановления, модуля 312 фильтрации и DPB 314 могут быть реализованы в одном или более процессорах или в схемах обработки. Кроме того, декодер 300 видео может включать в себя дополнительные или альтернативные процессоры или схемы обработки для выполнения этих и других функций.[0169] In the example of FIG. 15, the video decoder 300 includes a coded picture buffer (CPB) memory 320, an entropy decoding unit 302, a prediction processing unit 304, an inverse quantization unit 306, an inverse
[0170] Модуль 304 обработки предсказания включает в себя модуль 316 компенсации движения и модуль 318 интра-предсказания. Модуль 304 обработки предсказания может включать в себя модули суммирования для выполнения предсказания в соответствии с другими режимами предсказания. В качестве примеров, модуль 304 обработки предсказания может включать в себя модуль палитры, модуль внутриблочного копирования (который может образовывать часть модуля 316 компенсации движения), аффинный модуль, модуль линейной модели (LM) или тому подобное. В других примерах, декодер 300 видео может включать в себя больше, меньше или другие функциональные компоненты. [0170] The prediction processing module 304 includes a motion compensation module 316 and an intra prediction module 318 . Prediction processing unit 304 may include adders for performing prediction in accordance with other prediction modes. As examples, prediction processing module 304 may include a palette module, an intra-block copy module (which may form part of motion compensation module 316), an affine module, a linear model (LM) module, or the like. In other examples, video decoder 300 may include more, less, or other functional components.
[0171] Память 320 CPB может хранить данные видео, такие как закодированный битовый поток видео, для декодирования компонентами декодера 300 видео. Данные видео, хранящиеся в памяти 320 CPB, могут быть получены, например, из считываемого компьютером носителя 110 (фиг. 1). Память 320 CPB может включать в себя CPB, который сохраняет закодированные данные видео (например, синтаксические элементы) из закодированного битового потока видео. Кроме того, память 320 CPB может хранить данные видео, отличные от синтаксических элементов закодированной изображения, такие как временные данные, представляющие выходы из различных модулей декодера 300 видео. DPB 314 обычно хранит декодированные изображения, которые декодер 300 видео может выводить и/или использовать в качестве опорных данных видео при декодировании последующих данных или картинок закодированного битового потока видео. Память 320 CPB и DPB 314 могут быть образованы любым из множества устройств памяти, таких как динамическая память с произвольным доступом (DRAM), включая синхронную DRAM (SDRAM), магниторезистивную RAM (MRAM), резистивную RAM (RRAM) или другие типы устройств памяти. Память 320 CPB и DPB 314 могут быть предоставлены одним и тем же устройством памяти или отдельными устройствами памяти. В различных примерах, память 320 CPB может быть в чипе с другими компонентами декодера 300 видео или вне чипа относительно этих компонентов.[0171] The CPB memory 320 may store video data, such as an encoded video bitstream, for decoding by components of the video decoder 300. The video data stored in the CPB memory 320 may be obtained, for example, from a computer-readable medium 110 (FIG. 1). CPB memory 320 may include a CPB that stores encoded video data (eg, syntax elements) from an encoded video bitstream. In addition, the CPB memory 320 may store video data other than the syntax elements of the encoded picture, such as temporary data representing outputs from various modules of the video decoder 300.
[0172] Дополнительно или альтернативно, в некоторых примерах, декодер 300 видео может извлекать закодированные данные видео из памяти 120 (фиг. 1). То есть память 120 может хранить данные, как обсуждено выше для памяти 320 CPB. Аналогично, память 120 может хранить инструкции, которые должны исполняться декодером 300 видео, когда некоторая или вся из функциональности декодера 300 видео реализована в программном обеспечении, подлежащем исполнению схемой обработки декодера 300 видео.[0172] Additionally or alternatively, in some examples, video decoder 300 may retrieve encoded video data from memory 120 (FIG. 1). That is, memory 120 may store data as discussed above for CPB memory 320. Similarly, memory 120 may store instructions to be executed by video decoder 300 when some or all of the functionality of video decoder 300 is implemented in software to be executed by video decoder 300 processing circuitry.
[0173] Различные модули, показанные на фиг. 15, проиллюстрированы, чтобы способствовать пониманию операций, выполняемых декодером 300 видео. Модули могут быть реализованы как фиксированные функциональные схемы, программируемые схемы или их комбинации. Подобно фиг. 14, фиксированные функциональные схемы относятся к схемам, которые обеспечивают определенную функциональность и заранее настроены на операции, которые могут выполняться. Программируемые схемы относятся к схемам, которые могут быть запрограммированы для выполнения различных задач и обеспечивают гибкую функциональность в операциях, которые могут выполняться. Например, программируемые схемы могут исполнять программное обеспечение или микропрограммное обеспечение, которое побуждает программируемые схемы работать таким образом, как определяется инструкциями программного обеспечения или микропрограммного обеспечения. Фиксированные функциональные схемы могут исполнять программные инструкции (например, принимать параметры или выводить параметры), но типы операций, которые выполняют фиксированные функциональные схемы, обычно неизменны. В некоторых примерах, один или более модулей могут быть отдельными схемными блоками (фиксированными функциональными блоками или программируемыми блоками), а в некоторых примерах, один или более модулей могут быть интегральными схемами.[0173] The various modules shown in FIG. 15 are illustrated to aid in understanding the operations performed by the video decoder 300. The modules may be implemented as fixed function circuits, programmable circuits, or combinations of both. Like FIG. 14, fixed functional circuits refer to circuits that provide certain functionality and are pre-configured for operations that can be performed. Programmable circuits refer to circuits that can be programmed to perform various tasks and provide flexible functionality in the operations that can be performed. For example, the programmable circuits may execute software or firmware that causes the programmable circuits to operate in a manner determined by the instructions of the software or firmware. Fixed function circuits can execute program instructions (for example, accept parameters or output parameters), but the types of operations that fixed function circuits perform are usually immutable. In some examples, one or more modules may be separate circuit blocks (fixed functional blocks or programmable blocks), and in some examples, one or more modules may be integrated circuits.
[0174] Декодер 300 видео может включать в себя ALU, EFU, цифровые схемы, аналоговые схемы и/или программируемые ядра, образованные программируемыми схемами. В примерах, где операции декодера 300 видео выполняются программным обеспечением, исполняемым на программируемых схемах, однокристальная память (в чипе) или память вне чипа может хранить инструкции (например, объектный код) программного обеспечения, которые получает и исполняет декодер 300 видео.[0174] Video decoder 300 may include ALUs, EFUs, digital circuits, analog circuits, and/or programmable cores formed by programmable circuits. In instances where the operations of the video decoder 300 are performed by software running on programmable circuits, the on-chip (on-chip) or off-chip memory may store instructions (eg, object code) of the software that the video decoder 300 receives and executes.
[0175] Модуль 302 энтропийного декодирования может получать закодированные данные видео из CPB и энтропийно декодировать данные видео для воспроизведения синтаксических элементов. Модуль 304 обработки предсказания, модуль 306 обратного квантования, модуль 308 обработки обратного преобразования, модуль 310 восстановления и модуль 312 фильтрации могут генерировать декодированные данные видео на основе синтаксических элементов, извлеченных из битового потока.[0175] The entropy decoding module 302 may receive the encoded video data from the CPB and entropy decode the video data to reproduce the syntax elements. Prediction processing module 304, inverse quantization module 306, inverse
[0176] В общем, декодер 300 видео восстанавливает изображение на поблочной основе. Декодер 300 видео может выполнять операцию восстановления на каждом блоке индивидуально (где блок, который восстанавливается, т.е. декодируется, в текущее время, может называться “текущим блоком”). [0176] In general, video decoder 300 reconstructs an image on a block-by-block basis. The video decoder 300 may perform the recovery operation on each block individually (where the block that is being recovered, ie, decoded, at the current time may be referred to as the “current block”).
[0177] Модуль 302 энтропийного декодирования может энтропийно декодировать синтаксические элементы, определяющие квантованные коэффициенты преобразования блока квантованных коэффициентов преобразования, а также информацию преобразования, такую как указание(я) параметра квантования (QP) и/или режима преобразования. Модуль 306 обратного квантования может использовать QP, ассоциированный с блоком квантованных коэффициентов преобразования, для определения степени квантования и, аналогично, степени обратного квантования для применения модулем 306 обратного квантования. Модуль 306 обратного квантования может, например, выполнять побитовую операцию сдвига влево для обратного квантования квантованных коэффициентов преобразования. При этом модуль 306 обратного квантования может формировать блок коэффициентов преобразования, включающий коэффициенты преобразования.[0177] Entropy decoding module 302 can entropy decode syntax elements defining quantized transform coefficients of a block of quantized transform coefficients, as well as transform information such as quantization parameter (QP) indication(s) and/or transform mode. Inverse quantization module 306 may use the QP associated with the block of quantized transform coefficients to determine the degree of quantization and, similarly, the degree of inverse quantization to be applied by inverse quantization module 306 . Inverse quantizer 306 may, for example, perform a bitwise left shift operation to inverse quantize the quantized transform coefficients. Here, inverse quantizer 306 may generate a transform coefficient block including transform coefficients.
[0178] После того как модуль 306 обратного квантования сформировал блок коэффициентов преобразования, модуль 308 обработки обратного преобразования может применить одно или более обратных преобразований к блоку коэффициентов преобразования для генерации остаточного блока, ассоциированного с текущим блоком. Например, блок обработки 308 обратного преобразования может применять обратное DCT, обратное целочисленное преобразование, обратное преобразование Карунена-Лоэва (KLT), обратное преобразование вращения, обратное направленное преобразование или другое обратное преобразование к блоку коэффициентов.[0178] After inverse quantizer 306 has generated a transform coefficient block, inverse
[0179] Кроме того, модуль 304 обработки предсказания генерирует блок предсказания в соответствии с синтаксическими элементами информации предсказания, которые были энтропийно декодированы модулем 302 энтропийного декодирования. Например, если синтаксические элементы информации предсказания указывают, что текущий блок является интер-предсказанным, модуль 316 компенсации движения может генерировать блок предсказания. В этом случае, синтаксические элементы информации предсказания могут указывать опорное изображение в DPB 314, из которой следует извлекать опорный блок, а также вектор движения, идентифицирующий местоположение опорного блока в опорном изображении относительно местоположения текущего блока в текущем изображении. Модуль 316 компенсации движения может, в принципе, выполнять процесс интер-предсказания способом, который по существу аналогичен тому, который описан в отношении модуля 224 компенсации движения (фиг. 14).[0179] In addition, the prediction processing unit 304 generates a prediction block in accordance with the prediction information syntax elements that have been entropy decoded by the entropy decoding unit 302 . For example, if the prediction information syntax elements indicate that the current block is inter-predicted, motion compensation module 316 may generate a prediction block. In this case, the prediction information syntax elements may indicate a reference picture in the
[0180] В соответствии с методами настоящего раскрытия, буфер 314 декодированных картинок может включать в себя один или более буферов MVP истории для строк CTU. То есть каждой строке CTU может быть выделен свой собственный буфер MVP, или один буфер MVP может быть использован для множества строк CTU. В любом случае, декодер 300 видео может сбросить буфер MVP для строки CTU в начале кодирования видео данных строки CTU. Модуль 316 компенсации движения или другой модуль декодера 300 видео может быть сконфигурирован, чтобы хранить только уникальные вектора движения в буфере MVP. Как обсуждалось выше, модуль 316 компенсации движения или другой модуль декодера 300 видео может быть сконфигурирован, чтобы использовать правило FIFO для управления информацией движения, сохраненной в буфере MVP, так что при добавлении вектора движения в буфер MVP, если буфер MVP заполнен, модуль 316 компенсации движения может удалить самый ранний добавленный вектор движения из буфера MVP. В некоторых примерах, декодер 300 видео может поддерживать различные соответствующие буферы MVP для каждой из множества моделей движения, таких как, например, аффинная модель движения, информация движения режима внутриблочного копирования, информация движения компенсации локального освещения, подблочный MVP и временное предсказание движения.[0180] In accordance with the techniques of the present disclosure, decoded
[0181] В качестве другого примера, если синтаксические элементы информации предсказания указывают, что текущий блок является интра-предсказанным, модуль 318 интра-предсказания может генерировать блок предсказания в соответствии с режимом интра-предсказания, указанным синтаксическими элементами информации предсказания. Вновь, модуль 318 интра-предсказания может, в принципе, выполнять процесс интра-предсказания способом, который по существу аналогичен описанному в отношении модуля 226 интра-предсказания (фиг. 14). Модуль 318 интра-предсказания может извлекать данные из соседних выборок для текущего блока из DPB 314.[0181] As another example, if the prediction syntax elements indicate that the current block is intra-predicted, intra-prediction module 318 may generate a prediction block in accordance with the intra-prediction mode indicated by the prediction syntax elements. Again, intra-prediction module 318 can, in principle, perform the intra-prediction process in a manner that is substantially the same as described with respect to intra-prediction module 226 (FIG. 14). Intra-prediction module 318 may extract data from adjacent samples for the current block from
[0182] Модуль 310 восстановления может восстанавливать текущий блок с использованием блока предсказания и остаточного блока. Например, модуль 310 восстановления может добавлять выборки остаточного блока к соответствующим выборкам блока предсказания для восстановления текущего блока.[0182]
[0183] Модуль 312 фильтрации может выполнять одну или более операций фильтрации на восстановленных блоках. Например, модуль 312 фильтрации может выполнять операции устранения блочности для уменьшения артефактов блочности вдоль краев восстановленных блоков. Операции модуля 312 фильтрации не обязательно выполняются во всех примерах.[0183] Filtering module 312 may perform one or more filtering operations on the recovered blocks. For example, filter module 312 may perform deblocking operations to reduce deblocking artifacts along the edges of the reconstructed blocks. The operations of filter module 312 are not necessarily performed in all examples.
[0184] Декодер 300 видео может сохранить восстановленные блоки в DPB 314. Например, в случаях, когда операции модуля 312 фильтрации не требуются, модуль 310 восстановления может сохранить восстановленные блоки в DPB 314. В случаях, когда требуются операции модуля 312 фильтрации, модуль 312 фильтрации может сохранить отфильтрованные восстановленные блоки в DPB 314. Как обсуждалось выше, DPB 314 может предоставлять опорную информацию, такую как выборки текущей изображения для интра-предсказания и ранее декодированные изображения для последующей компенсации движения, в модуль обработки 304 предсказания. Кроме того, декодер 300 видео может выводить декодированные изображения из DPB 314 для последующего представления на устройстве отображения, таком как устройство 118 отображения на фиг. 1.[0184] The video decoder 300 may store the reconstructed blocks in the
[0185] Декодер 300 видео представляет пример устройства, сконфигурированного для декодирования данных видео, включающего в себя память, сконфигурированную, чтобы хранить данные видео, и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы сохранять информацию движения для первой строки единиц дерева кодирования (CTU) (которая может обрабатываться первым подпроцессом процесса кодирования видео) в первом буфере памяти предсказателя вектора движения (MVP) истории, и сохранять информации движения для второй строки CTU (которая может обрабатываться вторым подпроцессом процесса кодирования видео) во втором буфере памяти MVP истории, причем вторая строка CTU отличается от первой строки CTU. Второй подпроцесс может отличаться от первого подпроцесса.[0185] The video decoder 300 is an example of an apparatus configured to decode video data, including a memory configured to store video data, and one or more processing units implemented in circuitry and configured to store motion information for a first row of coding tree units (CTU) (which may be processed by a first sub-process of the video encoding process) in a first history motion vector predictor (MVP) memory buffer, and store motion information for a second row of CTUs (which may be processed by a second video encoding process subprocess) in the second history MVP memory buffer, with the second CTU row different from the first CTU row. The second sub-process may be different from the first sub-process.
[0186] Декодер 300 видео также представляет пример устройства, сконфигурированного для декодирования данных видео, включающего в себя память, сконфигурированную, чтобы хранить данные видео, и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы сохранять кодированную информацию движения в буфере предсказателя вектора движения (MVP) истории, сохранять другой тип информации движения в буфере MVP истории, и кодировать информацию движения для блока данных видео с использованием информации движения буфера MVP истории.[0186] The video decoder 300 also represents an example of an apparatus configured to decode video data, including a memory configured to store video data, and one or more processing units implemented in circuits and configured to store encoded motion information in a history motion vector predictor (MVP) buffer, store another type of motion information in the history MVP buffer, and encode motion information for a block of video data using the motion information of the history MVP buffer.
[0187] Декодер 300 видео также представляет пример устройства, сконфигурированного для декодирования данных видео, включающего в себя память, сконфигурированную, чтобы хранить данные видео, и один или более модулей обработки, реализованных в схемах и сконфигурированных, чтобы сохранять множество различных видов информации движения в соответствующих буферах предсказателя вектора движения (MVP) истории.[0187] The video decoder 300 also represents an example of an apparatus configured to decode video data, including a memory configured to store video data and one or more processing modules implemented in circuits and configured to store a plurality of different kinds of motion information in respective history motion vector predictor (MVP) buffers.
[0188] На фиг. 16 представлена блок-схема последовательности операций, иллюстрирующая пример способа для кодирования текущего блока в соответствии с методами настоящего раскрытия. Текущий блок может содержать текущую CU. Хотя описание приведено относительно кодера 200 видео (фиг. 1 и 14), следует понимать, что другие устройства могут быть сконфигурированы для выполнения способа, аналогичного показанному на фиг. 16.[0188] FIG. 16 is a flowchart illustrating an example of a method for encoding a current block in accordance with the methods of the present disclosure. The current block may contain the current CU. While the description has been made with respect to the video encoder 200 (FIGS. 1 and 14), it should be understood that other devices may be configured to perform a method similar to that shown in FIGS. 16.
[0189] В этом примере, кодер 200 видео первоначально предсказывает текущий блок с помощью информации движения (350). Например, кодер 200 видео может сформировать блок предсказания для текущего блока с использованием информации движения. Кодер 200 видео может затем вычислить остаточный блок для текущего блока (352). Чтобы вычислить остаточный блок, кодер 200 видео может вычислить разность между исходным, некодированным блоком и блоком предсказания для текущего блока. Кодер 200 видео может затем преобразовывать и квантовать коэффициенты остаточного блока (354). Затем кодер 200 видео может сканировать квантованные коэффициенты преобразования остаточного блока (356). Во время сканирования или после сканирования, кодер 200 видео может энтропийно кодировать коэффициенты и информацию движения (358) с использованием методов настоящего раскрытия. Кодер 200 видео может кодировать коэффициенты с использованием CAVLC или CABAC.[0189] In this example, the video encoder 200 initially predicts the current block using motion information (350). For example, video encoder 200 may generate a prediction block for the current block using the motion information. Video encoder 200 may then calculate a residual block for the current block (352). To calculate the residual block, video encoder 200 may calculate the difference between the original, uncoded block and the prediction block for the current block. Video encoder 200 may then transform and quantize the coefficients of the residual block (354). Video encoder 200 may then scan the quantized transform coefficients of the residual block (356). During or after scanning, video encoder 200 may entropy encode coefficients and motion information (358) using the techniques of the present disclosure. Video encoder 200 may encode the coefficients using CAVLC or CABAC.
[0190] Кодер 200 видео может формировать список кандидатов информации движения, включающий, например, кандидатов HMVP, в соответствии с любым или всеми из методов настоящего раскрытия, выбрать индекс кандидата, представляющий предсказатель для информации движения блока, и энтропийно кодировать индекс кандидата. В соответствии с методами настоящего раскрытия, кодер 200 видео может сбросить буфер MVP перед использованием буфера MVP, чтобы сохранить информацию движения соответствующей строки CTU. В некоторых примерах, каждая строка CTU может иметь свой собственный буфер MVP, или один буфер MVP может использоваться для множества строк CTU. Кроме того, кодер 200 видео может сохранить множество типов информации движения в буферах MVP, например, одном и том же буфере или различных буферах соответствующих моделей движения. Кодер 200 видео может кодировать информацию движения текущего блока с использованием предсказателей векторов движения, выбранных из данных буфера MVP. Кодер 200 видео может затем выводить энтропийно закодированные данные блока (360), например, включающие в себя данные для коэффициентов и информацию движения, такую как индекс кандидата.[0190] The video encoder 200 may generate a motion information candidate list including, for example, HMVP candidates in accordance with any or all of the methods of the present disclosure, select a candidate index representing a predictor for the block motion information, and entropy encode the candidate index. In accordance with the techniques of the present disclosure, the video encoder 200 may flush the MVP buffer before using the MVP buffer to store the motion information of the corresponding CTU line. In some examples, each CTU row may have its own MVP buffer, or one MVP buffer may be used for multiple CTU rows. In addition, the video encoder 200 may store multiple types of motion information in MVP buffers, such as the same buffer or different buffers of respective motion models. The video encoder 200 may encode the motion information of the current block using motion vector predictors selected from the MVP buffer data. Video encoder 200 may then output entropy encoded block data (360), for example including data for coefficients and motion information such as a candidate index.
[0191] Таким образом, способ в соответствии с фиг. 16 представляет пример способа, включающего в себя сохранение информации движения для изображения первой строки единиц дерева кодирования (CTU) в первом буфере памяти предсказателя вектора движения (MVP) истории; сброс второго буфера памяти MVP истории; и после сброса второго буфера MVP истории, сохранение информации движения для изображения второй строки CTU во втором буфере MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0191] Thus, the method according to FIG. 16 shows an example of a method including storing motion information for a first row of coding tree units (CTU) image in a first history motion vector predictor (MVP) memory buffer; flushing the second MVP history buffer; and after flushing the second history MVP buffer, storing motion information for the second CTU row image in the second history MVP buffer, the second CTU row being different from the first CTU row.
[0192] Способ согласно фиг. 16 также представляет пример способа, включающего в себя сохранение информации движения в буфере предсказателя вектора движения (MVP) истории; сохранение другого типа информации движения в буфере MVP истории; и кодирование информации движения блока данных видео с использованием информации движения буфера MVP истории.[0192] The method of FIG. 16 also shows an example of a method including storing motion information in a history motion vector predictor (MVP) buffer; storing a different type of motion information in the history MVP buffer; and encoding the motion information of the video data block using the motion information of the history buffer MVP.
[0193] Способ на фиг. 16 также представляет пример способа, включающего в себя сохранение множества различных типов информации движения в соответствующих различных буферах предсказателей векторов движения (MVP) истории.[0193] The method of FIG. 16 also shows an example of a method including storing a plurality of different types of motion information in respective different history motion vector predictor (MVP) buffers.
[0194] На фиг. 17 представлена блок-схема последовательности операций, иллюстрирующая пример способа для декодирования текущего блока данных видео в соответствии с методами настоящего раскрытия. Текущий блок может содержать текущую CU. Хотя описание приведено в отношении декодера 300 видео (фиг. 1 и 15), следует понимать, что другие устройства могут быть сконфигурированы, чтобы выполнять способ, аналогичный показанному на фиг. 17.[0194] FIG. 17 is a flowchart illustrating an example of a method for decoding a current block of video data in accordance with the techniques of the present disclosure. The current block may contain the current CU. While the description has been made with respect to the video decoder 300 (FIGS. 1 and 15), it should be understood that other devices may be configured to perform a method similar to that shown in FIGS. 17.
[0195] Декодер 300 видео может принимать энтропийно кодированные данные для текущего блока, такие как энтропийно кодированная информация предсказания и энтропийно кодированные данные для коэффициентов остаточного блока, соответствующего текущему блоку (370). Как обсуждалось выше, энтропийно кодированная информация предсказания может включать в себя, например, индекс кандидата в список кандидатов, который может включать кандидатов HMVP в соответствии с методами настоящего раскрытия. Декодер 300 видео может энтропийно декодировать энтропийно кодированные данные, чтобы определять информацию предсказания для текущего блока и восстанавливать коэффициенты остаточного блока (372). Декодер 300 видео может предсказывать текущий блок (374), например, с использованием режима интер-предсказания, как указано информацией предсказания для текущего блока, что вычислить блок предсказания для текущего блока.[0195] The video decoder 300 may receive entropy coded data for the current block, such as entropy coded prediction information and entropy coded data for residual block coefficients corresponding to the current block (370). As discussed above, the entropy coded prediction information may include, for example, a candidate list candidate index, which may include HMVP candidates in accordance with the techniques of the present disclosure. The video decoder 300 may entropy decode the entropy encoded data to determine prediction information for the current block and recover coefficients of the residual block (372). The video decoder 300 may predict the current block (374), for example, using the inter-prediction mode as indicated by the prediction information for the current block to compute a prediction block for the current block.
[0196] В частности, декодер 300 видео может формировать список кандидатов, включающий кандидатов HMVP, как описано выше, а затем определять кандидата из списка кандидатов, чтобы использовать в качестве предсказателя вектора движения для текущего блока с использованием декодированного индекса кандидата. В соответствии с методами настоящего раскрытия, декодер 300 видео может сбросить буфер MVP перед использованием буфера MVP для сохранения информации движения соответствующей строки CTU. В некоторых примерах, каждая строка CTU может иметь свой собственный буфер MVP, или один буфер MVP может использоваться для множества строк CTU. Кроме того, декодер 300 видео может сохранить множество типов информации движения в буферах MVP, например, в том же самом буфере или различных буферах, соответствующих моделям движения. Декодер 300 видео может выбирать с использованием предсказателей векторов движения из данных буфера MVP.[0196] Specifically, video decoder 300 may generate a candidate list including HMVP candidates as described above, and then determine a candidate from the candidate list to use as a motion vector predictor for the current block using the decoded candidate index. In accordance with the techniques of the present disclosure, the video decoder 300 may flush the MVP buffer before using the MVP buffer to store motion information of the corresponding CTU line. In some examples, each CTU row may have its own MVP buffer, or one MVP buffer may be used for multiple CTU rows. In addition, the video decoder 300 may store multiple types of motion information in MVP buffers, such as the same buffer or different buffers corresponding to motion models. Video decoder 300 may select using motion vector predictors from MVP buffer data.
[0197] Декодер 300 видео может затем восстановить вектор движения для текущего блока с использованием предсказателя вектора движения, а затем предсказать текущий блок с использованием вектора движения, чтобы сгенерировать блок предсказания. Декодер 300 видео может затем обратно сканировать восстановленные коэффициенты (376), чтобы создать блок квантованных коэффициентов преобразования. Декодер 300 видео может затем обратно квантовать и обратно преобразовать коэффициенты для получения остаточного блока (378). Декодер 300 видео может, в конечном счете, декодировать текущий блок путем комбинирования блока предсказания и остаточного блока (380).[0197] The video decoder 300 may then reconstruct the motion vector for the current block using the motion vector predictor, and then predict the current block using the motion vector to generate a prediction block. Video decoder 300 may then backscan the reconstructed coefficients (376) to create a block of quantized transform coefficients. Video decoder 300 may then inversely quantize and inversely transform the coefficients to obtain a residual block (378). Video decoder 300 may eventually decode the current block by combining the prediction block and the residual block (380).
[0198] Таким образом, способ согласно фиг. 17 представляет пример способа, включающего в себя сохранение информации движения для первой строки единиц дерева кодирования (CTU) изображения в первом буфере памяти предсказателя вектора движения (MVP) истории; сброс второго буфера памяти MVP истории; и после сброса второго буфера MVP истории, сохранение информации движения для второй строки CTU изображения во втором буфере MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0198] Thus, the method of FIG. 17 shows an example of a method including storing motion information for a first row of coding tree units (CTUs) of a picture in a first history motion vector predictor (MVP) memory buffer; flushing the second MVP history memory buffer; and after flushing the second history MVP buffer, storing the motion information for the second image CTU line in the second history MVP buffer, the second CTU line being different from the first CTU line.
[0199] Способ согласно фиг. 17 также представляет пример способа, включающего в себя сохранение информации движения в буфере вектора движения предсказателя (MVP) истории; сохранение другого типа информации движения в буфере MVP истории; и кодирование информации движения блока данных видео с использованием информации движения буфера MVP истории.[0199] The method of FIG. 17 also shows an example of a method including storing motion information in a history predictor motion vector (MVP) buffer; storing a different type of motion information in the history MVP buffer; and encoding the motion information of the video data block using the motion information of the history buffer MVP.
[0200] Способ согласно фиг. 17 также представляет пример способа, включающего в себя сохранение множества различных типов информации движения в соответствующих буферах предсказателя вектора движения (MVP) истории.[0200] The method of FIG. 17 also shows an example of a method including storing a plurality of different types of motion information in respective history motion vector predictor (MVP) buffers.
[0201] На фиг. 18 представлена блок-схема последовательности операций, иллюстрирующая примерный способ кодирования (кодирования или декодирования) данных видео в соответствии с методами настоящего раскрытия. Например, способ согласно фиг. 18 может быть выполнен во время этапа 350 на фиг. 16 или этапа 374 на фиг. 17. Для примера и пояснения, способ согласно фиг. 18 поясняется в отношении декодера 300 видео, хотя кодер 200 видео может также выполнять этот или аналогичный способ.[0201] In FIG. 18 is a flowchart illustrating an exemplary method for encoding (encoding or decoding) video data in accordance with the techniques of the present disclosure. For example, the method according to FIG. 18 may be performed during
[0202] Декодер 300 видео может кодировать блоки первой строки CTU изображения (390), например, с использованием интра- или интер-предсказания. Декодер 300 видео сохраняет информацию движения первой строки единиц дерева кодирования (CTU) изображения в первом буфере (392), например, DPB 314. Декодер 300 видео может использовать информацию движения первого буфера, чтобы кодировать информацию движения, используемую во время кодирования интер-предсказания. В некоторых примерах, первый подпроцесс процесса кодирования видео, выполняемого декодером 300 видео, может кодировать первую строку CTU.[0202] The video decoder 300 may encode blocks of the first row CTU of the picture (390), for example, using intra- or inter-prediction. The video decoder 300 stores the motion information of the first row of image coding tree units (CTUs) in a first buffer (392), for example,
[0203] Декодер 300 видео может также сбросить второй буфер (394), например, DPB 314. Второй буфер может быть тем же самым, что и первый буфер, или другим буфером. Декодер 300 видео может также кодировать блоки второй строки CTU (396). Декодер 300 видео может сохранить информацию движения второй строки CTU во втором буфере (398). В некоторых примерах, второй подпроцесс процесса кодирования видео, выполняемого декодером 300 видео, может кодировать вторую строку CTU, причем второй подпроцесс отличается от первого подпроцесса.[0203] The video decoder 300 may also flush the second buffer (394), such as
[0204] Таким образом, способ согласно фиг. 18 представляет пример способа, включающего в себя сохранение информации движения для первой строки единиц дерева кодирования (CTU) изображения в первом буфере памяти предсказателя вектора движения (MVP) истории; сброс второго буфера памяти MVP истории; и после сброса второго буфера MVP истории, сохранение информации движения для второй строки CTU изображения во втором буфере MVP истории, причем вторая строка CTU отличается от первой строки CTU.[0204] Thus, the method of FIG. 18 shows an example of a method including storing motion information for a first row of coding tree units (CTUs) of a picture in a first history motion vector predictor (MVP) memory buffer; flushing the second MVP history memory buffer; and after flushing the second history MVP buffer, storing the motion information for the second image CTU line in the second history MVP buffer, the second CTU line being different from the first CTU line.
[0205] Следует иметь в виду, что, в зависимости от примера, некоторые действия или события любого из описанных здесь методов могут выполняться в другой последовательности, могут добавляться, объединяться или вообще исключаться (например, не все описанные действия или события необходимы для практической реализации методов). Кроме того, в некоторых примерах, действия или события могут выполняться одновременно, например, посредством многопоточной обработки, обработки прерываний или с помощью множества процессоров, а не последовательно.[0205] It should be borne in mind that, depending on the example, some actions or events of any of the methods described here may be performed in a different sequence, may be added, combined, or excluded altogether (for example, not all of the described actions or events are necessary for the practical implementation of the methods). In addition, in some examples, actions or events may be performed simultaneously, such as through multi-threading, interrupt handling, or multiple processors, rather than sequentially.
[0206] В одном или более примерах, описанные функции могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или любой их комбинации. При реализации в программном обеспечении, функции могут сохраняться или передаваться как одна или более инструкций или кода на считываемом компьютером носителе и исполняться аппаратным модулем обработки. Считываемые компьютером носители могут включать в себя считываемые компьютером носители, которые соответствуют осязаемому носителю, такому как носитель хранения данных, или коммуникационной среде, включающей в себя любой носитель, который обеспечивает передачу компьютерной программы из одного места в другое, например, в соответствии с протоколом связи. Таким образом, считываемые компьютером носители обычно могут соответствовать (1) осязаемым считываемым компьютером носителям хранения, которые являются энергонезависимыми, или (2) коммуникационному носителю (среде), такому как сигнал или несущая волна. Носителями хранения данных могут быть любые доступные носители, к которым может получить доступ один или более компьютеров или один или более процессоров для извлечения инструкций, кода и/или структур данных для реализации методов, описанных в настоящем раскрытии. Компьютерный программный продукт может включать в себя считываемый компьютером носитель.[0206] In one or more examples, the described functions may be implemented in hardware, software, firmware, or any combination thereof. When implemented in software, the functions may be stored or transmitted as one or more instructions or code on a computer-readable medium and executed by a hardware processing unit. Computer-readable media may include computer-readable media that corresponds to a tangible medium, such as a storage medium, or a communication medium, including any medium that enables the transfer of a computer program from one place to another, for example, in accordance with a communication protocol. Thus, computer-readable media can typically correspond to (1) tangible computer-readable storage media that is non-volatile, or (2) a communication medium such as a signal or carrier wave. Storage media can be any available media that can be accessed by one or more computers or one or more processors to retrieve instructions, code, and/or data structures for implementing the methods described in this disclosure. The computer program product may include a computer-readable medium.
[0207] В качестве примера, а не ограничения, такие считываемые компьютером носители хранения могут содержать RAM, ROM, EEPROM, CD-ROM или другие устройства хранения на оптических дисках, устройства хранения на магнитных дисках или другие магнитные устройства хранения, флэш-память или любой другой носитель, который может быть использован для хранения желательного программного кода в форме инструкций или структур данных и к которому может получить доступ компьютер. Кроме того, любое соединение надлежащим образом определяется как считываемый компьютером носитель. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, волоконно-оптического кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасное излучение, радио и микроволны, то коаксиальный кабель, волоконно-оптический кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасное излучение, радио и микроволны, включаются в определение носителя. Однако следует понимать, что считываемые компьютером носители хранения и носители хранения данных не включают в себя соединения, несущие волны, сигналы или другие временные носители, а вместо этого направлены на не-временные, осязаемые носители информации. Магнитный диск (disk) и оптический диск (disc), как используется в настоящем документе, включают в себя компакт-диск (CD), лазерный диск, оптический диск, универсальный цифровой диск (DVD), гибкий диск и Blu-ray диск, где магнитные диски обычно воспроизводят данные магнитным способом, тогда как оптические диски воспроизводят данные оптическим способом с помощью лазеров. Комбинации вышеперечисленного также должны быть включены в объем считываемых компьютером носителей.[0207] By way of example, and not limitation, such computer-readable storage media may comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage devices, magnetic disk storage devices or other magnetic storage devices, flash memory, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. In addition, any connection is properly defined as a computer-readable medium. For example, if instructions are transmitted from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwaves, then coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwaves are included in the definition of media. However, it should be understood that computer-readable storage media and storage media do not include connections, carrier waves, signals, or other temporary media, but are instead directed to non-temporal, tangible media. The magnetic disc (disk) and the optical disc (disc) as used herein include compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disc, and Blu-ray disc, where magnetic discs usually reproduce data magnetically while optical discs reproduce data optically using lasers. Combinations of the above should also be included in the scope of computer-readable media.
[0208] Инструкции могут исполняться одним или более процессорами, такими как один или более цифровых сигнальных процессоров (DSP), микропроцессоров общего назначения, специализированных интегральных схем (ASIC), программируемых вентильных матриц (FPGA) или других эквивалентных интегральных схем или дискретных логических схем. Соответственно, термины “процессор” и “схема обработки”, используемые здесь, могут относиться к любой из вышеперечисленных структур или любой другой структуре, подходящей для реализации методов, описанных здесь. Кроме того, в некоторых аспектах, функциональность, описанная здесь, может быть обеспечена в выделенных аппаратных средствах и/или программных модулях, сконфигурированных для кодирования и декодирования или встроенных в комбинированный кодек. Кроме того, методы могут быть полностью реализованы в одной или более схемах или логических элементах.[0208] The instructions may be executed by one or more processors, such as one or more digital signal processors (DSPs), general purpose microprocessors, application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or other equivalent integrated circuits or discrete logic circuits. Accordingly, the terms "processor" and "processing circuit" as used herein may refer to any of the above structures or any other structure suitable for implementing the methods described here. In addition, in some aspects, the functionality described herein may be provided in dedicated hardware and/or software modules configured for encoding and decoding or embedded in a combined codec. In addition, the methods may be fully implemented in one or more circuits or logic elements.
[0209] Методики согласно настоящему раскрытию могут быть реализованы в широком разнообразии устройств или приборов, включая беспроводный телефон, интегральную схему (IC) или набор интегральных схем (например, чипсет). Различные компоненты, модули или блоки описаны в настоящем раскрытии с акцентом на функциональных аспектах устройств, сконфигурированных для выполнения раскрытых методов, но не обязательно требующих реализации различными аппаратными модулями. Скорее, как описано выше, различные модули могут быть объединены в аппаратный модуль кодека или обеспечены набором взаимодействующих аппаратных модулей, включая один или более процессоров, как описано выше, во взаимосвязи с подходящим программным обеспечением и/или микропрограммным обеспечением.[0209] The techniques of the present disclosure may be implemented in a wide variety of devices or devices, including a wireless telephone, an integrated circuit (IC), or a stack of integrated circuits (eg, a chipset). Various components, modules, or blocks are described in this disclosure with emphasis on the functional aspects of devices configured to perform the disclosed methods, but not necessarily requiring implementation by different hardware modules. Rather, as described above, various modules may be combined into a codec hardware module or provided with a set of cooperating hardware modules, including one or more processors, as described above, in association with suitable software and/or firmware.
[0210] Были описаны различные примеры. Эти и другие примеры входят в объем следующей формулы изобретения. [0210] Various examples have been described. These and other examples are within the scope of the following claims.
Claims (143)
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US62/696,281 | 2018-07-10 | ||
US62/713,944 | 2018-08-02 | ||
US16/506,720 | 2019-07-09 |
Publications (2)
Publication Number | Publication Date |
---|---|
RU2020143566A RU2020143566A (en) | 2022-08-10 |
RU2800009C2 true RU2800009C2 (en) | 2023-07-14 |
Family
ID=
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070211801A1 (en) * | 2006-03-09 | 2007-09-13 | Kei Matsubayashi | Frame rate conversion system, method of converting frame rate, transmitter, and receiver |
US20130170549A1 (en) * | 2011-12-28 | 2013-07-04 | Microsoft Corporation | Merge mode for motion information prediction |
US20130336405A1 (en) * | 2012-06-15 | 2013-12-19 | Qualcomm Incorporated | Disparity vector selection in video coding |
RU2573744C2 (en) * | 2011-07-20 | 2016-01-27 | Квэлкомм Инкорпорейтед | Buffering prediction data in video coding |
WO2017197126A1 (en) * | 2016-05-13 | 2017-11-16 | Qualcomm Incorporated | Merge candidates for motion vector prediction for video coding |
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070211801A1 (en) * | 2006-03-09 | 2007-09-13 | Kei Matsubayashi | Frame rate conversion system, method of converting frame rate, transmitter, and receiver |
RU2573744C2 (en) * | 2011-07-20 | 2016-01-27 | Квэлкомм Инкорпорейтед | Buffering prediction data in video coding |
US20130170549A1 (en) * | 2011-12-28 | 2013-07-04 | Microsoft Corporation | Merge mode for motion information prediction |
US20130336405A1 (en) * | 2012-06-15 | 2013-12-19 | Qualcomm Incorporated | Disparity vector selection in video coding |
WO2017197126A1 (en) * | 2016-05-13 | 2017-11-16 | Qualcomm Incorporated | Merge candidates for motion vector prediction for video coding |
Non-Patent Citations (3)
Title |
---|
Fan Wang et al., OpenCL based high-quality HEVC motion estimation on GPU, 2014 IEEE International Conference on Image Processing, 29.01.2015, 5 с.. * |
Li Zhang et al., CE4-related: History-based Motion Vector Prediction, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11, 11th Meeting: Ljubljana, SI, 10-18 July 2018, [Найдено 01.02.2023] в Интернет URL https://phenix.int-evry.fr/jvet/doc_end_user/documents/11_Ljubljana/wg11/JVET-K0104-v1.zip, 03.07.2018, 5 c.. * |
Stefan Radicke et al., A Multi-Threaded Full-feature HEVC Encoder Based on Wavefront Parallel Processing, In Proceedings of the 11th International Conference on Signal Processing and Multimedia Applications (SIGMAP-2014), c. 90-98, 28.08.2014, 9 c.. * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7508660B2 (en) | Multiple History-Based Non-Adjacent MVP for Wavefront Processing in Video Coding | |
US11212550B2 (en) | History-based motion vector prediction for affine mode | |
US11025903B2 (en) | Coding video data using derived chroma mode | |
JP7570355B2 (en) | Merge mode coding for video coding | |
US10778977B2 (en) | Triangle motion information for video coding | |
KR20220162701A (en) | General Constraint Information Syntax in Video Coding | |
TW202107894A (en) | Simplification of history-based motion vector prediction | |
WO2020072743A1 (en) | History-based motion vector prediction for inter prediction coding | |
US11064192B2 (en) | Simplification of spatial-temporal motion vector prediction | |
US20200036980A1 (en) | Rounding of motion vectors for adaptive motion vector difference resolution and increased motion vector storage precision in video coding | |
US11051035B2 (en) | Processing of illegal motion vectors for intra block copy mode in video coding | |
TW202245477A (en) | Template matching refinement in inter-prediction modes | |
CA3150772A1 (en) | Harmonized early termination in bdof and dmvr in video coding | |
RU2800009C2 (en) | Set of history-based non-adjacent mvp for video encoding wave-front processing | |
RU2825319C2 (en) | Block-differential pulse-code modulation in field of coefficients during video encoding | |
US20200267415A1 (en) | Chroma deblocking filter for intra block copy mode for video coding |