ЗАПОЛНЕНИЕ КРАЕВЫХ ПИКСЕЛОВ НЕИНФОРМАТИВНЫМИ СИМВОЛАМИ ДЛЯ ВНУТРЕННЕГО ПРЕДСКАЗАНИЯ ПРИ КОДИРОВАНИИ ВИДЕОСИГНАЛА
BORDER PIXEL PADDING WITH FILL CHARACTERS FOR INTRA PREDICTION IN VIDEO CODING

Данная заявка испрашивает приоритет предварительной заявки на патент США № 61/496504, зарегистрированной 13 июня 2011 года, предварительной заявки на патент США № 61/557361, поданной 8 ноября 2011 года, и предварительной заявки на патент США № 61/557845, поданной 9 ноября 2011 года, полное содержание каждой из которых включено сюда в качестве ссылки.
ОБЛАСТЬ ТЕХНИКИ
Данное описание относится к кодированию видеосигнала и, более конкретно, к внутреннему предсказанию видеоданных.
УРОВЕНЬ ТЕХНИКИ
Возможности цифрового видео могут быть включены в широкий диапазон устройств, включающих в себя цифровые телевизоры, цифровые системы прямого вещания, беспроводные системы вещания, персональные цифровые секретари (PDA), портативные или настольные компьютеры, цифровые камеры, цифровые устройства записи, цифровые медиа-плейеры, устройства для видеоигр, консоли для видеоигр, сотовые или спутниковые радиотелефоны, видеоустройства для телеконференций и т.п. Цифровые видеоустройства реализуют способы сжатия (цифровых) видеосигналов, такие как способы, описанные в стандартах, заданных посредством MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, часть 10, усовершенствованное кодирование видеосигнала (AVC), стандарт кодирования видеосигнала высокой эффективности (HEVC), находящийся в настоящее время в разработке, и расширения таких стандартов, для более эффективной передачи, приема и хранения цифровой видеоинформации.
Способы сжатия видеосигналов осуществляют пространственное (внутри изображения) предсказание и/или временное (между изображениями) предсказание для уменьшения или устранения избыточности, свойственной видеопоследовательностям. Для кодирования видеосигнала, основанного на блоках, видеосрез может быть разделен на видеоблоки, которые могут также называться блоками древовидной структуры, блоками кодирования (CU) и/или узлами кодирования. Видеоблоки в срезе изображения, кодированном с помощью внутрикадрового кодирования (I), кодируются с использованием пространственного предсказания относительно опорных выборок в соседних блоках в том же самом изображении. Видеоблоки в срезе изображения, кодированном с помощью межкадрового кодирования (Р или В), могут использовать пространственное предсказание относительно опорных выборок в соседних блоках в том же самом изображении или временное предсказание относительно опорных выборок в других опорных изображениях. Изображения могут называться кадрами, и опорные изображения могут называться опорными кадрами.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
В общем, данное описание описывает способы для заполнения неинформативными символами краевых пикселов (элементов изображения) для внутреннего предсказания при кодировании видеосигнала. В соответствии со способами данного описания, видеокодер может выполнить операцию заполнения неинформативными символами, которая назначает значения недоступным краевым пикселам. Эта операция заполнения неинформативными символами может обработать краевые пикселы согласно порядку, который начинается с нижнего-левого краевого пиксела и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами может назначить некоторое значение недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами. Видеокодер может сгенерировать видеоблок, предсказанный с помощью внутреннего предсказания, основанный на краевых пикселах.
В одном аспекте, это описание описывает способ для кодирования видеоданных. Этот способ содержит выполнение операции заполнения неинформативными символами, которая обрабатывает некоторое множество краевых пикселов согласно порядку, который начинается в нижнем-левом краевом пикселе и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает значение недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами. Этот способ также содержит генерацию видеоблока, предсказанного с помощью внутреннего предсказания, основанного на краевых пикселах.
Данное описание также описывает устройство кодирования видеосигнала, которое содержит один или несколько процессоров, выполненных с возможностью выполнения операции заполнения неинформативными символами, которая обрабатывает некоторое множество краевых пикселов согласно порядку, который начинается в нижнем-левом краевом пикселе и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает значение недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами. Этот один или несколько процессоров также выполнены с возможностью генерации видеоблока, предсказанного с помощью внутреннего предсказания, основанного на краевых пикселах.
Кроме того, данное описание описывает устройство кодирования видеосигнала, содержащее средство для выполнения операции заполнения неинформативными символами, которая обрабатывает некоторое множество краевых пикселов согласно порядку, который начинается в нижнем-левом краевом пикселе и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает значение недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами. Это устройство кодирования видеосигнала также содержит средство для генерации видеоблока, предсказанного с помощью внутреннего предсказания, на основе краевых пикселов.
Данное описание также описывает компьютерный программный продукт, который содержит один или несколько считываемых компьютером носителей данных, которые сохраняют исполняемые компьютером команды, которые, при исполнении, вызывают выполнение одним или несколькими процессорами операции заполнения неинформативными символами, которая обрабатывает некоторое множество краевых пикселов согласно порядку, который начинается в нижнем-левом краевом пикселе и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает значение недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами. Эти команды также вызывают генерацию одним или несколькими процессорами видеоблока, предсказанного с помощью внутреннего предсказания, на основе краевых пикселов.
Подробности одного или нескольких примеров изложены в сопутствующих чертежах и в описании ниже. Другие особенности, объекты и преимущества явствуют из этого описания и чертежей и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг. 1 является блок-схемой, иллюстрирующей примерную систему кодирования видеосигнала, которая может реализовать способы данного описания.
Фиг. 2 является концептуальной схемой, которая иллюстрирует примерный видеоблок и множество краевых пикселов, связанных с этим видеоблоком.
Фиг. 3А является концептуальной схемой, которая иллюстрирует примерные режимы внутреннего предсказания при кодировании видеосигнала высокой эффективности.
Фиг. 3В является концептуальной схемой, которая указывает другое примерное назначение номеров различным режимам внутреннего предсказания.
Фиг. 3С является концептуальной схемой, которая иллюстрирует примерные режимы внутреннего предсказания в H.264/AVC.
Фиг. 4 является блок-схемой, иллюстрирующей примерный видеокодер, который может реализовать способы данного описания.
Фиг. 5 является блок-схемой, иллюстрирующей примерный видеодекодер, который может реализовать способы данного описания.
Фиг. 6 является блок-схемой алгоритма, которая иллюстрирует примерную операцию внутреннего предсказания.
Фиг. 7 является блок-схемой алгоритма, которая иллюстрирует примерную операцию заполнения неинформативными символами.
Фиг. 8 является концептуальной схемой, которая иллюстрирует порядок, в котором примерная операция заполнения неинформативными символами по фиг. 7 проходит через краевые пикселы.
Фиг. 9 является блок-схемой алгоритма, которая иллюстрирует другую примерную операцию заполнения неинформативными символами.
Фиг. 10 является концептуальной схемой, которая иллюстрирует примерный порядок, в котором операция заполнения неинформативными символами по фиг. 9 проходит через краевые пикселы.
Фиг. 11 является блок-схемой алгоритма, которая иллюстрирует другую примерную операцию заполнения неинформативными символами.
Фиг. 12 является концептуальной схемой, которая иллюстрирует примерный порядок, в котором операция заполнения неинформативными символами по фиг. 11 проходит через краевые пикселы.
Фиг. 13 является блок-схемой алгоритма, которая иллюстрирует примерную операцию для определения того, является ли краевой пиксел доступным.
ПОДРОБНОЕ ОПИСАНИЕ
Прилагаемые чертежи иллюстрируют примеры. Элементы, указанные посредством условных обозначений, в прилагаемых чертежах соответствуют элементам, указанным посредством подобных условных обозначений в следующем описании. В этом описании, элементы, имеющие названия, которые начинаются с порядковых числительных (например, «первый», «второй», «третий» и т.д.) необязательно подразумевают, что эти элементы имеют некоторый конкретный порядок. Скорее, такие порядковые числительные используются просто для ссылки на различные элементы одного и того же или подобного типа.
Видеокодер может сгенерировать видеоблок, предсказанный с помощью внутреннего предсказания, на основе некоторого множества пикселов, которые граничат с этим видеоблоком с верхней и с левой стороны этого видеоблока. Краевые пикселы на левой строне видеоблока могут проходить ниже нижней строки пикселов видеоблока, а краевые пикселы на верхней стороне видеоблока могут проходить вправо от крайнего правого столбца пикселов видеоблока.
В некоторых случаях, один или несколько краевых пикселов могут быть недоступными. Соответственно, видеокодер может выполнить операцию заполнения неинформативными символами, которая назначает значения недоступным краевым пикселам. Эта операция заполнения неинформативными символами может обработать краевые пикселы согласно некоторому порядку, который начинается с нижнего-левого краевого пиксела и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами может назначить некоторое значение этому недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами. После выполнения операции заполнения неинформативными символами, видеокодер может сгенерировать видеоблок, предсказанный с помощью внутреннего предсказания, на основе этих краевых пикселов. Если этот видеокодер является видеокодером, то этот видеокодер может сгенерировать кодированные видеоданные на основе видеоблока, предсказанного с помощью внутреннего предсказания. Например, видеокодер может сгенерировать остаточные данные, основанные по меньшей мере частично на видеоблоке, предсказанном с помощью внутреннего предсказания. Если этот видеокодер является видеодекодером, то этот видеокодер может сгенерировать декодированные видеоданные на основе видеоблока, предсказанного с помощью внутреннего предсказания. Например, этот видеодекодер может реконструировать декодированный видеоблок, основанный по меньшей мере частично на видеоблоке, предсказанном с помощью внутреннего предсказания, и остаточном видеоблоке.
Фиг. 1 является блок-схемой, которая иллюстрирует примерную систему 10 кодирования видеосигнала, которая может использовать способы данного описания. Как использовалось описанное здесь, термин «видеокодер» обобщенно относится как к видеокодерам, видеодекодерам, так и к комбинированным кодерам-декодерам (CODEC). В этом описании, термины «кодирование видеосигнала» или «кодирование» могут обобщенно относиться к кодированию видеосигнала и декодированию видеосигнала. Все термины «кодер», «декодер» и CODEC могут относиться к конкретным машинам, предназначенным для кодирования (кодирования и/или декодирования) видеоданных, совместимого с этим описанием. Устройство, которое выполняет кодирование видеосигнала может быть названо устройством кодирования видеосигнала.
Как показано на фиг. 1, система 10 кодирования видеосигнала включает в себя исходное устройство 12 и устройство 14 назначения. Исходное устройство 12 генерирует кодированные видеоданные. Устройство 14 назначения может декодировать эти кодированные видеоданные, генерируемые исходным устройством 12. Исходное устройство 12 и устройство 14 назначения могут содержать широкий диапазон устройств, включающий в себя настольные компьютеры, портативные компьютеры (например, компактные портативные компьютеры), планшетные компьютеры, телеприставки, телефоны-трубки, такие как так называемые смартфоны, так называемые «интеллектуальные клавиатуры», телевизоры, камеры, устройства отображения, цифровые медиа-плейеры, консоли для видеоигр, автомобильные компьютеры и т.п. В некоторых примерах, исходное устройство 12 и устройство 14 назначения могут быть оборудованы для беспроводной связи.
Устройство 14 назначения может принять кодированные видеоданные от исходного устройства 12 через канал 16. Канал 16 может содержать любой тип среды или устройства, способного перемещать кодированные видеоданные от исходного устройства 12 к устройству 14 назначения. В одном примере, канал 16 может содержать среду передачи данных, которая дает возможность исходному устройству 12 передавать кодированные видеоданные непосредственно к устройству 14 назначения в реальном времени. В этом примере, исходное устройство 12 может модулировать кодированные видеоданные согласно стандарту связи, такому как протокол беспроводной связи, и может передавать модулированные видеоданные к устройству 14 назначения. Эта среда передачи данных может содержать беспроводную или проводную среду передачи данных, такую как радиочастотный (RF) спектр или одна или несколько физических линий передачи. Эта среда передачи данных может образовывать часть сети на основании пакетов, такой как локальная вычислительная сеть, широкомасштабная сеть или глобальная сеть, такая как Интернет. Эта среда передачи данных может включать в себя маршрутизаторы, переключатели, базовые станции или другое оборудование, которое облегчает связь от исходного устройства 12 к устройству 14 назначения.
В другом примере, канал 16 может соответствовать носителю данных, который хранит кодированные видеоданные, генерируемые исходным устройством 12. В этом примере, устройство 14 назначения может получить доступ к носителю данных через доступ с помощью диска или доступ с помощью карточки. Этот носитель данных может включать в себя разнообразие локально доступных носителей данных, таких как Blue-ray диски, DVD, CD-ROM, флэш-память или другие соответствующие цифровые носители данных для хранения кодированных видеоданных. В дополнительном примере, канал 16 может включать в себя файловый сервер или другое промежуточное ЗУ, которое хранит кодированное видео, сгенерированное исходным устройством 12. В этом примере, устройство 14 назначения может получить доступ к кодированным видеоданным, хранимым в этом файловом сервере или другом промежуточном ЗУ через поточную передачу или загрузку. Этот файловый сервер может быть некоторым типом сервера, способным хранить кодированные видеоданные и передавать кодированные видеоданные к устройству 14 назначения. Примерные файловые серверы включают в себя web-серверы (например, для web-сайта), FTP серверы, присоединенные к сети ЗУ (NAS) и локальные дисководы. Устройство 14 назначения может получить доступ к кодированным видеоданным через стандартное подключение данных, такое как Интернет-подключение. Примерные типы подключений данных могут включать в себя беспроводные каналы (например, Wi-Fi подключения), проводные подключения (например, DSL, кабельный модем и т.д.), или комбинации обоих типов, которые является подходящими для доступа к кодированным видеоданным, хранимым на файловом сервере. Передача кодированных видеоданных от файлового сервера может быть поточной передачей, передачей загрузки или комбинацией обеих.
Способы данного описания не ограничены беспроводными приложениями или установками. Эти способы могут применяться к кодированию видеосигнала в поддержке любого из разнообразия мультимедийных приложений, таких как телевизионное радиовещание, передачи кабельного телевидения, передачи спутникового телевидения, передачи потокового видео, например, через Интернет, кодирование цифрового видео для хранения на носителе данных, декодирование цифрового видео, хранимого на носителе данных или других приложений. В некоторых примерах, система 10 кодирования видеосигнала может быть выполнена с возможностью поддержки односторонней или двусторонней передачи видеосигнала для поддержки приложений, таких как поточная передача видеосигнала, воспроизведение видео, вещание видео и/или видеотелефония.
В примере фиг. 1, исходное устройство 12 включает в себя источник 18 видео, видеокодер 20 и интерфейс 22 вывода. В некоторых случаях, интерфейс 22 вывода может включать в себя модулятор/демодулятор (модем) и/или передатчик. Источник 18 видео может включать в себя такой источник, как устройство захвата видео, например, видеокамеру, видеоархив, содержащий ранее захваченные видеоданные, интерфейс подачи видео для приема видеоданных от провайдера видеоконтента, и/или систему компьютерной графики для генерации видеоданных, или комбинацию таких источников.
Видеокодер 20 может кодировать видеоданные. Интерфейс 22 вывода может непосредственно передать кодированные видеоданные к устройству 14 назначения. Альтернативно, интерфейс 22 вывода может сохранить кодированные видеоданные на носитель данных или файловый сервер для более позднего доступа устройством 14 назначения для декодирования и/или воспроизведения.
В примере фиг. 1, устройство 14 назначения включает в себя интерфейс 28 ввода, видеодекодер 30 и устройство 32 отображения. В некоторых случаях, интерфейс 28 ввода может включать в себя приемник и/или модем. Интерфейс 28 ввода устройства 14 назначения принимает кодированные видеоданные по каналу 16. Кодированные видеоданные могут включать в себя разнообразие синтаксических элементов, которые представляют эти видеоданные.
Устройство 32 отображения может быть интегрировано с устройством 14 назначения или может быть внешним к нему. В других примерах, устройство 14 назначения может быть устройством отображения. В общем, устройство 32 отображения отображает декодированные видеоданные для пользователя. Устройство 32 отображения может содержать любое из разнообразия устройств отображения, таких как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED) или другой тип устройства отображения.
Видеокодер 20 и видеодекодер 30 могут работать согласно стандарту сжатия видео, такому как стандарт кодирования видеосигнала высокой эффективности (HEVC), находящийся в настоящее время в разработке, и может соответствовать тестовой модели HEVC (HM). Альтернативно, видеокодер 20 и видеодекодер 30 могут работать согласно другим собственным или промышленным стандартам, таким как стандарт ITU-T H.264, альтернативно называемый MPEG-4, часть 10, усовершенствованное кодирование видеосигнала (AVC), или расширения таких стандартов. Способы данного описания, однако, не ограничены каким-либо конкретным стандартом кодирования. Другие примерные стандарты сжатия видео включают в себя MPEG-2 и ITU-T H.263.
Хотя это и не показано в примере фиг. 1, каждый из видеокодера 20 и видеодекодера 30 может быть интегрирован с аудиокодером и декодером и может включать в себя соответствующие блоки мультиплексора-демультиплексора (MUX-DEMUX), или другое аппаратное и программное обеспечение, для обработки кодирования как аудио, так и видео в общем потоке данных или отдельных потоках данных. В некоторых примерах, MUX-DEMUX блоки могут соответствовать протоколу ITU H.223 мультиплексора, или другим протоколам, таким как протокол дейтаграмм пользователя (UDP).
Опять же, фиг. 1 является примером, и способы данного описания могут применяться к настройкам кодирования видеосигнала (например, кодирования видеосигнала или декодирования видеосигнала), которые необязательно включают в себя какую-либо передачу данных между устройствами кодирования и декодирования. Во многих примерах, кодирование видеосигнала и декодирования видеосигнала выполняется устройствами, которые не связываются друг с другом, а сохраняют кодированные видеоданные в памяти и/или извлекают и декодируют видеоданные из памяти.
Каждый из видеокодера 20 и видеодекодера 30 может быть реализован с использованием различных типов схем, таких как один или несколько микропроцессоров, процессоров цифровых сигналов (DSP), интегральные схемы прикладной ориентации (ASIC), программируемые пользователем вентильные матрицы (FPGA), дискретная логика, аппаратное обеспечение или любые их комбинации. В некоторых случаях видеокодер 20 и видеодекодер 30 могут быть по меньшей мере частично реализованы в программном обеспечении. Когда видеокодер 20 и/или видеодекодер 30 реализуются частично в программном обеспечении, некоторое устройство может хранить команды для этого программного обеспечения в соответствующем, некратковременном считываемом компьютером носителе данных и может исполнять эти команды в аппаратном обеспечении с использованием одного или нескольких процессоров для выполнения способов данного описания. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или несколько кодеров или декодеров, каждый из которых может быть интегрирован как часть комбинированного кодера/декодера (CODEC) в соответствующем устройстве.
Как кратко упоминалось выше, видеокодер 20 кодирует видеоданные. Эти видеоданные могут содержать одно или несколько изображений. Каждое из этих изображений является неподвижным изображением, образующим часть некоторого видео. В некоторых случаях, изображение может называться видеокадром. Когда видеокодер 20 кодирует видеоданные, видеокодер 20 может генерировать битовый поток. Этот битовый поток может включать в себя последовательность битов, которые образуют кодированное представление этих видеоданных.
Для генерации этого битового потока, видеокодер 20 может выполнить операции кодирования на каждом изображении в видеоданных. Когда видеокодер 20 выполняет операции кодирования на этих изображениях, видеокодер 20 может генерировать последовательность кодированных изображений и связанных данных. Кодированное изображение является кодированным представлением некоторого изображения. Эти связанные данные могут включать в себя множества параметров последовательности, множества параметров изображения, множества параметров приспособления и другие синтаксические структуры. Множество параметров последовательности (SPS) может содержать параметры, применимые к нулю или большему количеству последовательностей изображений. Множество параметров изображения (PPS) может содержать параметры, применимые к нулю или большему количеству изображений. Множество параметров приспособления (APS) может содержать параметры, применимые к нулю или большему количеству изображений. Параметры PPS могут быть фиксированными для некоторого множества изображений, тогда как параметры в различных множествах параметров приспособления могут быть применимы к различным изображениям в этом множестве изображений.
Для генерации кодированного изображения, видеокодер 20 может разделить некоторое изображение на неперекрывающиеся видеоблоки равного размера. Каждый из этих видеоблоков связан с некоторым блоком древовидной структуры. В некоторых случаях, блок древовидной структуры может также называться наибольшим блоком кодирования (LCU). Блоки древовидной структуры HEVC могут быть широко аналогичны макроблокам предыдущих стандартов, таких как H.264/AVC. Однако блок древовидной структуры необязательно ограничен конкретным размером и может включать в себя один или несколько блоков кодирования (CU). Видеокодер 20 может использовать разделение на дерево квадрантов для разделения видеоблоков блоков древовидной структуры на видеоблоки, связанные с CU, отсюда название «блоки древовидной структуры».
В некоторых примерах, видеокодер 20 может разделить некоторое изображение на множество срезов. Каждый срез может включать в себя целое число CU. В некоторых случаях, срез содержит целое число блоков древовидной структуры. В других случаях, граница среза может находиться в пределах блока древовидной структуры.
Как часть выполнения операции кодирования на изображении, видеокодер 20 может выполнить операции кодирования на каждом срезе этого изображения. Когда видеокодер 20 выполняет операцию кодирования на срезе, видеокодер 20 может генерировать кодированные данные, связанные с этим срезом. Эти кодированные данные, связанные с этим срезом, могут называться «кодированным срезом».
Для генерации кодированного среза, видеокодер 20 может выполнить операции кодирования на каждом блоке древовидной структуры в некотором срезе. Когда видеокодер 20 выполняет операцию кодирования на блоке древовидной структуры, видеокодер 20 может генерировать кодированный блок древовидной структуры. Этот кодированный блок древовидной структуры может содержать данные, представляющие кодированную версию этого блока древовидной структуры.
Для генерации кодированного блока древовидной структуры, видеокодер 20 может рекурсивно выполнить разделение дерева квадрантов на видеоблоке блока древовидной структуры для разделения этого видеоблока на все более меньшие видеоблоки. Каждый из меньших видеоблоков может быть связан с различными CU. Например, видеокодер 20 может разделить видеоблок блока древовидной структуры на четыре подблока равного размера, разделить один или несколько из этих подблоков на четыре подподблоков равного размера и т.д. Один или несколько синтаксических элементов в битовом потоке могут указывать максимальное число раз, когда видеокодер 20 может разделить видеоблок блока древовидной структуры. Видеоблок CU может быть квадратом по форме. Размер видеоблока CU (т.е. размер CU) может изменяться от 8х8 пикселов вплоть до размера видеоблока блока древовидной структуры (т.е. размера этого блока древовидной структуры) с максимумом в 64х64 пикселов или более.
Видеокодер 20 может выполнить операции кодирования на каждом неразделенном CU блока древовидной структуры. Неразделенный CU является CU, чей видеоблок не разделен на видеоблоки для других CU. Как часть выполнения операции кодирования на неразделенном CU, видеокодер 20 может сгенерировать один или несколько блоков предсказания (PU) для этого CU. Каждый из PU этого CU может быть связан с другим видеоблоком в пределах видеоблока этого CU. Видеокодер 20 может сгенерировать предсказанный видеоблок для каждого PU этого CU. Этот предсказанный видеоблок некоторого PU может быть некоторым блоком выборок. В этом описании, термин «выборка» может относиться к освещенности (яркости) или цвету (вектору цветности) некоторого пиксела. Видеокодер 20 может использовать внутреннее предсказание или внешнее предсказание для генерации предсказанного видеоблока для некоторого PU.
Когда видеокодер 20 использует внутреннее предсказание для генерации предсказанного видеоблока некоторого PU, видеокодер 20 может сгенерировать предсказанный видеоблок этого PU на основе выборок изображения, связанного с этим PU. Если видеокодер 20 использует внутреннее предсказание для генерации предсказанных видеоблоков этих PU некоторого CU, то этот CU является CU, предсказанным с помощью внутреннего предсказания.
Когда видеокодер 20 использует внешнее предсказание для генерации предсказанного видеоблока этого PU, видеокодер 20 может сгенерировать предсказанный видеоблок этого PU на основе значений изображений, отличных от изображения, связанного с этим PU. Другими словами, видеокодер 20 может сгенерировать предсказанный видеоблок этого PU на основе выборок в одном или нескольких опорных изображениях. Кроме того, когда видеокодер 20 использует внутреннее предсказание для генерации предсказанного видеоблока для некоторого PU, видеокодер 20 может сгенерировать информацию о движении для этого PU. Эта информация о движении для некоторого PU может указывать некоторую часть опорного изображения, которая соответствует видеоблоку этого PU. Другими словами, информация о движении для некоторого PU может указывать «опорную выборку» для этого PU. Видеокодер 20 может сгенерировать предсказанный видеоблок для этого PU на основе частей этих опорных изображений, которые указываются информацией о движении для этого PU. Если видеокодер 20 использует внешнее предсказание для генерации предсказанных видеоблоков для этих PU некоторого CU, то этот CU является CU, предсказанным с помощью внешнего предсказания.
После того, как видеокодер 20 генерирует предсказанные видеоблоки для одного или нескольких PU некоторого CU, видеокодер 20 может сгенерировать остаточные данные для этого CU на основе предсказанных видеоблоков для этих PU этого CU. Эти остаточные данные для этого CU могут указывать различия между выборками в предсказанных видеоблоках для этих PU этого CU и первоначальным видеоблоком этого CU.
Кроме того, как часть выполнения операции кодирования на неразделенном CU, видеокодер 20 может выполнить рекурсивное разделение дерева квадрантов на остаточные данные CU для разделения остаточных данных CU на один или несколько блоков остаточных данных (т.е. остаточных видеоблоков), связанных с блоками преобразования (TU) этого CU. Каждый TU некоторого CU может быть связан с другим остаточным видеоблоком. Видеокодер 20 может выполнить операцию преобразования на каждом TU этого CU.
Когда видеокодер 20 выполняет операцию преобразования на некотором TU, видеокодер 20 может применить один или несколько преобразований к остаточному видеоблоку, связанному с этим TU, для генерации одного или нескольких блоков коэффициентов преобразования (т.е. блоков коэффициентов преобразования), связанных с этим TU. Концептуально, блок коэффициентов преобразования может быть двумерной (2D) матрицей коэффициентов преобразования.
После генерации блока коэффициентов преобразования, видеокодер 20 может выполнить операцию квантования на этом блоке коэффициентов преобразования. Квантование обычно относится к процессу, в котором коэффициенты преобразования квантуются для возможного уменьшения величины данных, используемой для представления коэффициентов преобразования, обеспечивая дополнительное сжатие.
Квантование может уменьшать глубину цвета, связанную с некоторыми или всеми коэффициентами преобразования. Например, n-битовый коэффициент преобразования может быть округлен вниз до m-битового коэффициента преобразования во время квантования, где n является большим, чем m.
Видеокодер 20 может связать каждый CU или некоторое количество CU со значением параметра квантования (QP). Значение QP, связанное с CU, может определить то, как видеокодер 20 квантует блоки коэффициентов преобразования, связанные с этим CU или этим числом CU. Видеокодер 20 может настроить степень квантования, применяемого к блокам коэффициентов преобразования, связанным с некоторым CU посредством настройки значения QP, связанного с этим CU.
После того, как видеокодер 20 квантует блок коэффициентов преобразования видеокодер 20 может сканировать квантованные коэффициенты преобразования для создания одномерного вектора уровней коэффициентов преобразования. Видеокодер 20 может энтропийно кодировать этот одномерный вектор. Видеокодер 20 может также энтропийно кодировать другие синтаксические элементы, связанные этими видеоданными.
Битовый поток, генерируемый видеокодером 20, может включать в себя последовательность блоков абстрактного уровня сети (NAL). Каждый из NAL блоков может быть синтаксической структурой, содержащей указание типа данных в этом NAL блоке и байтов, содержащих эти данные. Например, NAL блок может содержать данные, представляющие множество параметров последовательности, множество параметров изображения, кодированный срез, информацию о дополнительном улучшении (SEI), разделитель блоков доступа, данные заполнителя или другой тип данных. Эта данные в NAL блоке могут включать в себя энтропийно кодированные синтаксические структуры, такие как энтропийно кодированные блоки коэффициентов преобразования, информацию о движении и т.д.
Видеодекодер 30 может принять битовый поток, генерируемый видеокодером 20. Этот битовый поток может включать в себя кодированное представление видеоданных, кодированных видеокодером 20. Когда видеодекодер 30 принимает этот битовый поток, видеодекодер 30 может выполнить операцию синтаксического анализа на этом битовом потоке. Когда видеодекодер 30 выполняет операцию синтаксического анализа, видеодекодер 30 может выделить синтаксические элементы из этого битового потока. Видеодекодер 30 может реконструировать изображения видеоданных на основе синтаксических элементов, выделенных из битового потока. Этот процесс реконструкции видеоданных на основе синтаксических элементов может быть обычно обратным процессу, выполняемому видеокодером 20 для генерации синтаксических элементов.
После того, как видеодекодер 30 выделяет синтаксические элементы, связанные с некоторым CU, видеодекодер 30 может генерировать видеоблоки, предсказанные с помощью внутреннего или внешнего предсказания, для этих PU этого CU на основе этих синтаксических элементов. Кроме того, видеодекодер 30 может обратно квантовать (инвертировать квантование) блоков коэффициентов преобразования, связанных с TU этого CU. Видеодекодер 30 может выполнить обратные преобразования на блоках коэффициентов преобразования для реконструкции остаточных видеоблоков, связанных с этими TU этого CU. После генерации предсказанных видеоблоков и реконструкции остаточных видеоблоков, видеодекодер 30 может реконструировать видеоблок этого CU на основе предсказанных видеоблоков и остаточных видеоблоков. Таким образом, видеодекодер 30 может определить видеоблоки CU на основе синтаксических элементов в битовом потоке.
Как кратко описано выше, видеокодер, такой как видеокодер 20 или видеодекодер 30, может использовать внутреннее предсказание для генерации предсказанного видеоблока для некоторого PU. Для легкости объяснения, это описание может относиться к предсказанному видеоблоку, сгенерированному с использованием внутреннего предсказания, как к видеоблоку, предсказанному с помощью внутреннего предсказания. Когда видеокодер генерирует видеоблок, предсказанный с помощью внутреннего предсказания, для некоторого PU, видеокодер может назначить значения различных краевых пикселов пикселам в видеоблоке, предсказанном с помощью внутреннего предсказания.
Фиг. 2 является концептуальной схемой, которая иллюстрирует примерный видеоблок 50 и множество краевых пикселов, связанных с видеоблоком 50. Видеоблок 50 может быть связан с некоторым PU некоторого CU, который некоторый видеокодер в настоящее время кодирует. В примере фиг. 2, видеоблок 50 состоит из семнадцати пикселов, помеченных а-р. В примере фиг. 2, краевые пикселы помечены А-R. Другие видеоблоки могут быть большими или меньшими, чем видеоблок 50. В общем, видеоблок может быть связан с 2*w+1 краевыми пикселами выше этого видеоблока и 2*h+1 краевыми пикселами слева от этого видеоблока, где w - ширина, а h - высота этого видеоблока.
Краевые пикселы выше видеоблока (например, видеоблока 50) могут образовать верхний предиктор. Другими словами, верхним предиктором может быть массив опорных выборок, соответствующих некоторой строке выборок, лежащих выше видеоблока. Если верхний левый пиксел видеоблока имеет координаты (х, y), и размер видеоблока равен NxN, то выборки с координатами (х+i, y-1), где i изменяется от -1 до 2N, образуют верхний предиктор. Краевые пикселы слева от видеоблока образуют левый предиктор. Другими словами, левым предиктором может быть массив опорных выборок, соответствующих столбцу выборок, лежащих слева от видеоблока. Если верхний левый пиксел видеоблока имеет координаты (х, y), и размер видеоблока равен NxN, то выборки с координатами (х-1, y+j), где j изменяется от -1 до 2N, образуют левый предиктор.
Фиг. 3 является концептуальной схемой, которая иллюстрирует примерные режимы внутреннего предсказания в HEVC. В примере фиг. 3А, режимы 1, 2 и 4-33 внутреннего предсказания соответствуют различным направлениям, от которых видеокодер может простирать краевые пикселы для генерации видеоблока, предсказанного с помощью внутреннего предсказания. Например, когда видеокодер использует режим 1 внутреннего предсказания, видеокодер может генерировать видеоблок, предсказанный с помощью внутреннего предсказания, посредством расширения значений краевых пикселов вертикально вниз. В этом примере, видеокодер может использовать режим 1 внутреннего предсказания для генерации видеоблока 50 (фиг. 2) посредством назначения значения краевого пиксела А пикселам а, е, i и m, посредством назначения значения краевого пиксела В пикселам b, f, j и n, посредством назначения значения краевого пиксела С пикселам с, g, k и о, и посредством назначения значения краевого пиксела D пикселам d, h, l и p.
Режим 0 может относиться к плоскому режиму. Видеокодер может использовать следующую формулу для генерации видеоблока, предсказанного с помощью внутреннего предсказания, с использованием плоского режима:
В вышеприведенной формуле, predSamples[x, y] является массивом выборок, предсказанных с помощью внутреннего предсказания, nS указывает размер предсказанного видеоблока, а р[x, y] - массив соседних выборок.
Режим 3 может относиться к DC режиму. Для генерации видеоблока, предсказанного с помощью внутреннего предсказания, с использованием DC режима, видеокодер может сначала вычислить значение DCVal с использованием следующей формулы:
Если индекс цветности (cIdx) текущего блока равен 0, то применяется нижеследующее.
В противном случае, выборки предсказания predSamples[x, y] выводятся как
В формулах, приведенных выше, predSamples[x, y] является массивом выборок, предсказанных с помощью внутреннего предсказания, nS указывает размер предсказанного видеоблока, а р[x, y] - массив соседних выборок.
В другом примере, когда видеокодер использует режим 10 внутреннего предсказания, видеокодер может сгенерировать видеоблок, предсказанный с помощью внутреннего предсказания, посредством расширения значений краевых пикселов диагонально от нижнего-левого до верхнего-правого. В примере фиг. 2, видеокодер может использовать режим 10 внутреннего предсказания для генерации видеоблока 50 посредством назначения значения краевого пиксела J пикселу а, посредством назначения значения краевого пиксела К пикселам е и b, посредством назначения значения краевого пиксела L пикселам i, f и c, посредством назначения значения краевого пиксела М пикселам m, j, g и d, посредством назначения значения краевого пиксела N пикселам n, k и h, посредством назначения значения краевого пиксела О пикселам о и l, и посредством назначения значения краевого пиксела Р пикселу р.
В других примерах, видеокодер может использовать различные номера для указания режимов внутреннего предсказания. Например, фиг. 3 является концептуальной схемой, которая указывает другое назначение номеров различным режимам внутреннего предсказания.
Фиг. 3С является концептуальной схемой, которая иллюстрирует примерные режимы внутреннего предсказания в H.264/AVC. В H.264/AVC может быть меньше доступных режимов внутреннего предсказания.
В некоторых случаях, один или несколько краевых пикселов, связанных с видеоблоком, предсказанным с помощью внутреннего предсказания, являются недоступными. Это множество краевых пикселов, связанных с видеоблоком, предсказанным с помощью внутреннего предсказания, может включать в себя краевые пикселы, которые видеокодер может использовать для генерации видеоблока, предсказанного с помощью внутреннего предсказания. Когда краевой пиксел является недоступным, видеокодер может быть неспособен получить доступ к значению этого краевого пиксела. Соответственно, видеокодер может быть неспособен использовать значение этого краевого пиксела для генерации видеоблока, предсказанного с помощью внутреннего предсказания.
Краевой пиксел может быть недоступным из-за разнообразия причин. Например, краевой пиксел может быть недоступным, если этот краевой пиксел находится вне границы текущего изображения (т.е. изображения, которое в настоящее время кодирует видеокодер). В другом примере, краевой пиксел может быть недоступным, если этот краевой пиксел находится вне границы текущего среза или мозаичного фрагмента (т.е. среза или мозаичного фрагмента, который видеокодер в настоящее время кодирует) и предсказание перекрестного среза/мозаичного фрагмента не разрешено. В другом примере, краевой пиксел может быть недоступным, если этот краевой пиксел связан с CU, предсказанным с помощью внешнего предсказания, и ограниченное внутреннее предсказание возможно для текущего изображения.
Поскольку один или несколько краевых пикселов могут быть недоступными, видеокодер может выполнить операцию заполнения неинформативными символами, которая назначает значения недоступным краевым пикселам. После того, как видеокодер выполняет операцию заполнения неинформативными символами, видеокодер может использовать доступные значения доступных краевых пикселов и приписанные значения недоступных краевых пикселов для генерации видеоблока, предсказанного с помощью внутреннего предсказания.
Различные видеокодеры могут назначать значения недоступным краевым пикселам различным образом. Например, видеокодер может выполнить операцию заполнения неинформативными символами, которая сканирует через краевые пикселы от нижнего-левого краевого пиксела (например, краевого пиксела Р на фиг. 2) к угловому пикселу (например, краевому пикселу R на фиг. 2) до верхнего-правого краевого пиксела (например, краевого пиксела H на фиг. 2). В этом примере, когда видеокодер достигает недоступного краевого пиксела, видеокодер может сканировать вперед до тех пор, пока видеокодер не достигнет следующего доступного краевого пиксела. После идентификации доступного краевого пиксела, операция заполнения неинформативными символами может назначить некоторое значение недоступному краевому пикселу на основе значений следующего доступного пиксела и предыдущего доступного краевого пиксела.
pad
next
pad
next
pad
pre
pad
pre
pre
next
В примерной операции заполнения неинформативными символами, описанной выше, если нет предыдущего доступного краевого пиксела, то видеокодер может сканировать вперед для нахождения первого доступного краевого пиксела и затем назначить значение первого доступного краевого пиксела каждому недоступному краевому пикселу перед первым доступным краевым пикселом. Другими словами, P=P, где P - значение, назначенное каждому недоступному краевому пикселу, предшествующему первому доступному краевому пикселу, а P - значение следующего доступного краевого пиксела. Если нет следующего доступного краевого пиксела, то видеокодер может экстраполировать значение недоступного краевого пиксела из значения последнего доступного краевого пиксела. Другими словами, P=P, где P - значение каждого недоступного краевого пиксела после последнего доступного краевого пиксела, а P - значение последнего доступного краевого пиксела. Если нет доступных краевых пикселов P и P, то видеокодер может назначить некоторое значение по умолчанию этим краевым пикселам.
pad
pad
Назначение значений недоступным краевым пикселам способом, описанным в предыдущих абзацах, может иметь несколько недостатков. Например, назначение значений каждому недоступному краевому пикселу таким способом может потребовать выполнение видеокодером нескольких операций считывания памяти для сканирования вперед для нахождения следующего доступного краевого пиксела. Следовательно, операция заполнения неинформативными символами, описанная выше, может потребовать доступа к памяти в стиле «прыжков». Например, как только видеокодер находит следующий доступный краевой пиксел, видеокодер может назначить значение P некоторому недоступному краевому пикселу. Затем, видеокодер может назначить значение P каждому краевому пикселу от текущего краевого пиксела до следующего доступного краевого пиксела, что может потребовать доступов к памяти, начиная опять от текущего краевого пиксела. Такой образец доступа к памяти в стиле «назад и вперед» может быть нежелательным. Операции доступа к памяти могут быть затратными по времени и интенсивными по энергии, особенно, когда доступ к памяти осуществляется случайным образом с точки зрения местоположения данных.
В соответствии со способами данного описания, видеокодер может выполнить операцию заполнения неинформативными символами, которая обрабатывает некоторое множество краевых символов согласно некоторому порядку, который начинается в нижнем-левом краевом пикселе (например, краевом пикселе Р на фиг. 2) и продолжается через краевые пикселы последовательно до верхнего-правого пиксела (например, краевого пиксела H на фиг. 2). Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает некоторое значение этому недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного этой операцией заполнения неинформативными символами. Таким образом, видеокодер не нуждается в сканировании вперед для нахождения следующего доступного краевого пиксела. В то же время, эта операция заполнения неинформативными символами может иметь небольшое влияние на эффективность кодирования видеоданных. Так как видеокодер может использовать более регулярный и совместимый образец доступа к памяти, сложность видеокодера может быть уменьшена, и производительность видеокодера может быть улучшена относительно видеокодеров, которые реализуют другие способы.
Фиг. 4 является блок-схемой, которая иллюстрирует примерный видеокодер 20, который выполнен с возможностью реализации способов данного описания. Фиг. 4 обеспечен с целями объяснения и не должен считаться ограничивающим способы, широко проиллюстрированные и описанные в данном описании. С целями объяснения, это описание описывает видеокодер 20 в контексте HEVC кодирования. Однако способы данного описания могут быть применимы и к другим стандартам и способам кодирования.
В примере фиг. 4, видеокодер 20 включает в себя множество функциональных компонентов. Функциональные компоненты видеокодера 20 включают в себя модуль 100 предсказания, модуль 102 остаточной генерации, модуль 104 преобразования, модуль 106 квантования, модуль 108 обратного квантования, модуль 110 обратного преобразования, модуль 112 реконструкции, модуль 113 фильтра, буфер 114 декодированного изображения и модуль 116 энтропийного кодирования. Модуль 100 предсказания включает в себя модуль 122 оценки движения, модуль 124 компенсации движения и модуль 126 внутреннего предсказания.
В других примерах, видеокодер 20 может включать в себя большее число, меньшее число или другие функциональные компоненты. Кроме того, модуль 122 оценки движения и модуль 124 компенсации движения могут быть высокоинтегрированными, но представлены в примере фиг. 4 отдельно с целями объяснения.
Видеокодер 20 может принимать видеоданные. Видеокодер 20 может принимать видеоданные из различных источников. Например, видеокодер 20 может принимать видеоданные от источника 18 видео (фиг. 1) или другого источника. Эти видеоданные могут представлять последовательность изображений. Для кодирования видеоданных, видеокодер 20 может выполнить операцию кодирования на каждом из этих изображений. Как часть выполнения операции кодирования на некотором изображении, видеокодер 20 может выполнить операции кодирования на каждом срезе изображения. Как часть выполнения операции кодирования на некотором срезе, видеокодер 20 может выполнить операции кодирования на блоках древовидной структуры в этом срезе.
Как часть выполнения операции кодирования на некотором блоке древовидной структуры, модуль предсказания 100 может выполнить разделение дерева квадрантов на видеоблоке этого блока древовидной структуры для разделения этого видеоблока на все меньшие видеоблоки. Каждый из этих все меньших видеоблоков может быть связан с различным CU. Например, модуль 100 предсказания может разделить видеоблок блока древовидной структуры на четыре подблока равного размера, разделить один или несколько этих подблоков на четыре подподблока равного размера и т.д.
Размеры видеоблоков, связанных с CU, могут изменяться от 8х8 выборок вплоть до размера блока древовидной структуры с максимумом в 64×64 выборок или более. В этом описании, «NxN» и «N на N» могут использоваться эквивалентно для ссылки на размеры выборок видеоблока в терминах вертикального и горизонтального размеров, например, 16×16 выборок или 16 на 16 выборок. В общем, видеоблок 16×16 имеет шестнадцать выборок в вертикальном направлении (y=16) и шестнадцать выборок в горизонтальном направлении (х=16). Аналогично, блок NxN обычно имеет N выборок в вертикальном направлении и N выборок в горизонтальном направлении, где N представляет неотрицательное целое значение.
Кроме того, как часть выполнения операции кодирования на блоке древовидной структуры, модуль 100 предсказания может сгенерировать иерархическую структуру данных дерева квадрантов для блока древовидной структуры. Например, блок древовидной структуры может соответствовать корневому узлу структуры данных дерева квадрантов. Если модуль 100 предсказания разделяет видеоблок блока древовидной структуры на четыре подблока, то корневой узел имеет четыре дочерних узла в структуре данных дерева квадрантов. Каждый из дочерних узлов соответствует некоторому CU, связанному с одним из подблоков. Если модуль 100 предсказания разделяет один из подблоков на четыре подподблока, то узел, соответствующий этому CU, связанному с этим подблоком, может иметь четыре дочерних узла, каждый из которых соответствует некоторому CU, связанному с одним из этих подподблоков, и т.д.
Каждый узел структуры данных дерева квандрантов может содержать синтаксические данные (например, синтаксические элементы) для соответствующего блока древовидной структуры или CU. Например, узел в дереве квадрантов может включать в себя флаг разделения, которые указывает, разделен ли (т.е. расщеплен ли) видеоблок этого CU, соответствующего этому узлу на четыре подблока. Синтаксические элементы для некоторого CU могут быть заданы рекурсивно и могут зависеть от того, расщеплен ли этот видеоблок этого CU на подблоки. CU, чей видеоблок не разделен, может соответствовать концевому узлу в структуре данных дерева квадрантов. Кодированный блок древовидной структуры может включать в себя данные на основе структуры данных дерева квадрантов для соответствующего блока древовидной структуры.
Видеокодер 20 может выполнить операции кодирования на каждом неразделенном CU блока древовидной структуры. Когда видеокодер 20 выполняет операцию кодирования на неразделенном CU, видеокодер 20 может сгенерировать данные, представляющие кодированное представление неразделенного CU.
Как часть выполнения операции кодирования на некотором CU, модуль 100 предсказания может разделить видеоблок этого CU среди одного или нескольких PU этого CU. Видеокодер 20 и видеодекодер 30 могут поддерживать различные размеры PU. Предполагая, что размер конкретного CU равен 2Nx2N, видеокодер 20 и видеодекодер 30 могут поддерживать размеры PU внутреннего предсказания 2Nx2N или NxN, и внешнее предсказание в симметричных PU размерах 2Nx2N, 2NxN, Nx2N, NxN и т.п. Видеокодер 20 и видеодекодер 30 могут также поддерживать асимметричное разделение для PU размеров 2NxnU, 2NxnD, nLx2N и nRx2N. В некоторых примерах, модуль 100 предсказания может выполнить геометрическое разделение для разделения видеоблока некоторого CU среди PU этого CU вдоль границы, которая не встречает стороны видеоблока этого CU при правильных углах.
Модуль 122 оценки движения и модуль 124 компенсации движения могут выполнять внешнее предсказание на каждом PU этого CU. Внешнее предсказание может обеспечить временное сжатие. Посредством выполнения внешнего предсказания на некотором PU, модуль 122 оценки движения и модуль 124 компенсации движения могут генерировать данные предсказания для этого PU на основе декодированных выборок опорных изображений, отличных от изображения, связанного с этим CU. Эти данные предсказания для этого PU могут включать в себя предсказанный видеоблок и различные синтаксические элементы.
Кроме того, когда модуль 122 оценки движения выполняет операцию оценки движения относительно некоторого PU, модуль 122 оценки движения может сгенерировать один или несколько векторов движения для этого PU. Например, срезы могут быть I срезами, Р срезами или В срезами. Модуль 122 оценки движения и модуль 124 компенсации движения могут выполнить различные операции для PU некоторого CU в зависимости от того, находится ли этот PU в I срезе, Р срезе или В срезе. В I срезе, все PU являются предсказанными с помощью внутреннего предсказания. Следовательно, если этот PU находится в I срезе, то модуль 122 оценки движения и модуль 124 компенсации движения не выполняют внешнее предсказание на этом PU.
Если этот PU находится в Р срезе, то изображение, содержащее этот PU, связано с некоторым списком опорных изображений, называемым «список 0». Каждое из опорных изображений в списке 0 содержит выборки, которые могут использоваться для внешнего предсказания последующих изображений в порядке декодирования. Когда модуль 122 оценки движения выполняет операцию оценки движения относительно некоторого PU в Р срезе, модуль 122 оценки движения может искать опорные изображения в списке 0 для опорной выборки для этого PU. Эта опорная выборка этого PU может быть некоторым множеством выборок, например, блоком выборок, который наиболее близко соответствует выборкам в видеоблоке этого PU. Модуль 122 оценки движения может использовать разнообразие показателей для определения того, как близко некоторое множество выборок в опорном изображении соответствует этим выборкам в видеоблоке некоторого PU. Например, модуль 122 оценки движения может определить, как близко некоторое множество выборок в опорном изображении соответствует выборкам в видеоблоке некоторого PU посредством суммы абсолютных разностей (SAD), суммы квадратов разностей (SSD) или других показателей разности.
После идентификации опорной выборки некоторого PU в Р срезе, модуль 122 оценки движения может сгенерировать опорный индекс, который указывает это опорное изображение в списке 0, содержащем эту опорную выборку и вектор движения, который указывает пространственное смещение между этим PU и опорной выборкой. В различных примерах, модуль 122 оценки движения может генерировать векторы движения для изменяющихся степеней точности. Например, модуль 122 оценки движения может сгенерировать векторы движения при точности в одну четверть выборки, при точности в одну восьмую выборки или при другой дробной точности выборки. В случае дробной точности выборки, опорные значения выборок могут быть интерполированы из значений выборок целых положений в опорном изображении. Модуль 122 оценки движения может вывести информацию о движении для этого PU для модуля 166 энтропийного кодирования и модуля 124 компенсации движения. Эта информация о движении для этого PU может включать в себя опорный индекс и вектор движения этого PU. Модуль 124 компенсации движения может использовать эту информацию о движении некоторого PU для идентификации и извлечения опорной выборки этого PU.
Если этот PU находится в В срезе, то изображение, содержащее этот PU, может быть связано с двумя списками опорных изображений, называемых «список 0» и «список 1». Каждый из опорных изображений в списке 0 содержит выборки, которые могут использоваться для внешнего предсказания последующих изображений в порядке декодирования. Опорные изображения в списке 1 имеют место перед изображением в порядке декодирования, но после изображения в порядке представления. В некоторых примерах, изображение, содержащее В срез, может быть связано с комбинацией списков, которая является некоторой комбинацией списка 0 и списка 1.
Кроме того, если этот PU находится в В срезе, то модуль 122 оценки движения может выполнить однонаправленное предсказание или двунаправленное предсказание для этого PU. Когда модуль 122 оценки движения выполняет однонаправленное предсказание для этого PU, модуль 122 оценки движения может искать опорные изображения списка 0 или списка 1 для опорной выборки для этого PU. Модуль 122 оценки движения может затем сгенерировать опорный индекс, который указывает опорное изображение в списке 0 или списке 1, которое содержит опорную выборку и вектор движения, который указывает пространственное смещение между этим PU и опорной выборкой. Модуль 122 оценки движения может вывести синтаксические элементы, которые указывают информацию о движении для этого PU, для модуля 116 энтропийного кодирования и модуля 124 компенсации движения. Эта информация о движении для этого PU может включать в себя этот опорный индекс, индикатор направления предсказания и вектор движения этого PU. Индикатор направления предсказания может указывать то, указывает ли опорный индекс некоторое опорное изображение в списке 0 или списке 1. Модуль 124 компенсации движения может использовать эту информацию о движении этого PU для идентификации и извлечения опорной выборки этого PU.
Когда модуль 122 оценки движения выполняет двунаправленное предсказание для некоторого PU, модуль 122 оценки движения может искать опорные изображения в списке 0 для опорной выборки для этого PU и может также искать опорные изображения в списке 1 для другой опорной выборки для этого PU. Модуль 122 оценки движения может затем сгенерировать опорные индексы, которые указывают опорные изображения в списке 0 и списке 1, содержащие опорные выборки и векторы движения, которые указывают пространственные смещения между опорными выборками и этим PU. Модуль 122 оценки движения может вывести синтаксические элементы, которые указывают информацию о движении этого PU, для модуля 116 энтропийного кодирования и модуля 124 компенсации движения. Эта информация о движении для этого PU может включать в себя эти опорные индексы и векторы движения этого PU. Модуль 124 компенсации движения может использовать эту информацию о движении для идентификации и извлечения опорной выборки этого PU.
В некоторых случаях, модуль 122 оценки движения не выводит полное множество информации о движении для некоторого PU для модуля 116 энтропийного кодирования. Скорее, модуль 122 оценки движения может сигнализировать информацию о движении некоторого PU со ссылкой на информацию о движении другого PU. Например, модуль 122 оценки движения может определить, что информация о движении этого PU является достаточно подобной информации о движении соседнего PU. В этом примере, модуль 122 оценки движения может указать, в узле дерева квадрантов для некоторого CU, связанного с этим PU, некоторое значение, которое указывает для видеодекодера 30, что этот PU имеет ту же самую информацию о движении, что и соседний PU. В другом примере, модуль 122 оценки движения может идентифицировать, в узле дерева квадрантов, связанном с этим CU, связанном с этим PU, соседний PU и различие векторов движения (MVD). Это различие векторов движения указывает различие между вектором движения этого PU и вектором движения указанного соседнего PU. Видеодекодер 30 может использовать вектор движения указанного соседнего PU и различие векторов движения для предсказания вектора движения этого PU. Посредством ссылки на информацию о движении первого PU, при сигнализации информации о движении второго PU, видеокодер 20 может быть способен сигнализировать эту информацию о движении второго с использованием меньшего количества битов.
Как часть выполнения операции кодирования на некотором CU, модуль 126 внутреннего предсказания может выполнить внутреннее предсказание на PU этого CU. Внутреннее предсказание может обеспечить пространственное сжатие. Когда модуль 126 внутреннего предсказания выполняет внутреннее предсказание на некотором PU, модуль 126 внутреннего предсказания может сгенерировать данные предсказания для этого PU на основе декодированных выборок других PU в одном и том же изображении. Эти данные предсказания для этого PU могут включать в себя предсказанный видеоблок и различные синтаксические элементы. Модуль 126 внутреннего предсказания может выполнить внутреннее предсказание на PU в I срезах, Р срезах и В срезах.
Для выполнения внутреннего предсказания на некотором PU, модуль 126 внутреннего предсказания может использовать множественные режимы внутреннего предсказания для генерации множественных наборов данных предсказания для этого PU. Когда модуль 126 внутреннего предсказания использует некоторый режим внутреннего предсказания для генерации некоторого множества (набора) данных предсказания для этого PU, модуль 126 внутреннего предсказания может расширить выборки из видеоблоков соседних PU через видеоблок этого PU в направлении, связанном с этим режимом внутреннего предсказания. Эти соседние PU могут быть сверху, сверху и справа, сверху и слева, слева или ниже и слева этого PU. Модуль 126 внутреннего предсказания может использовать различные количества режимов внутреннего предсказания, например, 35 направленных режимов внутреннего предсказания. Модуль 126 внутреннего предсказания может выполнить различные операции внутреннего предсказания. Например, модуль 126 внутреннего предсказания может выполнить примерную операцию внутреннего предсказания по фиг. 6.
Модуль 100 предсказания может выбрать данные предсказания для некоторого PU среди данных предсказания, сгенерированных модулем 124 компенсации движения для этого PU, или данных предсказания, сгенерированных модулем 126 внутреннего предсказания для этого PU. В некоторых примерах, модуль 100 предсказания выбирает данные предсказания для этого PU на основе показателей оценки/искажения множеств данных предсказания.
Если модуль 100 предсказания выбирает данные предсказания, сгенерированные модулем 126 внутреннего предсказания, то модуль 100 предсказания может сигнализировать режим внутреннего предсказания, который был использован для генерации данных предсказания для этих PU, т.е. выбранный режим внутреннего предсказания. Модуль 100 предсказания может сигнализировать выбранный режим внутреннего предсказания различными способами. Например, возможно, что выбранный режим внутреннего предсказания является таким же, что и режим внутреннего предсказания соседнего PU. Другими словами, режим внутреннего предсказания этого соседнего PU может быть наиболее возможным режимом для текущего PU. Таким образом, модуль 100 предсказания может сгенерировать некоторый синтаксический элемент для указания того, что выбранный режим внутреннего предсказания является тем же самым, что и режим внутреннего предсказания соседнего PU.
После того, как модуль 100 предсказания выбирает данные предсказания для PU некоторого CU, модуль 102 остаточной генерации может сгенерировать остаточные данные для этого CU путем вычитания предсказанных видеоблоков данных предсказания этих PU этого CU из видеоблока этого CU. Эти остаточные данные некоторого CU могут включать в себя 2D остаточные видеоблоки, которые соответствуют различным компонентам выборок в видеоблоке этого CU. Например, эти остаточные данные могут включать в себя некоторый остаточный видеоблок, который соответствует различиям между компонентами яркости выборок в предсказанных видеоблоках этих PU этого CU и компонентами яркости выборок в первоначальном видеоблоке этого CU. Кроме того, остаточные данные этого CU могут включать в себя остаточные видеоблоки, которые соответствуют различиям между компонентами цветности выборок в предсказанных видеоблоках этих PU этого CU и компонентами цветности выборок в первоначальном видеоблоке этого CU.
Модуль 100 предсказания может выполнить разделение дерева квадрантов для разделения остаточных видеоблоков CU на подблоки. Каждый неразделенный остаточный видеоблок может быть связан с различным TU этого CU. Размеры и положения остаточных видеоблоков, связанных с TU некоторого CU, могут или не могут быть основаны на размерах и положениях видеоблоков, связанных с этими PU этого CU. Структура дерева квадрантов, известная как «остаточное дерево квадрантов» (RQT) может включать в себя узлы, связанные с каждым из остаточных видеоблоков. Эти TU некоторого CU могут соответствовать концевым узлам RQT.
Модуль 104 преобразования может сгенерировать один или несколько блоков коэффициентов преобразования для каждого TU некоторого CU посредством применения одного или нескольких преобразований к остаточному видеоблоку, связанному с этим TU. Каждый из блоков коэффициентов преобразования может быть 2D матрицей коэффициентов преобразования. Модуль 104 преобразования может применять различные преобразования к остаточному видеоблоку, связанному с некоторым TU. Например, модуль 104 преобразования может применить дискретное косинусное преобразование (DCT), направленное преобразование, или концептуально подобное преобразование к остаточному видеоблоку, связанному с некоторым TU.
После того, как модуль 104 преобразования сгенерирует блок коэффициентов преобразования, связанный с некоторым TU, модуль 106 квантования может квантовать эти коэффициенты преобразования в блоке коэффициентов преобразования. Модуль 106 квантования может квантовать блок коэффициентов преобразования, связанный с некоторым TU некоторого CU на основе значения QP, связанного с этим CU.
Видеокодер 20 может связать значение QP с некоторым CU различными способами. Например, видеокодер 20 может выполнить анализ оценки/искажения на блоке древовидной структуры, связанном с этим CU. При анализе оценки/искажения, видеокодер 20 может сгенерировать множественные кодированные представления блока древовидной структуры посредством выполнения операции кодирования много раз на этом блоке древовидной структуры. Видеокодер 20 может связать различные значения QP с этим CU, когда заданное значение QP связано с этим CU в кодированном представлении блока древовидной структуры, который имеет показатель наименьшей скорости передачи в битах и искажения.
Модуль 108 обратного квантования и модуль 110 обратного преобразования могут применить обратное квантование и обратное преобразование к блоку коэффициентов преобразования, соответственно, для реконструкции остаточного видеоблока из блока коэффициентов преобразования. Модуль 112 реконструкции может добавить реконструированный остаточный видеоблок к соответствующим выборкам из одного или нескольких предсказанных видеоблоков, сгенерированных модулем 100 предсказания, для создания реконструированного видеоблока, связанного с некоторым TU. Посредством реконструкции видеоблоков для каждого TU некоторого CU таким образом, видеокодер 20 может реконструировать видеоблок этого CU.
После того, как модуль 112 реконструкции реконструирует видеоблок некоторого CU, модуль 113 фильтра может выполнить операцию деблокирования для уменьшения блокирующих артефактов в видеоблоке, связанном с этим CU. После выполнения операций деблокирования, модуль 113 фильтра может сохранить реконструированный видеоблок этого CU в буфере 114 декодированного изображения. Модуль 122 оценки движения и модуль 124 компенсации движения могут использовать опорное изображение, которое содержит реконструированный видеоблок, для выполнения внешнего предсказания на PU последующих изображений. Кроме того, модуль 126 внутреннего предсказания может использовать реконструированные видеоблоки в буфере 114 декодированного изображения для выполнения внутреннего предсказания на других PU в том же изображении, что и CU.
Модуль 116 энтропийного кодирования может принять данные от других функциональных компонентов видеокодера 20. Например, модуль 116 энтропийного кодирования можект принять блоки коэффициентов преобразования от модуля 106 квантования и может принять синтаксические элементы от модуля 100 предсказания. Когда модуль 116 энтропийного кодирования принимает эти данные, модуль 116 энтропийного кодирования может выполнить одну или несколько операций энтропийного кодирования для генерации энтропийно кодированных данных. Например, видеокодер 20 может выполнить адаптивную к контексту операцию кодирования переменной длины (CAVLC), адаптивную к контексту операцию двоичного арифметического кодирования (CABAC), операцию кодирования длины переменная на переменную (V2V), основанную на синтаксисе адаптивную к контексту операцию двоичного арифметического кодирования (SBAC), операцию энтропийного кодирования разделения интервала вероятности (PIPE) или другой тип операции энтропийного кодирования на этих данных. Модуль 116 энтропийного кодирования может вывести битовый поток, который включает в себя энтропийно кодированные данные.
Как часть выполнения операции энтропийного кодирования на данных, модуль 116 энтропийного кодирования может выбрать модель контекста. Если модуль 1116 энтропийного кодирования выполняет операцию CABAC, то модель контекста может указывать вероятности элемента выборки (bin), имеющего конкретные значения. В контексте CABAC, термин «bin» используется для ссылки на некоторый бит преобразованной в двоичную форму версии синтаксического элемента.
Если модуль 116 энтропийного кодирования выполняет операцию CALVC, то модель контекста может отображать коэффициенты на соответствующие кодовые слова. Кодовые слова в CALVC могут быть построены таким образом, что относительно короткие коды соответствуют более вероятным символам, тогда как относительно длинные коды соответствуют менее вероятным символам. Выбор соответствующей модели контекста может повлиять на эффективность кодирования операции энтропийного кодирования.
В некотором примере, видеокодер 20 может разделить CU некоторого среза на множество мозаичных фрагментов. Видеокодер 20 может разделить эти CU на мозаичные фрагменты посредством задания двух или нескольких горизонтальных границ для некоторого изображения и двух или нескольких вертикальных границ для этого изображения. Эти горизонтальные границы могут включать в себя верхний и нижний края этого изображения. Эти вертикальные границы могут включать в себя левую и правую стороны этого изображения. Когда видеокодер не использует мозаичные фрагменты, видеокодер 20 может кодировать все блоки древовидной структуры данного кадра в порядке растрового сканирования. Однако, когда видеокодер 20 использует мозаичные фрагменты, видеокодер может кодировать эти мозаичные фрагменты в порядке растрового сканирования. Когда видеокодер 20 кодирует некоторый мозаичный фрагмент, видеокодер 20 может кодировать блоки древовидной структуры (т.е. LCU) в пределах мозаичного фрагмента в порядке растрового сканирования. Таким образом, видеокодер 20 может использовать мозаичные фрагменты для изменения порядка кодирования блоков древовидной структуры этого изображения.
Кроме того, в некоторых случаях, когда видеокодер 20 кодирует данный CU, видеокодер 20 может использовать информацию, связанную с пространственно-соседними CU для выполнения внутреннего предсказания на данном CU, пока данный CU и пространственно-соседние CU принадлежат к одному и тому же мозаичному фрагменту. Пространственно-соседние CU могут быть CU, которые находятся в том же самом изображении, что и данный CU. (Когда видеокодер 20 выполняет внешнее предсказание на данном CU, видеокодер 20 может также использовать информацию о движении и о пикселах от соседних по времени CU, независимо от мозаичных фрагментов соседних по времени CU). Аналогично, в некоторых случаях, когда видеокодер 20 кодирует данный CU, видеокодер 20 может использовать информацию, связанную с пространственно-соседними CU для выбора контекста для энтропийного кодирования синтаксического элемента данного CU, пока данный CU и пространственно-соседние CU находятся в одном и том же мозаичном фрагменте. Из-за этих ограничений, видеокодер 20 может быть способен кодировать два или несколько мозаичных фрагментов параллельно.
Фиг. 5 является блок-схемой, которая иллюстрирует примерный видеодекодер 30, который может реализовать способы этого описания. Фиг. 5 обеспечен с целями объяснения, а не ограничения способов, широко проиллюстрированных и описанных в этом описании. С целями объяснения, это описание описывает видеодекодер 30 в контексте HEVC кодирования. Однако способы этого описания могут быть применимы и к другим стандартам и способам кодирования.
В примере по фиг. 5, видеодекодер 30 включает в себя множество функциональных компонентов. Функциональные компоненты видеодекодера 30 включают в себя модуль 150 энтропийного декодирования, модуль 152 предсказания, модуль 154 обратного квантования, модуль 156 обратного преобразования, модуль 158 реконструкции, модуль 159 фильтра и буфер 160 декодированного изображения. Модуль 152 предсказания включает в себя модуль 162 компенсации движения и модуль 164 внутреннего предсказания. В некоторых примерах, видеодекодер 30 может выполнить проход декодирования, в общем, обратный к проходу кодирования, описанному в отношении видеокодера 20 по фиг. 4. В других примерах, видеодекодер 30 может включать в себя большее число функциональных компонентов, меньшее число функциональных компонентов или другие функциональные компоненты.
Видеодекодер 30 может принять битовый поток, который содержит кодированные видеоданные. Этот битовый поток может включать в себя множество синтаксических элементов. Когда видеодекодер 30 принимает этот битовый поток, модуль 150 энтропийного декодирования может выполнить операцию синтаксического анализа на этом битовом потоке. В результате выполнения операции синтаксического анализа на битовом потоке, модуль 150 энтропийного декодирования может выделить синтаксические элементы из битового потока. Как часть выполнения операции синтаксического анализа, модуль 150 энтропийного декодирования может энтропийно декодировать энтропийно кодированные синтаксические элементы в битовом потоке. Модуль 152 предсказания, модуль 154 обратного квантования, модуль 156 обратного преобразования, модуль 158 реконструкции и модуль 159 фильтра могут выполнить операцию реконструкции, которая генерирует декодированные видеоданные на основе синтаксических элементов, выделенных из битового потока.
Как обсуждалось выше, битовый поток может содержать последовательность NAL блоков. Эти NAL блоки битового потока могут включать в себя NAL блоки множества параметров последовательности, NAL блоки множества параметров изображения, SEI NAL блоки и т.д. Как часть выполнения операции синтаксического анализа на битовом потоке, модуль 150 энтропийного декодирования может выполнить операции синтаксического анализа, который выделяют и энтропийно декодируют множества параметров последовательности из NAL блоков множества параметров последовательности, множества параметров изображения из NAL блоков множества параметров изображения, SEI данные из SEI NAL блоков и т.д.
Кроме того, NAL блоки битового потока могут включать в себя NAL блоки кодированного среза. Как часть выполнения операции синтаксического анализа на битовом потоке, модуль 150 энтропийного декодирования может выполнить операции синтаксического анализа, которые выделяют и энтропийно декодируют кодированные срезы из NAL блоков кодированных срезов. Каждый из кодированных срезов может включать в себя заголовок среза и данные среза. Заголовок среза может содержать синтаксические элементы, принадлежащие к некоторому срезу. Эти синтаксические элементы в заголовке среза могут включать в себя синтаксический элемент, который идентифицирует множество параметров изображения, связанное с некоторым изображением, которое содержит этот срез. Модуль 150 энтропийного декодирования может выполнить операцию энтропийного декодирования, такую как операция декодирования CAVLC, на заголовке кодированного среза для восстановления заголовка среза.
После выделения данных среза из NAL блоков кодированного среза, модуль 150 энтропийного декодирования может выделить кодированные блоки древовидной структуры из этих данных среза. Модуль 150 энтропийного декодирования может затем выделить кодированные CU из кодированных блоков древовидной структуры. Модуль 150 энтропийного декодирования может выполнить операции синтаксического анализа, которые выделяют синтаксические элементы из кодированных CU. Эти выделенные синтаксические элементы могут включать в себя энтропийно кодированные блоки коэффициентов преобразования. Модуль 150 энтропийного декодирования может затем выполнить операции энтропийного декодирования на этих синтаксических элементах. Например, модель 150 энтропийного декодирования может выполнить CABAC операции на блоках коэффициентов преобразования.
После того, как модуль 150 энтропийного декодирования выполняет операцию синтаксического анализа на неразделенных CU, видеодекодер 30 может выполнить операцию реконструкции на неразделенных CU. Для выполнения операции реконструкции на неразделенных CU, видеодекодер 30 может выполнить операцию реконструкции на каждом TU этого CU. Посредством выполнения операции реконструкции для каждого TU этого CU, видеодекодер 30 может реконструировать остаточный видеоблок, связанный с этим CU.
Как часть выполнения операции реконструкции на некотором TU, модуль 154 обратного квантования может обратно квантовать, т.е. деквантовать, блок коэффициентов преобразования, связанный с этим TU. Модуль 154 обратного квантования может обратно квантовать блок коэффициентов преобразования способом, подобным процессам обратного квантования, предложенным для HEVC или заданным посредством стандарта декодирования H.264. Модуль 154 обратного квантования может использовать параметр квантования QP, вычисленный видеокодером 20 для некоторого CU блока коэффициентов преобразования для определения степени квантования и, аналогично, степени обратного квантования для применения модулем 154 обратного квантования.
После того, как модуль 154 обратного квантования обратно квантует блок коэффициентов преобразования, модуль 156 обратного преобразования может сгенерировать остаточный видеоблок для этого TU, связанного с блоком коэффициентов преобразования. Модуль 156 обратного преобразования может применить обратное преобразование к блоку коэффициентов преобразования для генерации остаточного видеоблока для этого TU. Например, модуль 156 обратного преобразования может применить обратное DCT, обратное целочисленное преобразование, обратное преобразование Карунена-Лева (KLT), обратное вращательное преобразование, обратное направленное преобразование или другое обратное преобразование к блоку коэффициентов преобразования.
В некоторых примерах, модуль 156 обратного преобразования может определить обратное преобразование для применения к блоку коэффициентов преобразования на основе сигнализации от видеокодера 20. В таких примерах, модуль 156 обратного преобразования может определить обратное преобразование на основе сигнализированного преобразования в корневом узле дерева квадрантов для блока древовидной структуры, связанного с блоком коэффициентов преобразования. В других примерах, модуль 156 обратного преобразования может подразумевать обратное преобразование из одной или нескольких характеристик кодирования, таких как размер блока, режим кодирования и т.п. В некоторых примерах, модуль 156 обратного преобразования может применить каскадное обратное преобразование.
Если некоторый PU этого CU был кодирован с использованием внутреннего предсказания, то модуль 162 компенсации движения может выполнить компенсацию движения для генерации предсказанного видеоблока для этого PU. Модуль 162 компенсации движения может использовать информацию о движении для этого PU для идентификации опорной выборки для этого PU. Эта опорная выборка некоторого PU может находиться в другом временном изображении, чем этот PU. Информация о движении для этого PU может включать в себя вектор движения, индекс опорного изображения и направление предсказания. Модуль 162 компенсации движения может использовать эту опорную выборку для этого PU для генерации предсказанного видеоблока для этого PU. В некоторых примерах, модуль 162 компенсации движения может предсказать информацию о движении для этого PU на основе информации о движении PU, которые соседствуют с этим PU. В этом описании, PU является PU, предсказанным с помощью внешнего предсказания, если видеокодер 20 использует внешнее предсказание для генерации предсказанного видеоблока этого PU.
В некоторых примерах, модуль 162 компенсации движения может уточнить предсказанный видеоблок некоторого PU посредством выполнения интерполяции на основе интерполяционных фильтров. Идентификаторы для интерполяционных фильтров, подлежащих использованию для компенсации движения с точностью подвыборки, могут быть включены в синтаксические элементы. Модуль 162 компенсации движения может использовать одни и те же интерполяционные фильтры, используемые видеокодером 20, во время генерации предсказанного видеоблока этого PU, для вычисления интерполированных значений для незначительного числа целочисленных выборок опорного блока. Модуль 162 компенсации движения может определить интерполяционные фильтры, используемые видеокодером 20 согласно принятой синтаксической информации и использовать эти интерполяционные фильтры для создания предсказанного видеоблока.
Если PU кодирован с использованием внутреннего предсказания, то модуль 164 внутреннего предсказания может выполнить внутреннее предсказание для генерации предсказанного видеоблока для этого PU. Например, модуль 164 внутреннего предсказания может определить режим внутреннего предсказания для этого PU на основе синтаксических элементов в битовом потоке. Этот битовый поток может включать в себя синтаксические элементы, которые модуль 164 внутреннего предсказания может использовать для предсказания режима внутреннего предсказания этого PU. Например, модуль 164 внутреннего предсказания может выполнить примерную операцию внутреннего предсказания по фиг. 6.
В некоторых случаях, синтаксические элементы могут указывать, что модуль внутреннего предсказания должен использовать режим внутреннего предсказания другого PU для предсказания режима внутреннего предсказания текущего PU. Например, может быть возможным, что режим внутреннего предсказания текущего PU является таким же, что и режим внутреннего предсказания соседнего PU. Другими словами, режим внутреннего предсказания соседнего PU может быть наиболее возможным режимом для текущего PU. Следовательно, в этом примере, битовый поток может включать в себя малый синтаксический элемент, который указывает, что режим внутреннего предсказания этого PU является таким же, что и режим внутреннего предсказания соседнего PU. Модуль 164 внутреннего предсказания может затем использовать этот режим внутреннего предсказания для генерации данных предсказания (например, предсказанных выборок) для этого PU на основе видеоблоков пространственно соседних PU.
Модуль 158 реконструкции может использовать остаточные видеоблоки, связанные с TU некоторого CU и предсказанные видеоблоки этих PU этого CU, т.е. либо данные внутреннего предсказания, либо данные внешнего предсказания, что применимо, для реконструкции видеоблока этого CU. Таким образом, видеодекодер 30 может сгенерировать предсказанный видеоблок и остаточный видеоблок на основе синтаксических элементов в битовом потоке и может сгенерировать видеоблок на основе этого предсказанного видеоблока и этого остаточного видеоблока. После того, как модуль 158 реконструкции реконструирует видеоблок этого CU, модуль 159 фильтра может выполнить операцию деблокирования для уменьшения блокирующих артефактов, связанных с этим CU.
Буфер 160 декодированного изображения может хранить декодированные выборки для изображений видеоданных. Таким образом, после того, как модуль 159 фильтра выполняет операцию деблокирования, видеодекодер 30 может сохранить видеоблок этого CU в буфере 160 декодированного изображения. Буфер 160 декодированного изображения может обеспечить опорные изображения для последующей компенсации движения, внутреннего предсказания и представления на устройстве отображения, таком как устройство 32 отображения по фиг. 1. Например, видеодекодер 30 может выполнить, на основе видеоблоков в буфере 160 декодированного изображения, операции внутреннего предсказания или внешнего предсказания на PU других CU.
Фиг. 6 является блок-схемой алгоритма, которая иллюстрирует примерную операцию 200 внутреннего предсказания. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 200 внутреннего предсказания. В других примерах, видеокодер может использовать операции внутреннего предсказания, отличные от операции 200 внутреннего предсказания. Например, в других примерах, видеокодер может выполнить операцию внутреннего предсказания, в которой видеокодер выполняет большее число этапов, меньшее число этапов или другие этапы, чем операция 200 внутреннего предсказания.
После того, как видеокодер начинает операцию 200 внутреннего предсказания, видеокодер может выполнить операцию заполнения неинформативными символами для некоторого PU (202). Когда видеокодер выполняет операцию заполнения неинформативными символами, видеокодер может назначить значения недоступным краевым пикселам, связанным с этим PU. Видеокодер может выполнить различные операции заполнения неинформативными символами. Например, видеокодер может выполнить примерную операцию заполнения неинформативными символами по фиг. 7, примерную операцию заполнения неинформативными символами по фиг. 8, примерную операцию заполнения неинформативными символами по фиг. 10 или другую операцию заполнения неинформативными символами.
После того, как видеокодер выполняет операцию заполнения неинформативными символами, видеокодер может сгенерировать, на основе краевых пикселов, видеоблок, предсказанный с помощью внутреннего предсказания, для этого PU (204). Видеокодер может использовать некоторые или все краевые пикселы для генерации видеоблока, предсказанного с помощью внутреннего предсказания.
Фиг. 7 является блок-схемой алгоритма, которая иллюстрирует примерную операцию 250 заполнения неинформативными символами. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 250 заполнения неинформативными символами. В других примерах, видеокодер может использовать операции заполнения неинформативными символами, отличные от операции 250 заполнения неинформативными символами. Например, в других примерах, видеокодер может выполнить операцию заполнения неинформативными символами, в которой видеоблок выполняет большее число этапов, меньшее число этапов или другие этапы, чем операция 250 заполнения неинформативными символами.
После того, как видеокодер начинает операцию 250 заполнения неинформативными символами, видеокодер может установить индикатор пиксела для указания нижнего-левого краевого пиксела (252). Например, в примере фиг. 2, видеокодер может установить индикатор пиксела для указания краевого пиксела Р. Для простоты объяснения, это описание может относиться к краевому пикселу, указанному индикатором пиксела как текущий краевой пиксел.
Затем, видеокодер может определить, является ли доступным текущий краевой пиксел (254). Видеокодер может определить, является ли доступным текущий краевой пиксел различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения того, является ли доступным текущий краевой пиксел.
В ответ на определение того, что текущий краевой пиксел не является доступным («NO» в 254), видеокодер может назначить некоторое значение по умолчанию этому текущему краевому пикселу (256). Так как текущий краевой пиксел является нижним-левым краевым пикселом, видеокодер может определить, является ли доступным нижний-левый краевой пиксел, и назначить некоторое значение по умолчанию нижнему-левому краевому пикселу в ответ на определение того, что нижний-левый краевой пиксел не является доступным. В другом примере, видеокодер может назначить некоторое значение следующего доступного краевого пиксела нижнему-левому краевому пикселу в ответ на определение того, что нижний-левый краевой пиксел является недоступным.
После назначения некоторого значения текущему краевому пикселу или в ответ на определение того, что текущий краевой пиксел является доступным («YES» в 254), видеокодер может обновить индикатор пиксела для указания следующего краевого пиксела (258). Если текущий краевой пиксел находится между нижним-левым краевым пикселом и угловым краевым пикселом (например, краевой пиксел R на фиг. 2), то следующий краевой пиксел находится непосредственно выше текущего краевого пиксела. Например, в примере фиг. 2, если текущий краевой пиксел является краевым пикселом Р, то следующий краевой пиксел является краевым пикселом О. Если текущий краевой пиксел является краевым пикселоом О, то следующий краевой пиксел является краевым пикселом N, и т.д. Если текущий пиксел является угловым краевым пикселом или между угловым краевым пикселом и верхним-правым краевым пикселом (например, краевой пиксел H на фиг. 2), то следующий краевой пиксел находится непосредственно справа от текущего краевого пиксела. Например, в примере фиг. 2, если текущий краевой пиксел является краевым пикселом R, то следующий краевой пиксел является краевым пикселом А. Если текущий краевой пиксел является краевым пикселом А, то следующий краевой пиксел является краевым пикселом В, и т.д. Посредством обновления индикатора пиксела, следующий краевой пиксел становится текущим краевым пикселом.
После обновления индикатора пиксела, видеокодер может определить, является ли доступным текущий краевой пиксел. В ответ на определение того, что текущий краевой пиксел не является доступным («NO» в 260), видеокодер может назначить значение предыдущего краевого пиксела текущему краевому пикселу (262). Другими словами, видеокодер может назначить текущему краевому пикселу значение краевого пиксела, который находится непосредственно перед текущим краевым пикселом согласно этому порядку. Например, в примере по фиг. 2, если текущий краевой пиксел является краевым пикселом М, и краевой пиксел М является недоступным, то видеокодер может назначить значение краевого пиксела N краевому пикселу М. Если текущий краевой пиксел является краевым пикселом L, и краевой пиксел L является недоступным, то видеокодер может назначить значение краевого пиксела М краевому пикселу L, и т.д. Когда видеокодер назначает значение первого краевого пиксела второму краевому пикселу, то видеокодер может не изменять действительное значение второго краевого пиксела, но может использовать значение первого краевого пиксела как значение второго краевого пиксела с целями генерации видеоблока, предсказанного с помощью внутреннего предсказания.
После выполнения этапа 262 или в ответ на определение того, что текущий краевой пиксел является доступным («YES» в 260), видеокодер может определить, является ли текущий краевой пиксел верхним-правым краевым пикселом (264). Например, в примере по фиг. 2, видеокодер может определить, является ли текущий краевой пиксел краевым пикселом H. Видеокодер может завершить операцию 250 заполнения неинформативными символами в ответ на определение того, что текущий краевой пиксел является верхним-правым краевым пикселом («YES» в 264). С другой стороны, в ответ на определение того, что текущий краевой пиксел не является верхним-правым краевым пикселом («NO» в 264), видеокодер может снова обновить индикатор пиксела (258). Видеокодер может затем повторить этапы 260-264 относительно нового текущего краевого пиксела.
Таким образом, видеокодер может выполнить операцию заполнения неинформативными символами, которая обрабатывает множество краевых пикселов согласно некоторому порядку, который начинается с нижнего-левого краевого пиксела и продолжается через краевые пикселы последовательно до верхнего-правого краевого пиксела. Когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает некоторое значение этому недоступному краевому пикселу на основе значения некоторого пиксела, обработанного ранее операцией заполнения неинформативными символами.
В примерной операции заполнения неинформативными символами, подобной операции 250 заполнения неинформативными символами, (х, y) указывает координаты видеоблока, а (х-1, y-1) указывает координаты углового краевого пиксела. Если (х-1, y-1) является недоступным, то видеокодер может проверить верхний предиктор слева направо, пока видеокодер не достигнет доступного краевого пиксела. Если этот доступный краевой пиксел имеет координаты (х+d, y-1), то видеокодер может назначить значение краевого пиксела в (х+d, y-1) всем краевым пикселам от (х-1, y-1) до (х+d-1, y-1). В противном случае, если краевой пиксел в (х-1, y-1) является доступным, то видеокодер может установить переменную d на -1 и выполнить следующий псевдокод:
для (i=d; i<2N; i++) {
если краевой пиксел в (х+i, y-1) является доступным,
ничего не делать
если краевой пиксел в (х+i, y-1) является недоступным,
назначить значение краевого пиксела в (х+i-1, y-1)
краевому пикселу в (х+i, y-1)
}
В вышеприведенном псевдокоде, N может указывать ширину видеоблока. Кроме того, видеокодер может определить, является ли краевой пиксел в (х-1, y) доступным. Если краевой пиксел в (х-1, y) не является доступным, то видеокодер может проверить левый предиктор сверху вниз, пока видеокодер не достигнет доступного краевого пиксела. Если этот доступный краевой пиксел имеет координаты (х-1, y+d), то видеокодер может назначить значение краевого пиксела в (х-1, y+d) всем краевым пикселам от (х-1, y) до (х-1, y+d-1). В противном случае, если краевой пиксел в (х-1, y) является доступным, видеокодер может установить переменную d на 0 и выполнить следующий псевдокод:
для (i=d; i<2N; i++) {
если краевой пиксел в (х-1, y+i) является доступным,
ничего не делать
если краевой пиксел в (х-1, y+i) является недоступным,
назначить значение краевого пиксела в (х-1, y+i-1)
краевому пикселу в (х-1, y+i)
}
В примере по фиг. 7, для х=-1, y=nS*2-2…-1, видеокодер может подставить значение р[х, y+1] вместо значения р[x, y], если р[x, y] является недоступным краевым пикселом. Для х=0..nS*2-1, y-1, подставляем значение р[x-1, y] вместо значения р[x, y], если р[x, y] является недоступным краевым пикселом. nS равно ширине или высоте видеоблока, предсказанного с помощью внутреннего предсказания, р - двумерный массив выборок, а р[0, 0] - верхняя-левая яркостная выборка видеоблока, предсказанного с помощью внутреннего предсказания.
Фиг. 8 является концептуальной схемой, которая иллюстрирует порядок, в котором примерная операция заполнения неинформативными символами по фиг. 7 переходит через краевые пикселы. Как показано в примере по фиг. 8, операция заполнения неинформативными символами начинается с нижнего-левого краевого пиксела, переходит вверх к угловому краевому пикселу, и затем переходит вправо к верхнему-правому краевому пикселу.
Фиг. 9 является блок-схемой алгоритма, которая иллюстрирует примерную операцию 300 заполнения неинформативными символами. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 300 заполнения неинформативными символами. В других примерах, видеокодер может использовать операции заполнения неинформативными символами, отличные от операции 300 заполнения неинформативными символами. Например, в других примерах, видеокодер может выполнить операцию заполнения неинформативными символами, в которой видеокодер выполняет большее число этапов, меньшее число этапов или другие этапы, чем операция 300 заполнения неинформативными символами.
После того, как видеокодер начинает операцию 300 заполнения неинформативными символами, видеокодер может установить первый индикатор пиксела и второй индикатор пиксела для указания точки деления (302). Эта точка деления может разделять краевые пикселы на два сегмента. Один из этих сегментов может включать в себя краевые пикселы, которые находятся выше и вправо от точки деления. Другой из этих сегментов может включать в себя краевые пикселы, которые находятся ниже и влево от точки деления.
Эта точка деления может быть различными точками деления краевых пикселов. Например, видеокодер может установить первый и второй индикаторы пикселов на угловой краевой пиксел (например, краевой пиксел R на фиг. 2), В другом примере, видеокодер может установить первый индикатор пиксела и второй индикатор пиксела для указания другого краевого пиксела (например, краевого пиксела L на фиг. 2).
После установки первого и второго индикаторов пикселов для указания точки деления, видеокодер может определить, является ли эта точка деления доступной (304). Видеокодер может определить, является ли точка деления доступной различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения, является ли точка деления доступной.
В ответ на определение того, что точка деления не является доступной («NO» в 304), видеокодер может вывести значение точки деления (306). Видеокодер может вывести значение точки деления различными способами. Например, видеокодер может определить, является ли доступным какой-либо из краевых пикселов, смежных с точкой деления. В этом примере, если один из краевых пикселов, смежных с точкой деления, является доступным, видеокодер может вывести значение точки деления посредством назначения этого значения смежного краевого пиксела точке деления. Кроме того, в этом примере, видеокодер может назначить некоторое значение по умолчанию точке деления, если ни один из смежных краевых пикселов не является доступным. Например, если точка деления является угловой точкой деления, то видеокодер может использовать следующий псевдокод для вывода значения точки деления:
L1
pad
L1
Если P является доступным, P=P
A1
pad
A1
в противном случае, если P является доступным P=P
pad
в противном случае, P=значение по умолчанию.
L1
pad
A1
В вышеприведенном псевдокоде, P может указывать значение краевого пиксела ниже углового краевого пиксела, P могут указывать выведенное значение, подлежащее назначению угловому краевому пикселу, а P может указывать значение краевого пиксела справа от углового краевого пиксела. В случае, если угловой краевой пиксел и как краевой пиксел ниже, так и краевой пиксел справа от углового краевого пиксела, являются недоступными, использование значения по умолчанию для углового краевого пиксела может иметь небольшое влияние на производительность кодирования, так как этот случай может случиться редко.
После вывода значения точки деления или после определения того, что точка деления является доступной («YES» в 304), видеокодер может обновить первый индикатор пиксела для указания краевого пиксела, который находится ниже или слева от краевого пиксела, указанного первым индикатором пиксела (308). Для легкости объяснения, это описание может ссылаться на краевой пиксел, указанный первым индикатором пиксела, как на первый текущий краевой пиксел. Например, в примере по фиг. 2, если первый текущий краевой пиксел является краевым пикселом В, то видеокодер может обновить первый индикатор пиксела для указания краевого пиксела А. Если первый текущий краевой пиксел является краевым пикселом R, то видеокодер может обновить первый индикатор пиксела для указания краевого пиксела I. Если первый текущий краевой пиксел является краевым пикселом I, то видеокодер может обновить первый индикатор пиксела для указания краевого пиксела J.
После обновления первого индикатора пиксела, видеокодер может определить, является ли доступным первый текущий краевой пиксел (310). Видеокодер может определить, является ли доступным первый текущий краевой пиксел, различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения того, является ли доступным первый текущий краевой пиксел.
В ответ на определение того, что первый текущий краевой пиксел является недоступным («NO» в 310), видеокодер может назначить значение предыдущего краевого пиксела первому текущему краевому пикселу (312). Например, в примере по фиг. 2, если первый текущий краевой пиксел является краевым пикселом I, и краевой пиксел I является недоступным, то видеокодер может назначить значение краевого пиксела R краевому пикселу I. Если первый текущий краевой пиксел является краевым пикселом J, и краевой пиксел J является недоступным, то видеокодер может назначить значение краевого пиксела I краевому пикселу J, и т.д.
Как только видеокодер выполнил этап 310 или после определения, что первый текущий краевой пиксел является доступным («YES» в 310), видеокодер может определить, является ли первый текущий краевой пиксел нижним-левым краевым пикселом (314). В ответ на определение того, что первый текущий краевой пиксел является нижним-левым краевым пикселом («YES» в 314), видеокодер может завершить операцию 300 заполнения неинформативными символами относительно краевых пикселов, имеющихся слева или ниже краевого пиксела точки деления. Однако, в ответ на определение того, что первый текущий краевой пиксел не является нижним-левым краевым пикселом («NO» в 314), видеокодер может опять обновить первый индикатор пиксела (308) и выполнить этапы 310-314 относительно другого краевого пиксела. Таким образом, операция 300 заполнения неинформативными символами может назначать значения каждому недоступному краевому пикселу слева или ниже краевого пиксела точки деления.
Кроме того, после вывода значения краевого пиксела точки деления на этапе 306 или в ответ на определение того, что отточка деления является доступной («YES» в 304), видеокодер может обновить второй индикатор пиксела для указания краевого пиксела, который находится выше или справа от краевого пиксела, указанного вторым индикатором пиксела (316). Для легкости объяснения, это описание может ссылаться на краевой пиксел, указанный вторым индикатором пиксела как второй текущий краевой пиксел.
После обновления второго индикатора пиксела, видеокодер может определить, является ли доступным второй текущий краевой пиксел (318). Видеокодер может определить, является ли доступным текущий краевой пиксел, различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения того, является ли доступным второй текущий краевой пиксел.
В ответ на определение того, что второй текущий краевой пиксел является недоступным («NO» в 318), видеокодер может назначить значение предыдущего краевого пиксела второму текущему краевому пикселу (320). Например, в примере по фиг. 2, если второй текущий краевой пиксел является краевым пикселом D, и краевой пиксел D является недоступным, то видеокодер может назначить значение краевого пиксела С краевому пикселу D.
После выполнения этапа 320 или после того, как видеокодер определил, что второй текущий краевой пиксел является доступным («YES» в 318), видеокодер может определить, является ли второй текущий краевой пиксел верхним-правым краевым пикселом (322). В ответ на определение того, что второй текущий краевой пиксел является верхним-правым краевым пикселом, видеокодер может завершить операцию 300 заполнения неинформативными символами относительно краевых пикселов, которые находятся справа или выше краевого пиксела точки деления («YES» в 322). Однако, в ответ на определение того, что второй текущий краевой пиксел не является верхним-правым краевым пикселом («NO» в 322), видеокодер может обновить второй индикатор пиксела (316) и выполнить этапы 318-322 реконструкции другого краевого пиксела. Таким образом, видеокодер может обработать каждый краевой пиксел, который находится выше или вправо от точки деления.
В примере по фиг. 9, видеокодер может выполнить этапы 308-314 и этапы 316-322 параллельно. В других примерах, видеокодер может выполнить этапы 308-314 и этапы 316-322 последовательно.
Фиг. 10 является концептуальной схемой, которая иллюстрирует примерный порядок, в котором операция заполнения неинформативными символами по фиг. 9 переходит через краевые пикселы. Как показано в примере по фиг. 10, угловой краевой пиксел является краевым пикселом точки деления. Видеокодер может параллельно обработать краевые пикселы ниже углового краевого пиксела (например, на этапах 308-314) и краевые пикселы справа от углового краевого пиксела (например, этапы 316-322). В примере фиг. 10, угловой пиксел заштрихован. Если угловой краевой пиксел является недоступным, то видеокодер может вывести значение для углового краевого пиксела из какого-либо или обоих соседних краевых пикселов 340.
В другом примере, видеокодер может проверять слева направо через верхний предиктор, пока видеокодер не идентифицирует доступный краевой пиксел. Видеокодер может затем установить угловой пиксел и все краевые пикселы между угловым пикселом и доступным краевым пикселом на значение доступного краевого пиксела. В этом примере, если краевой пиксел ниже углового пиксела является недоступным, то видеокодер может проверять сверху вниз вдоль левого предиктора, пока видеокодер не идентифицирует доступный краевой пиксел. Видеокодер может затем установить каждый краевой пиксел ниже углового пиксела на значение доступного краевого пиксела.
Фиг. 11 является блок-схемой алгоритма, которая иллюстрирует примерную операцию 350 заполнения неинформативными символами. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 350 заполнения неинформативными символами. В других примерах, видеокодер может использовать операции заполнения неинформативными символами, отличные от операции 350 заполнения неинформативными символами. Например, в других примерах, видеокодер может выполнить операцию заполнения неинформативными символами, в которой видеокодер выполняет большее число этапов, меньшее число этапов или другие этапы, чем операция 350 заполнения неинформативными символами.
В операции 350 заполнения неинформативными символами, краевые пикселы включают в себя множество точек-кандидатов деления. Множество точек-кандидатов деления могут включать в себя различные краевые пикселы. Например, множество точек-кандидатов деления могут включать в себя угловой краевой пиксел, краевой пиксел посредине между угловым краевым пикселом и верхним левым краевым пикселом, и краевой пиксел посередине между угловым краевым пикселом и верхним-правым краевым пикселом. В другом примере, множество точек-кандидатов деления могут включать в себя нижний-левый краевой пиксел и верхний-правый краевой пиксел. В другом примере, множество точек-кандидатов деления могут включать в себя краевой пиксел, непосредственно справа от углового краевого пиксела и краевой пиксел непосредственно ниже углового краевого пиксела.
LX
AY
LX
AY
LX
AY
AY
LX
В другом примере, множество точек-кандидатов деления может включать в себя все краевые пикселы между двумя краевыми пикселами, P и P. В этом примере, P может быть любым краевым пикселом от углового краевого пиксела до нижнего-левого краевого пиксела, а P может быть любым краевым пикселом от углового краевого пиксела до верхнего-правого краевого пиксела. В этом примере, видеокодер может осуществлять поиск по точкам-кандидатам деления последовательно от P до P или от P до P доступной точки-кандидата деления. Поиск доступной точки-кандидата деления таким способом может уменьшить сложность поиска до одномерного поиска. Например, в этом примере, если точка деления является нижним-левым краевым пикселом, то видеокодер может выполнить операцию заполнения неинформативными символами, которая обрабатывает множество краевых пикселов согласно некоторому порядку, который начинается с нижнего-левого краевого пиксела и проходит через краевые пикселы последовательно до верхнего-правого краевого пиксела, где когда операция заполнения неинформативными символами обрабатывает недоступный краевой пиксел, операция заполнения неинформативными символами назначает некоторое значение этому недоступному краевому пикселу на основе значения краевого пиксела, ранее обработанного операцией заполнения неинформативными символами.
В другом примере, множество точек-кандидатов деления может включать в себя все краевые пикселы. В этом примере, видеокодер может искать доступную точку-кандидата деления через точки-кандидаты деления последовательно с нижнего-левого краевого пиксела до верхнего-правого краевого пиксела или наоборот. Поиск доступной точки-кандидата деления таким способом может уменьшить сложность поиска до одномерного поиска.
После того, как видеокодер начинает операцию 350 заполнения неинформативными символами, видеокодер может установить индикатор точки деления для указания первой из точек-кандидатов деления (352). Для легкости объяснения, это описание может относиться к точке-кандидату деления, указанной индикатором точки деления как текущей точки деления. Например, если множество точек-кандидатов деления включает в себя угловой краевой пиксел, то видеокодер может установить индикатор точки деления на угловой краевой пиксел.
После установки индикатора точки деления для указания одной из точек-кандидатов деления, видеокодер может определить, является ли текущая точка деления доступной (354). Видеокодер может определить, является ли текущая точка деления доступной различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения того, является ли текущая точка деления доступной.
Если текущая точка деления является недоступной («NO» в 354), то видеокодер может определить, является ли текущая точка деления последней из точек-кандидатов деления, подлежащих проверке (356). В ответ на определение того, что текущая точка деления является последней из точек-кандидатов деления, видеокодер может назначить некоторое значение по умолчанию текущей точке деления (358). В других примерах, видеокодер может назначить некоторое значение на основе значений соседних пикселов текущей точке деления вместо использования значения по умолчанию.
С другой стороны, в ответ на определение того, что текущая точка деления не является последней из точек-кандидатов деления, видеокодер может обновить индикатор точки деления таким образом, что индикатор точки деления указывает следующую из точек-кандидатов деления (360). Например, в примере фиг. 2, множество точек-кандидатов деления может включать в себя краевой пиксел L, краевой пиксел R и краевой пиксел D. Если текущая точка деления является краевым пикселом L, и краевой пиксел L является недоступным, то видеокодер может обновить индикатор точки деления таким образом, что индикатор точки деления указывает краевой пиксел R. Видеокодер может осуществлять поиск доступной точки-кандидата деления различными способами. Например, видеокодер может начать с точки-кандидата деления, которая является ближайшей к нижнему-левому краевому пикселу, и затем искать через точки-кандидаты деления по направлению к точке-кандидату деления, которая является ближайшей к верхнему-правому краевому пикселу.
После обновления индикатора точки деления, видеокодер может опять определить, является ли текущая точка деления доступной (354). Таким образом, видеокодер может обрабатывать точки-кандидаты деления, пока видеокодер не определит, что одна из точек-кандидатов деления является доступной, или пока видеокодер не определит, что ни одна из точек-кандидатов деления не является доступной, или наоборот.
После выполнения этапа 358 или после определения того, что текущая точка деления является доступной («YES» в 354), видеокодер может установить первый индикатор пиксела и второй индикатор пиксела для указания текущей точки деления (362). Например, если текущая точка деления является угловым краевым пикселом, то видеокодер может установить первый и второй индикаторы пикселов для указания углового краевого пиксела (например, краевого пиксела R на фиг. 2).
После установки первого и второго индикаторов пикселов для указания текущей точки деления, видеокодер может обновить первый индикатор пиксела для указания краевого пиксела, который находится ниже или слева от краевого пиксела, указанного первым индикатором пиксела (364). Для легкости объяснения, это описание может относиться к краевому пикселу, указанному первым индикатором пиксела как к первому текущему краевому пикселу. Например, в примере по фиг. 2, если первый текущий краевой пиксел является краевым пикселом В, то видеокодер может обновить первый индикатор пиксела для указания краевого пиксела А. Если первый текущий краевой пиксел является краевым пикселом R, то видеокодер может обновить первый индикатор пиксела для указания краевого пиксела I. Если первый текущий краевой пиксел является краевым пикселом I, то видеокодер может обновить первый индикатор пиксела для указания краевого пиксела J.
После обновления первого индикатора пиксела, видеокодер может определить, является ли первый текущий краевой пиксел доступным (366). Видеокодер может определить, является ли первый текущий краевой пиксел доступным различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения того, является ли первый текущий краевой пиксел доступным.
В ответ на определение того, что первый текущий краевой пиксел является недоступным («NO» в 366), видеокодер может назначить значение предыдущего краевого пиксела первому текущему краевому пикселу (368). Например, в примере фиг. 2, если первый текущий краевой пиксел является краевым пикселом I, и краевой пиксел I является недоступным, то видеокодер может назначить значение краевого пиксела R краевому пикселу I. Если первый текущий краевой пиксел является краевым пикселом J, и краевой пиксел J является недоступным, то видеокодер может назначить значение краевого пиксела I краевому пикселу J, и т.д.
Как только видеокодер приписал значение предыдущего краевого пиксела первому текущему краевому пикселу, или после определения того, что первый текущий краевой пиксел является доступным («YES» в 366), видеокодер может определить, является ли первый текущий краевой пиксел нижним-левым краевым пикселом (370). В ответ на определение того, что первый текущий краевой пиксел является нижним-левым краевым пикселом («YES» в 370), видеокодер может завершить операцию 300 заполнения неинформативными символами относительно краевых пикселов, находящихся слева или ниже текущей точки деления. Однако, в ответ на определение того, что первый текущий краевой пиксел не является нижним-левым краевым пикселом («NO» в 370), видеокодер может опять обновить первый индикатор пиксела (364) и выполнить этапы 366-370 относительно другого краевого пиксела. Таким образом, операция 350 заполнения неинформативными символами может назначить значения каждому недоступному краевому пикселу слева или ниже текущей точки деления.
Кроме того, после установки первого и второго индикаторов пикселов на текущую точку деления на этапе 362, видеокодер может обновить второй индикатор пиксела для указания краевого пиксела, который находится выше или вправо от краевого пиксела, указанного вторым индикатором пиксела (372). Для легкости объяснения, это описание может относиться к краевому пикселу, указанному вторым индикатором пиксела как ко второму текущему краевому пикселу.
После обновления второго индикатора пиксела, видеокодер может определить, является ли второй текущий краевой пиксел доступным (374). Видеокодер может определить, является ли второй текущий краевой пиксел доступным различными способами. Например, видеокодер может выполнить примерную операцию по фиг. 13 для определения того, является ли второй текущий краевой пиксел доступным.
В ответ на определение того, что второй текущий краевой пиксел является недоступным («NO» в 374), видеокодер может назначить значение предыдущего краевого пиксела второму текущему краевому пикселу (376). Например, в примере по фиг. 2. если второй текущий краевой пиксел является краевым пикселом D, и краевой пиксел D является недоступным, то видеокодер может назначить значение краевого пиксела С краевому пикселу D.
После назначения значения предыдущего краевого пиксела второму текущему краевому пикселу, или после того, как видеокодер определил, что второй текущий краевой пиксел является доступным («YES» в 374), видеокодер может определить, является ли второй текущий краевой пиксел верхним-правым краевым пикселом (378). В ответ на определение того, что второй текущий краевой пиксел является верхним-правым краевым пикселом, видеокодер может завершить операцию 300 заполнения неинформативными символами относительно краевых пикселов, которые находятся справа или выше текущей точки деления. Однако, в ответ на определение того, что второй текущий краевой пиксел не является верхним-правым краевым пикселом («NO» в 378), видеокодер может обновить второй индикатор пиксела (372) и выполнить этапы 374-378 относительно другого краевого пиксела. Таким образом, видеокодер может обработать каждый краевой пиксел, который находится выше или справа от краевого пиксела точки деления.
В примере фиг. 11, видеокодер может выполнить этапы 364-370 и этапы 372-378 параллельно. В других примерах, видеокодер может выполнить этапы 364-370 и этапы 372-378 последовательно.
Фиг. 12 является концептуальной схемой, которая иллюстрирует примерный порядок, в котором операция заполнения неинформативными символами по фиг. 11 проходит через краевые пикселы. Как показано в примере по фиг. 12, заштрихованные краевые пикселы являются точками-кандидатами деления. В примере по фиг. 12, краевой пиксел 400 может быть выбранной точкой деления, и видеокодер может параллельно обрабатывать краевые пикселы ниже выбранной точки деления (например, на этапах 364-370 по фиг. 11) и краевые пикселы выше и справа от выбранной точки деления (например, этапы 372-378).
Фиг. 13 является блок-схемой алгоритма, которая иллюстрирует примерную операцию 450 для определения того, является ли краевой пиксел доступным. Видеокодер, такой как видеокодер 20 или видеодекодер 30, может выполнить операцию 450. В других примерах, видеокодер может использовать операции, отличные от операции 450 для определения того, является ли краевой пиксел доступным. Например, в других примерах, видеокодер может выполнить некоторую операцию, в которой видеокодер выполняет большее число этапов, меньшее число этапов или другие этапы, чем операция 450.
После того, как видеокодер начинает операцию 450, видеокодер может определить, находится ли данный краевой пиксел вне границы текущего изображения (452). Текущим изображением может быть изображение, которое видеокодер в настоящее время кодирует. Например, если видеокодер выполняет операцию внутреннего предсказания для некоторого PU, чей видеоблок примыкает к верхнему или левому краю текущего изображения, то один или несколько пикселов выше или слева от этого видеоблока могут быть вне границы текущего изображения. В ответ на определение того, что краевой пиксел находится вне границы текущего изображения («YES» в 452), видеокодер может определить, что этот краевой пиксел является недоступным (454).
В ответ на определение того, что краевой пиксел не находится вне границы текущего изображения («NO» в 452), видеокодер может определить, находится ли краевой пиксел вне некоторой границы текущего среза или мозаичного фрагмента, и предсказание перекрестных срезов/перекрестных мозаичных фрагментов не разрешено (456). Этим текущим срезом или мозаичным фрагментом может быть срез или мозаичный фрагмент, который видеокодер в настоящее время кодирует. Например, если видеокодер выполняет операцию внутреннего предсказания для некоторого PU, чей видеоблок примыкает к верхнему или левому краю текущего среза или мозаичного фрагмента, то один или несколько пикселов выше или слева от этого видеоблока могут быть вне границы текущего среза или мозаичного фрагмента. Если предсказание перекрестных срезов разрешено, то видеокодеру разрешено использовать значения пикселов в первом срезе для генерации видеоблока, предсказанного с помощью внутреннего предсказания, для некоторого CU во втором срезе. В ответ на определение того, что краевой пиксел находится вне границы текущего среза или мозаичного фрагмента, и что предсказание перекрестных срезов/мозаичных фрагментов не разрешено («YES» в 456), видеокодер может определить, что данный краевой пиксел является недоступным (454).
Однако, в ответ на определение того, что краевой пиксел не находится вне текущего среза или мозаичного фрагмента, или что предсказание перекрестных срезов/перекрестных мозаичных фрагментов разрешено («NO» в 456), видеокодер может определить, связан ли данный краевой пиксел с CU, предсказанным с помощью внешнего предсказания, и задействовано ли ограниченное внутреннее предсказание (458). Другими словами, если этот краевой пиксел принадлежит к CU, предсказанному с помощью внешнего предсказания, и ограниченное внутреннее предсказание задействовано, то этот краевой пиксел может быть отмечен как недоступный. Этот краевой пиксел может быть связан с CU, предсказанным с помощью внешнего предсказания, если этот краевой пиксел находится в видеоблоке, связанном с CU, предсказанным с помощью внешнего предсказания.
В H.264/AVC, макроблок (МВ) в срезе, предсказанном с помощью внешнего предсказания, может быть кодирован либо как внешний MB, либо как внутренний MB. Аналогично, в HEVC, некоторый CU в Р срезе или В срезе может быть CU, предсказанным с помощью внешнего предсказания, или CU, предсказанным с помощью внутреннего предсказания. Внутренний MB и CU, предсказанные с помощью внутреннего предсказания, предсказываются из соседних видеоблоков. Кроме того, видеокодер может кодировать ограниченные внутренние MB. Видеокодер может сгенерировать ограниченный внутренний MB из соседних внутренних MB в одном и том же срезе. В соответствии со способами этого описания, видеокодер может сгенерировать ограниченный CU, предсказанный с помощью внутреннего предсказания, из видеоблоков соседних CU, предсказанных с помощью внутреннего предсказания, но не видеоблоков соседних CU, предсказанных с помощью внешнего предсказания. Некоторый constrained_intra_pred_flag (флаг ограниченного внутреннего предсказания) может быть сигнализирован в множестве параметров изображения (PPS) для определения того, кодируется ли группа изображений при помощи только внешних и ограниченных внутренних режимов.
Внутреннее обновление может быть устойчивым к ошибкам инструментом, который позволяет видеокодеру вставлять внутренние MB или CU, предсказанные с помощью внутреннего предсказания, для уменьшения распространения ошибок. В случае, если некоторое опорное изображение потеряно, видеодекодер может быть не в состоянии корректно декодировать внутренние MB или CU, предсказанные с помощью внутреннего предсказания, которые используют это опорное изображение. Если внутренние MB или CU, предсказанные с помощью внутреннего предсказания, используются для предсказания внутреннего MB или CU, предсказанного с помощью внутреннего предсказания, то видеокодер может быть не в состоянии декодировать этот внутренний MB или этот CU, предсказанный с помощью внутреннего предсказания. Таким образом, ошибка может распространяться к внутреннему MB или CU, предсказанному с помощью внутреннего предсказания. Поскольку ограниченные внутренние MB и ограниченные CU, предсказанные с помощью внутреннего предсказания, не полагаются на внешние MB или CU, предсказанные с помощью внешнего предсказания, потеря этого опорного изображения не мешает видеодекодеру декодировать ограниченные внутренние MB или CU, предсказанные с помощью внутреннего предсказания. Следовательно, может быть более устойчивым к ошибкам кодировать внутренние MB или CU, предсказанные с помощью внутреннего предсказания, как ограниченные внутренние MB или ограниченные CU, предсказанные с помощью внутреннего предсказания.
В масштабируемом кодировании видеосигнала (SVC), видеодекодер может не полностью декодировать множественные уровни зависимости (с одними и теми же или различными разрешениями) из-за конструкции одноконтурного декодирования видеодекодера. В этом случае, когда используется режим базового уровня (BL), предсказанного с помощью внутреннего предсказания, видеодекодер может правильно декодировать только МВ уровня улучшения, если соответствующие внутренние MB базового уровня кодированы как ограниченные внутренние MB. В ином случае, видеодекодер может нуждаться в предсказании внутренних MB базового уровня из реконструированных соседних внутренних MB, которые могут быть недоступны при декодировании уровня улучшения в случае одноконтурного декодирования.
В ответ на определение того, что этот краевой пиксел связан с CU, предсказанным с помощью внешнего предсказания, и что задействовано ограниченное внутреннее предсказание («YES» в 458), видеокодер может определить, что этот краевой пиксел является недоступным (454). С другой стороны, в ответ на определение того, что этот краевой пиксел не связан с CU, предсказанным с помощью внешнего предсказания, или что ограниченное внутреннее предсказание не задействовано («NO» в 458), видеокодер может определить, что этот краевой пиксел является доступным (460).
а
b
i
В примерах, приведенных выше, видеокодер может назначить некоторое значение по умолчанию или значение предыдущего краевого пиксела недоступным краевым пикселам. В других примерах, видеокодер может интерполировать значения недоступных краевых пикселов. Например, если имеется один или несколько доступных краевых пикселов на любой стороне некоторой последовательности из одного или нескольких недоступных краевых пикселов. В этом случае, видеокодер может интерполировать значения недоступных краевых пикселов на основе значений доступных краевых пикселов на любой стороне последовательности недоступных краевых пикселов. Эти недоступные краевые пикселы могут быть интерполированы как , i от 1 до М. В этом уравнении, А и A - доступные краевые пикселы на любой стороне последовательности недоступных краевых пикселов, М - число недоступных краевых пикселов в последовательности недоступных краевых пикселов, а U указывает недоступные краевые пикселы. В уравнении, приведенном выше, М может не быть степенью 2, так что деление может быть необходимо.
2
p+1
M
b
1
p
Поскольку М может не быть степенью 2, и это может быть желательным во избежание деления, другой способ может использоваться для интерполяции последовательности недоступных краевых пикселов. Согласно этому способу, пусть Q=Floor(log(M)), P=(1<<Q) и R=M-P. Видеокодер может установить каждый из недоступных краевых пикселов справа, которые являются от U до U, на значение значения A. Для любых краевых пикселов от U до U,
В некоторых случаях, не имеется доступного края на любой стороне некоторой последовательности из одного или нескольких недоступных краевых пикселов. Например, последовательные недоступные краевые пикселы могут появляться, пока не наступит конец предиктора. В этом примере, видеокодер может распространить значение последнего доступного краевого пиксела до конца этого предиктора. В другом примере, последовательные недоступные краевые пикселы могут появляться в начале некоторого предиктора. В этом примере, видеокодер может использовать значение первого доступного краевого пиксела в качестве значения недоступных краевых пикселов, предшествующих первому доступному краевому пикселу. Таким образом, в таких случаях, видеокодер может использовать простое распространение для генерации значений для недоступных опорных выборок.
В одном или нескольких примерах, описанные функции могут быть реализованы в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах или в любой их комбинации. Если они реализованы в программном обеспечении, то эти функции могут храниться или передаваться, как одна или несколько команд или код, считываемый компьютером носитель и выполняться основанным на аппаратном обеспечении процессора. Считываемые компьютером носители могут включать в себя считываемые компьютером носители данных, которые соответствуют материальному носителю, такому как носитель данных, или среду передачи данных, включающую в себя любую среду, которая облегчает перенос компьютерной программы с одного места к другому, например, согласно протоколу связи. Таким образом, считываемый компьютером носитель обычно может соответствовать (1) материальному считываемому компьютером носителю данных, который не является кратковременным или (2) среде передачи данных, такой как некоторый сигнал или несущая. Носителем данных может быть любой доступный носитель, который может быть доступен посредством одного или нескольких компьютеров или одного или нескольких процессоров для извлечения команд, кода и/или структур данных для реализации способов, описанных в этом описании. Компьютерный программный продукт может включать в себя некоторый считываемый компьютером носитель.
Посредством примера, а не ограничения, такие считываемые компьютером носители данных могут содержать RAM, ROM, EEPROM, CD-ROM или другую память на оптическом диске, память на магнитном диске или другие магнитные ЗУ, флэш-память или любой другой носитель, который может использоваться для хранения желаемого программного кода в форме команд или структур данных, и которые могут быть доступны посредством компьютера. Также, любое подключение правильно называется считываемым компьютером носителем. Например, если команды передаются с web-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, волоконно-оптического кабеля, витой пары, цифровой абонентской линии (DSL), или беспроводных технологий, таких как инфракрасное излучение, радио и микроволна, то этот коаксиальный кабель, волоконно-оптический кабель, витая пара, цифровая абонентская линия (DSL), или беспроводные технологии, такие как инфракрасное излучение, радио и микроволна включаются в определение носителя. Следует понимать, однако, что считываемые компьютером носители и носители данных не включают в себя подключений, несущих, сигналов или других переходных сред, а направлены вместо этого на некратковременные, материальные носители данных. Диск (disk) и диск (disc), как используются здесь, включает в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), флоппи-диск и Blue-ray диск, где диски (disk) обычно воспроизводят данные магнитным способом, тогда как диски (disc) воспроизводят данные оптически при помощи лазеров. Комбинации вышеупомянутого следует также включить в пределы объема считываемого компьютером носителя.
Команды могут исполняться одним или несколькими процессорами, такими как один или несколько процессоров цифровых сигналов (DSP), универсальные микропроцессоры, интегральные схемы прикладной ориентации (ASIC), программируемые пользователем вентильные матрицы (FPGA), или другие эквивалентные интегрированные или дискретные логические схемы. Соответственно, термин «процессор», как используется здесь, может относиться к любой вышеизложенной структуре или любой другой структуре, подходящей для реализации способов, описанных здесь. Кроме того, в некоторых аспектах, функциональность, описанная здесь, может быть обеспечена в пределах специализированного аппаратного обеспечения и/или программных модулей, сконфигурированных для кодирования и декодирования, или включенных в комбинированный кодек. Также, эти способы могли бы быть полностью реализованы в одной или нескольких схемах или логических элементах.
Способы этого описания могут быть реализованы в широком разнообразии устройств, включающих в себя беспроводную трубку-телефон, интегральную схему (IC) или множество IC (например, множество микросхем). Различные компоненты, модули или блоки описаны в этом описании для выделения функциональных аспектов устройств, выполненных с возможностью выполнения описанных способов, но необязательно требуют реализации посредством различных аппаратных блоков. Скорее, как описано выше, различные блоки могут быть скомбинированы в блок аппаратного кодека или обеспечены посредством группы взаимодействующих аппаратных блоков, включающих в себя один или несколько процессоров, описанных выше, в сопряжении с соответствующим программным обеспечением и/или программно-аппаратными средствами.
Были описаны различные примеры. Эти и другие примеры находятся в пределах объема следующей формулы изобретения.