СПОСОБЫ И УСТРОЙСТВА ДЛЯ КОДИРОВАНИЯ ВИДЕО С ИСПОЛЬЗОВАНИЕМ ВЕКТОРА ДВИЖЕНИЯ ВРЕМЕННОГО ПРЕДСКАЗАНИЯ НА ОСНОВЕ СУББЛОКОВ
METHODS AND DEVICES FOR ENCODING VIDEO USING THE MOTION VECTOR OF TIME PREDICTION BASED ON SUB-BLOCKS

Область техники, к которой относится изобретение
Настоящее раскрытие, в целом, относится к кодированию и декодированию видеоданных и, в частности, к способу и системе кодирования видео с использованием вектора движения временного предсказания на основе субблоков.
Уровень техники
Цифровое видео поддерживается множеством электронных устройств, таких как цифровые телевизоры, портативные или настольные компьютеры, планшетные компьютеры, цифровые камеры, цифровые записывающие устройства, цифровые медиаплееры, игровые консоли, смартфоны, устройства видеоконференцсвязи, видео потоковые устройства и т.д. Электронные устройства передают, принимают, кодируют, декодируют и/или хранят цифровые видеоданные путем реализации стандартов сжатия/распаковки видео, определенных в MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, часть 10, усовершенствованное кодирование видео (AVC), высокоэффективное кодирование видео (HEVC) и универсальное кодирование видео (VVC). Сжатие видео обычно включает в себя выполнение пространственного (внутрикадрового) предсказания и/или временного (межкадрового) предсказания для уменьшения или удаления избыточности, присущей видеоданным. Для блочного кодирования видео видеокадр разделяется на один или более сегментов, каждый сегмент имеет множество видеоблоков, которые также могут упоминаться как блоки дерева кодирования (CTUs). Каждый CTU может содержать один блок кодирования (CU) или рекурсивно разбиваться на более мелкие CUs, пока не будет достигнут заранее определенный минимальный размер CU. Каждый CU (также называемый листовым CU) содержит один или множество блоков преобразования (TUs), и каждый CU также содержит один или множество блоков предсказания (PUs). Каждый CU может быть закодирован в режимах внутреннего, внешнего или IBC кодирования. Видеоблоки в сегменте внутреннего кодирования (I) видеокадра кодируются с использованием пространственного предсказания относительно опорных выборок в соседних блоках в одном и том же видеокадре. Видеоблоки в сегменте внешнего кодирования (Р или В) видеокадра могут использовать пространственное предсказание относительно опорных выборок в соседних блоках в пределах одного видеокадра или временное предсказание относительно опорных выборок в других предшествующих и/или будущих опорных видеокадрах.
В результате пространственного или временного предсказания, основанного на опорном блоке, который был ранее закодирован, например, соседний блок, может быть получен блок предсказания для текущего видеоблока, подлежащего кодированию. Процесс нахождения опорного блока может быть осуществлен с помощью алгоритма согласования блока. Остаточные данные, представляющие разносную величину пикселей между текущим блоком, подлежащим кодированию, и блоком предсказания, упоминаются как остаточный блок или ошибки предсказания. Блок внешнего кодирования кодируется в соответствии с вектором движения, который указывает опорный блок в опорном кадре, формируя блок предсказания и остаточный блок. Процесс определения вектора движения обычно называется оценкой движения. Блок внутреннего кодирования кодируется согласно режиму внутреннего предсказания и остаточному блоку. Для дополнительного сжатия остаточный блок преобразуется из области пикселей в область преобразования, например, в частотную область, в результате получаются коэффициенты остаточного преобразования, которые затем могут быть квантованы. Квантованные коэффициенты преобразования, изначально расположенные в двумерном массиве, могут сканироваться для образования одномерного вектора коэффициентов преобразования, и затем энтропийно закодированы в битовый поток видео для достижения еще большего сжатия.
Кодированный битовый поток видео затем сохраняется на машиночитаемом носителе данных (например, флэш-памяти) для доступа другим электронным устройством с возможностью цифрового видео или напрямую передается в электронное устройство по проводной или беспроводной связи. Затем электронное устройство выполняет распаковку видео (процесс, противоположный описанному выше сжатию видео), например, анализируя кодированный битовый поток видео для получения элементов синтаксиса из битового потока и восстанавливая цифровых видеоданных в исходный формат из кодированного битового потока видео на основании, по меньшей мере, частично элементах синтаксиса, полученных из битового потока, и воспроизводит восстановленные цифровые видеоданные на дисплее электронного устройства.
При переходе качества цифрового видео с высокой четкости к 4Kx2K или, даже 8Kx4K объем видеоданных, подлежащих кодированию/декодированию, растет экспоненциально. В этой связи необходимо решить техническую задачу повышения эффективности кодирования/декодирования видеоданных, сохраняя при этом качество изображения декодированных видеоданных.
Раскрытие сущности изобретения
Настоящее раскрытие описывает реализации, относящиеся к кодированию и декодированию видеоданных и, в частности, к системе и способу кодирования и декодирования видео с использованием временного предсказания вектора движения на основе субблоков.
Согласно первому аспекту настоящего раскрытия, способ временного предсказания вектора движения на основе субблоков выполняется на вычислительном устройстве, имеющем один или множество процессоров и память, хранящую множество программ, которые должны выполняться одним или более процессорами. Вычислительное устройство получает битовый поток видео, включающий в себя данные, ассоциированные с множеством кодированных изображений. При декодировании текущего изображения в битовом потоке видео, вычислительное устройство выбирает, в соответствии с элементами синтаксиса, переданные в битовом потоке видео, одно опорное изображение, как совмещенное изображение текущего изображения, и определяет сдвиг движения между совмещенным изображением и текущим изображением из информации движения пространственно соседних блоков текущего блока кодирования (CU) в соответствии с фиксированным порядком. Затем вычислительное устройство разделяет текущий CU на множество суб-CUs, причем каждый суб-CU соответствует соответствующему субблоку текущего изображения. Затем вычислительное устройство получает временной предиктор вектора движения для каждого суб-CU текущего CU из (i) сдвига движения между совмещенным изображением и текущим изображением и (ii) информации движения блока в совмещенном изображении, который соответствует соответствующему субблоку текущего изображения и декодирует текущий CU в соответствии с временными предикторами вектора движения множества суб-CUs текущего CU.
Согласно второму аспекту настоящего раскрытия, вычислительное устройство включает в себя один или множество процессоров, память и множество программ, хранящихся в памяти. Программы, когда выполняются одним или более процессорами, побуждают вычислительное устройство выполнять вышеупомянутые операции, как описано выше.
Согласно третьему аспекту настоящего раскрытия энергонезависимый машиночитаемый носитель данных хранит множество программ для выполнения вычислительным устройством, имеющим один или множество процессоров. Программы, когда выполняются одним или более процессорами, пробуждают вычислительное устройство выполнять вышеупомянутые операции, как описано выше.
Краткое описание чертежей
Прилагаемые чертежи обеспечивают дополнительное пояснение реализаций, и включены с настоящее описание и составляют часть спецификации, иллюстрируют описанные реализации и вместе с описанием служат для объяснения основных принципов. Одинаковые ссылочные позиции относятся к соответствующим частям.
Фиг.1 является блок-схемой, иллюстрирующей примерную систему кодирования и декодирования видео в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг.2 является блок-схемой, иллюстрирующей примерный видеокодер в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг.3 является блок-схемой, иллюстрирующей примерный видеодекодер в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг.4A-4D представляют собой блок-схемы, иллюстрирующие, как кадр рекурсивно квадродерево разбивается на множество видеоблоков разных размеров в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг.5A является блок-схемой, иллюстрирующей позиции пространственно расположенных соседних и временно совмещенных блоков текущего CU, подлежащего кодированию в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг. 5B является блок-схемой алгоритма, иллюстрирующей примерный процесс, посредством которого идентифицируется список кандидатов вектора движения в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг.5C является блок-схемой, иллюстрирующей, как выполняется временное предсказание вектора движения на основе субблока между текущим изображением и совмещенным изображением в соответствии с некоторыми реализациями настоящего раскрытия.
Фиг.6 является блок-схемой алгоритма, иллюстрирующей примерный процесс, посредством которого видеодекодер реализует способы построения временного предсказания вектора движения на основе субблоков для текущего изображения из информации движения совмещенного изображения в соответствии с некоторыми реализациями настоящего раскрытия.
Осуществление изобретения
Далее будет представлено подробное описание конкретных реализаций со ссылкой на примеры, проиллюстрированные на прилагаемых чертежах. С целью разъяснения предмета изобретения в нижеследующем подробном описании изложены многочисленные неограничивающие конкретные подробности, представленные в настоящем документе. Но для обычного специалиста в данной области техники будет очевидно, что можно использовать различные альтернативы без отклонения от объема формулы изобретения, и предмет изобретения может быть реализован на практике без этих конкретных деталей. Например, для обычного специалиста в данной области техники будет очевидно, что предмет, представленный в данном документе, может быть реализован на многих типах электронных устройств с возможностями цифрового видео.
Фиг.1 является блок-схемой, иллюстрирующей примерную систему 10 для параллельного кодирования и декодирования видеоблоков в соответствии с некоторыми реализациями настоящего раскрытия. Как показано на фиг.1, система 10 включает в себя исходное устройство 12, которое генерирует и кодирует видеоданные, которые будут декодированы в более позднее время с помощью устройства 14 назначения. Исходное устройство 12 и устройство 14 назначения могут содержать любое из большого количества электронных устройств, включающие в себя настольный компьютер или ноутбук. компьютеры, планшетные компьютеры, смартфоны, телевизионные приставки, цифровые телевизоры, камеры, устройства отображения, цифровые медиаплееры, игровые приставки, устройства для потоковой передачи видео и т.п. В некоторых реализациях исходное устройство 12 и устройство 14 назначения оснащены возможностями беспроводной связи.
В некоторых реализациях устройство 14 назначения может принимать кодированные видеоданные, подлежащие декодированию, через линию 16 связи. Линия 16 связи может содержать любой тип носителя или устройство, способное перемещать кодированные видеоданные от исходного устройства 12 к устройству 14 назначения. В одном примере линия 16 связи может содержать среду связи, позволяющую исходному устройству 12 передавать закодированные видеоданные непосредственно в устройство 14 назначения в реальном времени. Закодированные видеоданные могут быть модулированы согласно стандарту связи, например, протоколу беспроводной связи, и переданы в устройство 14 назначения. Среда связи может содержать любую беспроводную или проводную среду связи, такую как радиочастотный (RF) спектр или один или множество физических линий передачи. Среда связи может образовывать часть сети с пакетной передачей, такой как локальная сеть, региональная сеть или глобальная сеть, такая как интернет. Среда связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть использовано для обеспечения связи от исходного устройства 12 к устройству 14 назначения.
В некоторых других реализациях закодированные видеоданные могут быть переданы с интерфейса 22 вывода в устройство 32 хранения. Впоследствии к кодированным видеоданным в устройстве 32 хранения может быть осуществлен доступ устройством 14 назначения через интерфейс 28 ввода. Устройство 32 хранения может включать в себя любой из множества распределенных или локально доступных носителей данных, таких как жесткий диск, диски Blu-ray, DVD, CD-ROM, флэш-память, энергозависимая или энергонезависимая память или любые другие подходящие цифровые носители для хранения закодированных видеоданных. В дополнительном примере устройство 32 хранения может соответствовать файловому серверу или другому промежуточному устройству хранения, которое может хранить кодированные видеоданные, сгенерированные исходным устройством 12. Устройство 14 назначения может осуществлять доступ к сохраненным видеоданным из устройства 32 хранения посредством потоковой передачи или загрузки. Файловый сервер может быть компьютером любого типа, выполненным с возможностью хранить кодированные видеоданные и передавать закодированные видеоданные в устройство 14 назначения. Примеры файловых серверов включают в себя веб-сервер (например, для веб-сайта), FTP-сервер, сетевое хранилище (NAS) устройства или локальный диск. Устройство 14 назначения может получить доступ к закодированным видеоданным через любое стандартное соединение для передачи данных, включающее в себя беспроводной канал (например, соединение Wi-Fi), проводное соединение (например, DSL, кабельный модем и т.д.) или их комбинацию, которая подходит для доступа к кодированным видеоданным, хранящимся на файловом сервере. Передача закодированных видеоданных из устройства 32 хранения может быть потоковой передачей, загрузкой или их комбинацией.
Как показано на фиг.1, исходное устройство 12 включает в себя источник 18 видео, видеокодер 20 и интерфейс 22 вывода. Источник 18 видео может включать в себя источник, такой как устройство захвата видео, например, видеокамеру, видеоархив, содержащий ранее захваченное видео, интерфейс видеопотока для приема видео от поставщика видеоконтента и/или система компьютерной графики для генерирования данных компьютерной графики в качестве исходного видео или комбинации таких источников. В качестве одного примера, если источник 18 видео является видеокамерой системы охранного наблюдения, исходное устройство 12 и устройство 14 назначения могут рассматриваться как телефоны с камерой или видеотелефоны. Однако реализации, описанные в настоящем изобретении, могут быть применимы к кодированию видео, в целом, и могут применяться к беспроводным и/или проводным приложениям.
Захваченное, предварительно захваченное или сгенерированное компьютером видео может быть закодировано видеокодером 20. Закодированные видеоданные могут быть переданы непосредственно в устройство 14 назначения через интерфейс 22 вывода исходного устройства 12. Закодированные видеоданные также могут (или альтернативно) храниться в устройстве 32 хранения для последующего доступа устройством 14 назначения или других устройств для декодирования и/или воспроизведения. Интерфейс 22 вывода может дополнительно включать в себя модем и/или передатчик.
Устройство 14 назначения включает в себя интерфейс 28 ввода, видеодекодер 30 и устройство 34 отображения. Интерфейс 28 ввода может включать в себя приемник и/или модем и принимать закодированные видеоданные по линии 16 связи. Переданные закодированные видеоданные по линии 16 связи или предоставленный на устройстве 32 хранения, могут включать в себя множество элементов синтаксиса, генерируемых видеокодером 20 для использования видеодекодером 30 при декодировании видеоданных. Такие элементы синтаксиса могут быть включены в закодированные видеоданные, передаваемые на носителе связи, сохраненные на носителе данных или сохраненные на файловом сервере.
В некоторых реализациях устройство 14 назначения может включать в себя устройство 34 отображения, которое может быть интегрированным устройством отображения и внешним устройством отображения, которое выполнено с возможностью устанавливать связь с устройством 14 назначения. Устройство 34 отображения отображает декодированные видеоданные пользователю и может содержать любое из множества устройств отображения, таких как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или другой тип устройства отображения.
Видеокодер 20 и видеодекодер 30 могут работать в соответствии с частными или отраслевыми стандартами, такими как VVC, HEVC, MPEG-4, часть 10, усовершенствованное кодирование видео (AVC) или расширения таких стандартов. Следует понимать, что настоящее раскрытие не ограничено конкретным стандартом кодирования/декодирования видео и может быть применимо к другим стандартам кодирования/декодирования видео. Обычно предполагается, что видеокодер 20 исходного устройства 12 может быть выполнен с возможностью кодировать видеоданные в соответствии с любым из этих текущих или будущих стандартов. Точно так же обычно предполагается, что видеодекодер 30 устройства 14 назначения может быть выполнен с возможностью декодировать видеоданные согласно любому из этих текущих или будущих стандартов.
Видеокодер 20 и видеодекодер 30 каждый может быть реализован как любая из множества подходящих схем кодера, таких как один или множество микропроцессоров, процессоров цифровых сигналов (DSPs), специализированных интегральных схем (ASICs), программируемых пользователем вентильных матриц. (FPGAs), дискретная логика, программное обеспечение, оборудование, прошивка или любые их комбинации. При частичной реализации в программном обеспечении электронное устройство может хранить инструкции для программного обеспечения на подходящем постоянном машиночитаемом носителе и выполнять инструкции в аппаратном обеспечении с использованием одного или более процессоров для выполнения операций кодирования/декодирования видео, раскрытых в настоящем изобретении. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или множество кодеров или декодеров, каждый из которых может быть интегрирован как часть комбинированного кодера/декодера (CODEC) в соответствующем устройстве.
Фиг.2 является блок-схемой, иллюстрирующей примерный видеокодер 20 в соответствии с некоторыми реализациями, описанными в настоящем изобретении. Видеокодер 20 может выполнять кодирование с внутренним и внешним предсказанием видеоблоков в видеокадрах. Кодирование с внутренним предсказанием основывается на пространственном предсказании для уменьшения или удаления пространственной избыточности в видеоданных в пределах данного видеокадра или изображения. Кодирование с внешним предсказанием основывается на временном предсказании для уменьшения или удаления временной избыточности в видеоданных в соседних видеокадрах или изображениях видеопоследовательности.
Как показано на фиг.2, видеокодер 20 включает в себя память 40 видеоданных, блок 41 обработки предсказания, буфер 64 декодированных изображений (DPB), сумматор 50, блок 52 обработки преобразования, блок 54 квантования и блок 56 энтропийного кодирования. Блок 41 обработки предсказания дополнительно включает в себя блок 42 оценки движения, блок 44 компенсации движения, блок 45 разделения, блок 46 обработки внутреннего предсказания и блок 48 внутриблочного копирования (BC). В некоторых реализациях видеокодер 20 также включает в себя блок 58 обратного квантования, блок 60 обработки обратного преобразования и сумматор 62 для восстановления видеоблока. Фильтр удаления блочности (не показан) может быть расположен между сумматором 62 и DPB 64 для фильтрации границ блоков с целью удаления артефактов блочности из восстановленного видео. Контурный фильтр (не показан) также может использоваться в дополнение к фильтру удаления блочности для фильтрации выходных данных сумматора 62. Видеокодер 20 может иметь форму фиксированного или программируемого аппаратного блока или может быть разделен между одним или более из иллюстрированных фиксированных или программируемых аппаратных блоков.
Память 40 видеоданных может хранить видеоданные, которые должны быть кодированы компонентами видеокодера 20. Видеоданные в памяти 40 видеоданных могут быть получены, например, из источника 18 видео. DPB 64 является буфером, в котором хранятся опорные видеоданные для использования при кодировании видеоданных видеокодером 20 (например, в режимах кодирования с внутренним или внешним предсказанием). Память 40 видеоданных и DPB 64 могут быть сформированы любым из множества запоминающих устройств. В различных примерах память 40 видеоданных может быть на кристалле с другими компонентами видеокодера 20 или вне кристалла относительно этих компонентов.
Как показано на фиг.2, после приема видеоданных блок 45 разделения в блоке 41 обработки предсказания разделяет видеоданные на видеоблоки. Это разделение может также включать в себя разделение видеокадра на сегменты, плитки или другие более крупные блоки кодирования (CU) в соответствии с заранее заданными структурами разделения, такими как структура дерева квадрантов, ассоциированная с видеоданными. Видеокадр может быть разделен на множество видеоблоков (или наборов видеоблоков, называемых плитками). Блок 41 обработки предсказания может выбрать один из множества возможных режимов кодирования с предсказанием, например, один из множества режимов кодирования с внутренним предсказанием или один из множества режимов кодирования с внешним предсказанием для текущего видеоблока на основании результатов ошибок (например, скорость кодирования и уровень искажений). Блок 41 обработки предсказания может поставить в результате внутрикадрового или межкадрового предсказания кодированный блок в сумматор 50 для генерирования остаточного блока и в сумматор 62 для восстановления кодированного блока для использования впоследствии в качестве части опорного кадра. Блок 41 обработки предсказания также предоставляет элементы синтаксиса, такие как векторы движения, индикаторы режима внутреннего предсказания, информацию разделения и другую такую информацию синтаксиса в блок 56 энтропийного кодирования.
Чтобы выбрать подходящий режим кодирования с внутренним предсказанием для текущего видеоблока, блок 46 обработки внутреннего предсказания в блоке 41 обработки предсказания может выполнять кодирование с внутренним предсказанием текущего видеоблока относительно одного или более соседних блоков в том же кадре, как текущий блок, подлежащий кодированию, для обеспечения пространственного предсказания. Блок 42 оценки движения и блок 44 компенсации движения в блоке 41 обработки предсказания выполняют кодирование с внешним предсказанием текущего видеоблока относительно одного или более блоков предсказания в одном или более опорных кадрах для обеспечения временного предсказания. Видеокодер 20 может выполнять множество проходов кодирования, например, чтобы выбрать соответствующий режим кодирования для каждого блока видеоданных.
В некоторых реализациях блок 42 оценки движения определяет режим внешнего предсказания для текущего видеокадра путем генерирования вектора движения, который указывает смещение блока предсказания (PU) видеоблока в текущем видеокадре относительно блока предсказания в опорном видеокадре, в соответствии с заданным шаблоном в пределах последовательности видеокадров. Оценка движения, выполняемая блоком 42 оценки движения, представляет собой процесс генерирования векторов движения, которые оценивают движение для видеоблоков. Вектор движения, например, может указывать на смещение PU видеоблока в текущем видеокадре или изображении по отношению к блоку предсказания в опорном кадре (или другой кодированный блок) по отношению к текущему блоку, кодируемому в пределах текущего кадра (или другой кодированный блок). Заданный шаблон может обозначать видеокадры в последовательности как P-кадры или B-кадры. Блок 48 внутреннего BC может определять векторы, например, векторы блоков, для внутреннего BC кодирования способом, аналогичным определению векторов движения блоком 42 оценки движения для внешнего предсказания, или может использовать блок 42 оценки движения для определения вектора блока.
Блок предсказания представляет собой блок опорного кадра, который считается близко соответствуют PU видеоблока, кодируемого в виде разницы пикселей, которые могут быть определены по сумме абсолютных разностей (SAD), сумме квадратов разностей (SSD) или другие показатели разницы. В некоторых реализациях видеокодер 20 может вычислять значения для позиций субцелого пикселя опорных кадров, сохраненных в DPB 64. Например, видеокодер 20 может интерполировать значения позиций четверти пикселя, позиций одной восьмой пикселя или других позиций дробного пикселя опорного кадра. Следовательно, блок 42 оценки движения может выполнять поиск движения относительно позиций целых пикселей и позиций дробных пикселей и выводить вектор движения с точностью до дробных пикселей.
Блок 42 оценки движения вычисляет вектор движения для PU видеоблока в режиме внешнего предсказания кодированного кадра посредством сравнения позиции PU к позиции предсказанного блока опорного кадра, выбранного из первого списка опорных кадров (например, List0) или второго списка опорных кадров (например, List1), каждый из которых идентифицирует один или множество опорных кадров, хранящихся в DPB 64. Блок 42 оценки движения отправляет вычисленный вектор движения в блок 44 компенсации движения и затем в блок 56 энтропийного кодирования.
Компенсация движения, выполняемая блоком 44 компенсации движения, может включать в себя выборку или генерирование блока предсказания на основании вектора движения, определенного блоком 42 оценки движения. После приема вектора движения для PU текущего видеоблока блок 44 компенсации движения может найти блок предсказания, на который указывает вектор движения в одном из списков опорных кадров, извлечь блок предсказания из DPB 64 и направить блок предсказания сумматору 50. Сумматор 50 затем формирует остаточный видеоблок значений разности пикселей, вычитанием значений пикселей блока предсказания, предоставленного блоком 44 компенсации движения, из значений пикселей текущего кодируемого видеоблока. Значения разности пикселей, образующие остаточный видеоблок, могут включать в себя компоненты разности яркости или цветности или и то, и другое. Блок 44 компенсации движения также может генерировать элементы синтаксиса, ассоциированные с видеоблоками видеокадра, для использования видеодекодером 30 при декодировании видеоблоков видеокадра. Элементы синтаксиса могут включать в себя, например, элементы синтаксиса, определяющие вектор движения, используемый для идентификации блока предсказания, любые флаги, указывающие режим предсказания, или любую другую информацию синтаксиса, описанную в данном документе. Отметим, что блок 42 оценки движения и блок 44 компенсации движения могут быть сильно интегрированы, но показаны отдельно для концептуальных целей.
В некоторых реализациях блок 48 внутреннего BC может генерировать векторы и выбирать блоки предсказания способом, аналогичным тому, который описан выше в связи с блоком 42 оценки движения и блоком 44 компенсации движения, но с блоками предсказания, находящимися в том же кадре, что и кодируемый текущий блок, причем векторы называются векторами блоков, а не векторами движения. В частности, блок 48 внутреннего BC может определять режим внутреннего предсказания для использования кодирования текущего блока. В некоторых примерах блок 48 внутреннего BC может кодировать текущий блок, используя различные режимы внутреннего предсказания, например, во время отдельных проходов кодирования, и проверять их производительность посредством анализа искажения скорости. Затем блок 48 внутреннего BC может выбрать среди различных тестируемых режимов внутреннего предсказания подходящий режим внутреннего предсказания для использования и соответственно генерирования индикатор режима внутреннего предсказания. Например, блок 48 внутреннего BC может вычислять значения искажения скорости передачи с использованием анализа искажения скорости для различных тестируемых режимов внутреннего предсказания и выбирать режим внутреннего предсказания, имеющий лучшие характеристики искажения скорости среди тестируемых режимов, в качестве подходящего режима внутреннего предсказания для использования. Анализ искажения скорости обычно определяет величину искажения (или ошибки) между закодированным блоком и исходным некодированным блоком, который был закодирован для формирования закодированного блока, а также скорость передачи данных (т.е. количество битов), используемую для формирования закодированного блока. Блок 48 внутреннего BC может вычислять отношения из искажений и скоростей для различных кодированных блоков для определения режима внутреннего предсказания, который имеет наилучшее значение искажения скорости для блока.
В других примерах, блок 48 внутреннего BC может использовать блок 42 оценки движения и блок 44 компенсации движения, полностью или частично, для выполнения таких функций для внутреннего предсказания BC согласно реализациям, описанным в данном документе. В любом случае для копирования блока внутреннего предсказания блок предсказания может быть блоком, который считается близко соответствующим блоку, который должен быть кодирован, с точки зрения разности пикселей, которая может быть определена суммой абсолютной разности (SAD), суммой квадратов разностей (SSD) или другими показателями разности, и идентификация блока предсказания может включать в себя вычисление значений для позиций суб-целочисленных пикселей.
Независимо от того, является ли блок предсказания из того же кадра согласно внутреннему предсказанию или из другого кадра согласно внешнему предсказанию, видеокодер 20 может формировать остаточный видеоблок, вычитая значения пикселей блока предсказания из значений пикселей текущего кодируемого видеоблока, формируя значения разности пикселей. Значения разности пикселей, образующие остаточный видеоблок, могут включать в себя компонент разности как яркости, так и цветности.
Блок 46 обработки внутреннего предсказания может внутреннее предсказывать текущий видеоблок в качестве альтернативы внешнему предсказанию, выполняемому блоком 42 оценки движения и блоком 44 компенсации движения, или копии предсказания блока внутреннего предсказания, выполняемого блоком 48 внутреннего BC, как описано выше. В частности, блок 46 обработки внутреннего предсказания может определять режим внутреннего предсказания для использования кодирования текущего блока. Для этого блок 46 обработки внутреннего предсказания может кодировать текущий блок с использованием различных режимов внутреннего предсказания, например, во время отдельных проходов кодирования, и блок 46 обработки внутреннего предсказания (или блок выбора режима в некоторых примерах) может выбрать соответствующий режим внутреннего предсказания для использования из протестированных режимов внутреннего предсказания. Блок 46 обработки внутреннего предсказания может предоставлять информацию, указывающую выбранный режим внутреннего предсказания для блока, в блок 56 энтропийного кодирования. Блок 56 энтропийного кодирования может кодировать информацию, указывающую выбранный режим внутреннего предсказания в битовом потоке.
После того, как блок 41 обработки предсказания определяет блок предсказания для текущего видеоблока посредством внешнего предсказания или внутреннего предсказания, сумматор 50 формирует остаточный видеоблок, вычитая блок предсказания из текущего видеоблока. Остаточные видеоданные в остаточном блоке могут быть включены в один или множество блоков преобразования (TU) и предоставляются в блок 52 обработки преобразования. Блок 52 обработки преобразования преобразует остаточные видеоданные в коэффициенты остаточного преобразования с использованием преобразования, такого как дискретное преобразование. косинусное преобразование (DCT) или концептуально подобное преобразование.
Блок 52 обработки преобразования может отправлять результирующие коэффициенты преобразования в блок 54 квантования. Блок 54 квантования квантует коэффициенты преобразования для дополнительного снижения скорости передачи битов. Процесс квантования также может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования может быть изменена путем регулировки параметра квантования. В некоторых примерах блок 54 квантования может затем выполнить сканирование матрицы, включающую в себя квантованные коэффициенты преобразования. В качестве альтернативы блок 56 энтропийного кодирования может выполнять сканирование.
После квантования, блок 56 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования в битовый поток видео, используя, например, контекстно-адаптивное кодирование с переменной длиной (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), основанное на синтаксисе контекстно-адаптивное двоичное арифметическое кодирование (SBAC), энтропийное кодирование с разбивкой интервала вероятности (PIPE) или другую методологию или технологию энтропийного кодирования. Затем закодированный битовый поток может быть передан в видеодекодер 30 или заархивирован в устройстве 32 хранения для последующей передачи или извлечения видеодекодером 30. Блок 56 энтропийного кодирования также может энтропийно кодировать векторы движения и другие элементы синтаксиса для текущего колируемого видеокадра.
Блок 58 обратного квантования и блок 60 обработки обратного преобразования применяет обратное квантование и обратное преобразование, соответственно, для восстановления остаточного видеоблока в пиксельной области для генерирования опорного блока для предсказания других видеоблоков. Как отмечено выше, блок 44 компенсации движения может генерировать блок предсказания с компенсацией движения из одного или более опорных блоков кадров, хранящихся в DPB 64. Блок 44 компенсации движения также может применять один или множество фильтров интерполяции к блоку предсказания для вычисления субцелого числа значения пикселей для использования при оценке движения.
Сумматор 62 добавляет восстановленный остаточный блок к блоку предсказания с компенсацией движения, сформированный блоком 44 компенсации движения, чтобы сформировать опорный блок для хранения в DPB 64. Опорный блок затем может использоваться блоком 48 внутреннего BC, блоком 42 оценки движения и блоком 44 компенсации движения в качестве блока предсказания для внешнего предсказания другого видеоблока в последующем видеокадре.
Фиг.3 является блок-схемой, иллюстрирующей примерный видеодекодер 30 в соответствии с некоторыми реализациями настоящего приложения. Видеодекодер 30 включает в себя память 79 видеоданных, блок 80 энтропийного декодирования, блок 81 обработки предсказания, блок 86 обратного квантования, блок 88 обработки обратного преобразования, сумматор 90 и DPB 92. Блок 81 обработки предсказания дополнительно включает в себя блок 82 компенсации движения, блок 84 обработки внутреннего предсказания и блок 85 внутреннего BC. Видеодекодер 30 может выполнять процесс декодирования, в целом, обратный процессу кодирования, описанному выше в отношении видеокодера 20 со ссылкой на фиг.2. Например, блок 82 компенсации движения может генерировать данные предсказания на основании векторов движения, принятых из блока 80 энтропийного декодирования, в то время как блок 84 внутреннего предсказания может генерировать данные предсказания на основании индикаторов режима внутреннего предсказания, принятых из блока 80 энтропийного декодирования.
В некоторых примерах, блок видеодекодера 30 может быть выполнен с возможностью выполнять реализации настоящего раскрытия. Кроме того, в некоторых примерах реализации настоящего раскрытия могут быть разделены между одним или более блоками видеодекодера 30. Например, блок 85 внутреннего BC может выполнять реализации настоящего раскрытия отдельно или в комбинации с другими блоками видеодекодера 30, такими как блок 82 компенсации движения, блок 84 обработки внутреннего предсказания и блок 80 энтропийного декодирования. В некоторых примерах видеодекодер 30 может не включать в себя блок 85 внутреннего BC, и могут выполняться функциональные возможности блока 85 внутреннего BC другими компонентами блока 81 обработки предсказания, такими как блок 82 компенсации движения.
Память 79 видеоданных может хранить видеоданные, такие как закодированный битовый поток видеоданных, для декодирования другими компонентами видеодекодера 30. Видеоданные, хранящиеся в памяти 79 видеоданных, могут быть получены, например, из устройства 32 хранения, из локального источника видео, такого как камера, через проводную или беспроводную сетевую передачу видеоданных или путем доступа к физическим носителям данных (например, флэш-накопителю или жесткому диску). Память 79 видеоданных может включать в себя буфер кодированных изображений (CPB), в котором хранятся кодированные видеоданные из кодированного битового потока видео. Буфер 92 декодированных изображений (DPB) видеодекодера 30 хранит опорные видеоданные для использования при декодировании видеоданных видеодекодером 30 (например, в режимах внутреннего кодирования или внешнего предсказания). Память 79 видеоданных и DPB 92 могут быть сформированы с помощью любого из множества устройств памяти, таких как динамическая память с произвольным доступом (DRAM), включающая в себя синхронную DRAM (SDRAM), магниторезистивную RAM (MRAM), резистивную RAM (RRAM) или другие типы запоминающих устройств. В иллюстративных целях на фиг.3 память 79 видеоданных и DPB 92 изображены как два отдельных компонента видеодекодера 30. Но специалисту в данной области техники будет очевидно, что память 79 видеоданных и DPB 92 могут быть обеспечены одним и тем же запоминающим устройством или отдельными запоминающими устройствами. В некоторых примерах память 79 видеоданных может быть на кристалле с другими компонентами видеодекодера 30 или вне кристалла относительно этих компонентов.
Во время процесса декодирования видеодекодер 30 принимает закодированный битовый поток видеоданных, который представляет видеоблоки закодированного видеокадра и ассоциированных элементов синтаксиса. Видеодекодер 30 может принимать элементы синтаксиса на уровне видеокадра и/или на уровне видеоблока. Блок 80 энтропийного декодирования видеодекодера 30 энтропийно декодирует битовый поток для генерирования квантованных коэффициентов, векторов движения или индикаторов режима внутреннего предсказания и других элементов синтаксиса. Затем блок 80 энтропийного декодирования пересылает векторы движения и другие элементы синтаксиса в блок 81 обработки предсказания.
Когда видеокадр кодируется, как кодированный (I) с внутренним предсказанием кадр или для кодированных блоков с внутренним предсказанием в других типах кадров, блок 84 обработки внутреннего предсказания блока 81 обработки предсказания может генерировать данные предсказания для видеоблока текущего видеокадра на основании сигнализированного режима внутреннего предсказания и опорных данных из ранее декодированных блоков текущего кадра.
Когда видеокадр кодируется как кодированный кадр с внешним предсказанием (то есть, B или P), блок 82 компенсации движения блока 81 обработки предсказания формирует один или множество блоков предсказания для видеоблока текущего видеокадра на основании векторов движения и других элементов синтаксиса, принятых из блока 80 энтропийного декодирования. Каждый из блоков предсказания может быть получен из опорного кадра в одном из списков опорных кадров. Видеодекодер 30 может формировать списки опорных кадров, например, List0 и List1, используя способы построения по умолчанию на основании опорных кадров, хранящихся в DPB 92.
В некоторых примерах, когда видеоблок кодируется в соответствии с режимом внутреннего BC, описанным в данном документе, блок 85 внутреннего BC блока 81 обработки предсказания формирует блоки предсказания для текущего видеоблока на основании векторов блоков и других элементов синтаксиса, принятых из блока 80 энтропийного декодирования. Блоки предсказания могут находиться в пределах восстановленной области того же изображения, что и текущий видеоблок, определенный видеокодером 20.
Блок 82 компенсации движения и/или блок 85 внутреннего BC определяет информацию предсказания для видеоблока текущего видеокадра путем анализа векторов движения и других элементов синтаксиса и затем использует информацию предсказания для формирования блоков предсказания для текущего декодируемого видеоблока. Например, блок 82 компенсации движения использует некоторые из принятых элементов синтаксиса для определения режима предсказания (например, внутреннее или внешнее предсказание), используемого для кодирования видеоблоков видеокадра, типа кадра внешнего предсказания (например, B или P), информации формирования для одного или более списков опорных кадров для кадра, векторов движения для каждого видеоблока, кодированного с внешним предсказанием, статуса внешнего предсказания для каждого видеоблока, кодированного с внешним предсказанием, и другой информации для декодирования видеоблоков в текущем видеокадре.
Аналогичным образом, блок 85 внутреннего BC может использовать некоторые из принятых элементов синтаксиса, например флаг, для определения того, что текущий видеоблок был предсказан с использованием режима внутреннего BC, информацию формирования видеоблоков кадра, которые находятся в пределах восстановленной области, которая должна храниться в DPB 92, векторах блоков для каждого видеоблока, предсказанного с внутренним BC, статус предсказания с внутренним BC для каждого видеоблока, предсказанного с внутренним BC, и другую информацию для декодирования видеоблоков в текущем видеокадре.
Блок 82 компенсации движения также может выполнять интерполяцию с использованием фильтров интерполяции, которые используются видеокодером 20 во время кодирования видеоблоков, для вычисления интерполированных значений для суб-целочисленных пикселей опорных блоков. В этом случае блок 82 компенсации движения может определять фильтры интерполяции, используемые видеокодером 20, из принятых элементов синтаксиса и использовать фильтры интерполяции для формирования блоков предсказания.
Блок 86 обратного квантования выполняет обратное квантование квантованных коэффициентов преобразования, предоставленных в битовом потоке, и энтропийно декодированных блоком 80 энтропийного декодирования, используя один и тот же параметр квантования, вычисленный видеокодером 20 для каждого видеоблока в видеокадре, для определения степени квантования. Блок 88 обработки обратного преобразования применяет обратное преобразование, например, обратное DCT, обратное целочисленное преобразование или концептуально подобный процесс обратного преобразования, к коэффициентам преобразования для восстановления остаточных блоков в области пикселей.
После того, как блок 82 компенсации движения или блок 85 внутреннего BC генерирует блок предсказания для текущего видеоблока на основе векторов и других элементов синтаксиса, сумматор 90 восстанавливает декодированный видеоблок для текущего видеоблока путем суммирования остаточного блока из блока 88 обработки обратного преобразования и соответствующего блока предсказания, сгенерированного блоком 82 компенсации движения и блоком 85 внутреннего BC. Внутриконтурный фильтр (не показан) может быть расположен между сумматором 90 и DPB 92 для дополнительной обработки декодированного видеоблока. Декодированные видеоблоки в данном кадре затем сохраняются в DPB 92, который хранит опорные кадры, используемые для последующей компенсации движения следующих видеоблоков. DPB 92 или запоминающее устройство, отдельное от DPB 92, также может хранить декодированное видео для последующего представления на устройстве отображения, таком как устройство 34 отображения на фиг. 1.
В типичном процессе видеокодирования видеопоследовательность обычно включает в себя упорядоченный набор кадров или изображений. Каждый кадр может включать в себя три массива выборок, обозначенных SL, SCb и SCr. SL представляет собой двумерный массив выборки яркости. SCb представляет собой двумерный массив выборки цветности Cb. SCr представляет собой двумерный массив выборки цветности Cr. В других случаях кадр может быть монохромным и поэтому включает в себя только один двумерный массив выборки яркости.
Как показано на фиг.4A, видеокодер 20 (или, более конкретно, блок 45 разделения) генерирует закодированное представление кадра, сначала разбивая кадр на набор блоков дерева кодирования (CTUs). Видеокадр может включать в себя целое число CTUs, упорядоченных последовательно в порядке растрового сканирования слева направо и сверху вниз. Каждый CTU является наибольшим логическим блоком кодирования и ширина и высота CTU сообщаются видеокодером 20 в наборе параметров последовательности, так что все CTUs в видеопоследовательности имеют одинаковый размер, равный 128 × 128, 64 × 64, 32 × 32 и 16 × 16. Но следует отметить, что настоящее раскрытие не обязательно ограничивается конкретным размером. Как показано на фиг. 4B, каждый CTU может содержать один блок дерева кодирования (CTB) выборок яркости, два соответствующих блока дерева кодирования выборок цветности и элементы синтаксиса, используемые для кодирования выборок блоков дерева кодирования. Элементы синтаксиса описывают свойства различных типов блоков кодированного блока пикселей и то, как видеопоследовательность может быть восстановлена в видеодекодере 30, в том числе внешнее или внутреннее предсказание, режим внутреннего предсказания, векторы движения и другие параметры. В монохромных изображениях или изображениях, имеющих три отдельные цветовые плоскости, CTU может содержать единственный блок дерева кодирования и элементы синтаксиса, используемые для кодирования выборок блока дерева кодирования. Блок дерева кодирования может быть блоком NxN выборок.
Для достижения лучшей производительности видеокодер 20 может рекурсивно выполнять разделение дерева, такое как разделение двоичного дерева, разделение дерева квадратов или их комбинацию, в блоках дерева кодирования CTU и разделять CTU на меньшие блоки кодирования (CUs). Как показано на фиг.4C, CTU 400 64x64 сначала делится на четыре меньших CU, каждый из которых имеет размер блока 32x32. Среди четырех меньших CUs, каждый CU 410 и CU 420 разделен на четыре CUs размером 16x16 по размеру блока. Каждый из двух блоков CUs 430 и 440 16x16 дополнительно делится на четыре блока CUs размером 8x8 по размеру блока. Фиг.4D изображает структуру данных дерева квадратов, иллюстрирующую конечный результат процесса разделения CTU 400, как показано на фиг.4C, каждый листовой узел дерева квадратов соответствует одному CU соответствующего размера в диапазоне от 32x32 до 8x8. Подобно CTU, изображенному на фиг.4B, каждый CU может содержать блок кодирования (CB) выборок яркости и два соответствующих блока кодирования выборок цветности кадра одинакового размера и элементы синтаксиса, используемые для кодирования выборок блоков кодирования. В монохромных изображениях или изображениях, имеющих три отдельные цветовые плоскости, CU может содержать единственный блок кодирования и структуры синтаксиса, используемые для кодирования выборок блока кодирования.
В некоторых реализациях видеокодер 20 может дополнительно разделить блок кодирования CU на один или множество MxN блоков предсказания (PBs). Блок предсказания представляет собой прямоугольный (квадратный или неквадратный) блок выборок, к которому применяется одно и то же предсказание, внешнее или внутреннее. Блок предсказания (PU) CU может содержать блок предсказания выборок яркости, два соответствующих блока предсказания выборок цветности и элементы синтаксиса, используемые для предсказания блоков предсказания. В монохромных изображениях или изображениях, имеющих три отдельные цветовые плоскости, PU может содержать единственный блок предсказания и синтаксические структуры, используемые для предсказания блока предсказания. Видеокодер 20 может генерировать блоки предсказания яркости, Cb и Cr для блоков предсказания яркости, Cb и Cr каждого PU CU.
Видеокодер 20 может использовать внутреннее предсказание или внешнее предсказание, чтобы генерировать блоки предсказания для PU. Если видеокодер 20 использует внутреннее предсказание для генерирования блоков предсказания PU, видеокодер 20 может генерировать блоки предсказания PU на основании декодированных выборок кадра, ассоциированных с PU. Если видеокодер 20 использует внешнее предсказание для генерирования блоков предсказания PU, видеокодер 20 может генерировать блоки предсказания PU на основании декодированных выборок одного или более кадров, отличных от кадра, ассоциированного с PU.
После того, как видеокодер 20 сгенерирует блоки предсказания яркости, Cb и Cr для одного или более PUs CU, видеокодер 20 может сгенерировать остаточный блок яркости для CU путем вычитания блоков предсказания яркости CU из его исходного блока кодирования яркости таким образом, что каждая выборка в остаточном блоке яркости CU указывает разницу между выборкой яркости в одном из предсказанных блоков яркости CU и соответствующей выборкой в исходном блоке кодирования яркости CU. Точно так же видеокодер 20 может сгенерировать остаточный блок Cb и остаточный блок Cr для CU, соответственно, так что каждая выборка в остаточном блоке Cb CU указывает разницу между выборкой Cb в одном из предсказательных блоков Cb CU и соответствующей выборкой в исходном блоке кодирования Cb CU и каждая выборка в остаточном блоке Cr CU может указывать на разницу между выборкой Cr в одном из предсказывающих блоков Cr CU и соответствующей выборкой в исходном блоке кодирования Cr CU.
Кроме того, как показано на фиг.4C, видеокодер 20 может использовать разделение на квадраты, чтобы разложить остаточные блоки яркости, Cb и Cr CU в один или множество блоков преобразования яркости Cb и Cr. Блок преобразования представляет собой прямоугольный (квадратный или неквадратный) блок выборок, к которому применяется то же преобразование. Блок преобразования (TU) CU может содержать блок преобразования выборок яркости, два соответствующих блока преобразования выборок цветности и элементы синтаксиса, используемые для преобразования выборок блока преобразования. Таким образом, каждый TU CU может быть ассоциирован с блоком преобразования яркости, блоком преобразования Cb и блоком преобразования Cr. В некоторых примерах блок преобразования яркости, ассоциированный с TU, может быть субблоком остаточного блока яркости CU. Блок преобразования Cb может быть субблоком остаточного блока Cb CU. Блок преобразования Cr может быть субблоком остаточного блока Cr CU. В монохромных изображениях или изображениях, имеющих три отдельные цветовые плоскости, TU может содержать единственный блок преобразования и синтаксические структуры, используемые для преобразования выборок блока преобразования.
Видеокодер 20 может применить одно или множество преобразований к блоку преобразования яркости TU для генерирования блока коэффициентов яркости для TU. Блок коэффициентов может быть двумерным массивом коэффициентов преобразования. Коэффициент преобразования может быть скалярной величиной. Видеокодер 20 может применить одно или множество преобразований к блоку преобразования Cb TU, чтобы сгенерировать блок коэффициентов Cb для TU. Видеокодер 20 может применить одно или множество преобразований к блоку преобразования Cr TU, чтобы сгенерировать блок коэффициентов Cr для TU.
После генерирования блока коэффициентов (например, блока коэффициентов яркости, блока коэффициентов Cb или блока коэффициентов Cr) видеокодер 20 может квантовать блок коэффициентов. Квантование обычно относится к процессу, в котором коэффициенты преобразования квантуются для возможного уменьшения объема данных, используемых для представления коэффициентов преобразования, обеспечивая дополнительное сжатие. После того, как видеокодер 20 квантует блок коэффициентов, видеокодер 20 может энтропийно кодировать элементы синтаксиса, указывающие квантованные коэффициенты преобразования. Например, видеокодер 20 может выполнять контекстно-адаптивное двоичное арифметическое кодирование (CABAC) над элементами синтаксиса, указывающими квантованные коэффициенты преобразования. Наконец, видеокодер 20 может выводить битовый поток, который включает в себя последовательность битов, которая формирует представление кодированных кадров и ассоциированных данных, которые либо сохраняются в устройстве 32 хранения, либо передаются в устройство 14 назначения.
После приема битового потока, сгенерированного видеокодером 20, видеодекодер 30 может проанализировать битовый поток для получения элементов синтаксиса из битового потока. Видеодекодер 30 может восстанавливать кадры видеоданных, по меньшей мере, частично, на основании элементов синтаксиса, полученных из битового потока. Процесс восстановления видеоданных, как правило, обратен процессу кодирования, выполняемому видеокодером 20. Например, видеодекодер 30 может выполнять обратные преобразования блоков коэффициентов, ассоциированных с TUs текущего CU, для восстановления остаточных блоков, ассоциированных с TUs текущего CU. Видеодекодер 30 также восстанавливает блоки кодирования текущего CU, добавляя выборки блоков предсказания для PUs текущего CU к соответствующим выборкам блоков преобразования TUs текущего CU. После восстановления блоков кодирования для каждого CU кадра видеодекодер 30 может восстановить кадр.
Как отмечено выше, при кодировании видео достигается сжатие видео с использованием в основном двух режимов, то есть, внутрикадрового предсказания (или внутреннего предсказания) и межкадрового предсказания (или внешнего предсказания). Следует отметить, что IBC можно рассматривать как внутрикадровое предсказание, так и как третий режим. Между этими двумя режимами межкадровое предсказание вносит больший вклад в эффективность кодирования, чем внутрикадровое предсказание из-за использования векторов движения для предсказания текущего видеоблока видео из опорного видеоблока.
Но с постоянно улучшающейся технологией захвата видеоданных и более меньшим размером видеоблока для сохранения деталей в видеоданных, количество данных, требуемых для представления векторов движения для текущего кадра, также существенно увеличивается. Один из способов решения данной технической задачи состоит в том, чтобы извлечь выгоду из того факта, что не только группа соседних CUs как в пространственной, так и во временной областях, имеет аналогичные видеоданные для целей предсказания, но и векторы движения между этими соседними CUs также аналогичны. Следовательно, можно использовать информацию о движении пространственно соседних CUs и/или временно совмещенных CUs в качестве аппроксимации информации о движении (например, вектора движения) текущего CU, исследуя их пространственную и временную корреляцию, которая также упоминается как «предиктор вектора движения» (MVP) текущего CU.
Вместо кодирования в битовый поток видео фактический вектор движения текущего CU, определенный блоком 42 оценки движения, как описано выше со ссылкой на фиг.2, предиктор вектора движения текущего CU вычитается из фактического вектора движения текущего CU для получения разности векторов движения (MVD) для текущего CU. Таким образом, нет необходимости кодировать фактический вектор движения, определенный блоком 42 оценки движения для каждого CU кадра, в битовый поток видео, и количество данных, используемых для представления информации о движении в битовом потоке видео, может быть значительно уменьшено.
Как и в процессе выбора блока предсказания в опорном кадре в течение межкадрового предсказания кодового блока, должен быть принят набор правил, как видеокодером 20, так и видеодекодером 30 для формирования списка кандидатов вектора движения для текущего CU, используя кандидаты векторов движения, ассоциированные с пространственно соседними CUs и/или временно совмещенными CUs текущего CU, и затем выбирающий один элемент из списка кандидатов вектора движения в качестве предиктора вектора движения для текущего CU. Таким образом, нет необходимости передавать сам список кандидатов вектора движения между видеокодером 20 и видеодекодером 30, и достаточно индекса выбранного предиктора вектора движения в списке кандидатов вектора движения, чтобы видеокодер 20 и видеодекодер 30 использовали один и тот же предиктор вектора движения в списке кандидатов вектора движения для кодирования и декодирования текущего CU.
В некоторых реализациях каждый CU межкадрового предсказания имеет три режима предсказания вектора движения, включающие в себя внешнее предсказание (которое также упоминается как «усовершенствованное предсказание вектора движения» (AMVP)), пропуск и слияние для построения списка кандидатов вектора движения. В каждом режиме один или множество кандидатов вектора движения могут быть добавлены в список кандидатов вектора движения согласно алгоритмам, описанным ниже. В конечном итоге один из них в списке кандидатов используется в качестве лучшего предиктора вектора движения для CU с внешним предсказанием, который должен быть закодирован в битовый поток видео видеокодером 20 или декодирован из битового потока видео видеодекодером 30. Для поиска наилучшего предиктора вектора движения из списка кандидатов используется схема конкуренции векторов движения (MVC) для выбора вектора движения из заданного набора кандидатов векторов движения, то есть, списка кандидатов вектора движения, который включает в себя пространственные и временные кандидаты векторов движения.
После того, как выбран один кандидат MVP в заданном наборе кандидатов векторов движения для текущего CU, видеокодер 20 может сгенерировать один или множество элементов синтаксиса для соответствующего кандидата MVP и закодировать их в битовый поток видео, так что видеодекодер 30 может получить кандидата MVP из битового потока видео, используя элементы синтаксиса. В зависимости от конкретного режима, используемого для построения набора кандидатов векторов движения, разные режимы (например, AMVP, слияние, пропуск и т.д.) имеют разные наборы элементов синтаксиса. Для режима AMVP элементы синтаксиса включают в себя индикаторы внешнего предсказания (например, List0, List1 или двунаправленное предсказание), опорные индексы, индексы кандидатов векторов движения, разности векторов движения и остаточный сигнал предсказания и т.д. Для режима пропуска и в режиме слияния в битовый поток кодируются только индексы слияния, поскольку текущий CU имеет другие элементы синтаксиса, включающие в себя индикаторы внешнего предсказания, опорные индексы и векторы движения от соседнего CU, на который ссылается посредством кодированного индекса слияния. В случае пропуска кодированного CU остаточный сигнал предсказания вектора движения также опускается.
Фиг.5A является блок-схемой, иллюстрирующей позиции пространственно соседних и временных совмещенных блоков текущего CU, который должен быть кодирован/декодирован в соответствии с некоторыми реализациями настоящего раскрытия. Для заданного режима (например, AMVP, слияния или пропуска) список кандидатов предсказания вектора движения (MVP) составляется путем первой проверки наличия векторов движения, ассоциированных с пространственно левым (A0, A1) и выше (B0, B1, B2) позициями соседних блоков и доступности векторов движения, ассоциированных с временно совмещёнными позициями блока. В процессе построения списка кандидатов MVP избыточные кандидаты MVP удаляются из списка кандидатов и, при необходимости, добавляется нулевой вектор движения, чтобы список кандидатов имел фиксированную длину (обратите внимание, что разные режимы могут иметь разные фиксированные значения длины). После формирования списка кандидатов MVP видеокодер 20 может выбрать лучший предиктор вектора движения из списка кандидатов и кодировать соответствующий индекс, указывающий выбранного кандидата, в битовый поток видео.
Используя фиг.5A в качестве примера и предполагая, что список кандидатов имеет фиксированную длину, равную двум, фиг.5B показывает блок-схему алгоритма, иллюстрирующую примерный процесс, посредством которого идентифицируется список кандидатов вектора движения в соответствии с некоторыми реализациями настоящего раскрытия. В частности, список кандидатов предиктора вектора движения (MVP) для текущего CU может быть построен путем выполнения следующих этапов в режиме AMVP, как показано на фиг.5B:
1) Этап 505: выбор двух кандидатов MVP из пяти пространственно соседних CUs.
a) получить до одного немасштабированного кандидата MVP из одного из двух левых пространственных соседних CUs, начиная с A0 и заканчивая A1;
b) если на предшествующем этапе отсутствует масштабированный кандидат MVP слева, получить до одного масштабированного кандидата MVP из одного из двух левых пространственных соседних CUs, начиная с A0 и заканчивая A1;
c) получить до одного немасштабированного кандидата MVP из одного из трех пространственных соседних CUs, начиная с B0, затем с B1 и заканчивая B2;
d) если ни A0, ни A1 не доступны или, если они кодируются в режимах внешнего предсказания, получить до одного масштабированного кандидата MVP из одного из трех вышеуказанных пространственных соседних CUs, начиная с B0, затем B1 и заканчивая B2;
2) Этап 510: выбор одного кандидата MVP из двух временно совмещенных CUs;
3) Этап 515: удаление повторяющихся кандидатов MVP, обнаруженных на предшествующих этапах, из списка кандидатов MVP;
4) Этап 520: добавить до двух MVP с нулевым значением в список кандидатов MVP.
5) Этап 525: удаление кандидатов MVP, индекс которых больше 1, из списка кандидатов MVP.
6) Этап 530: окончательное определение двух кандидатов MVP в списке кандидатов MVP для текущего CU.
Поскольку в сформированном выше списке кандидатов MVP в режиме AMVP есть только два кандидата, ассоциированный элемент синтаксиса, такой как двоичный флаг, кодируется в битовый поток для указания какой из двух кандидатов MVP в списке кандидатов используется для декодирования текущего CU.
В некоторых реализациях для повышения точности декодированного изображения процесс выбора временного предиктора вектора движения для кодирования/декодирования текущего CU выполняется на уровне суб-CU. Этот процесс сначала идентифицирует совмещенное изображение для текущего изображения, включающее в себя текущий CU, и затем определяет временной вектор (также известный как «сдвиг движения» в настоящем изобретении). Затем процесс разделяет текущий CU на множество суб-CUs и извлекает информацию о движении для каждого из суб-CU из соответствующего блока в совмещенном изображении, идентифицированном временным вектором, в соответствии с предопределенным алгоритмом, который также упоминается как «вектор движения временного предсказания на основе субблоков» (SbTMVP).
Фиг.5C является блок-схемой, иллюстрирующей, как выполняется временное предсказание вектора движения на основе субблока между текущим изображением и совмещенным изображением в соответствии с некоторыми реализациями настоящего раскрытия. В этом примере текущий CU 535-1 является кодовым блоком 64x64 и разделен на суб-CUs 8x8, причем каждый суб-CU является кодовым блоком 8x8. Чтобы получить информацию о движении для каждого суб-CU, процесс SbTMVP разделен на два основных этапа:
этап первый: идентифицировать соответствующий блок 540-1 в совмещенном изображении 540, используя так называемый «временной вектор» между текущим изображением 535 и совмещенным изображением 540,
этап второй: разделить текущий CU 535-1 на множество суб-CUs и получить информацию о движении для суб-CUs, включающую вектор движения и опорный индекс (который по умолчанию равен нулю) каждого суб-CU 535-3 из соответствующего блока в совмещенном изображении 540.
Как отмечено выше, предполагается, что совмещенное изображение 540 известно для текущего изображения 535 до выполнения процесса SbTMVP. Например, совмещенное изображение, как правило, один опорный кадр текущего изображения, которое выбрано из одного из двух списков опорных изображений текущего изображения, например, List0 и List1. В некоторых реализациях соответствующий блок находится в той же относительной позиции в совмещенном изображении, что и текущий CU в текущем изображении. В некоторых других реализациях (например, фиг.5C) соответствующий блок не обязательно является блоком в той же относительной позиции в совмещенном изображении, что и текущий CU 535-1 в текущем изображении. Вместо этого существует временной вектор, связывающий центр текущего CU 535-1 в текущем изображении с центром соответствующего блока 540-1 в совмещенном изображении 540.
В некоторых реализациях процесс SbTMVP реализован как часть процесса построения списка кандидатов вектора движения, описанного выше для текущего CU во время кодирования видео. Другими словами, если определено, что текущий CU должен быть обработан с использованием SbTMVP, соответственно добавляется параметр, соответствующий SbTMVP, в список кандидатов вектора движения. В некоторых других реализациях процесс SbTMVP реализуется независимо от процесса построения списка кандидатов вектора движения, описанного выше для текущего CU во время кодирования видео. Другими словами, SbTMVP обрабатывается как отдельный режим внешнего предсказания, как и вышеупомянутые режимы внешнего предсказания. Из-за симметричного характера между процессом кодирования и процессом декодирования остальная часть настоящего раскрытия использует декодирование текущего CU, чтобы проиллюстрировать, как используется процесс SbTMVP для временного предсказания вектора движения текущего CU.
Фиг.6 является блок-схемой алгоритма, иллюстрирующей примерный процесс декодирования, посредством которого видеодекодер реализует способы реализации временного предсказания вектора движения на основе субблоков для текущего изображения из информации движения совмещенного изображения в соответствии с некоторыми реализациями настоящего раскрытия.
Сначала видеодекодер 30 получает (610) кодированный битовый поток видео, включающий в себя данные, ассоциированные с множеством кодированных изображений. Как показано на фиг.4A и 4C, каждое изображение включает в себя множество строк блоков дерева кодирования (CTUs), и каждый CTU включает в себя один или множество блоков кодирования (CUs). Видеодекодер 30 извлекает различные фрагменты информации из битового потока видео, такие как элементы синтаксиса и значения пикселей для восстановления строки за строкой.
В этом примере предполагается, что видеодекодер 30 декодирует текущее изображение 535, изображенное на фиг.5C (630) или, более конкретно, текущий CU 535-1 в текущем изображении 535. Как отмечено выше, текущее изображение 535 имеет множество опорных изображений, например List0 и/или List. Для целей временного предсказания вектора движения одно из опорных изображений является так называемым «совмещенным изображением» 540 текущего изображения 535, как показано на фиг.5С. Следовательно, видеодекодер 30 сначала определяет одно из опорных изображений как совмещенное изображение текущего изображения в соответствии с элементами синтаксиса, о которых сигнализирует в битовом потоке видео в предопределенном порядке (630-1). Например, при получении кандидатов временного вектора движения сначала отправляется явный флаг в заголовке сегмента (collocated_from_l0_flag) в видеодекодер 30 для указания, из какого списка выбрано совмещенное изображение, например, из List0 или List1. В видеодекодер 30 дополнительно отправлен совмещенный опорный индекс (collocated_ref_idx), указывающий, который опорный кадр в этом списке выбран в качестве совмещенного изображения для получения кандидата временного вектора движения.
В любом случае, после того, как опорное изображение текущего кадра, идентифицируются как являющиеся совмещенным изображением, видеодекодер 30 определяет сдвиг движения (также известный как «временной вектор») между совмещенным изображением и текущим изображением (см, например, временной вектор 537, изображенный на фиг.5C) из информации движения пространственно соседних блоков текущего CU 535-1 в соответствии с фиксированным порядком (630-3). Как отмечено выше, каждый CTU (включающий в себя один или множество CUs) имеет множество пространственно соседних блоков, таких как A0, A1, B0, B1, B2 и т.д. Каждый из пространственно соседних блоков может иметь вектор движения, указывающий на соответствующий блок в соответствующем опорном изображении текущего CU. В некоторых реализациях видеодекодер 30 проверяет каждое опорное изображение, ассоциированное с соответствующим пространственно соседним блоком, пока один из них является таким же, как совмещенное изображение. Порядок проверки адаптивный. В некоторых реализациях порядок проверки начинается с одного из List0 и List1 в соответствии с условием малой задержки (LDC) и элементом синтаксиса «collocated_from_l0_flag». LDC является логической переменной, указывающей, все ли опорные изображения имеют меньший счетчик порядка изображений (POC), чем текущее изображение. Например, List0 может включать в себя, по меньшей мере, один опорный кадр, предшествующий текущему изображению во времени и, возможно, одно или более опорных изображений следующего текущего изображения во время. List1 может включать в себя, по меньшей мере, один опорное изображение, следующее за текущим изображением во времени или только опорные изображения, предшествующие текущему изображению во времени. После определения опорного изображения, ассоциированного с конкретным пространственно соседним блоком текущего CU, видеодекодер 30 определяет информацию движения пространственно соседнего блока и использует его в качестве сдвига движения между совмещенным изображением и текущим изображением. Используя сдвиг движения, блок в совмещенном изображении может быть идентифицирован, как соответствующий текущему CU. После установления взаимосвязи отображения между текущим CU 535-1 и соответствующим блоком 540-1, как показано на фиг.5C, видеодекодер 30 может начать формирование временного предсказания вектора движения для каждого субблока текущего CU 535-1.
Следует отметить, что предполагается, что видеокодер 20 разделил текущий CU 535-1 на множество суб-CUs во время генерирования битового потока видео, принятого видеодекодером 30. Следовательно, видеодекодер 30 может использовать из битового потока видео тот же набор элементов синтаксиса для разделения текущего CU 535-1 на множество суб-CUs (630-5). Как изображено на фиг.5C, каждый суб-CU 535-3 в текущем изображении 535 имеет соответствующий субблок в той же относительной позиции в совмещенном изображении 540. Видеодекодер 30 выполнен с возможностью восстанавливать одно и тоже временное предсказание вектора движения для каждого суб-CU, как это делает видеокодер 20 при кодировании суб-CU в битовый поток видео в соответствии с процессом SbTMVP.
В некоторых реализациях видеодекодер 30 получает временной предиктор вектора движения для каждого суб-CU текущего CU на основании двух фрагментов информации, то есть, сдвига движения между совмещенным изображением и текущим изображением и информации движения блока в совмещенном изображении, который соответствует соответствующему субблоку текущего изображения (630-7). Например, для каждого суб-CU в текущем изображении 535 видеодекодер 30 идентифицирует блок в совмещенном изображении в том же относительной позиции, что и суб-CU в текущем изображении, согласно сдвигу движения между совмещенным изображением и текущим изображением. Затем видеодекодер 30 определяет информацию движения идентифицированного блока в совмещенном изображении и выбирает вектор движения, а также опорный индекс из определенной информации движения идентифицированного блока для получения временного предиктора вектора движения суб-CU согласно соотношению разностей POC между текущим изображением и его опорным изображением и разностей POC между совмещенным изображением и опорным изображением соответствующего блока.
С другой стороны, соответствующий блок 540-1 в совмещенном изображении 540 может принадлежать разным CUs, CTUs или даже разным сегментам или плиткам. Возможно, что разные субблоки в соответствующем блоке 540-1 могут иметь разные режимы предсказания, так что некоторые из субблоков в соответствующем блоке 540-1 могут вообще не иметь векторов движения. В некоторых реализациях видеодекодер 30 справляется с этой ситуацией, проверяя конкретный субблок в соответствующем блоке 540-1 и определяет, имеет ли конкретный субблок информацию движения. Если конкретный субблок имеет информацию движения, видеодекодер 30 может использовать конкретный субблок в качестве временного предиктора вектора движения по умолчанию для другого суб-CU текущего CU, когда соответствующий блок суб-CU в совмещенном изображении не имеет информации движения. Например, перед обработкой любого суб-CU в текущем CU видеодекодер 30 может сначала проверить соответствующий блок блока (или выборки) в центре или около центра соответствующего блока 540-1 (например, блока в правой стороне непосредственно под центром соответствующего блока 540-1) и проверить, имеет ли блок информацию движения или нет. Если блок не имеет информацию движения, видеодекодер 30 затем предполагает, что процесс SbTMVP не применяется к текущему CU, и переходит к обработке других кандидатов слияния в текущем изображении. Но, если блок имеет информацию движения, видеодекодер 30 предполагает, что процесс SbTMVP применяется к текущему CU, и использует информацию движения в качестве временного предиктора вектора движения по умолчанию для любого суб-CU текущего CU, когда его соответствующий блок в том же относительном местоположении в совмещенном изображении не имеет информации движения для построения временного предиктора вектора движения суб-CU. Предполагая, что процесс SbTMVP применяется к текущему CU, видеодекодер 30 использует временные предикторы вектора движения, полученные для множества суб-CUs текущего CU, для соответствующего декодирования текущего CU (630-9).
Как отмечалось выше, внутриблочное копирование (IBC) может значительно повысить эффективность кодирования контента экрана. Поскольку режим IBC реализован как режим кодирования на уровне блоков, в видеокодере 20 выполняется согласование блоков (BM) для поиска оптимального вектора блока для каждого CU. Здесь, вектор блока используется для указания смещения от текущего блока к опорному блоку, который уже был восстановлен в пределах текущего изображения. IBC-кодированный CU обрабатывается как третий режим предсказания, отличный от режимов внутреннего или внешнего предсказания.
На уровне CU режим IBC может сигнализироваться как режим IBC AMVP или режим пропуска/слияния IBC следующим образом:
- IBC AMVP режим: разность векторов блоков (BVD) между фактическим вектором блока CU и предиктором вектора блока CU, выбранным из кандидатов вектора блока CU, кодируется таким же образом, как кодируется разность вектора движения в описанном выше AMVP режиме. Способ предсказания вектора блока использует два кандидата вектора блока в качестве предикторов, один от левого соседа и другой от вышележащего соседа (если кодируется IBC). Когда один из соседей недоступен, вектор блока по умолчанию будет использоваться в качестве предиктора вектора блока. Двоичный флаг сигнализируется для указания индекса предиктора вектора блока.
- IBC режим пропуска/слияния: индекс кандидата слияния используется для указания, какой из кандидатов вектора блока в списке кандидатов на слияние из соседних кодированных блоков IBC используется для предсказания вектора блока для текущего блока.
Видеокодер может инициализировать контекст для текущего волнового фронта для выполнения контекстно-адаптивного двоичного арифметического кодирования (CABAC) текущего волнового фронта на основании данных первых двух блоков вышеуказанного волнового фронта, а также одного или более сегментов заголовка для сегмента, включающего в себя первый блок кода текущего волнового фронта. Видеокодер может выполнять инициализацию CABAC последующего волнового фронта (или строки CTU) с использованием состояний контекста после кодирования двух CTUs строки CTU над следующей строкой CTU. Другими словами, перед началом кодирования текущего волнового фронта видеокодер может закодировать, по меньшей мере, два блока волнового фронта над текущим волновым фронтом, предполагая, что текущий волновой фронт не является верхней строкой CTUs изображения. Затем видеокодер может инициализировать контекст CABAC для текущего волнового фронта после кодирования, по меньшей мере, двух блоков волнового фронта над текущим волновым фронтом.
В одном или более примерах описанные функции могут быть реализованы в аппаратных средствах, программном обеспечении, встроенном программном обеспечении или любой их комбинации. Если реализованы в программном обеспечении, функции могут храниться или передаваться в виде одной или более инструкций или кода на машиночитаемом носителе и выполняться аппаратным процессором. Машиночитаемый носитель может включать в себя машиночитаемый носитель данных, который соответствует материальному носителю, например носителю данных, или среде связи, включающей в себя любой носитель, который обеспечивает передачу компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, машиночитаемые носители обычно могут соответствовать (1) материальным машиночитаемым носителям данных, которые являются энергонезависимыми, или (2) средам связи, таким как сигнал или несущая волна. Носители данных могут быть любыми доступными носителями, к которым может получить доступ один или множество компьютеров или один или множество процессоров для извлечения инструкций, кода и/или структур данных для выполнения реализаций, описанных в настоящем изобретении. Компьютерный программный продукт может включать в себя машиночитаемый носитель информации.
Терминология, используемая в описании реализаций в данном документе, предназначена только для описания конкретных реализаций и не предназначена для ограничения объема формулы изобретения. Используемые в описании реализаций и в прилагаемой формуле изобретения формы единственного числа предназначены для использования также форм множественного числа, если контекст явно не указывает иное. Также будет понятно, что термин «и/или», используемый в данном документе, относится и охватывает любые и все возможные комбинации одного или более связанных перечисленных элементов. Кроме того, будет понятно, что термины «содержит» и/или «содержащий» при использовании в данном описании определяют наличие заявленных признаков, элементов и/или компонентов, но не исключают наличие или добавление одного или более других признаков, элементов, компонентов и/или их группы.
Также будет понятно, что, хотя термины первый, второй и т.д. могут использоваться в данном документе для описания различных элементов, эти элементы не должны ограничиваться этими терминами. Эти термины используются только для того, чтобы отличить один элемент от другого. Например, первый электрод может называться вторым электродом и, аналогично, второй электрод может называться первым электродом, не выходя за рамки объема реализации. Первый электрод и второй электроды являются электродами, но это не один и тот же электрод.
Описание настоящего раскрытия было представлено в целях иллюстрации и описания и не предназначено быть исчерпывающим или ограниченным изобретением в раскрытой форме. Многие модификации, вариации и альтернативные реализации будут очевидны для специалистов в данной области техники, пользующихся преимуществами идей, представленных в предшествующих описаниях и соответствующих чертежах. Вариант осуществления был выбран и описан для представления наилучшим образом принципов изобретения, его практическое применение и предоставления возможности другим специалистам в данной области техники понять изобретение для различных реализаций и наилучшим образом использовать лежащие в основе принципы и различные реализации с различными модификациями, которые подходят для конкретного предполагаемого использования. Следовательно, следует понимать, что объем формулы изобретения не должен ограничиваться конкретными примерами раскрытых реализаций и что модификации и другие реализации должны находиться в рамках объема прилагаемой формулы изобретения.