ПАЛИТРОВОЕ ПРОГНОЗИРОВАНИЕ ПРИ КОДИРОВАНИИ ВИДЕО НА ОСНОВЕ ПАЛИТР
PALETTIZED PREDICTION AT ENCODING VIDEO BASED ON PALETTES

[0001] Данная заявка испрашивает приоритет предварительной заявки (США) номер 61/845824, поданной 12 июля 2013 года, предварительной заявки (США) номер 61/899048, поданной 1 ноября 2013 года, и предварительной заявки (США) номер 61/913040, поданной 6 декабря 2013 года, содержимое каждой из которых полностью включено в данный документ по ссылке.
Область техники, к которой относится изобретение
[0002] Данное раскрытие сущности относится к кодированию и декодированию видео.
Уровень техники
[0003] Поддержка цифрового видео может быть включена в широкий диапазон устройств, включающих в себя цифровые телевизионные приемники, системы цифровой прямой широковещательной передачи, беспроводные широковещательные системы, персональные цифровые устройства (PDA), переносные или настольные компьютеры, планшетные компьютеры, устройства для чтения электронных книг, цифровые камеры, цифровые записывающие устройства, цифровые мультимедийные проигрыватели, устройства видеоигр, консоли для видеоигр, сотовые или спутниковые радиотелефоны, так называемые "смартфоны", устройства видеоконференц-связи, устройства потоковой передачи видео и т.п. Цифровые видеоустройства реализуют такие технологии сжатия видео, как технологии сжатия видео, описанные в стандартах, заданных посредством разрабатываемых в настоящее время стандартов MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, часть 10, усовершенствованное кодирование видео (AVC), стандарта высокоэффективного кодирования видео (HEVC), и расширений таких стандартов. Видеоустройства могут передавать, принимать, кодировать, декодировать и/или сохранять цифровую видеоинформацию более эффективно посредством реализации таких технологий сжатия видео.
[0004] Технологии сжатия видео выполняют пространственное (внутрикадровое) прогнозирование и/или временное (межкадровое) прогнозирование для того, чтобы уменьшать или удалять избыточность, внутренне присущую в видеопоследовательностях. Для кодирования видео на основе блоков серия последовательных видеомакроблоков (т.е. видеокадр или часть видеокадра) может быть сегментирована на видеоблоки. Видеоблоки в серии внутренне кодированных последовательных (I-) макроблоков изображения кодируются с использованием пространственного прогнозирования относительно опорных выборок в соседних блоках в идентичном изображении. Видеоблоки в серии взаимно кодированных последовательных (P- или B-) макроблоков изображения могут использовать пространственное прогнозирование относительно опорных выборок в соседних блоках в идентичном изображении или временное прогнозирование относительно опорных выборок в других опорных изображениях. Изображения могут упоминаться как кадры, и опорные изображения могут упоминаться как опорные кадры.
[0005] Пространственное или временное прогнозирование приводит в результате к прогнозирующему блоку для блока, который должен быть кодирован. Остаточные данные представляют пиксельные разности между исходным блоком, который должен быть кодирован, и прогнозирующим блоком. Взаимно кодированный блок кодируется согласно вектору движения, который указывает на блок опорных выборок, формирующих прогнозный блок, и остаточные данные указывают разность между кодированным блоком и прогнозным блоком. Внутренне кодированный блок кодируется согласно режиму внутреннего кодирования и остаточным данным. Для дополнительного сжатия остаточные данные могут быть преобразованы из пиксельной области в область преобразования, приводя к остаточным коэффициентам, которые затем могут быть квантованы. Квантованные коэффициенты, первоначально размещаемые в двумерном массиве, могут сканироваться для того, чтобы формировать одномерный вектор коэффициентов, и может применяться энтропийное кодирование с тем, чтобы достигать еще большего сжатия.
[0006] Поток битов многовидового кодирования может формироваться посредством кодирования видов, например, с нескольких перспектив. Разработаны некоторые трехмерные видеостандарты, которые используют аспекты многовидового кодирования. Например, различные виды могут передавать виды для левого и правого глаза, чтобы поддерживать трехмерное видео. Альтернативно, некоторые процессы кодирования трехмерного видео могут применять так называемое многовидовое кодирование с учетом глубины. При многовидовом кодировании с учетом глубины поток трехмерных видеобитов может содержать не только компоненты видов текстуры, но также и компоненты видов глубины. Например, каждый вид может содержать один компонент вида текстуры и один компонент вида глубины.
Сущность изобретения
[0007] Технологии этого раскрытия сущности относятся к кодированию видео на основе палитр. При кодировании на основе палитр, видеокодер (например, видеокодер или видеодекодер) может формировать так называемую "палитру" в качестве таблицы цветов или пиксельных значений, представляющих видеоданные конкретной области (например, данного блока). Таким образом, вместо кодирования фактических пиксельных значений или их остатков для текущего блока видеоданных, видеокодер может кодировать значения индекса для одного или более пиксельных значений текущего блока, причем значения индекса указывают записи в палитре, которые используются для того, чтобы представлять пиксельные значения текущего блока. Текущая палитра для текущего блока видеоданных может быть явно кодирована и отправлена в видеодекодер, прогнозирована из предыдущих записей палитры, прогнозирована из предыдущих пиксельных значений либо как комбинация вышеозначенного.
[0008] Согласно технологиям, описанным в этом раскрытии сущности для формирования текущей палитры для текущего блока, видеодекодер сначала определяет одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру, и затем определяет число новых записей палитры, которые не находятся в прогнозирующей палитре, но которые включены в текущую палитру. На основе этой информации, видеодекодер вычисляет размер текущей палитры как равный сумме числа скопированных записей палитры и числа новых записей палитры и формирует текущую палитру определенного размера, включающую в себя скопированные записи палитры и новые записи палитры. Видеокодер может выполнять аналогичные технологии для того, чтобы формировать текущую палитру для текущего блока. Помимо этого, видеокодер может явно кодировать и отправлять пиксельные значения для новых записей палитры в видеодекодер. Технологии, описанные в этом раскрытии сущности, также могут включать в себя технологии для различных комбинаций одного или более из передачи в служебных сигналах режимов кодирования на основе палитр, передачи палитр, прогнозирования палитр, извлечения палитр или передачи карт кодирования на основе палитр и других элементов синтаксиса.
[0009] В одном примере, это раскрытие сущности направлено на способ кодирования видеоданных, при этом способ содержит формирование прогнозирующей палитры, включающей в себя записи палитры, которые указывают пиксельные значения, определение одной или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока видеоданных, определение числа новых записей палитры не в прогнозирующей палитре, которые включены в текущую палитру для текущего блока, вычисление размера текущей палитры, равного сумме числа скопированных записей палитры и числа новых записей палитры, и формирование текущей палитры, включающей в себя скопированные записи палитры и новые записи палитры. Способ дополнительно содержит определение значений индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока.
[0010] В другом примере, это раскрытие сущности направлено на устройство для кодирования видеоданных, причем устройство содержит запоминающее устройство, хранящее видеоданные, и один или более процессоров, выполненных с возможностью формировать прогнозирующую палитру, включающую в себя записи палитры, которые указывают пиксельные значения, определять одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока видеоданных, определять число новых записей палитры не в прогнозирующей палитре, которые включены в текущую палитру для текущего блока, вычислять размер текущей палитры, равный сумме числа скопированных записей палитры и числа новых записей палитры, и формировать текущую палитру, включающую в себя скопированные записи палитры и новые записи палитры. Процессоры дополнительно выполнены с возможностью определять значения индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока.
[0011] В другом примере, это раскрытие сущности направлено на устройство для кодирования видеоданных, причем устройство содержит средство для формирования прогнозирующей палитры, включающей в себя записи палитры, которые указывают пиксельные значения, средство для определения одной или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока видеоданных, средство для определения числа новых записей палитры не в прогнозирующей палитре, которые включены в текущую палитру для текущего блока, средство для вычисления размера текущей палитры, равного сумме числа скопированных записей палитры и числа новых записей палитры, средство для формирования текущей палитры, включающей в себя скопированные записи палитры и новые записи палитры, и средство для определения значений индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока.
[0012] В дополнительном примере, это раскрытие сущности направлено на невременный машиночитаемый носитель, хранящий инструкции, которые при выполнении инструктируют одному или более процессоров формировать прогнозирующую палитру, включающую в себя записи палитры, которые указывают пиксельные значения, определять одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока видеоданных, определять число новых записей палитры не в прогнозирующей палитре, которые включены в текущую палитру для текущего блока, вычислять размер текущей палитры, равный сумме числа скопированных записей палитры и числа новых записей палитры, формировать текущую палитру, включающую в себя скопированные записи палитры и новые записи палитры, и определять значения индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока.
[0013] Подробности одного или более примеров данного раскрытия сущности изложены на прилагаемых чертежах и в нижеприведенном описании. Другие признаки, цели и преимущества должны становиться очевидными из описания, чертежей и формулы изобретения.
Краткое описание чертежей
[0014] Фиг. 1 является блок-схемой, иллюстрирующей примерную систему кодирования видео, которая может использовать технологии, описанные в этом раскрытии сущности.
[0015] Фиг. 2 является блок-схемой, иллюстрирующей примерный видеокодер, который может реализовывать технологии, описанные в этом раскрытии сущности.
[0016] Фиг. 3 является блок-схемой, иллюстрирующей примерный видеодекодер, который может реализовывать технологии, описанные в этом раскрытии сущности.
[0017] Фиг. 4 является концептуальной схемой, иллюстрирующей пример определения палитры для кодирования видеоданных, в соответствии с технологиями этого раскрытия сущности.
[0018] Фиг. 5 является концептуальной схемой, иллюстрирующей примеры определения индексов для палитры для видеоблока, в соответствии с технологиями этого раскрытия сущности.
[0019] Фиг. 6 является концептуальной схемой, иллюстрирующей примеры определения геометрического края видеоблока с использованием серии индексов палитры для компонента сигнала яркости, адаптивно понижающе дискретизированного для компонентов сигнала цветности, в соответствии с технологиями этого раскрытия сущности.
[0020] Фиг. 7 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс для кодирования видеоданных остатков прогнозирования с использованием режима кодирования на основе палитр, в соответствии с технологиями этого раскрытия сущности.
[0021] Фиг. 8 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс для декодирования видеоданных остатков прогнозирования с использованием режима кодирования на основе палитр, в соответствии с технологиями этого раскрытия сущности.
[0022] Фиг. 9 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс для формирования палитры для кодирования на основе палитр, в соответствии с технологиями этого раскрытия сущности.
Подробное описание изобретения
[0023] Это раскрытие сущности включает в себя технологии для кодирования и сжатия видео. В частности, это раскрытие сущности описывает технологии для кодирования на основе палитр видеоданных. При традиционном кодировании видео, изображения предположительно имеют непрерывный тон и пространственную плавность. На основе этих допущений, разработаны различные инструментальные средства, такие как преобразование на основе блоков, фильтрация и т.д., и такие инструментальные средства демонстрируют хорошую производительность для естественных видео контента.
[0024] Тем не менее, в таких приложениях, как удаленный рабочий стол, совместная работа и беспроводной дисплей, машиногенерируемый экранный контент (например, такой как текст или компьютерная графика) может представлять собой доминирующий контент, который должен сжиматься. Этот тип контента имеет тенденцию иметь дискретный тон и рисовать резкие линии и высококонтрастные границы объектов. Допущение касательно непрерывного тона и плавности больше не может применяться для экранного контента, и в силу этого традиционные технологии кодирования видео не могут представлять собой эффективные способы сжимать видеоданные, включающие в себя экранный контент.
[0025] Это раскрытие сущности описывает кодирование на основе палитр, которое может быть, в частности, подходящим для кодирования экраногенерируемого контента. Например, при условии, что конкретная область видеоданных имеет относительно небольшое число цветов, видеокодер (видеокодер или видеодекодер) может формировать так называемую "палитру" в качестве таблицы цветов или пиксельных значений, представляющих видеоданные конкретной области (например, данного блока). Например, палитра может включать наиболее доминирующие пиксельные значения в данный блок. В некоторых случаях, наиболее доминирующие пиксельные значения могут включать в себя один или более пиксельных значений, которые возникают наиболее часто в блоке. Помимо этого, в некоторых случаях пороговое значение может применяться, чтобы задавать то, включено или нет пиксельное значение в качестве одного из наиболее доминирующих пиксельных значений в блок. Согласно этому раскрытию сущности, вместо кодирования фактических пиксельных значений или их остатков для текущего блока видеоданных, видеокодер может кодировать значения индекса, указывающие одно или более пиксельных значений текущего блока, причем значения индекса указывают записи в палитре, которые используются для того, чтобы представлять пиксельные значения текущего блока.
[0026] Например, видеокодер может кодировать блок видеоданных посредством определения палитры для блока (например, явного кодирования палитры, прогнозирования палитры или комбинации вышеозначенного), нахождения записи в палитре, чтобы представлять одно или более пиксельных значений, и кодирования блока с помощью значений индекса, которые указывают запись в палитре, используемую для того, чтобы представлять пиксельные значения блока. В некоторых примерах, видеокодер может передавать в служебных сигналах значения индекса в кодированном потоке битов. Видеодекодер может получать, из кодированного потока битов, палитру для блока, а также значения индекса для пикселов блока. Видеодекодер может связывать значения индекса пикселов с записями палитры, чтобы восстанавливать пиксельные значения блока.
[0027] Вышеприведенные примеры имеют намерение предоставлять общее описание кодирования на основе палитр. В различных примерах, технологии, описанные в этом раскрытии сущности, могут включать в себя технологии для различных комбинаций одного или более из передачи в служебных сигналах режимов кодирования на основе палитр, передачи палитр, прогнозирования палитр, извлечения палитр или передачи карт кодирования на основе палитр и других элементов синтаксиса. Такие технологии могут повышать эффективность кодирования видео, например, требуя меньшего числа битов для того, чтобы представлять экраногенерируемый контент.
[0028] Например, текущая палитра для текущего блока видеоданных может быть явно кодирована и отправлена в видеодекодер, прогнозирована из предыдущих записей палитры, прогнозирована из предыдущих пиксельных значений либо как комбинация вышеозначенного. Согласно технологиям, описанным в этом раскрытии сущности для формирования текущей палитры для текущего блока, видеодекодер сначала определяет одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру, и затем определяет число новых записей палитры, которые не находятся в прогнозирующей палитре, но которые включены в текущую палитру. На основе этой информации, видеодекодер вычисляет размер текущей палитры как равный сумме числа скопированных записей палитры и числа новых записей палитры и формирует текущую палитру определенного размера, включающую в себя скопированные записи палитры и новые записи палитры. Видеокодер может выполнять аналогичные технологии для того, чтобы формировать текущую палитру для текущего блока. Помимо этого, видеокодер может явно кодировать и отправлять пиксельные значения для новых записей палитры в видеодекодер.
[0029] В некоторых примерах этого раскрытия сущности, технологии для кодирования на основе палитр видеоданных могут использоваться с одной или более других технологий кодирования, таких как технологии для взаимного прогнозирующего кодирования или внутреннего прогнозирующего кодирования видеоданных. Например, как подробнее описано ниже, кодер или декодер, или комбинированный кодер-декодер (кодек) может быть выполнен с возможностью осуществлять взаимное и внутреннее прогнозирующее кодирование, а также кодирование на основе палитр. В некоторых примерах, технологии кодирования на основе палитр могут быть выполнены с возможностью использования в одном или более режимов единицы кодирования (CU) стандарта высокоэффективного кодирования видео (HEVC). В других примерах, технологии кодирования на основе палитр могут использоваться независимо или в качестве части других существующих или будущих систем или стандартов.
[0030] Стандарт высокоэффективного кодирования видео (HEVC) представляет собой новый стандарт кодирования видео, разрабатываемый посредством Объединенной группы для совместной работы над видеостандартами (JCT-VC) Экспертной группы в области кодирования видео (VCEG) ITU-T и Экспертной группы по киноизображению (MPEG) ISO/IEC. Недавний проект HEVC-стандарта, называемый как "HEVC-проект 10" "WD10", описывается в документе JCTVC-L1003v34 авторов Bross и др. "High Efficiency Video Coding (HEVC) Text Specification Draft 10 (for FDIS and Last Call)", Объединенная группа для совместной работы над видеостандартами (JCT-VC) ITU-T SG16 WP3 и ISO/IEC JTC1/SC29/WG11, 12 конференция: Женева, CH, 14-23 января 2013 года, доступном по адресу:
http://phenix.int-evry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC-L1003-v34.zip.
[0031] Относительно инфраструктуры HEVC в качестве примера, технологии кодирования на основе палитр могут быть выполнены с возможностью использоваться в качестве CU-режима. В других примерах, технологии кодирования на основе палитр могут быть выполнены с возможностью использоваться в качестве PU-режима в инфраструктуре HEVC. Соответственно, все следующие раскрытые процессы, описанные в контексте CU-режима, дополнительно или альтернативно, могут применяться к PU. Тем не менее, эти примеры на основе HEVC не должны считаться ограничением или недочетом технологий кодирования на основе палитр, описанных в данном документе, поскольку технологии в данном документе могут применяться, чтобы работать независимо или в качестве части других существующих или будущих разрабатываемых систем/стандартов. В этих случаях, единица для палитрового кодирования может представлять собой квадратные блоки, прямоугольные блоки или даже области непрямоугольной формы.
[0032] Фиг. 1 является блок-схемой, иллюстрирующей примерную систему 10 кодирования видео, которая может использовать технологии этого раскрытия сущности. При использовании в данном документе, термин "видеокодер" относится обобщенно к видеокодерам и видеодекодерам. В этом раскрытии сущности, термины "кодирование видео" или "кодирование" могут относиться обобщенно к кодированию видео или декодированию видео. Видеокодер 20 и видеодекодер 30 системы 10 кодирования видео представляют примеры устройств, которые могут быть выполнены с возможностью осуществлять технологии для кодирования видео на основе палитр в соответствии с различными примерами, описанными в этом раскрытии сущности. Например, видеокодер 20 и видеодекодер 30 могут быть выполнены с возможностью избирательно кодировать различные блоки видеоданных, к примеру, CU или PU при HEVC-кодировании, с использованием кодирования на основе палитр либо кодирования не на основе палитр. Режимы кодирования не на основе палитр могут означать различные режимы взаимного прогнозирующего временного кодирования или режимы внутреннего прогнозирующего пространственного кодирования, к примеру, различные режимы кодирования, указываемые посредством HEVC-проекта 10.
[0033] Как показано на фиг. 1, система 10 кодирования видео включает в себя исходное устройство 12 и целевое устройство 14. Исходное устройство 12 формирует кодированные видеоданные. Соответственно, исходное устройство 12 может упоминаться в качестве устройства кодирования видео или устройства кодирования видео. Целевое устройство 14 может декодировать кодированные видеоданные, сформированные посредством исходного устройства 12. Соответственно, целевое устройство 14 может упоминаться в качестве устройства декодирования видео или устройства декодирования видео. Исходное устройство 12 и целевое устройство 14 могут быть примерами устройств кодирования видео или устройств кодирования видео.
[0034] Исходное устройство 12 и целевое устройство 14 могут содержать широкий диапазон устройств, включающих в себя настольные компьютеры, мобильные вычислительные устройства, ноутбуки (например, переносные компьютеры), планшетные компьютеры, абонентские приставки, телефонные трубки, к примеру, так называемые смартфоны, телевизионные приемники, камеры, устройства отображения, цифровые мультимедийные проигрыватели, консоли для видеоигр, встроенные в автомобиль компьютеры и т.п.
[0035] Целевое устройство 14 может принимать кодированные видеоданные из исходного устройства 12 через канал 16. Канал 16 может содержать одну или более сред или устройств, допускающих перемещение кодированных видеоданных из исходного устройства 12 в целевое устройство 14. В одном примере, канал 16 может содержать одну или более сред связи, которые предоставляют возможность исходному устройству 12 передавать кодированные видеоданные непосредственно в целевое устройство 14 в реальном времени. В этом примере, исходное устройство 12 может модулировать кодированные видеоданные согласно стандарту связи, такому как протокол беспроводной связи, и может передавать модулированные видеоданные в целевое устройство 14. Одна или более сред связи могут включать в себя беспроводные среды связи и/или проводные среды связи, к примеру, радиочастотный (RF) спектр или одну или более физических линий передачи. Одна или более сред связи могут составлять часть сети с коммутацией пакетов, такой как локальная вычислительная сеть, глобальная вычислительная сеть или глобальная сеть (например, Интернет). Одна или более сред связи могут включать в себя маршрутизаторы, коммутаторы, базовые станции или другое оборудование, которое упрощает передачу из исходного устройства 12 в целевое устройство 14.
[0036] В другом примере, канал 16 может включать в себя носитель хранения данных, который хранит кодированные видеоданные, сформированные посредством исходного устройства 12. В этом примере, целевое устройство 14 может осуществлять доступ к носителю хранения данных через доступ к диску или доступ по карте. Носитель хранения данных может включать в себя множество локально доступных носителей хранения данных, таких как Blu-Ray-диски, DVD, CD-ROM, флэш-память или другие подходящие цифровые носители хранения данных для хранения кодированных видеоданных.
[0037] В дополнительном примере, канал 16 может включать в себя файловый сервер или другое промежуточное устройство хранения данных, которое хранит кодированные видеоданные, сформированные посредством исходного устройства 12. В этом примере, целевое устройство 14 может осуществлять доступ к кодированным видеоданным, сохраненным на файловом сервере или другом промежуточном устройстве хранения данных через потоковую передачу или загрузку. Файловый сервер может представлять собой тип сервера, допускающего сохранение кодированных видеоданных и передачу кодированных видеоданных в целевое устройство 14. Примерные файловые серверы включают в себя веб-серверы (например, для веб-узла), серверы по протоколу передачи файлов (FTP), устройства по протоколу системы хранения данных с подключением по сети (NAS) и локальные накопители на дисках.
[0038] Целевое устройство 14 может осуществлять доступ к кодированным видеоданным через стандартное подключение для передачи данных, к примеру, Интернет-подключение. Примерные типы подключений для передачи данных могут включать в себя беспроводные каналы (например, Wi-Fi-подключения), проводные подключения (например, DSL, кабельный модем и т.д.) или комбинации вышеозначенного, которые являются подходящими для осуществления доступа к кодированным видеоданным, сохраненным на файловом сервере. Передача кодированных видеоданных из файлового сервера может представлять собой потоковую передачу, передачу на основе загрузки или комбинацию вышеозначенного.
[0039] Технологии этого раскрытия сущности не ограничены приложениями или настройками беспроводной связи. Технологии могут применяться к кодированию видео в поддержку множества мультимедийных приложений, таких как телевизионные широковещательные передачи по радиоинтерфейсу, кабельные телевизионные передачи, спутниковые телевизионные передачи, потоковые передачи видео, например, через Интернет, кодирование видеоданных для хранения на носителе хранения данных, декодирование видеоданных, сохраненных на носителе хранения данных, или другие приложения. В некоторых примерах, система 10 кодирования видео может быть выполнена с возможностью поддерживать одностороннюю или двустороннюю передачу видео, чтобы поддерживать такие приложения, как потоковая передача видео, воспроизведение видео, широковещательная передача видео и/или видеотелефония.
[0040] Система 10 кодирования видео, проиллюстрированная на фиг. 1, является просто примером, и технологии этого раскрытия сущности могут применяться к настройкам кодирования видео (например, кодирования видео или декодирования видео), которые не обязательно включают в себя передачу данных между устройствами кодирования и декодирования. В других примерах, данные извлекаются из локального запоминающего устройства, передаются в потоковом режиме по сети и т.п. Устройство кодирования видео может кодировать и сохранять данные в запоминающем устройстве, и/или устройство декодирования видео может извлекать и декодировать данные из запоминающего устройства. Во многих примерах, кодирование и декодирование выполняется посредством устройств, которые не обмениваются данными друг с другом, а просто кодируют данные в запоминающее устройство и/или извлекают и декодируют данные из запоминающего устройства.
[0041] В примере по фиг. 1, исходное устройство 12 включает в себя видеоисточник 18, видеокодер 20 и интерфейс 22 вывода. В некоторых примерах, интерфейс 22 вывода может включать в себя модулятор/демодулятор (модем) и/или передающее устройство. Видеоисточник 18 может включать в себя устройство видеозахвата, например, видеокамеру, видеоархив, содержащий ранее захваченные видеоданные, интерфейс прямых видеотрансляций, чтобы принимать видеоданные от поставщика видеоконтента, и/или компьютерную графическую систему для формирования видеоданных либо комбинацию таких источников видеоданных.
[0042] Видеокодер 20 может кодировать видеоданные из видеоисточника 18. В некоторых примерах, исходное устройство 12 непосредственно передает кодированные видеоданные в целевое устройство 14 через интерфейс 22 вывода. В других примерах, кодированные видеоданные также могут быть сохранены на носитель хранения данных или файловый сервер для последующего доступа посредством целевого устройства 14 для декодирования и/или воспроизведения.
[0043] В примере по фиг. 1, целевое устройство 14 включает в себя интерфейс 28 ввода, видеодекодер 30 и устройство 32 отображения. В некоторых примерах, интерфейс 28 ввода включает в себя приемное устройство и/или модем. Интерфейс 28 ввода может принимать кодированные видеоданные по каналу 16. Устройство 32 отображения может быть интегрировано или может быть внешним для целевого устройства 14. В общем, устройство 32 отображения отображает декодированные видеоданные. Устройство 32 отображения может содержать множество устройств отображения, таких как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED) или другой тип устройства отображения.
[0044] Это раскрытие сущности, в общем, может означать "передачу в служебных сигналах" или "передачу" определенной информации посредством видеокодера 20 в другое устройство, такое как видеодекодер 30. Термин "передача служебных сигналов" или "передача", в общем, может означать передачу элементов синтаксиса и/или других данных, используемых для того, чтобы декодировать сжатые видеоданные. Эта связь может осуществляться в реальном или практически в реальном времени. Альтернативно, эта связь может осуществляться в промежутке времени, к примеру, может осуществляться при сохранении элементов синтаксиса на машиночитаемом носителе хранения данных в кодированном потоке битов во время кодирования, которые затем могут извлекаться посредством устройства декодирования видео в любое время после сохранения на этом носителе. Таким образом, тогда как видеодекодер 30 может упоминаться как "принимающий" определенную информацию, прием информации не обязательно осуществляется в реальном или практически в реальном времени и может извлекаться из носителя в определенное время после хранения.
[0045] Видеокодер 20 и видеодекодер 30 могут быть реализованы как любая из множества надлежащих схем, к примеру, как один или более микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретная логика, аппаратные средства либо любые комбинации вышеозначенного. Если технологии реализуются частично в программном обеспечении, устройство может сохранять инструкции для программного обеспечения на подходящем невременном машиночитаемом носителе хранения данных и может выполнять инструкции в аппаратных средствах с использованием одного или более процессоров, чтобы осуществлять технологии этого раскрытия сущности. Любое из вышеозначенного (включающее в себя аппаратные средства, программное обеспечение, комбинацию аппаратных средств и программного обеспечения и т.д.) может рассматриваться в качестве одного или более процессоров. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть комбинированного кодера/декодера (кодека) в соответствующем устройстве.
[0046] В некоторых примерах, видеокодер 20 и видеодекодер 30 работают согласно такому стандарту сжатия видео, как HEVC-стандарт, упомянутый выше и описанный в HEVC-проекте 10. В дополнение к базовому HEVC-стандарту, прилагаются постоянные усилия для формирования расширений для масштабируемого кодирования видео, кодирования многовидового видео и трехмерного кодирования для HEVC. Помимо этого, режимы кодирования на основе палитр, например, как описано в этом раскрытии сущности, могут предоставляться для расширения HEVC-стандарта. В некоторых примерах, технологии, описанные в этом раскрытии сущности для кодирования на основе палитр, могут применяться к кодерам и декодерам, выполненным с возможностью работы согласно другим стандартам кодирования видео, таким как ITU-T-H.264/AVC-стандарт или будущие стандарты. Соответственно, применение режима кодирования на основе палитр для кодирования единиц кодирования (CU) или единиц прогнозирования (PU) в HEVC-кодеке описывается для целей примера.
L
Cb
Cr
L
Cb
Cr
[0047] В HEVC и других стандартах кодирования видео, видеопоследовательность типично включает в себя последовательность изображений. Изображения также могут упоминаться в качестве "кадров". Изображение может включать в себя три массива выборок, обозначаемых как S, S и S. S представляет собой двумерный массив (т.е. блок) выборок сигнала яркости. S представляет собой двумерный массив выборок Cb-сигнала цветности. S представляет собой двумерный массив выборок Cr-сигнала цветности. Выборки сигнала цветности также могут упоминаться в данном документе как выборки "сигнала цветности". В других случаях, изображение может быть монохромным и может включать в себя только массив выборок сигнала яркости.
[0048] Для того, чтобы формировать кодированное представление изображения, видеокодер 20 может формировать набор единиц дерева кодирования (CTU). Каждая из CTU может представлять собой блок дерева кодирования выборок сигнала яркости, два соответствующих блока дерева кодирования выборок сигнала цветности и синтаксические структуры, используемые для того, чтобы кодировать выборки блоков дерева кодирования. Блок дерева кодирования может представлять собой блок NxN выборок. CTU также может упоминаться в качестве "древовидного блока" или наибольшей единицы кодирования (LCU). CTU HEVC в широком смысле могут быть аналогичными макроблокам других стандартов, таких как H.264/AVC. Тем не менее, CTU не обязательно ограничивается конкретным размером и может включать в себя одну или более единиц кодирования (CU). Серия последовательных макроблоков может включать в себя целое число CTU, упорядоченных последовательно в растровом сканировании. Кодированная серия последовательных макроблоков может содержать заголовок серии последовательных макроблоков и данные серии последовательных макроблоков. Заголовок серии последовательных макроблоков серии последовательных макроблоков может представлять собой синтаксическую структуру, которая включает в себя элементы синтаксиса, которые предоставляют информацию относительно серии последовательных макроблоков. Данные серии последовательных макроблоков могут включать в себя кодированные CTU серии последовательных макроблоков.
[0049] Это раскрытие сущности может использовать термин "видеоединица" или "видеоблок", или "блок" для того, чтобы означать один или более блоков выборок и синтаксических структур, используемых для того, чтобы кодировать выборки одного или более блоков выборок. Примерные типы видеоединиц или блоков могут включать в себя CTU, CU, PU, единицы преобразования (TU), макроблоки, сегменты макроблока и т.д. В некоторых контекстах, пояснение PU может заменяться на пояснение макроблоков или сегментов макроблока.
[0050] Для того, чтобы формировать кодированную CTU, видеокодер 20 может рекурсивно выполнять сегментацию на дерево квадрантов для блоков дерева кодирования CTU для того, чтобы разделять блоки дерева кодирования на блоки кодирования, отсюда имя "единицы дерева кодирования". Блок кодирования представляет собой блок NxN выборок. CU может представлять собой блок кодирования выборок сигнала яркости и два соответствующих блока кодирования выборок сигнала цветности изображения, которое имеет массив выборок сигнала яркости, массив Cb-выборок и массив Cr-выборок, и синтаксические структуры, используемые для того, чтобы кодировать выборки блоков кодирования. Видеокодер 20 может сегментировать блок кодирования CU на один или более прогнозных блоков. Прогнозный блок может представлять собой прямоугольный (т.е. квадратный или неквадратный) блок выборок, к которым применяется идентичное прогнозирование. Единица прогнозирования (PU) CU может представлять собой прогнозный блок выборок сигнала яркости, два соответствующих прогнозных блока выборок сигнала цветности изображения и синтаксические структуры, используемые для того, чтобы прогнозировать выборки прогнозных блоков. Видеокодер 20 может формировать прогнозирующие блоки сигналов яркости, прогнозирующие Cb-блоки и прогнозирующие Cr-блоки для прогнозных блоков сигналов яркости, прогнозных Cb-блоков и прогнозных Cr-блоков каждой PU CU.
[0051] Видеокодер 20 может использовать внутреннее прогнозирование или взаимное прогнозирование для того, чтобы формировать прогнозирующие блоки для PU. Если видеокодер 20 использует внутреннее прогнозирование для того, чтобы формировать прогнозирующие блоки PU, видеокодер 20 может формировать прогнозирующие блоки PU на основе декодированных выборок изображения, ассоциированного с PU.
[0052] Если видеокодер 20 использует взаимное прогнозирование для того, чтобы формировать прогнозирующие блоки PU, видеокодер 20 может формировать прогнозирующие блоки PU на основе декодированных выборок одного или более изображений, за исключением изображения, ассоциированного с PU. Видеокодер 20 может использовать унипрогнозирование или бипрогнозирование для того, чтобы формировать прогнозирующие блоки PU. Когда видеокодер 20 использует унипрогнозирование для того, чтобы формировать прогнозирующие блоки для PU, PU может иметь один вектор движения (MV). Когда видеокодер 20 использует бипрогнозирование для того, чтобы формировать прогнозирующие блоки для PU, PU может иметь два MV.
[0053] После того, как видеокодер 20 формирует прогнозирующие блоки (например, прогнозирующие блоки сигналов яркости, прогнозирующие Cb-блоки и прогнозирующие Cr-блоки) для одной или более PU CU, видеокодер 20 может формировать остаточные блоки для CU. Каждая выборка в остаточном блоке CU может указывать разность между выборкой в прогнозирующем блоке PU CU и соответствующей выборкой в блоке кодирования CU. Например, видеокодер 20 может формировать остаточный блок сигналов яркости для CU. Каждая выборка в остаточном блоке сигналов яркости CU указывает разность между выборкой сигнала яркости в одном из прогнозирующих блоков сигналов яркости CU и соответствующей выборкой в исходном блоке кодирования сигналов яркости CU. Помимо этого, видеокодер 20 может формировать остаточный Cb-блок для CU. Каждая выборка в остаточном Cb-блоке CU может указывать разность между Cb-выборкой в одном из прогнозирующих Cb-блоков CU и соответствующей выборкой в исходном Cb-блоке кодирования CU. Видеокодер 20 также может формировать остаточный Cr-блок для CU. Каждая выборка в остаточном Cr-блоке CU может указывать разность между Cr-выборкой в одном из прогнозирующих Cr-блоков CU и соответствующей выборкой в исходном Cr-блоке кодирования CU.
[0054] Кроме того, видеокодер 20 может использовать сегментацию на дерево квадрантов для того, чтобы разлагать остаточные блоки (например, остаточные блоки сигналов яркости, остаточные Cb-блоки и остаточные Cr-блоки) CU на один или более блоков преобразования (например, на блоки преобразования сигналов яркости, Cb-блоки преобразования и Cr-блоки преобразования). Блок преобразования может представлять собой прямоугольный блок выборок, к которым применяется идентичное преобразование. Единица преобразования (TU) CU может представлять собой блок преобразования выборок сигнала яркости, два соответствующих блока преобразования выборок сигнала цветности и синтаксические структуры, используемые для того, чтобы преобразовывать выборки блока преобразования. Таким образом, каждая TU CU может быть ассоциирована с блоком преобразования сигналов яркости, Cb-блоком преобразования и Cr-блоком преобразования. Блок преобразования сигналов яркости, ассоциированный с TU, может представлять собой субблок остаточного блока сигналов яркости CU. Cb-блок преобразования может представлять собой субблок остаточного Cb-блока CU. Cr-блок преобразования может представлять собой субблок остаточного Cr-блока CU.
[0055] Видеокодер 20 может применять одно или более преобразований к блоку преобразования для того, чтобы формировать блок коэффициентов для TU. Блок коэффициентов может представлять собой двумерный массив коэффициентов преобразования. Коэффициент преобразования может быть скалярной величиной. Например, видеокодер 20 может применять одно или более преобразований к блоку преобразования сигналов яркости TU для того, чтобы формировать блок коэффициентов сигнала яркости для TU. Видеокодер 20 может применять одно или более преобразований к Cb-блоку преобразования TU для того, чтобы формировать Cb-блок коэффициентов для TU. Видеокодер 20 может применять одно или более преобразований к Cr-блоку преобразования TU для того, чтобы формировать Cr-блок коэффициентов для TU.
[0056] После формирования блока коэффициентов (например, блока коэффициентов сигнала яркости, Cb-блока коэффициентов или Cr-блока коэффициентов), видеокодер 20 может квантовать блок коэффициентов. Квантование, в общем, означает процесс, в котором коэффициенты преобразования квантуются, чтобы, возможно, уменьшать объем данных, используемых для того, чтобы представлять коэффициенты преобразования, обеспечивая дополнительное сжатие. После того, как видеокодер 20 квантует блок коэффициентов, видеокодер 20 может энтропийно кодировать элементы синтаксиса, указывающие квантованные коэффициенты преобразования. Например, видеокодер 20 может выполнять контекстно-адаптивное двоичное арифметическое кодирование (CABAC) для элементов синтаксиса, указывающих квантованные коэффициенты преобразования. Видеокодер 20 может выводить энтропийно кодированные элементы синтаксиса в потоке битов. Поток битов также может включать в себя элементы синтаксиса, которые не кодируются энтропийно.
[0057] Видеокодер 20 может выводить поток битов, который включает в себя энтропийно кодированные элементы синтаксиса. Поток битов может включать в себя последовательность битов, которая формирует представление кодированных изображений и ассоциированных данных. Поток битов может содержать последовательность единиц уровня абстрагирования от сети (NAL). Каждая из NAL-единиц включает в себя заголовок NAL-единицы и инкапсулирует первичную байтовую последовательность данных (RBSP). Заголовок NAL-единицы может включать в себя элемент синтаксиса, который указывает код типа NAL-единицы. Код типа NAL-единицы, указываемый посредством заголовка NAL-единицы для NAL-единицы, указывает тип NAL-единицы. RBSP может представлять собой синтаксическую структуру, содержащую целое число байтов, которое инкапсулируется в NAL-единице. В некоторых случаях, RBSP включает в себя нулевые биты.
[0058] Различные типы NAL-единиц могут инкапсулировать различные типы RBSP. Например, первый тип NAL-единицы может инкапсулировать RBSP для набора параметров изображения (PPS), второй тип NAL-единицы может инкапсулировать RBSP для кодированной серии последовательных макроблоков, третий тип NAL-единицы может инкапсулировать RBSP для дополнительной улучшающей информации (SEI) и т.д. NAL-единицы, которые инкапсулируют RBSP для данных кодирования видео (в противоположность RBSP для наборов параметров и SEI-сообщений), могут упоминаться в качестве NAL-единиц слоя кодирования видео (VCL).
[0059] Видеодекодер 30 может принимать поток битов, сформированный посредством видеокодера 20. Помимо этого, видеодекодер 30 может получать элементы синтаксиса из потока битов. Например, видеодекодер 30 может синтаксически анализировать поток битов, чтобы декодировать элементы синтаксиса из потока битов. Видеодекодер 30 может восстанавливать изображения видеоданных, по меньшей мере, частично на основе элементов синтаксиса, полученных (к примеру, декодированных) из потока битов. Процесс для того, чтобы восстанавливать видеоданные, в общем, может быть обратным по отношению к процессу, выполняемому посредством видеокодера 20. Например, видеодекодер 30 может использовать MV PU для того, чтобы определять прогнозирующие блоки выборок (т.е. прогнозирующие блоки) для PU текущей CU. Помимо этого, видеодекодер 30 может обратно квантовать блоки коэффициентов преобразования, ассоциированные с TU текущей CU. Видеодекодер 30 может выполнять обратные преобразования для блоков коэффициентов преобразования для того, чтобы восстанавливать блоки преобразования, ассоциированные с TU текущей CU. Видеодекодер 30 может восстанавливать блоки кодирования текущей CU посредством суммирования выборок прогнозирующих блоков выборок для PU текущей CU с соответствующими выборками блоков преобразования TU текущей CU. Посредством восстановления блоков кодирования для каждой CU изображения видеодекодер 30 может восстанавливать изображение.
[0060] В некоторых примерах, видеокодер 20 и видеодекодер 30 могут быть выполнены с возможностью осуществлять кодирование на основе палитр. Например, при кодировании на основе палитр, вместо выполнения технологий внутреннего прогнозирующего или взаимного прогнозирующего кодирования, описанных выше, видеокодер 20 и видеодекодер 30 могут кодировать так называемую палитру в качестве таблицы цветов или пиксельных значений, представляющих видеоданные конкретной области (например, данного блока). Таким образом, вместо кодирования фактических пиксельных значений или их остатков для текущего блока видеоданных, видеокодер может кодировать значения индекса для одного или более пиксельных значений текущего блока, причем значения индекса указывают записи в палитре, которые используются для того, чтобы представлять пиксельные значения текущего блока.
[0061] В одном примере, видеокодер 20 может кодировать блок видеоданных посредством определения палитры для блока, нахождения записи в палитре, имеющей значение, представляющее значение одного или более пикселов блока, и кодирования блока с помощью значений индекса, которые указывают запись в палитре, используемую для того, чтобы представлять одно или более пиксельных значений блока. В некоторых примерах, видеокодер 20 может передавать в служебных сигналах значения индекса в кодированном потоке битов. Видеодекодер может получать, из кодированного потока битов, палитру для блока, а также значения индекса для пикселов блока. Видеодекодер может связывать значения индекса пикселов с записями палитры, чтобы восстанавливать пиксельные значения блока.
[0062] В другом примере, видеокодер 20 может кодировать блок видеоданных посредством определения остаточных прогнозных значений для блока, определения палитры для блока, нахождения записи в палитре, имеющей значение, представляющее значение для одного или более остаточных прогнозных значений, и кодирования блока с помощью значений индекса, которые указывают запись в палитре, используемую для того, чтобы представлять остаточные прогнозные значения для блока. Видеодекодер 30 может получать, из кодированного потока битов, палитру для блока, а также значения индекса для остаточных прогнозных значений блока. Видеодекодер 30 может связывать значения индекса остаточных прогнозных значений с записями палитры, чтобы восстанавливать остаточные прогнозные значения блока. Остаточные прогнозные значения могут суммироваться с прогнозными значениями (например, полученными с использованием внутреннего или взаимного прогнозирования), чтобы восстанавливать пиксельные значения блока.
[0063] Как подробнее описано ниже, базовая идея касательно кодирования на основе палитр состоит в том, что, для данного блока видеоданных, который должен кодироваться, извлекается палитра, которая включает наиболее доминирующие пиксельные значения в текущем блоке. Например, палитра может означать число пиксельных значений, которые предположительно являются доминирующими и/или характерными для текущей CU. Видеокодер 20 может сначала передавать размер и элементы палитры в видеодекодер 30. Видеокодер 20 может кодировать пиксельные значения в данном блоке согласно определенному порядку сканирования. Для каждого пиксельного местоположения в данном блоке, видеокодер 20 может передавать флаг или другой элемент синтаксиса, чтобы указывать то, включено пиксельное значение в пиксельном местоположении в палитру или нет. Если пиксельное значение находится в палитре (т.е. существует запись палитры, которая указывает пиксельное значение), видеокодер 20 может передавать в служебных сигналах значение индекса, ассоциированное с пиксельным значением для пиксельного местоположения в данном блоке, после чего передавать в служебных сигналах "серию" подобнозначных последовательных пиксельных значений в данном блоке. В этом случае, видеокодер 20 не передает флаг или индекс палитры для следующих пиксельных местоположений, которые охватываются "серией", поскольку они имеют идентичное пиксельное значение.
[0064] Если пиксельное значение не находится в палитре (т.е. не существует записи палитры, которая указывает пиксельное значение), видеокодер 20 может передавать пиксельное значение или остаточное значение (или его квантованные версии) для данного пиксельного местоположения в данном блоке. Видеодекодер 30 может сначала определять палитру на основе информации, принимаемой из видеокодера 20. Видеодекодер 30 затем может преобразовывать принятые значения индекса, ассоциированные с пиксельными местоположениями в данном блоке, в записи палитры, чтобы восстанавливать пиксельные значения данного блока.
[0065] Кодирование на основе палитр может иметь определенный объем служебной информации. Например, определенное число битов может требоваться для того, чтобы передавать в служебных сигналах в характеристики палитры, такие как размер палитры, а также саму палитру. Помимо этого, определенное число битов может требоваться для того, чтобы передавать в служебных сигналах значения индекса для пикселов блока. Технологии этого раскрытия сущности могут, в некоторых примерах, уменьшать число битов, требуемое для того, чтобы передавать в служебных сигналах эту информацию. Например, технологии, описанные в этом раскрытии сущности, могут включать в себя технологии для различных комбинаций одного или более из передачи в служебных сигналах режимов кодирования на основе палитр, передачи палитр, прогнозирования палитр, извлечения палитр или передачи карт кодирования на основе палитр и других элементов синтаксиса. Конкретные технологии этого раскрытия сущности могут реализовываться в видеокодере 20 и/или видеодекодере 30.
[0066] Аспекты этого раскрытия сущности направлены на палитровое прогнозирование. Например, согласно аспектам этого раскрытия сущности, видеокодер 20 и/или видеодекодер 30 может определять первую палитру, имеющую первый набор записей, указывающих первые пиксельные значения. Видеокодер 20 и/или видеодекодер 30 затем может определять, на основе первого набора записей первой палитры, второй набор записей, указывающих вторые пиксельные значения второй палитры. Видеокодер 20 и/или видеодекодер 30 также может кодировать пикселы блока видеоданных с использованием второй палитры (т.е. с использованием второго набора пиксельных значений).
[0067] При определении второго набора записей второй палитры на основе первого набора записей, видеокодер 20 может кодировать множество элементов синтаксиса, которые могут использоваться посредством видеодекодера 30, чтобы восстанавливать вторую палитру. Например, видеокодер 20 может кодировать один или более элементов синтаксиса в потоке битов, чтобы указывать то, что вся палитра (или палитры, в случае каждого цветового компонента, например, Y, Cb, Cr или Y, U, V или R, G, B видеоданных, имеющих отдельную палитру) прогнозируется (например, копируется) из одного или более соседних блоков относительно блока, в данный момент кодируемого.
[0068] Палитра, из которой прогнозируются (например, копируются) записи текущей палитры текущего блока, может упоминаться в качестве прогнозирующей палитры. Прогнозирующая палитра может содержать записи палитры из одного или более соседних блоков, включающих в себя пространственно соседние блоки и/или соседние блоки в конкретном порядке сканирования блоков. Например, соседние блоки могут пространственно находиться слева (левый соседний блок) или выше (верхний соседний блок) относительно блока, в данный момент кодируемого. В другом примере, видеокодер 20 может определять записи прогнозирующей палитры с использованием самых частых выборочных значений в причинно-следственном окружении текущего блока. В другом примере, соседние блоки могут граничить с блоком, в данный момент кодируемым, согласно конкретному порядку сканирования, используемому для того, чтобы кодировать блоки. Иными словами, соседние блоки могут представлять собой один или более блоков, кодированных до текущего блока в порядке сканирования. Видеокодер 20 может кодировать один или более элементов синтаксиса, чтобы указывать местоположение соседних блоков, из которых копируются палитры.
[0069] В некоторых примерах, палитровое прогнозирование может выполняться для каждой записи. Например, видеокодер 20 может кодировать один или более элементов синтаксиса, чтобы указывать для каждой записи прогнозирующей палитры то, включена или нет данная запись палитры в текущую палитру для текущего блока. Если видеокодер 20 не использует прогнозирование для того, чтобы заполнять запись текущей палитры для текущего блока, видеокодер 20 может кодировать один или более дополнительных элементов синтаксиса, чтобы указывать непрогнозные записи, а также число таких записей, в текущей палитре для текущего блока.
[0070] Как описано выше, для текущего блока, например, CU или PU, записи в ее палитре могут прогнозироваться из записей в прогнозирующей палитре, включающих в себя записи палитры из одного или более ранее кодированных соседних блоков. Это раскрытие сущности описывает несколько альтернативных технологий для того, чтобы прогнозировать палитру для текущего блока.
[0071] В одном примере, прогнозирующая палитра включает в себя число записей, N. В этом примере, видеокодер 20 сначала передает двоичный вектор, V, имеющий размер, идентичный размеру прогнозирующей палитры, т.е. вектор размера N, в видеодекодер 30. Каждая запись в двоичном векторе указывает то, должна или нет соответствующая запись в прогнозирующей палитре многократно использоваться или копироваться в текущую палитру для текущего блока. Например, видеокодер 20 может кодировать один или более элементов синтаксиса, включающих в себя двоичный вектор. В некоторых случаях, видеокодер 20 кодирует двоичный вектор, включающий в себя однобитовый флаг для каждой из записей палитры в прогнозирующей палитре, который указывает то, копируется или нет соответствующая запись палитры в текущую палитру. В других случаях, видеокодер 20 кодирует сжатый без потерь двоичный вектор, в котором индикаторы для записей в двоичном векторе сжимаются или комбинируются вместе вместо отправки по отдельности в качестве однобитовых флагов. Таким образом, видеодекодер 30 определяет одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру.
[0072] Помимо этого, видеокодер 20 передает число, M, которое указывает то, сколько новых записей должно быть включено в палитру для текущего блока, и затем передает пиксельные значения для новых записей в видеодекодер 30. Например, видеокодер 20 может кодировать один или более элементов синтаксиса, указывающих число новых записей палитры, которые включены в текущую палитру, с использованием одного из унарных кодов, усеченных унарных кодов, экспоненциальных кодов Голомба или кодов Голомба-Райса. Таким образом, видеодекодер 30 определяет число новых записей палитры не в прогнозирующей палитре, которые включены в текущую палитру для текущего блока.
[0073] В этом примере, конечный размер текущей палитры для текущего блока может извлекаться как равный M+S, где S является числом записей в прогнозирующей палитре, которые многократно использованы в палитре для текущего блока. Видеодекодер 30 может вычислять размер текущей палитры как равный сумме числа скопированных записей палитры и числа новых записей палитры. После того, как определяется размер текущей палитры, видеодекодер 30 формирует текущую палитру, включающую в себя скопированные записи палитры из прогнозирующей палитры и новые записи палитры, явно передаваемые в служебных сигналах из видеокодера 20.
[0074] Для того, чтобы формировать палитру для текущего блока, видеодекодер 30 может объединять принятые M новых записей палитры и S скопированных записей палитры, которые многократно используются из прогнозирующей палитры. В некоторых случаях, объединение может быть основано на пиксельных значениях, так что записи в палитре для текущего блока могут увеличиваться (или уменьшаться) с индексом палитры, например, когда отдельная палитра используется для каждого компонента. В других случаях, объединение может быть конкатенацией двух наборов записей, т.е. скопированных записей палитры и новых записей палитры.
[0075] В другом примере, видеокодер 20 сначала передает индикатор относительно размера палитры, N, для текущего блока в видеодекодер 30. Видеокодер 20 затем передает вектор, V, имеющий размер, идентичный размеру палитры для текущего блока, т.е. вектор размера N, в видеодекодер 30. Каждая запись в векторе указывает то, передается соответствующая запись в палитре для текущего блока явно посредством видеокодера 20 или копируется из прогнозирующей палитры. Для записей, которые копируются из прогнозирующей палитры, видеокодер 20 может использовать различные способы передавать в служебных сигналах то, какая запись в прогнозирующей палитре используется в палитре для текущего блока. В некоторых случаях, видеокодер 20 может передавать в служебных сигналах индекс палитры, указывающий запись, которая должна быть скопирована из прогнозирующей палитры в палитру для текущего блока. В других случаях, видеокодер 20 может передавать в служебных сигналах смещение индекса, которое является разностью между индексом в палитре для текущего блока и индексом в прогнозирующей палитре.
[0076] В двух вышеприведенных примерах, один или более ранее кодированных соседних блоков, из которых формируется прогнозирующая палитра, используемая для прогнозирования текущей палитры для текущего блока, могут представлять собой пространственно соседние блоки относительно текущего блока и/или соседние блоки относительно текущего блока в конкретном порядке сканирования блоков. Например, соседние блоки могут пространственно находиться выше (т.е. верхние соседние блоки) или слева (т.е. левые соседние блоки) относительно текущего блока. В некоторых примерах, может составляться список возможных вариантов соседних блоков, и видеокодер 20 передает индекс, чтобы указывать один или более возможных вариантов соседних блоков, и ассоциированные палитры используются для того, чтобы формировать прогнозирующую палитру.
[0077] Для определенных блоков, например, CU в начале серии последовательных макроблоков или на других границах серий последовательных макроблоков либо для самых левых CU серии последовательных макроблоков или изображения видеоданных, может деактивироваться палитровое прогнозирование. Например, когда текущий блок видеоданных содержит один или первый блок в серии последовательных макроблоков видеоданных либо самый левый блок серии последовательных макроблоков или изображения видеоданных, видеокодер 20 и/или видеодекодер 30 может деактивировать копирование записей палитры в палитре прогнозирования в текущую палитру для текущего блока.
[0078] В дополнительном примере, видеокодер 20 передает индикатор относительно числа записей, включенных в палитру для текущего блока, в видеодекодер 30. Затем для каждой из записей палитры видеокодер 20 передает флаг или другой элемент синтаксиса, чтобы указывать то, передана или нет запись палитры для палитры для текущего блока явно посредством видеокодера 20, либо то, извлекается или нет запись палитры из ранее восстановленного пиксела. Для каждой из записей палитры для палитры для текущего блока, которые извлекаются из ранее восстановленного пиксела, видеокодер 20 передает другой индикатор относительно пиксельного местоположения восстановленного пиксела в текущем блоке или пиксельного местоположения восстановленного пиксела в соседнем блоке, который соответствует записи палитры. В некоторых случаях, индикатор местоположения восстановленного пиксела может быть вектором смещения относительно левой верхней позиции текущего блока. В других случаях, индикатор местоположения восстановленного пиксела может быть индексом в списке восстановленных пикселов, который может использоваться для указания записи палитры для текущего блока. Например, этот список может включать в себя все опорные пикселы, которые могут использоваться для нормального внутреннего прогнозирования в HEVC.
[0079] В некоторых примерах, технологии для прогнозирования всей палитры могут быть комбинированы с технологиями для прогнозирования одной или более записей палитры. Например, видеокодер 20 может кодировать один или более элементов синтаксиса в потоке битов, чтобы указывать то, копируется или нет текущая палитра полностью из прогнозирующей палитры (например, из палитры для последнего кодированного блока палитры). В ином случае, видеокодер 20 может кодировать один или более элементов синтаксиса в потоке битов, чтобы указывать то, копируется или нет каждая запись в прогнозирующей палитре.
[0080] В некоторых случаях, размер палитры может быть фиксированным значением, указываемым в стандарте кодирования видео, применяемом посредством видеокодера 20 и видеодекодера 30, или может передаваться в служебных сигналах из видеокодера 20 в видеодекодер 30. В случае если каждый из цветовых компонентов имеет отдельную палитру, видеокодер 20 может отдельно передавать в служебных сигналах размеры для различных палитр. В случае одной палитры для всех цветовых компонентов, видеокодер 20 может кодировать один размер для одной палитры. В другом примере, вместо передачи в служебных сигналах числа записей и значений палитры, видеокодер 20 может передавать в служебных сигналах, после передачи в служебных сигналах каждого значения палитры, флаг, чтобы указывать то, является или нет передаваемое в служебных сигналах значение палитры конечной записью палитры для палитры. Видеокодер 20 не может передавать в служебных сигналах такой флаг "конец палитры", если палитра уже достигла определенного максимального размера.
[0081] Видеокодер 20 может кодировать один или более элементов синтаксиса, чтобы указывать то, является или нет палитровое прогнозирование активированным и/или активным. В примере для целей иллюстрации, видеокодер 20 может кодировать pred_palette_flag, чтобы указывать для каждого блока (например, CU или PU) то, использует или нет видеокодер 20 палитровое прогнозирование для того, чтобы прогнозировать палитру для соответствующего блока. В некоторых примерах, видеокодер может передавать в служебных сигналах отдельный флаг для каждого цветового компонента (например, три флага для каждого блока). В других примерах, видеокодер 20 может передавать в служебных сигналах один флаг, который является применимым ко всем цветовым компонентам блока.
[0082] Видеодекодер 30 может получать вышеобозначенную информацию из кодированного потока битов и может использовать информацию для того, чтобы восстанавливать палитру. Например, видеодекодер 30 может принимать данные, указывающие то, прогнозируется или нет конкретная палитра из другой палитры, а также информацию, которая дает возможность видеодекодеру 30 использовать надлежащие записи прогнозирующей палитры.
[0083] В некоторых случаях, дополнительно или альтернативно, видеокодер 20 и/или видеодекодер 30 может составлять палитру "на лету", т.е. динамически. Например, видеокодер 20 и/или видеодекодер 30 может добавлять записи в пустую палитру во время кодирования. Иными словами, видеокодер 20 может добавлять пиксельные значения в палитру по мере того, как пиксельные значения формируются и передаются для позиций в блоке. Пикселы (например, пикселы, имеющие значения, которые ранее добавлены и индексированы в палитре), которые кодируются относительно позднее в блоке, могут ссылаться на ранее добавленные записи палитры, например, со значениями индекса, ассоциированными с пиксельными значениями, вместо передачи пиксельных значений. Аналогично, после приема нового пиксельного значения для позиции в блоке, видеодекодер 30 может придерживаться процесса, идентичного процессу видеокодера 20, и включать пиксельное значение в палитру. Таким образом, видеодекодер 30 составляет палитру, идентичную палитре видеокодера 20. Видеодекодер 30 может принимать для пикселов, имеющих значения, которые уже включены в палитру, значения индекса, которые идентифицируют пиксельные значения. Видеодекодер 30 может использовать принимаемую информацию, например, пиксельные значения для палитры и/или значений индекса для того, чтобы восстанавливать пикселы блока.
[0084] В некоторых случаях, видеокодер 20 и видеодекодер 30 могут поддерживать палитру фиксированного размера. Например, видеокодер 20 и видеодекодер 30 могут добавлять последние восстановленные пиксельные значения в палитру. Для каждой записи, которая добавляется в палитру, запись, которая добавлена в палитру самой ранней, отбрасывается. Это также иногда упоминается как "первый на входе - первый на выходе" (FIFO). Этот процесс обновления палитры может применяться только к блокам, которые кодируются с использованием палитрового режима, или ко всем блокам независимо от режима кодирования.
[0085] Технологии, описанные выше, в общем, относятся к составлению и/или передаче посредством видеокодера 20 и видеодекодера 30 палитры для кодирования на основе палитр. Другие аспекты этого раскрытия сущности относятся к составлению и/или передаче карты, которая дает возможность видеокодеру 20 и/или видеодекодеру 30 определять пиксельные значения. Например, другие аспекты этого раскрытия сущности относятся к составлению и/или передаче карты индексов, которые указывают записи в палитре, которые указывают пиксельные значения блока видеоданных.
[0086] В некоторых примерах, видеокодер 20 может указывать то, имеют или нет пикселы блока соответствующее значение в палитре. В примере для целей иллюстрации, допустим, что запись (i, j) карты соответствует пиксельной позиции (i, j) в блоке видеоданных. В этом примере, видеокодер 20 может кодировать флаг для каждой пиксельной позиции блока. Видеокодер 20 может задавать флаг равным единице для записи (i, j), чтобы указывать то, что пиксельное значение в местоположении (i, j) является одним из значений в палитре. Когда пиксельное значение включено в палитру (т.е. флаг равен единице), видеокодер 20 также может кодировать данные, указывающие индекс палитры для записи (i, j), который идентифицирует соответствующую запись в палитре, которая указывает пиксельное значение. Когда пиксельное значение не включено в палитру (т.е. флаг равен нулю), видеокодер 20 также может кодировать данные, указывающие выборочное значение (возможно квантованное) для пиксела. В некоторых случаях, пиксел, который не включен в палитру, упоминается в качестве "управляющего пиксела".
[0087] Видеодекодер 30 может получать вышеописанные данные из кодированного потока битов и использовать данные для того, чтобы определять индекс палитры и/или пиксельное значение для конкретного местоположения в блоке. Например, видеодекодер 30 может декодировать один или более элементов синтаксиса, указывающих то, имеет или нет каждое из пиксельных значений текущего блока соответствующее пиксельное значение в текущей палитре, декодировать один или более элементов синтаксиса, указывающих значения индекса для одного или более пиксельных значений текущего блока, которые имеют соответствующие пиксельные значения в текущей палитре, и декодировать один или более элементов синтаксиса, указывающих пиксельные значения для одного или более пиксельных значений текущего блока, которые не имеют соответствующего пиксельного значения в текущей палитре.
[0088] В некоторых случаях, может возникать корреляция между индексом палитры, в который преобразуется пиксел в данной позиции, и вероятностью преобразования соседнего пиксела в идентичный индекс палитры. Иными словами, когда пиксел преобразуется в конкретный индекс палитры, может быть относительно высокая вероятность того, что один или более соседних пикселов (с точки зрения пространственного местоположения) преобразуются в идентичный индекс палитры.
[0089] Согласно аспектам этого раскрытия сущности, видеокодер 20 и/или видеодекодер 30 может определять и кодировать один или более индексов блока видеоданных относительно одного или более индексов идентичного блока видеоданных. Например, видеокодер 20 и/или видеодекодер 30 может быть выполнен с возможностью определять первое значение индекса, ассоциированное с первым пикселом в блоке видеоданных, причем первое значение индекса связывает значение первого пиксела с записью палитры. Видеокодер 20 и/или видеодекодер 30 также может быть выполнен с возможностью определять, на основе первого значения индекса, одно или более вторых значений индекса, ассоциированных с одним или более вторых пикселов в блоке видеоданных, и кодировать первый и один или более вторых пикселов блока видеоданных. Таким образом, в этом примере, индексы карты могут кодироваться относительно одного или более других индексов карты.
[0090] В некоторых примерах, видеокодер 20 может кодировать один или более элементов синтаксиса, указывающих число последовательных пикселов в данном порядке сканирования, которые преобразуются в идентичное значение индекса. Строка подобнозначных значений индекса может упоминаться в данном документе как "серия". В некоторых примерах, пиксельное значение может быть ассоциировано точно с одним значением индекса в палитре. Соответственно, в некоторых случаях, серия значений также может ссылаться на строку подобнозначных пиксельных значений. В других примерах, как описано относительно кодирования с потерями ниже, более одного пиксельного значения могут преобразовываться в идентичное значение индекса в палитре. В таких примерах, серия значений ссылается на подобнозначные значения индекса. В этом сценарии, на стороне декодера, серия подобнозначных значений индекса может соответствовать сериям пиксельных значений, которые соответствуют значениям индекса.
[0091] В примере для целей иллюстрации, если два последовательных индекса в данном порядке сканирования имеют различные значения, серия равна нулю. Если два последовательных индекса в данном порядке сканирования имеют идентичное значение, но третий индекс в порядке сканирования имеет другое значение, серия равна единице. Видеодекодер 30 может получать элементы синтаксиса, указывающие серию, из кодированного потока битов и может использовать данные, указываемые посредством элементов синтаксиса, для того чтобы определять число последовательных пиксельных местоположений, которые имеют идентичное значение индекса.
[0092] В некоторых примерах, все пиксельные местоположения в текущем блоке, имеющие пиксельные значения, которые находятся в палитре для текущего блока, кодируются с индексом палитры, после которого следует "серия" пиксельного значения в последовательных пиксельных местоположениях. В случае, когда существует только одна запись в палитре, передача индекса палитры или "серии" может пропускаться для текущего блока. В случае если пиксельное значение в одном из пиксельных местоположений в текущем блоке не имеет точного совпадения с пиксельным значением в палитре, видеокодер 20 может выбирать одну из записей палитры, имеющих ближайшее пиксельное значение, и вычислять ошибку прогнозирования или остаточное значение между исходным пиксельным значением и прогнозным пиксельным значением, включенным в палитру. Видеокодер 20 может квантовать, кодировать и передавать остаточное значение для пиксельного местоположения в видеодекодер 30.
[0093] Видеодекодер 30 затем может получать пиксельное значение в пиксельном местоположении на основе соответствующего принимаемого индекса палитры. Полученное пиксельное значение и остаточное значение (принятые из видеокодера 20) затем используются для того, чтобы прогнозировать пиксельное значение в пиксельном местоположении в текущем блоке. В одном примере, остаточное значение кодируется с использованием HEVC-способа, указываемого посредством HEVC-проекта 10, такого как применение остаточного дерева квадрантов (RQT) для того, чтобы преобразовывать остаточное значение, квантовать коэффициенты преобразования и энтропийно кодировать квантованные коэффициенты преобразования. В некоторых случаях, остаточные значения могут квантоваться непосредственно без применения преобразования. В качестве примера, видеодекодер 30 может декодировать один или более элементов синтаксиса, указывающих значения индекса для одного или более пиксельных значений текущего блока, причем значения индекса идентифицируют соответствующие пиксельные значения в текущей палитре в качестве прогнозных пиксельных значений, и декодировать один или более элементов синтаксиса, указывающих остаточные значения между одним или более пиксельными значениями текущего блока и идентифицированных прогнозных пиксельных значений в текущей палитре. В некоторых случаях, вышеприведенные примеры могут упоминаться в качестве кодирования с потерями.
[0094] Дополнительно или альтернативно, согласно аспектам этого раскрытия сущности, видеокодер 20 и видеодекодер 30 могут выполнять линейное копирование для одной или более записей карты. Записи также могут упоминаться в качестве "позиций" вследствие взаимосвязи между записями карты и пиксельными позициями блока. Линейное копирование может зависеть, в некоторых примерах, от направления сканирования. Например, видеокодер 20 может указывать то, что пиксельное значение или значение карты индексов для конкретной позиции в блоке равно пиксельному значению или значению индекса в линии выше (например, предшествующей) конкретной позиции (для горизонтально ориентированного сканирования) или в столбце слева (например, предшествующем) относительно конкретной позиции (для вертикально ориентированного сканирования). Видеокодер 20 также может указывать, в качестве серии, число пиксельных значений или индексов в порядке сканирования, которые равны пиксельным значениям или индексам в линии выше или в столбце слева относительно конкретной позиции. В этом примере, видеокодер 20 и/или видеодекодер 30 может копировать пиксельные значения или значения индекса из указанной соседней линии (либо столбца для вертикального сканирования) и для указанного числа записей для линии (либо столбца для вертикального сканирования) блока, в данный момент кодируемого.
[0095] В некоторых случаях, линия (или столбец для вертикального сканирования), из которой копируются значения, может быть непосредственно смежной, например, выше или слева, относительно линии (или столбца для вертикального сканирования) позиции, в данный момент кодируемой. В других примерах, число линий блока может быть буферизовано посредством видеокодера 20 и/или видеодекодера 30, так что любая из определенного числа линий карты может использоваться в качестве прогнозирующих значений для линии карты, в данный момент кодируемой. Аналогичные технологии могут применяться к предыдущим столбцам для вертикального сканирования. В примере для целей иллюстрации, видеокодер 20 и/или видеодекодер 30 может быть выполнен с возможностью сохранять предыдущие четыре строки индексов или пиксельных значений до кодирования текущей строки пикселов. В этом примере, прогнозирующая строка (строка, из которой копируются индексы или пиксельные значения) может указываться в потоке битов с усеченным унарным кодом или другими кодами, такими как унарные коды. Относительно усеченного унарного кода, видеокодер 20 и/или видеодекодер 30 может определять максимальное значение для усеченного унарного кода на основе вычисления максимальной строки (например, row_index-1) для горизонтальных сканирований или вычисления максимального столбца (например, column_index-1) для вертикальных сканирований. Помимо этого, индикатор относительно числа позиций из прогнозирующей строки, которые копируются, также может быть включен в поток битов. В некоторых случаях, если линия (или столбец в случае вертикальных сканирований), из которой прогнозируется текущая позиция, принадлежит другому блоку (например, CU или CTU), такое прогнозирование может деактивироваться.
[0096] В качестве другого примера, видеокодер 20 может передавать в служебных сигналах инструкцию, такую как "копирование из левой половины верхней линии" или "копирование из правой половины верхней линии", указывающую соседнюю линию и число или часть записей соседней линии, которые следует копировать в линию карты, в данный момент кодируемой. В качестве дополнительного примера, карта значений индекса может быть переупорядочена перед кодированием. Например, карта значений индекса может быть циклически сдвинута на 90, 180 или 270 градусов либо переворачиваться сверху вниз или слева направо, с тем чтобы повышать эффективность кодирования. Таким образом, любое сканирование может использоваться для того, чтобы преобразовывать двумерную матрицу пиксельных значений или значений индекса в одномерный массив.
[0097] Технологии для кодирования так называемых серий записей могут использоваться в сочетании с технологиями для линейного копирования, описанными выше. Например, видеокодер 20 может кодировать один или более элементов синтаксиса (например, флаг), указывающих то, получается значение записи на карте из палитры, либо значение записи на карте получается из ранее кодированной линии на карте. Видеокодер 20 также может кодировать один или более элементов синтаксиса, указывающих значение индекса палитры или местоположение записи в линии (строке или столбце). Видеокодер 20 также может кодировать один или более элементов синтаксиса, указывающих число последовательных записей, которые совместно используют идентичное значение. Видеодекодер 30 может получать эту информацию из кодированного потока битов и использовать информацию для того, чтобы восстанавливать карту и пиксельные значения для блока.
[0098] Как отмечено выше, индексы карты сканируются в конкретном порядке. Согласно аспектам этого раскрытия сущности, направление сканирования может быть вертикальным, горизонтальным или по диагонали (например, на 45 градусов или 135 градусов по диагонали в блоке). В некоторых примерах, видеокодер 20 может кодировать один или более элементов синтаксиса для каждого блока, указывающего направление сканирования для сканирования индексов блока. Дополнительно или альтернативно, направление сканирования может быть постоянным значением либо может передаваться в служебных сигналах или логически выводиться на основе так называемой вспомогательной информации, такой как, например, размер блока, цветовое пространство и/или цветовой компонент. Видеокодер 20 может указывать сканирования для каждого цветового компонента блока. Альтернативно, указанное сканирование может применяться ко всем цветовым компонентам блока.
[0099] В некоторых примерах, видеокодер 20 не может передавать серии подобнозначных значений индекса в данном порядке сканирования в видеодекодер 30. Вместо этого, видеокодер 20 и/или видеодекодер 30 может неявно извлекать значения серий для того, чтобы определять записи карты. В этом случае, видеокодер 20 может передавать в служебных сигналах в видеодекодер 30 то, что серия данного значения индекса возникает, но не может передавать в служебных сигналах значение серии. Например, значение серии может быть постоянным значением или может быть получено на основе вспомогательной информации для кодируемого текущего блока видеоданных, такой как, например, размер блока. В случае если значение серии зависит от размера блока, серия может быть равна ширине текущего блока, высоте текущего блока, полуширине (или полувысоте) текущего блока, части ширины и/или высоты текущего блока или кратному числу от ширины и/или высоты текущего блока. В некоторых примерах, видеокодер 20 может передавать в служебных сигналах значение серии в видеодекодер 30 с использованием высокоуровневого синтаксиса. В некоторых примерах, фраза "высокоуровневый синтаксис" означает синтаксис в наборах параметров, например, в наборах параметров изображения (PPS), в наборах параметров последовательности (SPS) и в наборах параметров видео (VPS) и в заголовках серий последовательных макроблоков.
[0100] Дополнительно или альтернативно, видеокодер 20, возможно, даже не должен передавать карту в видеодекодер 30. Вместо этого, видеокодер 20 и/или видеодекодер 30 может неявно извлекать начальную позицию или местоположение каждой серии значений индекса, включенных в карту. В одном примере, стандарт кодирования видео, применяемый посредством видеокодера 20 и/или видеодекодера 30, может определять то, что серия может начинаться только в определенных местоположениях. Например, серия может начинаться только в начале каждой строки или в начале каждой из N строк текущего блока. Начальное местоположение может отличаться для различных направлений сканирования. Например, если используется вертикальное сканирование, серия может начинаться только в начале столбца или в начале каждого из N столбцов текущего блока. В другом примере, начальное местоположение может извлекаться в зависимости от вспомогательной информации для текущего блока. В случае если начальное местоположение серии зависит от размера блока, начальное местоположение может быть средней точкой каждой строки и/или каждого столбца текущего блока или части каждой строки и/или столбца текущего блока. В некоторых примерах, видеокодер 20 может передавать в служебных сигналах начальную позицию в видеодекодер 30 с использованием высокоуровневого синтаксиса.
[0101] В некоторых примерах, неявное извлечение начальной позиции и неявное извлечение серии, каждое из которых описано выше, могут быть комбинированы. Например, видеокодер 20 и/или видеодекодер 30 может определять то, что серия подобнозначных значений индекса на карте равна расстоянию между двумя соседними начальными позициями. В случае если начальная позиция является началом (т.е. первой позицией) каждой строки текущего блока, в таком случае видеокодер 20 и/или видеодекодер 30 может определять то, что длина серии равна длине всей строки текущего блока.
[0102] В некоторых случаях, подробнее описанных ниже, одна палитра формируется и совместно используется для нескольких цветовых компонентов в текущем блоке. Например, для каждого пиксельного местоположения в текущем блоке, пиксельные значения в трех цветовых компонентах (например, в компонентах Y-сигнала яркости и U- и V-сигнала цветности) могут формировать вектор (т.е. цветовой вектор). Затем палитра может формироваться посредством выбора определенного числа векторов для того, чтобы представлять текущий блок. Может быть возможным иметь одну палитру пиксельных значений для компонента сигнала яркости и другую палитру пиксельных значений для компонентов сигнала цветности. Линейное копирование, подробнее описанное выше, также может работать с одной палитрой. Для совместно используемой палитры, запись палитры может быть триплетом (Y, U, V) или (Y, Cb, Cr), или (R, G, B). В этом случае, индекс палитры для каждого пиксельного местоположения передается в служебных сигналах как равный индексу палитры строки выше, если сканирование является горизонтальным, или столбца слева, если сканирование является вертикальным, и затем ассоциированное число индексов палитры также копируется из предыдущей строки или столбца на основе серии.
[0103] В случае либо совместно используемой палитры для двух или более цветовых компонентов, либо отдельных палитр для каждого из цветовых компонентов, геометрическая информация может совместно использоваться цветовыми компонентами. Обычно, возникает высокая корреляция между краевыми местоположениями совместно размещенных блоков в различных цветовых компонентах, поскольку компоненты сигнала цветности, возможно, понижающе дискретизированы из компонентов сигнала яркости предварительно заданным способом, таким как дискретизация 4:2:2 или 4:2:0.
[0104] Например, при кодировании на основе палитр, кодирование по сериям может использоваться для того, чтобы указывать геометрическую информацию для текущего блока, поскольку край текущего блока разрывает серию. В случае формата сигнала цветности 4:4:4, серия может формироваться один раз и использоваться для всех цветовых компонентов. Серия может формироваться на основе одного из цветовых компонентов, или серия может формироваться с использованием более чем одного из цветовых компонентов. В случае формата сигнала цветности 4:2:2 или формата сигнала цветности 4:2:0, серия, используемая для компонента сигнала яркости, может понижающе дискретизироваться для применения к компонентам сигнала цветности.
[0105] Технологии этого раскрытия сущности также включают в себя другие аспекты кодирования на основе палитр. Например, согласно аспектам этого раскрытия сущности, видеокодер 20 и/или видеодекодер 30 может кодировать один или более элементов синтаксиса для каждого блока, чтобы указывать то, что блок кодируется с использованием режима палитрового кодирования. Например, видеокодер 20 и/или видеодекодер 30 может кодировать флаг палитрового режима (PLT_Mode_flag), чтобы указывать то, должен или нет режим кодирования на основе палитр использоваться для кодирования конкретного блока. В этом примере, видеокодер 20 может кодировать PLT_Mode_flag, который равен единице, чтобы указывать то, что блок, в данный момент кодируемый ("текущий блок"), кодируется с использованием палитрового режима. Значение PLT_Mode_flag, равное нулю, указывает то, что текущий блок не кодируется с использованием палитрового режима. В этом случае, видеодекодер 30 может получать PLT_Mode_flag из кодированного потока битов и применять режим кодирования на основе палитр для того, чтобы декодировать блок. В случаях, в которых доступно более одного режима кодирования на основе палитр (например, доступно более одной технологии на основе палитр для кодирования), один или более элементов синтаксиса могут указывать один из множества различных палитровых режимов для блока.
[0106] В некоторых случаях, видеокодер 20 может кодировать PLT_Mode_flag, который равен нулю, чтобы указывать то, что текущий блок не кодируется с использованием палитрового режима. В таких случаях, видеокодер 20 может кодировать блок с использованием любого из множества взаимных прогнозирующих, внутренних прогнозирующих или других режимов кодирования. Когда PLT_Mode_flag равен нулю, видеокодер 20 может передавать дополнительную информацию (например, элементы синтаксиса), чтобы указывать конкретный режим, который используется для кодирования соответствующего блока. В некоторых примерах, как описано ниже, режим может представлять собой режим HEVC-кодирования, например, регулярный взаимный прогнозирующий режим или внутренний прогнозирующий режим в HEVC-стандарте. Использование PLT_Mode_flag описывается для целей примера. В других примерах, другие элементы синтаксиса, к примеру, многобитовые коды могут использоваться для того, чтобы указывать то, должен или нет режим кодирования на основе палитр использоваться для одного или более блоков, либо указывать то, какой из множества режимов должно использоваться.
[0107] Когда используется режим кодирования на основе палитр, палитра передается посредством видеокодера 20, например, с использованием одной или более технологий, описанных в данном документе, в потоке битов кодированных видеоданных для использования посредством видеодекодера 30. Палитра может передаваться для каждого блока или может совместно использоваться определенным числом блоков. Палитра может означать число пиксельных значений, которые являются доминирующими и/или характерными для блока.
[0108] Размер палитры, например, с точки зрения числа пиксельных значений, которые включены в палитру, может быть фиксированным или может передаваться в служебных сигналах с использованием одного или более элементов синтаксиса в кодированном потоке битов. Как подробнее описано ниже, пиксельное значение может состоять из числа выборок, например, в зависимости от цветового пространства, используемого для кодирования. Например, пиксельное значение может включать в себя выборки сигнала яркости и сигнала цветности (например, выборки сигнала яркости, U-сигнала цветности и V-сигнала цветности (YUV) или сигнала яркости, Cb-сигнала цветности и Cr-сигнала цветности (YCbCr)). В другом примере, пиксельное значение может включать в себя выборки красного, зеленого и синего цветов (RGB). Как описано в данном документе, термин "пиксельное значение", в общем, может означать одну или более выборок, способствующих пикселу. Иными словами, термин "пиксельное значение" не обязательно означает все выборки, способствующие пикселу, и может использоваться для того, чтобы описывать одно выборочное значение, способствующее пикселу.
i
i
i
[0109] В некоторых примерах, палитра может передаваться отдельно для каждого цветового компонента конкретного блока. Например, в цветовом YUV-пространстве, может быть предусмотрена палитра для Y-компонента (представляющего Y-значения), другая палитра для U-компонента (представляющего U-значения) и еще одна другая палитра для V-компонента (представляющего V-значения). В другом примере, палитра может включать в себя все компоненты конкретного блока. В этом примере, i-ая запись в палитре может включать в себя три значения (например, Y, U, V). Согласно аспектам этого раскрытия сущности, один или более элементов синтаксиса могут отдельно указывать размер палитры для каждого компонента (например, Y, U, V и т.п.). В других примерах, один размер может использоваться для всех компонентов, так что один или более элементов синтаксиса указывают размер всех компонентов.
[0110] Видеокодер 20 и/или видеодекодер 30 может выполнять кодирование на основе палитр без потерь или с потерями. Иными словами, в некоторых примерах, видеокодер 20 и/или видеодекодер 30 может кодировать без потерь видеоданные для блока с использованием записей палитры, которые совпадают с пиксельными значениями блока (или посредством отправки фактических пиксельных значений, если пиксельное значение не включено в палитру). В других примерах, как подробнее описано относительно фиг. 5 ниже, видеокодер 20 и/или видеодекодер 30 может кодировать видеоданные для блока с использованием записей палитры, которые точно не совпадают с пиксельными значениями блока (кодирование с потерями). Аналогично, если фактическое пиксельное значение не включено в палитру, фактическое пиксельное значение может квантоваться с потерями.
[0111] Согласно технологиям, описанным в этом раскрытии сущности, видеокодер 20 и/или видеодекодер 30 может выполнять кодирование на основе палитр прогнозных видеоблоков. В одном примере, видеокодер 20 сначала извлекает палитру для текущего блока на основе пиксельных значений в текущем блоке и затем преобразует пиксельные значения в текущем блоке в индексы палитры для кодирования. Преобразование может быть "один-к-одному" (т.е. для кодирования без потерь) или "несколько-к-одному" (т.е. для кодирования с потерями). Видеокодер 20 также преобразует опорные пиксельные значения в ранее кодированный блок, который используется для того, чтобы прогнозировать пиксельные значения в текущем блоке. После того, как пиксельные значения текущего блока преобразованы в индексы палитры, видеокодер 20 может кодировать текущий блок с помощью индексов палитры с использованием способов регулярного кодирования, например, регулярного внутреннего кодирования в HEVC-стандарте.
[0112] В вышеприведенном примере, текущий блок с индексами палитры трактуется так, как если текущий блок представляет собой исходный блок с пиксельными значениями. Аналогично, индексы палитры опорных пикселов используются для выполнения регулярного внутреннего прогнозирования для текущего блока с индексами палитры. Видеокодер 20 передает ошибку прогнозирования или остаточные значения в видеодекодер 30. После кодирования текущего блока, видеокодер 20 преобразует индексы опорных пикселов, прогнозных пикселов и остаточных значений обратно в пиксельные значения для восстановления текущего блока и нормального прогнозирования будущих блоков. Видеодекодер 30 может получать кодированные остаточные значения для текущего блока из потока битов и декодировать текущий блок с использованием способа регулярного декодирования, чтобы получать текущий блок с индексами палитры. Видеодекодер 30 затем может определять пиксельные значения текущего блока на основе пиксельных значений в палитре, которые ассоциированы с индексами палитры.
[0113] В другом примере, видеокодер 20 может формировать палитру для текущего блока, причем палитра включает в себя записи, которые указывают остаточные прогнозные значения для данного блока. Остаточные прогнозные значения для данного блока могут формироваться с использованием любого режима прогнозирования, например, регулярного взаимного прогнозирования или внутреннего прогнозирования в HEVC-стандарте. Остаточные прогнозные значения для данного блока могут быть остаточными пиксельными значениями или значениями остаточных коэффициентов преобразования. В любом случае, остаточные прогнозные значения могут квантоваться. В этом примере, видеокодер 20 преобразует остаточные прогнозные значения для текущего блока в значения индекса, которые указывают записи в палитре для текущего блока, используемые для того, чтобы представлять остаточные прогнозные значения для текущего блока, и кодирует остаточные прогнозные значения с использованием значений индекса. Видеодекодер 30 может получать блок значений индекса из потока битов и определять остаточные прогнозные значения для текущего блока на основе соответствующих остаточных прогнозных значений в палитре, которые идентифицируются посредством значений индекса. Видеодекодер 30 затем может восстанавливать пиксельные значения текущего блока с использованием способов регулярного декодирования на основе остаточных прогнозных значений и ранее кодированных опорных пиксельных значений.
[0114] В некоторых примерах, видеокодер 20 и/или видеодекодер 30 может выполнять кодирование видео на основе палитр с прогнозированием на основе видеоблоков посредством применения режима внутреннего прогнозирования (т.е. прогнозирование использует только информацию ранее кодированных пикселов в текущем изображении). В других случаях, видеокодер 20 и/или видеодекодер 30 может применять режим взаимного прогнозирования (т.е. прогнозирования из пикселов в ранее кодированном изображении). В некоторых случаях, видеокодер 20 и/или видеодекодер 30 может определять остаточные прогнозные значения для текущего блока с использованием только поднабора процессов на основе режима прогнозирования либо для режима взаимного прогнозирования, либо для режима внутреннего прогнозирования.
[0115] В другом примере, видеокодер 20 и/или видеодекодер 30 может не выполнять прогнозирование для текущего блока. В этом случае, видеокодер 20 вместо этого преобразует пиксельные значения в индексы палитры и кодирует индексы с использованием энтропийного кодирования без прогнозирования. В дополнительном примере, видеокодер 20 и/или видеодекодер 30 может выполнять остаточную дифференциальную импульсно-кодовую модуляцию (RDPCM) с использованием пиксельных значений текущего блока, которые преобразуются в значения индекса палитры. В этом примере, прогнозирование из пикселов за пределами текущего блока не используется, и горизонтальное или вертикальное прогнозирование может использоваться для линейного копирования значений индекса в текущей CU.
[0116] В некоторых примерах, технологии для кодирования на основе палитр видеоданных могут использоваться с одной или более других технологий кодирования, таких как технологии для взаимного или внутреннего прогнозирующего кодирования. Например, как подробнее описано ниже, кодер или декодер, или комбинированный кодер-декодер (кодек) может быть выполнен с возможностью осуществлять взаимное и внутреннее прогнозирующее кодирование, а также кодирование на основе палитр.
[0117] Фиг. 2 является блок-схемой, иллюстрирующий примерный видеокодер 20, который может реализовывать технологии этого раскрытия сущности. Фиг. 2 предоставляется для целей пояснения и не должен считаться ограничением технологий, как проиллюстрировано и описано в общих чертах в этом раскрытии сущности. Для целей пояснения, это раскрытие сущности описывает видеокодер 20 в контексте HEVC-кодирования. Тем не менее, технологии этого раскрытия сущности могут быть применимыми к другим стандартам или способам кодирования.
[0118] Видеокодер 20 представляет пример устройства, которое может быть выполнено с возможностью осуществлять технологии для кодирования видео на основе палитр в соответствии с различными примерами, описанными в этом раскрытии сущности. Например, видеокодер 20 может быть выполнен с возможностью избирательно кодировать различные блоки видеоданных, к примеру, CU или PU при HEVC-кодировании, с использованием кодирования на основе палитр либо кодирования не на основе палитр. Режимы кодирования не на основе палитр могут означать различные режимы взаимного прогнозирующего временного кодирования или режимы внутреннего прогнозирующего пространственного кодирования, к примеру, различные режимы кодирования, указываемые посредством HEVC-проекта 10. Видеокодер 20, в одном примере, может быть выполнен с возможностью формировать палитру, имеющую записи, указывающие пиксельные значения. Кроме того, в этом примере, видеокодер 20 может выбирать пиксельные значения в палитре, чтобы представлять пиксельные значения, по меньшей мере, некоторых позиций блока видеоданных. В этом примере, видеокодер 20 может передавать в служебных сигналах информацию, ассоциирующую, по меньшей мере, некоторые позиции блока видеоданных с записями в палитре, соответствующим надлежащим образом выбранным пиксельным значениям. Видеодекодер 30 может использовать передаваемую в служебных сигналах информацию для того, чтобы декодировать видеоданные.
[0119] В примере по фиг. 2, видеокодер 20 включает в себя запоминающее устройство 98 видеоданных, процессор 100 прогнозирования, модуль 102 формирования остатков, процессор 104 преобразования, модуль 106 квантования, модуль 108 обратного квантования, процессор 110 обратного преобразования, модуль 112 восстановления, модуль 114 фильтрации, буфер 116 декодированных изображений и модуль 118 энтропийного кодирования. Процессор 100 прогнозирования включает в себя процессор 120 взаимного прогнозирования и процессор 126 внутреннего прогнозирования. Процессор 120 взаимного прогнозирования включает в себя модуль оценки движения и модуль компенсации движения (не показаны). Видеокодер 20 также включает в себя модуль 122 кодирования на основе палитр, выполненный с возможностью осуществлять различные аспекты технологий кодирования на основе палитр, описанных в этом раскрытии сущности. В других примерах, видеокодер 20 может включать в себя большее, меньшее число или другие функциональные компоненты.
[0120] Запоминающее устройство 98 видеоданных может хранить видеоданные, которые должны кодироваться посредством компонентов видеокодера 20. Видеоданные, сохраненные в запоминающем устройстве 98 видеоданных, могут получаться, например, из видеоисточника 18. Буфер 116 декодированных изображений может представлять собой запоминающее устройство опорных изображений, которое хранит опорные видеоданные для использования при кодировании видеоданных посредством видеокодера 20, например, в режимах внутреннего или взаимного кодирования. Запоминающее устройство 98 видеоданных и буфер 116 декодированных изображений могут формироваться посредством любого из множества запоминающих устройств, к примеру, как динамическое оперативное запоминающее устройство (DRAM), включающее в себя синхронное DRAM (SDRAM), магниторезистивное RAM (MRAM), резистивное RAM (RRAM) или другие типы запоминающих устройств. Запоминающее устройство 98 видеоданных и буфер 116 декодированных изображений могут предоставляться посредством идентичного запоминающего устройства или отдельных запоминающих устройств. В различных примерах, запоминающее устройство 98 видеоданных может быть внутрикристальным с другими компонентами видеокодера 20 или внекристальным относительно этих компонентов.
[0121] Видеокодер 20 может принимать видеоданные. Видеокодер 20 может кодировать каждую CTU в серии последовательных макроблоков изображения видеоданных. Каждая из CTU может быть ассоциирована с блоками дерева кодирования (CTB) сигнала яркости одинакового размера и соответствующими CTB изображения. В качестве части кодирования CTU, процессор 100 прогнозирования может выполнять сегментацию на дерево квадрантов для того, чтобы разделять CTB CTU на постепенно меньшие блоки. Меньший блок может представлять собой блоки кодирования CU. Например, процессор 100 прогнозирования может сегментировать CTB, ассоциированный с CTU, на четыре субблока одинакового размера, сегментировать один или более субблоков на четыре субсубблока одинакового размера и т.д.
[0122] Видеокодер 20 может кодировать CU CTU для того, чтобы формировать кодированные представления CU (т.е. кодированные CU). В качестве части кодирования CU, процессор 100 прогнозирования может сегментировать блоки кодирования, ассоциированные с CU, из числа одной или более PU CU. Таким образом, каждая PU может быть ассоциирована с прогнозным блоком сигналов яркости и соответствующими прогнозными блоками сигнала цветности. Видеокодер 20 и видеодекодер 30 могут поддерживать PU, имеющие различные размеры. Как указано выше, размер CU может означать размер блока кодирования сигналов яркости CU, и размер PU может означать размер прогнозного блока сигналов яркости PU. При условии, что размер конкретной CU составляет 2Nx2N, видеокодер 20 и видеодекодер 30 могут поддерживать PU-размеры 2Nx2N или NxN для внутреннего прогнозирования и симметричные PU-размеры 2Nx2N, 2NxN, Nx2N, NxN или аналогичные для взаимного прогнозирования. Видеокодер 20 и видеодекодер 30 также могут поддерживать асимметричное сегментирование для PU-размеров 2NxnU, 2NxnD, nLx2N и nRx2N для взаимного прогнозирования.
[0123] Процессор 120 взаимного прогнозирования может формировать прогнозирующие данные для PU посредством выполнения взаимного прогнозирования для каждой PU CU. Прогнозирующие данные для PU могут включать в себя один или более прогнозирующих блоков выборок PU и информацию движения для PU. Модуль 121 взаимного прогнозирования может выполнять различные операции для PU CU в зависимости от того, находится PU в серии последовательных I-макроблоков, серии последовательных P-макроблоков или серии последовательных B-макроблоков. В серии последовательных I-макроблоков все PU внутренне прогнозируются. Следовательно, если PU находится в серии последовательных I-макроблоков, модуль 121 взаимного прогнозирования не выполняет взаимное прогнозирование для PU. Таким образом, для блоков, кодированных в I-режиме, прогнозирующий блок формируется с использованием пространственного прогнозирования из ранее кодированных соседних блоков в идентичном кадре.
[0124] Если PU находится в серии последовательных P-макроблоков, модуль оценки движения процессора 120 взаимного прогнозирования может выполнять поиск в опорных изображениях в списке опорных изображений (например, в RefPicList0) на предмет опорной области для PU. Опорная область для PU может представлять собой область в опорном изображении, которая содержит блоки выборок, которые наиболее близко соответствуют блокам выборок PU. Модуль оценки движения может формировать опорный индекс, который указывает позицию в RefPicList0 опорного изображения, содержащего опорную область для PU. Помимо этого, модуль оценки движения может формировать MV, который указывает пространственное смещение между блоком кодирования PU и опорным местоположением, ассоциированным с опорной областью. Например, MV может представлять собой двумерный вектор, который предоставляет смещение от координат в текущем декодированном изображении на координаты в опорном изображении. Модуль оценки движения может выводить опорный индекс и MV в качестве информации движения PU. Модуль компенсации движения процессора 120 взаимного прогнозирования может формировать прогнозирующие блоки выборок PU на основе фактических или интерполированных выборок в опорном местоположении, указываемом посредством вектора движения PU.
[0125] Если PU находится в серии последовательных B-макроблоков, модуль оценки движения может выполнять унипрогнозирование или бипрогнозирование для PU. Чтобы выполнять унипрогнозирование для PU, модуль оценки движения может выполнять поиск в опорных изображениях RefPicList0 или второго списка опорных изображений (RefPicList1) на предмет опорной области для PU. Модуль оценки движения может выводить, в качестве информации движения PU, опорный индекс, который указывает позицию в RefPicList0 или RefPicList1 опорного изображения, которое содержит опорную область, MV, который указывает пространственное смещение между блоком выборок PU и опорным местоположением, ассоциированным с опорной областью, и один или более индикаторов направления прогнозирования, которые указывают то, находится опорное изображение в RefPicList0 или в RefPicList1. Модуль компенсации движения процессора 120 взаимного прогнозирования может формировать прогнозирующие блоки выборок PU, по меньшей мере, частично на основе фактических или интерполированных выборок в опорной области, указываемой посредством вектора движения PU.
[0126] Чтобы выполнять двунаправленное взаимное прогнозирование для PU, модуль оценки движения может выполнять поиск в опорных изображениях RefPicList0 на предмет опорной области для PU, а также может выполнять поиск в опорных изображениях RefPicList1 на предмет другой опорной области для PU. Модуль оценки движения может формировать индексы опорных изображений, которые указывают позиции в RefPicList0 и RefPicList1 опорных изображений, которые содержат опорные области. Помимо этого, модуль оценки движения может формировать MV, которые указывают пространственные смещения между опорным местоположением, ассоциированным с опорными областями, и блоком выборок PU. Информация движения PU может включать в себя опорные индексы и MV PU. Модуль компенсации движения может формировать прогнозирующие блоки выборок PU, по меньшей мере, частично на основе фактических или интерполированных выборок в опорной области, указываемой посредством вектора движения PU.
[0127] В соответствии с различными примерами этого раскрытия сущности, видеокодер 20 может быть выполнен с возможностью осуществлять кодирование на основе палитр. Относительно инфраструктуры HEVC в качестве примера, технологии кодирования на основе палитр могут быть выполнены с возможностью использоваться в качестве CU-режима. В других примерах, технологии кодирования на основе палитр могут быть выполнены с возможностью использоваться в качестве PU-режима в инфраструктуре HEVC. Соответственно, все раскрытые процессы, описанные в данном документе (в ходе этого раскрытия сущности) в контексте CU-режима, дополнительно или альтернативно, могут применяться к PU-режиму. Тем не менее, эти примеры на основе HEVC не должны считаться ограничением или недочетом технологий кодирования на основе палитр, описанных в данном документе, поскольку технологии в данном документе могут применяться, чтобы работать независимо или в качестве части других существующих или будущих разрабатываемых систем/стандартов. В этих случаях, единица для палитрового кодирования может представлять собой квадратные блоки, прямоугольные блоки или даже области непрямоугольной формы.
[0128] Модуль 122 кодирования на основе палитр, например, может выполнять декодирование на основе палитр, когда режим кодирования на основе палитр выбирается, например, для CU или PU. Например, модуль 122 кодирования на основе палитр может быть выполнен с возможностью формировать палитру, имеющую записи, указывающие пиксельные значения, выбирать пиксельные значения в палитре, чтобы представлять пиксельные значения, по меньшей мере, некоторых позиций блока видеоданных, и передавать в служебных сигналах информацию, ассоциирующую, по меньшей мере, некоторые позиции блока видеоданных с записями в палитре, соответствующим надлежащим образом выбранным пиксельным значениям. Хотя различные функции описываются как выполняемые посредством модуля 122 кодирования на основе палитр, некоторые или все такие функции могут выполняться посредством других процессоров или комбинации различных процессоров.
[0129] Модуль 122 кодирования на основе палитр может быть выполнен с возможностью формировать любой из различных элементов синтаксиса, описанных в данном документе. Соответственно, видеокодер 20 может быть выполнен с возможностью кодировать блоки видеоданных с использованием режимов кодирования на основе палитр, как описано в этом раскрытии сущности. Видеокодер 20 может избирательно кодировать блок видеоданных с использованием режима палитрового кодирования или кодировать блок видеоданных с использованием другого режима, например, такого режима взаимного прогнозирующего или внутреннего прогнозирующего HEVC-кодирования. Блок видеоданных, например, может представлять собой CU или PU, сформированную согласно процессу HEVC-кодирования. Видеокодер 20 может кодировать некоторые блоки с помощью режимов взаимного прогнозирующего временного прогнозирования или внутреннего прогнозирующего пространственного кодирования и декодировать другие блоки с помощью режима кодирования на основе палитр.
[0130] Процессор 126 внутреннего прогнозирования может формировать прогнозирующие данные для PU посредством выполнения внутреннего прогнозирования для PU. Прогнозирующие данные для PU могут включать в себя прогнозирующие блоки выборок для PU и различные элементы синтаксиса. Процессор 126 внутреннего прогнозирования может выполнять внутреннее прогнозирование для PU в сериях последовательных I-макроблоков, сериях последовательных P-макроблоков и сериях последовательных B-макроблоков.
[0131] Чтобы выполнять внутреннее прогнозирование для PU, процессор 126 внутреннего прогнозирования может использовать несколько режимов внутреннего прогнозирования для того, чтобы формировать несколько наборов прогнозирующих данных для PU. При использовании некоторых режимов внутреннего прогнозирования для того, чтобы формировать набор прогнозирующих данных для PU, процессор 126 внутреннего прогнозирования может расширять значения выборок из блоков выборок соседних PU через прогнозирующие блоки PU в направлениях, ассоциированных с режимами внутреннего прогнозирования. Соседние PU могут располагаться выше, выше и справа, выше и слева или слева от PU, при условии порядка кодирования слева направо, сверху вниз для PU, CU и CTU. Процессор 126 внутреннего прогнозирования может использовать различные числа режимов внутреннего прогнозирования, например, 33 режима направленного внутреннего прогнозирования. В некоторых примерах, число режимов внутреннего прогнозирования может зависеть от размера области, ассоциированной с PU.
[0132] Процессор 100 прогнозирования может выбирать прогнозирующие данные для PU CU из числа прогнозирующих данных, сформированных посредством процессора 120 взаимного прогнозирования для PU, или прогнозирующих данных, сформированных посредством процессора 126 внутреннего прогнозирования для PU. В некоторых примерах, процессор 100 прогнозирования выбирает прогнозирующие данные для PU CU на основе показателей искажения в зависимости от скорости передачи наборов прогнозирующих данных. Прогнозирующие блоки выборок для выбранных прогнозирующих данных могут упоминаться в данном документе как выбранные прогнозирующие блоки выборок.
[0133] Модуль 102 формирования остатков может формировать, на основе блоков кодирования (к примеру, блоков кодирования сигналов яркости, Cb-блоков кодирования и Cr-блоков кодирования) CU и выбранных прогнозирующих блоков выборок (к примеру, блоков сигналов яркости, прогнозирующих Cb-блоков и прогнозирующих Cr-блоков) PU CU, остаточные блоки (к примеру, блоки сигналов яркости, остаточные Cb-блоки и остаточные Cr-блоки) CU. Например, модуль 102 формирования остатков может формировать остаточные блоки CU таким образом, что каждая выборка в остаточных блоках имеет значение, равное разности между выборкой в блоке кодирования CU и соответствующей выборкой в соответствующем выбранном прогнозирующем блоке выборок PU CU.
[0134] Процессор 104 преобразования может выполнять сегментацию на дерево квадрантов для того, чтобы сегментировать остаточные блоки, ассоциированные с CU, на блоки преобразования, ассоциированные с TU CU. Таким образом, в некоторых примерах, TU может быть ассоциирована с блоком преобразования сигналов яркости и двумя блоками преобразования сигналов цветности. Размеры и позиции блоков преобразования сигналов яркости и сигналов цветности TU CU могут быть основаны либо могут не быть основаны на размерах и позициях прогнозных блоков PU CU. Структура в виде дерева квадрантов, известная как "остаточное дерево квадрантов" (RQT), может включать в себя узлы, ассоциированные с каждой из областей. TU CU могут соответствовать концевым узлам RQT.
[0135] Процессор 104 преобразования может формировать блоки коэффициентов преобразования для каждой TU CU посредством применения одного или более преобразований к блокам преобразования TU. Процессор 104 преобразования может применять различные преобразования к блоку преобразования, ассоциированному с TU. Например, процессор 104 преобразования может применять дискретное косинусное преобразование (DCT), направленное преобразование или концептуально аналогичное преобразование к блоку преобразования. В некоторых примерах, процессор 104 преобразования не применяет преобразования к блоку преобразования. В таких примерах, блок преобразования может трактоваться в качестве блока коэффициентов преобразования.
[0136] Модуль 106 квантования может квантовать коэффициенты преобразования в блоке коэффициентов. Процесс квантования может уменьшать битовую глубину, ассоциированную с некоторыми или всеми коэффициентами преобразования. Например, n-битовый коэффициент преобразования может округляться в меньшую сторону до m-битового коэффициента преобразования во время квантования, где n превышает m. Модуль 106 квантования может квантовать блок коэффициентов, ассоциированный с TU CU, на основе значения параметра квантования (QP), ассоциированного с CU. Видеокодер 20 может регулировать степень квантования, применяемого к блокам коэффициентов, ассоциированным с CU, посредством регулирования QP-значения, ассоциированного с CU. Квантование может вводить потери информации, в силу чего квантованные коэффициенты преобразования могут иметь меньшую точность по сравнению с исходными коэффициентами преобразования.
[0137] Модуль 108 обратного квантования и процессор 110 обратного преобразования могут применять обратное квантование и обратные преобразования к блоку коэффициентов, соответственно, для того чтобы восстанавливать остаточный блок из блока коэффициентов. Модуль 112 восстановления может суммировать восстановленный остаточный блок с соответствующими выборками из одного или более прогнозирующих блоков выборок, сформированных посредством процессора 100 прогнозирования, для того чтобы формировать восстановленный блок преобразования, ассоциированный с TU. Посредством восстановления блоков преобразования для каждой TU CU таким способом, видеокодер 20 может восстанавливать блоки кодирования CU.
[0138] Модуль 114 фильтрации может выполнять одну или более операций удаления блочности, чтобы уменьшать артефакты блочности в блоках кодирования, ассоциированных с CU. Буфер 116 декодированных изображений может хранить восстановленные блоки кодирования после того, как модуль 114 фильтрации выполняет одну или более операций удаления блочности для восстановленных блоков кодирования. Процессор 120 взаимного прогнозирования может использовать опорное изображение, которое содержит восстановленные блоки кодирования, для того чтобы выполнять взаимное прогнозирование для PU других изображений. Помимо этого, процессор 126 внутреннего прогнозирования может использовать восстановленные блоки кодирования в буфере 116 декодированных изображений для того, чтобы выполнять внутреннее прогнозирование для других PU в изображении, идентичном изображению CU.
[0139] Модуль 118 энтропийного кодирования может принимать данные из других функциональных компонентов видеокодера 20. Например, модуль 118 энтропийного кодирования может принимать блоки коэффициентов из модуля 106 квантования и может принимать элементы синтаксиса из процессора 100 прогнозирования. Модуль 118 энтропийного кодирования может выполнять одну или более операций энтропийного кодирования для данных, чтобы формировать энтропийно кодированные данные. Например, модуль 118 энтропийного кодирования может выполнять CABAC-операцию, операцию контекстно-адаптивного кодирования переменной длины (CAVLC), операцию кодирования переменно-переменной (V2V) длины, операцию синтаксического контекстно-адаптивного двоичного арифметического кодирования (SBAC), операцию энтропийного кодирования на основе сегментирования на интервалы вероятности (PIPE), операцию экспоненциального кодирования кодом Голомба или другой тип операции энтропийного кодирования для данных. Видеокодер 20 может выводить поток битов, который включает в себя энтропийно кодированные данные, сформированные посредством модуля 118 энтропийного кодирования. Например, поток битов может включать в себя данные, которые представляют RQT для CU.
[0140] В некоторых примерах, остаточное кодирование не выполняется при палитровом кодировании. Соответственно, видеокодер 20 не может выполнять преобразование или квантование при кодировании с использованием режима палитрового кодирования. Помимо этого, видеокодер 20 может энтропийно кодировать данные, сформированные с использованием режима палитрового кодирования, отдельно от остаточных данных.
[0141] Согласно одной или более технологий этого раскрытия сущности, видеокодер 20 и, в частности, модуль 122 кодирования на основе палитр может выполнять кодирование видео на основе палитр прогнозных видеоблоков. Как описано выше, палитра, сформированная посредством видеокодера 20, может быть явно кодирована и отправлена в видеодекодер 30, прогнозирована из предыдущих записей палитры, прогнозирована из предыдущих пиксельных значений либо как комбинация вышеозначенного.
[0142] В одном примере, модуль 122 кодирования на основе палитр видеокодера 20 определяет одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока видеоданных, и определяет число новых записей палитры, которые не находятся в палитре предиктора, но которые включены в текущую палитру. На основе этой информации, видеокодер 20 на основе палитр вычисляет размер текущей палитры как равный сумме числа скопированных записей палитры и числа новых записей палитры и формирует текущую палитру определенного размера, включающую в себя скопированные записи палитры и новые записи палитры. Видеокодер 20 может передавать определенную информацию относительно скопированных записей палитры и новых записей палитры в видеодекодер 30. Помимо этого, видеокодер 20 может явно кодировать и передавать пиксельные значения для новых записей палитры в видеодекодер 30. Модуль 122 кодирования на основе палитр видеокодера 20 затем может кодировать текущий блок посредством определения значений индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока.
[0143] Технологии, описанные в этом раскрытии сущности, также могут включать в себя технологии для различных комбинаций одного или более из передачи в служебных сигналах режимов кодирования на основе палитр, передачи палитр, прогнозирования палитр, извлечения палитр или передачи карт кодирования на основе палитр и других элементов синтаксиса.
[0144] Фиг. 3 является блок-схемой, иллюстрирующей примерный видеодекодер 30, который выполнен с возможностью реализовывать технологии этого раскрытия сущности. Фиг. 3 предоставляется для целей пояснения и не является ограничением технологий, как проиллюстрировано и описано в общих чертах в этом раскрытии сущности. Для целей пояснения, это раскрытие сущности описывает видеодекодер 30 в контексте HEVC-кодирования. Тем не менее, технологии этого раскрытия сущности могут быть применимыми к другим стандартам или способам кодирования.
[0145] Видеодекодер 30 представляет пример устройства, которое может быть выполнено с возможностью осуществлять технологии для кодирования видео на основе палитр в соответствии с различными примерами, описанными в этом раскрытии сущности. Например, видеодекодер 30 может быть выполнен с возможностью избирательно декодировать различные блоки видеоданных, к примеру, CU или PU при HEVC-кодировании, с использованием кодирования на основе палитр либо кодирования не на основе палитр. Режимы кодирования не на основе палитр могут означать различные режимы взаимного прогнозирующего временного кодирования или режимы внутреннего прогнозирующего пространственного кодирования, к примеру, различные режимы кодирования, указываемые посредством HEVC-проекта 10. В одном примере, видеодекодер 30 может быть выполнен с возможностью формировать палитру, имеющую записи, указывающие пиксельные значения. Кроме того, в этом примере, видеодекодер 30 может принимать информацию, ассоциирующую, по меньшей мере, некоторые позиции блока видеоданных с записями в палитре. В этом примере, видеодекодер 30 может выбирать пиксельные значения в палитре на основе информации и восстанавливать пиксельные значения блока на основе выбранных пиксельных значений.
[0146] В примере по фиг. 3, видеодекодер 30 включает в себя запоминающее устройство 148 видеоданных, модуль 150 энтропийного декодирования, процессор 152 прогнозирования, модуль 154 обратного квантования, процессор 156 обратного преобразования, модуль 158 восстановления, модуль 160 фильтрации и буфер 162 декодированных изображений. Процессор 152 прогнозирования включает в себя модуль 164 компенсации движения и процессор 166 внутреннего прогнозирования. Видеодекодер 30 также включает в себя модуль 165 декодирования на основе палитр, выполненный с возможностью осуществлять различные аспекты технологий кодирования на основе палитр, описанных в этом раскрытии сущности. В других примерах, видеодекодер 30 может включать в себя большее, меньшее число или другие функциональные компоненты.
[0147] Запоминающее устройство 148 видеоданных может хранить видеоданные, такие как кодированный поток видеобитов, которые должны декодироваться посредством компонентов видеодекодера 30. Видеоданные, сохраненные в запоминающем устройстве 148 видеоданных, могут получаться, например, из машиночитаемого носителя 16, например, из локального видеоисточника, такого как камера, через передачу по проводной или беспроводной сети видеоданных, либо посредством осуществления доступа к физическим носителям хранения данных. Запоминающее устройство 148 видеоданных может формировать буфер кодированных изображений (CPB), который хранит кодированные видеоданные из кодированного потока видеобитов. Буфер 162 декодированных изображений может представлять собой запоминающее устройство опорных изображений, которое хранит опорные видеоданные для использования при декодировании видеоданных посредством видеодекодера 30, например, в режимах внутреннего или взаимного кодирования. Запоминающее устройство 148 видеоданных и буфер 162 декодированных изображений могут формироваться посредством любого из множества запоминающих устройств, к примеру, как динамическое оперативное запоминающее устройство (DRAM), включающее в себя синхронное DRAM (SDRAM), магниторезистивное RAM (MRAM), резистивное RAM (RRAM) или другие типы запоминающих устройств. Запоминающее устройство 148 видеоданных и буфер 162 декодированных изображений могут предоставляться посредством идентичного запоминающего устройства или отдельных запоминающих устройств. В различных примерах, запоминающее устройство 148 видеоданных может быть внутрикристальным с другими компонентами видеодекодера 30 или внекристальным относительно этих компонентов.
[0148] Запоминающее устройство 148 видеоданных, т.е. CPB, может принимать и хранить кодированные видеоданные (например, NAL-единицы) потока битов. Модуль 150 энтропийного декодирования может принимать кодированные видеоданные (например, NAL-единицы) из запоминающего устройства 148 видеоданных и может синтаксически анализировать NAL-единицы, чтобы декодировать элементы синтаксиса. Модуль 150 энтропийного декодирования может энтропийно декодировать энтропийно кодированные элементы синтаксиса в NAL-единицах. Процессор 152 прогнозирования, модуль 154 обратного квантования, процессор 156 обратного преобразования, модуль 158 восстановления и модуль 160 фильтрации могут формировать декодированные видеоданные на основе элементов синтаксиса, полученных (к примеру, извлеченных) из потока битов.
[0149] NAL-единицы потока битов могут включать в себя NAL-единицы кодированных серий последовательных макроблоков. В качестве части декодирования потока битов, модуль 150 энтропийного декодирования может извлекать и энтропийно декодировать элементы синтаксиса из NAL-единиц кодированных серий последовательных макроблоков. Каждая из кодированных серий последовательных макроблоков может включать в себя заголовок серии последовательных макроблоков и данные серии последовательных макроблоков. Заголовок серии последовательных макроблоков может содержать элементы синтаксиса, связанные с серией последовательных макроблоков. Элементы синтаксиса в заголовке серии последовательных макроблоков могут включать в себя элемент синтаксиса, который идентифицирует PPS, ассоциированный с изображением, которое содержит серию последовательных макроблоков.
[0150] Помимо декодирования элементов синтаксиса из потока битов, видеодекодер 30 может выполнять операцию восстановления для несегментированной CU. Чтобы выполнять операцию восстановления для несегментированной CU, видеодекодер 30 может выполнять операцию восстановления для каждой TU CU. Посредством выполнения операции восстановления для каждой TU CU, видеодекодер 30 может восстанавливать остаточные блоки, ассоциированные с CU.
[0151] В качестве части выполнения операции восстановления для TU CU, модуль 154 обратного квантования может обратно квантовать, т.е. деквантовать, блоки коэффициентов, ассоциированные с TU. Модуль 154 обратного квантования может использовать QP-значение, ассоциированное с CU TU, для того чтобы определять степень квантования и, аналогично, степень обратного квантования для модуля 154 обратного квантования, которое должно применяться. Иными словами, коэффициент сжатия, т.е. отношение числа битов, используемых для того, чтобы представлять исходную последовательность, и числа сжатых битов, может управляться посредством регулирования значения QP, используемого при квантовании коэффициентов преобразования. Коэффициент сжатия также может зависеть от используемого способа энтропийного кодирования.
[0152] После того, как модуль 154 обратного квантования обратно квантует блок коэффициентов, процессор 156 обратного преобразования может применять одно или более обратных преобразований к блоку коэффициентов, чтобы формировать остаточный блок, ассоциированный с TU. Например, процессор 156 обратного преобразования может применять обратное DCT, обратное целочисленное преобразование, обратное преобразование Карунена-Лоэва (KLT), обратное вращательное преобразование, обратное направленное преобразование или другое обратное преобразование к блоку коэффициентов.
[0153] Если PU кодируется с использованием внутреннего прогнозирования, процессор 166 внутреннего прогнозирования может выполнять внутреннее прогнозирование для того, чтобы формировать прогнозирующие блоки для PU. Процессор 166 внутреннего прогнозирования может использовать режим внутреннего прогнозирования для того, чтобы формировать прогнозирующие блоки сигналов яркости, прогнозирующие Cb-блоки и прогнозирующие Cr-блоки для PU на основе прогнозных блоков пространственно соседних PU. Процессор 166 внутреннего прогнозирования может определять режим внутреннего прогнозирования для PU на основе одного или более элементов синтаксиса, декодированных из потока битов.
[0154] Процессор 152 прогнозирования может составлять первый список опорных изображений (RefPicList0) и второй список опорных изображений (RefPicList1) на основе элементов синтаксиса, извлеченных из потока битов. Кроме того, если PU кодируется с использованием взаимного прогнозирования, модуль 150 энтропийного декодирования может извлекать информацию движения для PU. Модуль 164 компенсации движения может определять, на основе информации движения PU, одну или более опорных областей для PU. Модуль 164 компенсации движения может формировать, на основе блоков выборок в одном или более опорных блоков для PU, прогнозирующие блоки (прогнозирующие блоки сигналов яркости, прогнозирующие Cb-блоки и прогнозирующие Cr-блоки) для PU.
[0155] Модуль 158 восстановления может использовать блоки преобразования (например, блоки преобразования сигналов яркости, Cb-блоки преобразования и Cr-блоки преобразования), ассоциированные с TU CU, и прогнозирующие блоки (например, блоки сигналов яркости, Cb-блоки и Cr-блоки) PU CU, т.е. либо данные внутреннего прогнозирования, либо данные взаимного прогнозирования, при соответствующих условиях, для того чтобы восстанавливать блоки кодирования (например, блоки кодирования сигналов яркости, Cb-блоки кодирования и Cr-блоки кодирования) CU. Например, модуль 158 восстановления может суммировать выборки блоков преобразования (например, блоков преобразования сигналов яркости, Cb-блоков преобразования и Cr-блоков преобразования) с соответствующими выборками прогнозирующих блоков (например, прогнозирующих блоков сигналов яркости, прогнозирующих Cb-блоков и прогнозирующих Cr-блоков), чтобы восстанавливать блоки кодирования (например, блоки кодирования сигналов яркости, Cb-блоки кодирования и Cr-блоки кодирования) CU.
[0156] Модуль 160 фильтрации может выполнять операцию удаления блочности, чтобы уменьшать артефакты блочности, ассоциированные с блоками кодирования (к примеру с блоками кодирования сигналов яркости, Cb-блоками кодирования и Cr-блоками кодирования) CU. Видеодекодер 30 может сохранять блоки кодирования (к примеру, блоки кодирования сигналов яркости, Cb-блоки кодирования и Cr-блоки кодирования) CU в буфере 162 декодированных изображений. Буфер 162 декодированных изображений может предоставлять опорные изображения для последующей компенсации движения, внутреннего прогнозирования и представления на устройстве отображения, к примеру, на устройстве 32 отображения по фиг. 1. Например, видеодекодер 30 может выполнять, на основе блоков (к примеру, блоков сигналов яркости, Cb-блоков и Cr-блоков) в буфере 162 декодированных изображений, операции внутреннего прогнозирования или взаимного прогнозирования для PU других CU. Таким образом, видеодекодер 30 может извлекать, из потока битов, уровни коэффициентов преобразования блока значимых коэффициентов, обратно квантовать уровни коэффициентов преобразования, применять преобразование к уровням коэффициентов преобразования для того, чтобы формировать блок преобразования, формировать, по меньшей мере, частично на основе блока преобразования, блок кодирования и выводить блок кодирования для отображения.
[0157] В соответствии с различными примерами этого раскрытия сущности, видеодекодер 30 может быть выполнен с возможностью осуществлять кодирование на основе палитр. Модуль 165 декодирования на основе палитр, например, может выполнять декодирование на основе палитр, когда режим декодирования на основе палитр выбирается, например, для CU или PU. Например, модуль 165 декодирования на основе палитр может быть выполнен с возможностью формировать палитру, имеющую записи, указывающие пиксельные значения. Кроме того, в этом примере, модуль 165 декодирования на основе палитр может принимать информацию, ассоциирующую, по меньшей мере, некоторые позиции блока видеоданных с записями в палитре. В этом примере, модуль 165 декодирования на основе палитр может выбирать пиксельные значения в палитре на основе информации. Дополнительно, в этом примере, модуль 165 декодирования на основе палитр может восстанавливать пиксельные значения блока на основе выбранных пиксельных значений. Хотя различные функции описываются как выполняемые посредством модуля 165 декодирования на основе палитр, некоторые или все такие функции могут выполняться посредством других процессоров или комбинации различных процессоров.
[0158] Модуль 165 декодирования на основе палитр может принимать информацию режима палитрового кодирования и выполнять вышеуказанные операции, когда информация режима палитрового кодирования указывает то, что режим палитрового кодирования применяется к блоку. Когда информация режима палитрового кодирования указывает то, что режим палитрового кодирования не применяется к блоку, либо когда информация других режимов указывает использование другого режима, модуль 165 декодирования на основе палитр декодирует блок видеоданных с использованием режима кодирования не на основе палитр, например, такого режима взаимного прогнозирующего или внутреннего прогнозирующего HEVC-кодирования, когда информация режима палитрового кодирования указывает то, что режим палитрового кодирования не применяется к блоку. Блок видеоданных, например, может представлять собой CU или PU, сформированную согласно процессу HEVC-кодирования. Видеодекодер 30 может декодировать некоторые блоки с помощью режимов взаимного прогнозирующего временного прогнозирования или внутреннего прогнозирующего пространственного кодирования и декодировать другие блоки с помощью режима кодирования на основе палитр. Режим кодирования на основе палитр может содержать один из множества различных режимов кодирования на основе палитр, либо может быть предусмотрен один режим кодирования на основе палитр.
[0159] Согласно одной или более технологий этого раскрытия сущности, видеодекодер 30 и, в частности, модуль 165 декодирования на основе палитр может выполнять декодирование видео на основе палитр прогнозных видеоблоков. Как описано выше, палитра, сформированная посредством видеодекодера 30, может быть явно кодирована посредством видеокодера 20, прогнозирована из предыдущих записей палитры, прогнозирована из предыдущих пиксельных значений либо как комбинация вышеозначенного.
[0160] В одном примере, модуль 165 декодирования на основе палитр видеодекодера 30 определяет одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока видеоданных, и определяет число новых записей палитры, которые не находятся в палитре предиктора, но которые включены в текущую палитру. Видеодекодер 30 может принимать информацию относительно скопированных записей палитры и новых записей палитры из видеокодера 20. Помимо этого, видеодекодер 30 может принимать явно кодированные пиксельные значения для новых записей палитры, передаваемых из видеокодера 20. На основе этой информации, модуль 165 декодирования на основе палитр вычисляет размер текущей палитры как равный сумме числа скопированных записей палитры и числа новых записей палитры и формирует текущую палитру определенного размера, включающую в себя скопированные записи палитры и новые записи палитры. Модуль 165 декодирования на основе палитр видеодекодера 30 затем может декодировать текущий блок посредством определения значений индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока.
[0161] Технологии, описанные в этом раскрытии сущности, также могут включать в себя технологии для различных комбинаций одного или более из передачи в служебных сигналах режимов кодирования на основе палитр, передачи палитр, прогнозирования палитр, извлечения палитр или передачи карт кодирования на основе палитр и других элементов синтаксиса.
[0162] Как описано выше, в некоторых примерах, видеокодер 20 и/или видеодекодер 30 может выполнять кодирование на основе палитр прогнозных видеоблоков. В одном примере, видеокодер 20 сначала извлекает палитру для текущего блока на основе пиксельных значений в текущем блоке и затем преобразует пиксельные значения в текущем блоке в индексы палитры для кодирования. Преобразование может быть "один-к-одному" (т.е. для кодирования без потерь) или "несколько-к-одному" (т.е. для кодирования с потерями). Видеокодер 20 также может преобразовывать опорные пиксельные значения в ранее кодированный блок, который может использоваться для того, чтобы прогнозировать пиксельные значения в текущем блоке. После того, как видеокодер 20 преобразует пиксельные значения текущего блока в индексы палитры, видеокодер 20 кодирует текущий блок с использованием способов регулярного кодирования, например, регулярного внутреннего кодирования в HEVC-стандарте.
[0163] В вышеприведенном примере, текущий блок с индексами палитры трактуется так, как если он представляет собой исходный блок с пиксельными значениями. Аналогично, индексы палитры опорных пикселов используются для выполнения регулярного внутреннего прогнозирования для текущего блока с индексами палитры. Видеокодер 20 может передавать ошибку прогнозирования или остаточные значения в видеодекодер 30. В некоторых случаях, ошибка прогнозирования или остаточные значения могут преобразовываться, квантоваться и энтропийно кодироваться в поток битов. В других случаях, также возможно то, что преобразование и квантование деактивируются для режима палитрового кодирования. После кодирования текущего блока, видеокодер 20 может преобразовывать индексы опорных пикселов, прогнозных пикселов и/или остаточных значений обратно в пиксельные значения для восстановления текущего блока и нормального прогнозирования будущих блоков. Видеодекодер 30 может получать кодированные остаточные значения для текущего блока из потока битов. Кроме того, видеодекодер 30 может декодировать текущий блок с использованием способа регулярного декодирования, чтобы получать текущий блок с индексами палитры. Видеодекодер 30 затем может определять пиксельные значения текущего блока на основе пиксельных значений в палитре, которые ассоциированы с индексами палитры.
[0164] В другом примере, видеокодер 20 может формировать палитру для текущего блока. Палитра может включать в себя записи, которые указывают остаточные прогнозные значения для данного блока. Остаточные прогнозные значения для данного блока могут формироваться с использованием любого режима прогнозирования, например, регулярного взаимного прогнозирования или внутреннего прогнозирования в HEVC-стандарте. Остаточные прогнозные значения для данного блока могут быть остаточными пиксельными значениями (возможно квантованными) или значениями остаточных коэффициентов преобразования (возможно квантованными). В этом примере, видеокодер 20 преобразует остаточные прогнозные значения для текущего блока в значения индекса, которые указывают записи в палитре для текущего блока, которые используются для того, чтобы представлять остаточные прогнозные значения для текущего блока. В этом примере, видеокодер 20 может кодировать значения индекса для одной или более позиций в текущем блоке, причем значения индекса указывают записи в палитре для текущего блока, которые указывают остаточные прогнозные значения для текущего блока. Видеодекодер 30 может получать кодированный блок значений индекса из потока битов и определять остаточные прогнозные значения для текущего блока на основе соответствующих остаточных прогнозных значений в палитре, идентифицированной посредством значений индекса. Видеодекодер 30 затем может восстанавливать пиксельные значения текущего блока с использованием способов регулярного декодирования на основе остаточных прогнозных значений и ранее кодированных опорных пиксельных значений.
[0165] В некоторых примерах, видеокодер 20 и/или видеодекодер 30 может выполнять кодирование видео на основе палитр с прогнозированием на основе видеоблоков посредством применения режима внутреннего прогнозирования (т.е. прогнозирование использует только информацию ранее кодированных пикселов в текущем изображении). В других примерах, видеокодер 20 и/или видеодекодер 30 может применять режим взаимного прогнозирования (т.е. прогнозирования из пикселов в ранее кодированных изображениях). В одном примере, остаточные прогнозные значения для текущего блока могут быть остаточными пиксельными значениями для текущего блока, вычисленными из пиксельных значений текущего блока и ранее кодированных опорных пиксельных значений. Остаточные пиксельные значения могут квантоваться. В другом примере, остаточные прогнозные значения для текущего блока могут быть значениями остаточных коэффициентов преобразования для текущего блока, вычисленными из пиксельных значений текущего блока и ранее кодированных опорных пиксельных значений и затем преобразованными и возможно квантованными.
[0166] В некоторых случаях, видеокодер 20 и/или видеодекодер 30 может определять остаточные прогнозные значения для текущего блока с использованием только поднабора процессов на основе режима прогнозирования либо для режима взаимного прогнозирования, либо для режима внутреннего прогнозирования. Например, в случае режима внутреннего прогнозирования, процессы DC-, горизонтального и/или вертикального прогнозирования могут активироваться, но другие процессы на основе режима внутреннего прогнозирования могут деактивироваться. Деактивированные процессы могут включать в себя фильтрацию в режиме внутреннего прогнозирования, например, одно или более из зависимого от режима внутреннего сглаживания (MDIS), 1/32-пелной билинейной интерполяции, краевого фильтра и/или DC-фильтра (введение по уровню техники содержится в предварительной заявке на патент (США) № 61/890844, поданной 14 октября 2013 года, озаглавленной "Adaptive Filter Control for Intra Prediction in Video Coding", номер дела заявителя 1212-671USP3/134960P3) деактивируется в этом примере. В качестве дополнительного примера, в случае режима взаимного прогнозирования, может деактивироваться процесс на основе среднего пикселов, например, одно или более из взвешенного прогнозирования, бипрогнозирования или субпелной интерполяции.
[0167] В другом примере, видеокодер 20 и/или видеодекодер 30 может не выполнять прогнозирование для текущего блока. В этом случае, видеокодер 20 вместо этого преобразует пиксельные значения в индексы палитры и кодирует индексы с использованием энтропийного кодирования без прогнозирования. В дополнительном примере, видеокодер 20 и/или видеодекодер 30 может выполнять остаточную дифференциальную импульсно-кодовую модуляцию (RDPCM) с использованием пиксельных значений текущего блока, которые преобразуются в значения индекса палитры. В этом случае, прогнозирование из пикселов за пределами текущего блока не используется, и горизонтальное или вертикальное прогнозирование может использоваться для линейного копирования значений индекса в текущей CU. Например, при использовании вертикального прогнозирования, местоположения в первой строке текущего блока не прогнозируются, и местоположения в последующих строках могут прогнозироваться с использованием значений в предыдущих строках, например, значения в строке i (i>0), равные x (i, j), прогнозируются с использованием x (i-1, j). При использовании горизонтального прогнозирования местоположения в первом столбце текущего блока не прогнозируются, и местоположения в последующих столбцах могут прогнозироваться с использованием значений в предыдущих столбцах.
[0168] В некоторых примерах, технологии для кодирования на основе палитр видеоданных могут использоваться с одной или более других технологий кодирования, таких как технологии для взаимного или внутреннего прогнозирующего кодирования. Например, как подробнее описано ниже, кодер или декодер, или комбинированный кодер-декодер (кодек) может быть выполнен с возможностью осуществлять взаимное и внутреннее прогнозирующее кодирование, а также кодирование на основе палитр.
[0169] Фиг. 4 является концептуальной схемой, иллюстрирующей пример определения палитры для кодирования видеоданных, в соответствии с технологиями этого раскрытия сущности. Пример по фиг. 4 включает в себя изображение 178, имеющее первую единицу 180 кодирования (CU), которая ассоциирована с первым набором палитр (т.е. с первыми палитрами 184), и вторую CU 188, которая ассоциирована со вторым набором палитр (т.е. со вторыми палитрами 192). Как подробнее описано ниже и в соответствии с одной или более технологий этого раскрытия сущности, вторые палитры 192 основаны на первых палитрах 184. Изображение 178 также включает в себя блок 196, кодированный с помощью режима внутреннего прогнозирующего кодирования, и блок 200, который кодируется с помощью режима взаимного прогнозирующего кодирования.
[0170] Технологии по фиг. 4 описываются в контексте видеокодера 20 (фиг. 1 и фиг. 2) и видеодекодера 30 (фиг. 1 и фиг. 3) и относительно стандарта HEVC-кодирования видео для целей пояснения. Относительно инфраструктуры HEVC в качестве примера, технологии кодирования на основе палитр могут быть выполнены с возможностью использоваться в качестве CU-режима. В других примерах, технологии кодирования на основе палитр могут быть выполнены с возможностью использоваться в качестве PU-режима или TU-режима в инфраструктуре HEVC. Соответственно, все следующие раскрытые процессы, описанные в контексте CU-режима, дополнительно или альтернативно, могут применяться к PU или TU. Тем не менее, следует понимать, что технологии этого раскрытия сущности не ограничены в этом отношении и могут применяться посредством других процессоров и/или устройств кодирования видео в других процессах и/или стандартах кодирования видео.
[0171] В общем, палитра означает число пиксельных значений, которые являются доминирующими и/или характерными для CU, в данный момент кодируемой (например, CU 188 в примере по фиг. 4). Первые палитры 184 и вторые палитры 192 показаны как включающие в себя несколько палитр. В некоторых примерах, согласно аспектам этого раскрытия сущности, видеокодер (к примеру, видеокодер 20 или видеодекодер 30) может кодировать палитры отдельно для каждого цветового компонента CU. Например, видеокодер 20 может кодировать палитру для компонента сигнала (Y) яркости CU, другую палитру для компонента сигнала (U) цветности CU и еще одну другую палитру для компонента (V) сигнала цветности CU. В этом примере, записи Y-палитры могут представлять Y-значения пикселов CU, записи U-палитры могут представлять U-значения пикселов CU, и записи V-палитры могут представлять V-значения пикселов CU.
i
i
i
[0172] В других примерах, видеокодер 20 может кодировать одну палитру для всех цветовых компонентов CU. В этом примере, видеокодер 20 может кодировать палитру, имеющую i-ую запись, которая является тройным значением, включающим в себя Y, U и V. В этом случае, палитра включает в себя значения для каждого из компонентов пикселов. Соответственно, представление палитр 184 и 192 в качестве набора палитр, имеющего несколько отдельных палитр, является просто одним примером и не служит в качестве ограничения.
[0173] В примере по фиг. 4, каждая из первых палитр 184 включает в себя три записи 202-206, имеющие значение 1 индекса записи, значение 2 индекса записи и значение 3 индекса записи, соответственно. Записи 202-206 связывают значения индекса с пиксельными значениями, включающими в себя пиксельное значение A, пиксельное значение B и пиксельное значение C, соответственно. Следует отметить, что каждая из первых палитр 184 фактически не включает в себя индексы и заголовки столбцов, а включает в себя только пиксельные значения A, B и C, и индексы используются для того, чтобы идентифицировать записи в палитре.
[0174] Как описано в данном документе, вместо кодирования фактических пиксельных значений первой CU 180, видеокодер (к примеру, видеокодер 20 или видеодекодер 30) может использовать кодирование на основе палитр для того, чтобы кодировать пикселы блока с использованием индексов 1-3. Иными словами, для каждой пиксельной позиции первой CU 180, видеокодер 20 может кодировать значение индекса для пиксела, причем значение индекса ассоциировано с пиксельным значением в одной или более из первых палитр 184. Видеодекодер 30 может получать значения индекса из потока битов и может восстанавливать пиксельные значения с использованием значений индекса и одной или более первых палитр 184. Другими словами, для каждого соответствующего значения индекса для блока, видеодекодер 30 может определять запись в одной из первых палитр 184. Видеодекодер 30 может заменять соответствующее значение индекса в блоке на пиксельное значение, указываемое посредством определенной записи в палитре. Видеокодер 20 может передавать первые палитры 184 в потоке битов кодированных видеоданных для использования посредством видеодекодера 30 при декодировании на основе палитр. В общем, одна или более палитр могут передаваться для каждой CU или могут совместно использоваться различными CU.
[0175] Согласно аспектам этого раскрытия сущности, видеокодер 20 и видеодекодер 30 могут определять вторые палитры 192 на основе первых палитр 184. Например, видеокодер 20 может кодировать pred_palette_flag для каждой CU (включающей в себя, в качестве примера, вторую CU 188), чтобы указывать то, прогнозируется или нет палитра для CU из одной или более палитр, ассоциированных с одной или более других CU, таких как соседние CU (пространственно или на основе порядка сканирования) или самые частые выборки причинно-следственного соседнего узла. Например, когда значение такого флага равно единице, видеодекодер 30 может определять то, что вторые палитры 192 для второй CU 188 прогнозируются из одной или более уже декодированных палитр, и, следовательно, новые палитры для второй CU 188 не включены в поток битов, содержащий pred_palette_flag. Когда такой флаг равен нулю, видеодекодер 30 может определять то, что палитры 192 для второй CU 188 включены в поток битов в качестве новой палитры. В некоторых примерах, pred_palette_flag может быть отдельно кодирован для каждого различного цветового компонента CU (например, три флага, один для Y, один для U и один для V, для CU в YUV-видео). В других примерах, один pred_palette_flag может кодироваться для всех цветовых компонентов CU.
[0176] В вышеприведенном примере, pred_palette_flag передается в служебных сигналах в расчете на CU, чтобы указывать то, прогнозируется или нет какая-либо из записей палитры для текущего блока. Это означает то, что вторые палитры 192 являются идентичными первым палитрам 184, и дополнительная информация не передается в служебных сигналах. В других примерах, один или более элементов синтаксиса могут передаваться в служебных сигналах на основе записей. А именно, флаг может передаваться в служебных сигналах для каждой записи предиктора палитры, чтобы указывать то, присутствует или нет эта запись в текущей палитре. Как отмечено выше, если запись палитры не прогнозируется, запись палитры может быть явно передана в служебных сигналах. В других примерах, эти два способа могут быть комбинированы. Например, сначала pred_palette_flag передается в служебных сигналах. Если флаг равен 0, флаг прогнозирования в расчете на запись может передаваться в служебных сигналах. Помимо этого, число новых записей и их явные значения могут передаваться в служебных сигналах.
[0177] При определении вторых палитр 192 относительно первых палитр 184 (например, pred_palette_flag равен единице), видеокодер 20 и/или видеодекодер 30 может находить один или более блоков, из которых определяются прогнозирующие палитры, в этом примере первые палитры 184. Прогнозирующие палитры могут быть ассоциированы с одной или более соседних CU для CU, в данный момент кодируемой (например, таких как соседние CU (пространственно или на основе порядка сканирования) либо самые частые выборки причинно-следственного соседнего узла), т.е. второй CU 188. Палитры одной или более соседних CU могут быть ассоциированы с прогнозирующей палитрой. В некоторых примерах, таких как пример, проиллюстрированный на фиг. 4, видеокодер 20 и/или видеодекодер 30 может находить левую соседнюю CU, первую CU 180, при определении прогнозирующей палитры для второй CU 188. В других примерах, видеокодер 20 и/или видеодекодер 30 может находить одну или более CU в других позициях относительно второй CU 188, к примеру, верхнюю CU, CU 196. В другом примере, палитра для последней CU в порядке сканирования, которая использует палитровый режим, может использоваться в качестве прогнозирующей палитры.
[0178] Видеокодер 20 и/или видеодекодер 30 может определять CU для палитрового прогнозирования на основе иерархии. Например, видеокодер 20 и/или видеодекодер 30 может первоначально идентифицировать левую соседнюю CU, первую CU 180, для палитрового прогнозирования. Если левая соседняя CU не доступна для прогнозирования (например, левая соседняя CU кодируется с помощью режима, отличного от режима кодирования на основе палитр, такого как режим внутреннего прогнозирования или режим внутреннего прогнозирования, либо расположена на самом левом краю изображения или серии последовательных макроблоков), видеокодер 20 и/или видеодекодер 30 может идентифицировать верхнюю соседнюю CU, CU 196. Видеокодер 20 и/или видеодекодер 30 может продолжать поиск доступной CU согласно предварительно определенному порядку местоположений до нахождения CU, имеющей палитру, доступную для палитрового прогнозирования. В некоторых примерах, видеокодер 20 и/или видеодекодер 30 может определять прогнозирующую палитру на основе нескольких блоков и/или восстановленных выборок соседнего блока.
[0179] Хотя пример по фиг. 4 иллюстрирует первые палитры 184 в качестве прогнозирующих палитр из одной CU (т.е. первой CU 180), в других примерах, видеокодер 20 и/или видеодекодер 30 может находить палитры для прогнозирования из комбинации соседних CU. Например, видеокодер 20 и/или видеодекодер может применять одну или более формул, функции, правил и т.п. для того, чтобы формировать прогнозирующую палитру на основе палитр одной или комбинации множества соседних CU (пространственно или в порядке сканирования).
[0180] В еще одних других примерах, видеокодер 20 и/или видеодекодер 30 может составлять список возможных вариантов, включающий в себя определенное число потенциальных возможных вариантов для палитрового прогнозирования. В таких примерах, видеокодер 20 может кодировать индекс в списке возможных вариантов, чтобы указывать возможный вариант CU в списке, из которого выбирается текущая CU, используемая для палитрового прогнозирования (например, копирует палитру). Видеодекодер 30 может составлять список возможных вариантов таким же образом, декодировать индекс и использовать декодированный индекс, чтобы выбирать палитру соответствующей CU для использования с текущей CU. В другом примере, палитра указываемого возможного варианта CU в списке может использоваться в качестве прогнозирующей палитры для прогнозирования в расчете на запись текущей палитры для текущей CU.
[0181] В примере для целей иллюстрации, видеокодер 20 и видеодекодер 30 могут составлять список возможных вариантов, который включает в себя одну CU, которая позиционируется выше CU, в данный момент кодируемой, и одну CU, которая позиционируется слева от CU, в данный момент кодируемой. В этом примере, видеокодер 20 может кодировать один или более элементов синтаксиса, чтобы указывать возможный вариант выбора. Например, видеокодер 20 может кодировать флаг, имеющий значение в нуль, чтобы указывать то, что палитра для текущей CU копируется из CU, позиционированной слева от текущей CU. Видеокодер 20 может кодировать флаг, имеющий значение в единицу, чтобы указывать то, что палитра для текущей CU копируется из CU, позиционированной выше текущей CU. Видеодекодер 30 декодирует флаг и выбирает надлежащую CU для палитрового прогнозирования. В другом примере, флаг может указывать то, используется либо нет палитра верхней или левой соседней CU в качестве прогнозирующей палитры. Затем для каждой записи в прогнозирующей палитре, может указываться то, используется или нет эта запись в палитре для текущей CU.
[0182] В еще одних других примерах, видеокодер 20 и/или видеодекодер 30 определяет палитру для CU, в данный момент кодируемой, на основе частоты, с которой выборочные значения, включенные в одну или более других палитр, возникают в одной или более соседних CU. Например, видеокодер 20 и/или видеодекодер 30 может отслеживать цвета, ассоциированные с наиболее часто используемыми значениями индекса во время кодирования предварительно определенного числа CU. Видеокодер 20 и/или видеодекодер 30 может включать в себя наиболее часто используемые цвета в палитре для CU, в данный момент кодируемой.
[0183] Как отмечено выше, в некоторых примерах, видеокодер 20 и/или видеодекодер может копировать всю палитру из соседней CU для кодирования текущей CU. Дополнительно или альтернативно, видеокодер 20 и/или видеодекодер 30 может выполнять палитровое прогнозирование для каждой записи. Например, видеокодер 20 может кодировать один или более элементов синтаксиса для каждой записи палитры, указывающих то, прогнозируются или нет соответствующие записи на основе прогнозирующей палитры (например, палитры другой CU). В этом примере, видеокодер 20 может кодировать флаг, имеющий значение в единицу для данной записи, когда запись является прогнозированным значением из прогнозирующей палитры (например, соответствующей записью палитры, ассоциированной с соседней CU). Видеокодер 20 может кодировать флаг, имеющий значение в нуль для конкретной записи, для того, чтобы указывать то, что конкретная запись не прогнозируется из палитры другой CU. В этом примере, видеокодер 20 также может кодировать дополнительные данные, указывающие значение непрогнозной записи палитры.
[0184] Это раскрытие сущности описывает несколько альтернативных технологий для прогнозирования палитры для текущей CU. В одном примере, прогнозирующая палитра, которая включает в себя записи палитры из одной или более ранее кодированных соседних CU, включает в себя число записей, N. В этом случае, видеокодер 20 сначала передает двоичный вектор, V, имеющий размер, идентичный размеру прогнозирующей палитры, т.е. размер N, в видеодекодер 30. Каждая запись в двоичном векторе указывает то, должна или нет соответствующая запись в прогнозирующей палитре многократно использоваться или копироваться в палитру для текущей CU. Например, V (i)=1 означает то, что i-ая запись в прогнозирующей палитре для соседней CU должна многократно использоваться или копироваться в палитру для текущей CU, которая может иметь другой индекс в текущей CU.
[0185] Помимо этого, видеокодер 20 может передавать число, M, которое указывает то, сколько новых записей палитры включено в палитру для текущей CU, и затем передает пиксельное значение для каждой из новых записей палитры в видеодекодер 30. В этом примере, конечный размер палитры для текущей CU может извлекаться как равный M+S, где S является числом записей в прогнозирующей палитре, которые могут многократно использоваться или копироваться в палитру для текущей CU (т.е. V (i)=1). Для того, чтобы формировать палитру для текущей CU, видеодекодер 30 может объединять передаваемые новые записи палитры и скопированные записи палитры, многократно используемые из прогнозирующей палитры. В некоторых случаях, объединение может быть основано на пиксельных значениях, так что записи в палитре для текущей CU могут увеличиваться (или уменьшаться) с индексом палитры. В других случаях, объединение может быть конкатенацией двух наборов записей, т.е. новых записей палитры и скопированных записей палитры.
[0186] В другом примере, видеокодер 20 сначала передает индикатор относительно размера палитры, N, для текущей CU в видеодекодер 30. Видеокодер 20 затем передает вектор, V, имеющий размер, идентичный размеру палитры для текущей CU, т.е. размер N, в видеодекодер 30. Каждая запись в векторе указывает то, передается соответствующая запись в палитре для текущей CU явно посредством видеокодера 20 или копируется из прогнозирующей палитры. Например, V (i)=1 означает то, что видеокодер 20 передает i-ую запись в палитре в видеодекодер 30, и V (i)=0 означает то, что i-ая запись в палитре копируется из прогнозирующей палитры. Для записей, которые копируются из прогнозирующей палитры (т.е. V (i)=0), видеокодер 20 может использовать различные способы передавать в служебных сигналах то, какая запись в прогнозирующей палитре используется в палитре для текущей CU. В некоторых случаях, видеокодер 20 может передавать в служебных сигналах индекс палитры записи, которая должна быть скопирована из прогнозирующей палитры в палитру для текущей CU. В других случаях, видеокодер 20 может передавать в служебных сигналах смещение индекса, которое является разностью между индексом в палитре для текущей CU и индексом в прогнозирующей палитре.
[0187] В двух вышеприведенных примерах, одна или более ранее кодированных соседних CU, используемых для того, чтобы формировать прогнозирующую палитру, используемую для прогнозирования палитры для текущей CU, могут представлять собой верхнюю соседнюю (т.е. верхнюю) CU или левую соседнюю CU относительно текущей CU. В некоторых примерах, может составляться список возможных вариантов соседних CU, и видеокодер 20 передает индекс, чтобы указывать то, какие возможные варианты соседних CU и ассоциированные палитры используются для палитрового прогнозирования для текущей CU. Для определенных CU, например, CU, которые позиционируются в начале серии последовательных макроблоков или на других границах серий последовательных макроблоков, либо для самых левых CU в серии последовательных макроблоков или в изображении видеоданных, может деактивироваться палитровое прогнозирование.
[0188] В дополнительном примере, видеокодер 20 передает индикатор относительно числа записей, включенных в палитру для текущей CU, в видеодекодер 30. Затем для каждой из записей палитры видеокодер 20 передает флаг или другой элемент синтаксиса, чтобы указывать то, передана или нет запись палитры явно посредством видеокодера 20, либо то, извлекается она или нет из ранее восстановленного пиксела. Например, однобитовый флаг, заданный равным 1, может означать, что видеокодер 20 явно отправляет запись палитры, и однобитовый флаг, заданный равным 0, может означать, что запись палитры извлекается из ранее восстановленного пиксела. Для каждой из записей палитры, которые извлекаются из ранее восстановленного пиксела, видеокодер 20 передает другой индикатор относительно пиксельного местоположения восстановленного пиксела в текущей CU или соседней CU, которая соответствует записи палитры. В некоторых случаях, индикатор местоположения восстановленного пиксела может быть вектором смещения относительно левой верхней позиции текущей CU. В других случаях, индикатор местоположения восстановленного пиксела может быть индексом в списке восстановленных пикселов, который может использоваться для указания записи палитры для текущей CU. Например, этот список может включать в себя все опорные пикселы, которые могут использоваться для нормального внутреннего прогнозирования в HEVC.
[0189] В примере по фиг. 4, вторые палитры 192 включают в себя четыре записи 208-214, имеющие значение 1 индекса записи, значение 2 индекса записи, значение 3 индекса записи и индекс 4 записи, соответственно. Записи 208-214 связывают значения индекса с пиксельными значениями, включающими в себя пиксельное значение A, пиксельное значение B, пиксельное значение C и пиксельное значение D, соответственно. Согласно одному или более аспектов этого раскрытия сущности, видеокодер 20 и/или видеодекодер 30 может использовать любую из вышеописанных технологий для того, чтобы находить первую CU 180 для целей палитрового прогнозирования и копировать записи 1-3 первых палитр 184 в записи 1-3 вторых палитр 192 для кодирования второй CU 188. Таким образом, видеокодер 20 и/или видеодекодер 30 может определять вторые палитры 192 на основе первых палитр 184. Помимо этого, видеокодер 20 и/или видеодекодер 30 может кодировать данные для записи 4, которая должна быть включена во вторые палитры 192. Эта информация может включать в себя число записей палитры, не прогнозированных из прогнозирующей палитры, и пиксельных значений, соответствующих этим записям палитры.
[0190] В некоторых примерах, согласно аспектам этого раскрытия сущности, один или более элементов синтаксиса могут указывать то, прогнозируются или нет палитры, к примеру, вторые палитры 192, полностью из прогнозирующей палитры (показанной на фиг. 4 в качестве первых палитр 184, но которые могут состоять из записей из одного или более блоков), либо то, прогнозируются или нет конкретные записи вторых палитр 192. Например, начальный элемент синтаксиса может указывать то, прогнозируются или нет все записи. Если начальный элемент синтаксиса указывает то, что не все записи прогнозируются (например, флаг, имеющий значение 0), один или более дополнительных элементов синтаксиса могут указывать то, какие записи вторых палитр 192 прогнозируются из прогнозирующей палитры.
[0191] Согласно некоторым аспектам этого раскрытия сущности, определенная информация, ассоциированная с палитровым прогнозированием, может логически выводиться из одной или более характеристик кодируемых данных. Иными словами, вместо кодирования посредством видеокодера 20 элементов синтаксиса (и декодирования посредством видеодекодера 30 таких элементов синтаксиса) видеокодер 20 и видеодекодер 30 могут выполнять палитровое прогнозирование на основе одной или более характеристик кодируемых данных.
[0192] В примере, для целей иллюстрации, значение pred_palette_flag, описанное выше, может логически выводиться из одного или более, в качестве примера, из размера кодируемой CU, типа кадра, цветового пространства, цветового компонента, размера кадра, частоты кадров, идентификатора слоя при масштабируемом кодировании видео или идентификатора вида при многовидовом кодировании. Иными словами, относительно размера CU в качестве примера, видеокодер 20 и/или видеодекодер 30 может определять то, что вышеописанный pred_palette_flag равен единице для любых CU, которые превышают или меньше предварительно определенного размера. В этом примере, pred_palette_flag не должен передаваться в служебных сигналах в кодированном потоке битов.
[0193] Хотя описано выше относительно pred_palette_flag, видеокодер 20 и/или видеодекодер 30 также или альтернативно может логически выводить другую информацию, ассоциированную с палитровым прогнозированием, к примеру, возможный вариант CU, из которого палитра используется для прогнозирования, или правила для составления возможных вариантов палитрового прогнозирования, на основе одной или более характеристик кодируемых данных.
[0194] Согласно другим аспектам этого раскрытия сущности, видеокодер 20 и/или видеодекодер 30 может составлять палитру на лету. Например, при начальном кодировании второй CU 188, в палитрах 192 отсутствуют записи. По мере того, как видеокодер 20 и видеодекодер 30 кодируют новые значения для пикселов второй CU 188, каждое новое значение включено в палитры 192. Иными словами, например, видеокодер 20 добавляет пиксельные значения в палитры 192 по мере того, как пиксельные значения формируются и передаются в служебных сигналах для позиций в CU 188. По мере того, как видеокодер 20 кодирует пикселы относительно позднее в CU, видеокодер 20 может кодировать пикселы, имеющие идентичные значения, как уже включенные в палитру с использованием значений индекса, вместо передачи в служебных сигналах пиксельных значений. Аналогично, когда видеодекодер 30 принимает новое пиксельное значение (например, передаваемое в служебных сигналах посредством видеокодера 20) для позиции во второй CU 188, видеодекодер 30 включает пиксельное значение в палитры 192. Когда пиксельные позиции, декодированные относительно позднее во второй CU 188, имеют пиксельные значения, которые добавлены во вторые палитры 192, видеодекодер 30 может принимать информацию, такую как, например, значения индекса, которые идентифицируют соответствующие пиксельные значения во вторых палитрах 192 для восстановления пиксельных значений второй CU 188.
[0195] В некоторых примерах, как подробнее описано ниже, видеокодер 20 и/или видеодекодер 30 может поддерживать палитры 184 и 192 равными или ниже максимального размера палитры. Согласно аспектам этого раскрытия сущности, если максимальный размер палитры достигнут, например, поскольку вторые палитры 192 составляются динамически на лету, то видеокодер 20 и/или видеодекодер 30 выполняет идентичный процесс, чтобы удалять запись вторых палитр 192. Один примерный процесс для удаления записей палитры представляет собой технологию "первый на входе - первый на выходе" (FIFO), в которой видеокодер 20 и видеодекодер 30 удаляют самую старую запись палитры. В другом примере, видеокодер 20 и видеодекодер 30 могут удалять наименее часто используемую запись палитры из палитры. В еще одном другом примере, видеокодер 20 и видеодекодер 30 могут взвешивать процессы FIFO и частоты использования, чтобы определять то, какую запись следует удалять. Иными словами, удаление записи может быть основано на том, насколько старой является запись и как часто она используется.
[0196] Согласно некоторым аспектам, если запись (пиксельное значение) удалена из палитры, и пиксельное значение возникает снова в последующей позиции в кодируемой CU, видеокодер 20 может кодировать пиксельное значение вместо включения записи в палитру и кодирования индекса. Дополнительно или альтернативно, видеокодер 20 может повторно вводить записи палитры в палитру после удаления, например, по мере того, как видеокодер 20 и видеодекодер 30 сканируют позиции в CU.
[0197] В некоторых примерах, технологии для извлечения палитры на лету могут быть комбинированы с одной или более других технологий для определения палитры. В частности, в качестве примера, видеокодер 20 и видеодекодер 30 могут первоначально кодировать вторые палитры 192 (например, с использованием палитрового прогнозирования для того, чтобы прогнозировать вторые палитры 192 из первых палитр 184) и могут обновлять вторые палитры 192 при кодировании пикселов второй CU 188. Например, после передачи начальной палитры, видеокодер 20 может добавлять значения в начальную палитру или изменять значения в начальной палитре по мере того, как сканируются пиксельные значения дополнительных местоположений в CU. Аналогично, после приема начальной палитры, видеодекодер 30 может добавлять (т.е. включать) значения в начальную палитру, или изменять значения в начальной палитре по мере того, как сканируются пиксельные значения дополнительных местоположений в CU.
[0198] Видеокодер 20, в некоторых примерах, может передавать в служебных сигналах то, использует текущая CU передачу всей палитры либо формирование палитры на лету, либо комбинацию передачи начальной палитры с обновлением начальной палитры посредством извлечения на лету. В некоторых примерах, начальная палитра может быть полной палитрой с максимальным размером палитры, и в этом случае значения в начальной палитре могут изменяться. В других примерах, начальная палитра может быть меньше максимального размера палитры, и в этих случаях видеокодер 20 и видеодекодер 30 могут добавлять значения в и/или изменять значения начальной палитры.
[0199] Согласно одному или более аспектов этого раскрытия сущности, размер палитр, к примеру, первых палитр 184 и вторых палитр 192, например, с точки зрения числа пиксельных значений, которые включены в палитру, может быть фиксированным или может передаваться в служебных сигналах с использованием одного или более элементов синтаксиса в кодированном потоке битов. Например, согласно некоторым аспектам, видеокодер 20 и видеодекодер 30 могут использовать унарные коды или усеченные унарные коды (например, коды, которые усекаются при максимальном пределе размера палитры) для того, чтобы кодировать размер палитры. Согласно другим аспектам, видеокодер 20 и видеодекодер 30 могут использовать экспоненциальные коды Голомба или коды Райса-Голомба для того, чтобы кодировать размер палитры.
[0200] Согласно еще одним другим аспектам, видеокодер 20 и видеодекодер 30 могут кодировать данные, указывающие размер палитры после каждой записи палитры. Относительно вторых палитр 192 в качестве примера, видеокодер 20 может кодировать флаг прекращения после каждой из записей 208-214. В этом примере, флаг прекращения, равный единице, может указывать то, что запись, в данный момент кодируемая, является конечной записью вторых палитр 192, тогда как флаг прекращения, равный нулю, может указывать то, что существуют дополнительные записи во вторых палитрах 192. Соответственно, видеокодер 20 может кодировать флаги прекращения, имеющие значение в нуль, после каждой из записей 208-212, и флаг прекращения, имеющий значение в единицу, после записи 214. В некоторых случаях, флаг прекращения не может быть включен в поток битов при достижении посредством составленной палитры предела в отношении максимального размера палитры. Хотя вышеприведенные примеры раскрывают технологии для явной передачи в служебных сигналах размера палитр, в других примерах, размер палитр также может условно передаваться или логически выводиться на основе так называемой вспомогательной информации (например, характеристической информации, такой как размер кодируемой CU, тип кадра, цветовое пространство, цветовой компонент, размер кадра, частота кадров, идентификатор слоя при масштабируемом кодировании видео или идентификатор вида при многовидовом кодировании, как отмечено выше).
[0201] Технологии этого раскрытия сущности включают в себя кодирование данных без потерь, или, альтернативно, с некоторыми потерями (кодирование с потерями). Например, относительно кодирования с потерями, видеокодер 20 может кодировать пикселы CU без точного сопоставления пиксельных значений палитр строго с фактическими пиксельными значениями в CU. Когда технологии этого раскрытия сущности применяются к кодированию с потерями, некоторые ограничения могут применяться к палитре. Например, видеокодер 20 и видеодекодер 30 могут квантовать палитры, к примеру, первые палитры 184 и вторые палитры 192. Иными словами, видеокодер 20 и видеодекодер 30 могут объединять или комбинировать (т.е. квантовать) записи палитры, когда пиксельные значения записей находятся в пределах предварительно определенного диапазона друг от друга. Другими словами, если уже существует значение палитры, которое находится в пределах допустимой ошибки нового значения палитры, новое значение палитры не добавляется в палитру. В другом примере, множество различных пиксельных значений в блоке может преобразовываться в одну запись палитры, или, эквивалентно, в одно пиксельное значение палитры.
[0202] Видеодекодер 30 может декодировать пиксельные значения таким же образом, независимо от того, является конкретная палитра без потерь или с потерями. В качестве одного примера, видеодекодер 30 может использовать значение индекса, передаваемое посредством видеокодера 20 для данной пиксельной позиции в кодированном блоке, чтобы выбирать запись в палитре для пиксельной позиции, безотносительно того, является палитра без потерь или с потерями. В этом примере, пиксельное значение записи палитры используется в качестве пиксельного значения в кодированном блоке независимо от того, совпадает оно с исходным пиксельным значением точно или нет.
[0203] В примере кодирования с потерями, для целей иллюстрации, видеокодер 20 может определять границу ошибок, называемую дельта-значением. Возможный вариант Plt_cand записи пиксельного значения может соответствовать пиксельному значению в позиции в блоке, который должен быть кодирован, к примеру, CU или PU. Во время составления палитры видеокодер 20 определяет абсолютную разность между возможным вариантом Plt_cand записи пиксельного значения и всеми существующими записями пиксельных значений в палитре. Если все абсолютные разности между возможным вариантом Plt_cand записи пиксельного значения и существующими записями пиксельных значений в палитре превышают дельта-значение, видеокодер 20 может добавлять возможный вариант пиксельного значения в палитру в качестве записи. Если абсолютная разность между записью Plt_cand пиксельного значения и, по меньшей мере, одной существующей записью пиксельного значения в палитре равна или меньше дельта-значения, видеокодер 20 не может добавлять возможный вариант Plt_cand записи пиксельного значения в палитру. Таким образом, при кодировании записи Plt_cand пиксельного значения, видеокодер 20 может выбирать запись с пиксельным значением, которая является ближайшей к записи Plt_cand пиксельного значения, в силу этого вводя некоторые потери в систему. Когда палитра состоит из нескольких компонентов (например, трех цветовых компонентов), сумма абсолютных разностей отдельных значений компонентов может использоваться для сравнения с дельта-значением. Альтернативно или дополнительно, абсолютная разность для каждого значения компонента может сравниваться со вторым дельта-значением.
[0204] В некоторых примерах, существующие записи пиксельных значений в палитре, отмеченной выше, возможно, добавлены с использованием аналогичного процесса дельта-сравнения. В других примерах, существующие пиксельные значения в палитре, возможно, добавлены с использованием других процессов. Например, одна или более начальных записей пиксельных значений могут добавляться в палитру (без дельта-сравнения), чтобы начинать процесс дельта-сравнения для составления палитры. Процесс, описанный выше, может реализовываться посредством видеокодера 20 и/или видеодекодера 30, чтобы формировать палитры сигналов яркости и/или сигналов цветности.
[0205] Технологии, описанные выше относительно составления палитры, также могут использоваться посредством видеокодера 20 и видеодекодера 30 во время пиксельного кодирования. Например, при кодировании пиксельного значения, видеокодер 20 может сравнивать значение пиксела с пиксельными значениями записей в палитре. Если абсолютная разность пиксельных значений между значением пиксела и одной из записей в палитре равна или меньше дельта-значения, видеокодер 20 может кодировать пиксельное значение в качестве записи палитры. Иными словами, в этом примере, видеокодер 20 кодирует пиксельное значение с использованием одной из записей палитры, когда пиксельное значение формирует достаточно небольшую (например, в предварительно определенном диапазоне) абсолютную разность по сравнению с записью палитры.
[0206] В некоторых примерах, видеокодер 20 может выбирать запись палитры, которая дает в результате наименьшую абсолютную разность пиксельных значений (по сравнению с кодируемым пиксельным значением), чтобы кодировать пиксельное значение. В качестве примера, видеокодер 20 может кодировать индекс, чтобы указывать запись палитры, которая используется для пиксельного значения, например, запись пиксельного значения палитры, которая используется для того, чтобы восстанавливать кодированное пиксельное значение в видеодекодере 30. Если абсолютная разность пиксельных значений между значением пиксела и всеми записями в палитре превышает дельту, кодер может не использовать одну из записей палитры, чтобы кодировать пиксельное значение, а вместо этого может передавать пиксельное значение пиксела (возможно после квантования) в видеодекодер 30 (и возможно добавлять пиксельное значение в качестве записи в палитру).
[0207] В другом примере, видеокодер 20 может выбирать запись палитры для кодирования пиксельного значения. Видеокодер 20 может использовать выбранную запись в качестве прогнозирующего пиксельного значения. Иными словами, видеокодер 20 может определять остаточное значение, представляющее разность между фактическим пиксельным значением и выбранной записью, и кодировать остаток. Видеокодер 20 может формировать остаточные значения для пикселов в блоке, которые прогнозируются посредством записей палитры, и может формировать блок остатков, включающий в себя соответствующие остаточные пиксельные значения для блока пикселов. Видеокодер 20 затем может применять преобразование и квантование (как отмечено выше относительно фиг. 2) к блоку остатков. Таким образом, видеокодер 20 может формировать квантованные остаточные коэффициенты преобразования. В другом примере, остаток может кодироваться без потерь (без преобразования и квантования) или без преобразования.
[0208] Видеодекодер 30 может обратно преобразовывать и обратно квантовать коэффициенты преобразования для того, чтобы воспроизводить остаточный блок. Видеодекодер 30 затем может восстанавливать пиксельное значение с использованием входного значения прогнозирующей палитры и остаточного значения для пиксельного значения. Например, видеодекодер 30 может комбинировать остаточное значение со значением записи палитры, чтобы восстанавливать кодированное пиксельное значение.
[0209] В некоторых примерах, дельта-значение может отличаться для различных CU-размеров, размеров изображений, цветовых пространств или различных цветовых компонентов. Дельта-значение может быть предварительно определено или определено на основе различных условий кодирования. Например, видеокодер 20 может передавать в служебных сигналах дельта-значение в видеодекодер 30 с использованием высокоуровневого синтаксиса, к примеру, синтаксиса в PPS, SPS, VPS и/или в заголовке серии последовательных макроблоков. В других примерах, видеокодер 20 и видеодекодер 30 могут быть предварительно сконфигурированы с возможностью использовать идентичное фиксированное дельта-значение. В еще одних других примерах, видеокодер 20 и/или видеодекодер 30 может адаптивно извлекать дельта-значение на основе вспомогательной информации (например, такой как CU-размер, цветовое пространство, цветовой компонент и т.п., как отмечено выше).
[0210] В некоторых примерах, палитровый режим кодирования с потерями может быть включен в качестве режима HEVC-кодирования. Например, режимы кодирования могут включать в себя режим внутреннего прогнозирования, режим взаимного прогнозирования, палитровый режим кодирования без потерь и палитровый режим кодирования с потерями. При HEVC-кодировании, как отмечено выше относительно фиг. 2 и 3, параметр квантования (QP) используется для того, чтобы управлять разрешенным искажением. Значение дельты для кодирования на основе палитр может вычисляться или иным способом определяться в качестве функции QP. Например, вышеописанное дельта-значение может быть равным 1<<(QP/6) или 1<<((QP+d)/6), где d является константой, и"<<" представляет оператор побитового сдвига влево.
[0211] Формирование палитры с использованием технологий кодирования с потерями, описанных в этом раскрытии сущности, может выполняться посредством видеокодера 20, видеодекодера 30 или и того, и другого. Например, видеокодер 20 может формировать записи в палитре для CU с использованием технологий дельта-сравнения, описанных выше, и передавать в служебных сигналах информацию для составления палитры для использования посредством видеодекодера 30. Иными словами, видеокодер 20 может быть выполнен с возможностью передавать в служебных сигналах информацию, указывающую пиксельные значения для записей в палитре для CU, и затем кодировать пиксельные значения с использованием пиксельных значений, ассоциированных с такими записями палитры. Видеодекодер 30 может составлять палитру с использованием этой информации и затем может использовать записи для того, чтобы декодировать пиксельные значения кодированного блока. В некоторых примерах, видеокодер 20 может передавать в служебных сигналах значения индекса, которые идентифицируют записи палитры для одной или более пиксельных позиций кодированного блока, и видеодекодер 30 может использовать значения индекса для того, чтобы извлекать применимые записи пиксельных значений из палитры.
[0212] В других примерах, видеодекодер 30 может быть выполнен с возможностью составлять палитру посредством применения технологий дельта-сравнения, описанных выше. Например, видеодекодер 30 может принимать пиксельные значения для позиций в кодированном блоке и может определять то, превышают или нет абсолютные разности между пиксельными значениями и существующими записями пиксельных значений в палитре дельта-значение. Если да, видеодекодер 30 может добавлять пиксельные значения в качестве записей в палитру, например, для последующего использования при декодировании на основе палитр пиксельных значений для других пиксельных позиций блока с использованием соответствующих значений индекса, передаваемых в служебных сигналах посредством видеокодера 20. В этом случае, видеокодер 20 и видеодекодер 30 применяют идентичные или аналогичные процессы для того, чтобы формировать палитру. Если нет, видеодекодер 30 может не добавлять пиксельные значения в палитру.
[0213] В примере для целей иллюстрации, видеодекодер 30 может принимать значения индекса или пиксельные значения для различных пиксельных позиций в блоке. Если значение индекса принимается для пиксельной позиции, например, видеодекодер 30 может использовать значение индекса для того, чтобы идентифицировать запись в палитре и использовать пиксельное значение записи палитры для пиксельной позиции. Если пиксельное значение принимается для пиксельной позиции, видеодекодер 30 может использовать принимаемое пиксельное значение для пиксельной позиции и также может применять дельта-сравнение, чтобы определять то, должно или нет пиксельное значение добавляться в палитру и затем впоследствии использоваться для палитрового кодирования.
[0214] На стороне кодера, если пиксельное значение для позиции в блоке формирует абсолютную разность между пиксельным значением и существующей записью пиксельного значения в палитре, которая меньше или равна дельта-значению, видеокодер 20 может отправлять значение индекса для того, чтобы идентифицировать запись в палитре для использования при восстановлении пиксельного значения для этой позиции. Если пиксельное значение для позиции в блоке формирует значения абсолютной разности между пиксельным значением и существующими записями пиксельных значений в палитре, которые превышают дельта-значение, видеокодер 20 может отправлять пиксельное значение и может добавлять пиксельное значение в качестве новой записи в палитру. Чтобы составлять палитру, видеодекодер 30 может использовать дельта-значения, передаваемые в служебных сигналах посредством кодера, основываться на фиксированном или известном дельта-значении либо логически выводить или извлекать дельта-значение, например, как описано выше.
[0215] Как отмечено выше, видеокодер 20 и/или видеодекодер 30 может использовать режимы кодирования, включающие в себя режим внутреннего прогнозирования, режим взаимного прогнозирования, палитровый режим кодирования без потерь и палитровый режим кодирования с потерями, при кодировании видеоданных. Согласно некоторым аспектам этого раскрытия сущности, видеокодер 20 и видеодекодер 30 могут кодировать один или более элементов синтаксиса, указывающих то, активируется или нет кодирование на основе палитр. Например, в каждой CU, видеокодер 20 может кодировать элемент синтаксиса, к примеру, флаг PLT_Mode_flag. PLT_Mode_flag или другой элемент синтаксиса может указывать то, должен или нет режим кодирования на основе палитр использоваться для данной CU (или PU в других примерах). Например, этот флаг может передаваться в служебных сигналах в кодированном потоке видеобитов на уровне CU и затем приниматься посредством видеодекодера 30 после декодирования кодированного потока видеобитов.
[0216] В этом примере, значение этого PLT_Mode_flag, равное 1, может указывать то, что текущая CU кодируется с использованием режима кодирования на основе палитр. В этом случае, видеодекодер 30 может применять режим кодирования на основе палитр для того, чтобы декодировать CU. В некоторых примерах, элемент синтаксиса может указывать один из множества различных режимов кодирования на основе палитр для CU (например, с потерями или без потерь). Значение этого PLT_Mode_flag, равное 0, может указывать то, что текущая CU кодируется с использованием режима, отличного от палитрового режима. Например, может использоваться любой из множества взаимных прогнозирующих, внутренних прогнозирующих или других режимов кодирования. Когда значение PLT_Mode_flag равно 0, видеокодер 20 также может кодировать дополнительные данные для того, чтобы указывать конкретный режим, используемый для кодирования соответствующей CU (например, режим HEVC-кодирования). Использование PLT_Mode_flag описывается для целей примера. Тем не менее, в других примерах, другие элементы синтаксиса, к примеру, многобитовые коды могут использоваться для того, чтобы указывать то, должен или нет режим кодирования на основе палитр использоваться для CU (или PU в других примерах), либо указывать то, какой из множества режимов должен использоваться для кодирования.
[0217] В некоторых примерах, вышеописанный флаг или другие элементы синтаксиса могут передаваться на более высоком уровне по сравнению с уровнем CU (или PU). Например, видеокодер 20 может передавать в служебных сигналах такой флаг на уровне серии последовательных макроблоков. В этом случае, значение, равное 1, указывает то, что все CU в серии последовательных макроблоков кодируются с использованием палитрового режима. В этом примере, дополнительная информация режима, например, для палитрового режима или других режимов, не передается в служебных сигналах на уровне CU. В другом примере, видеокодер 20 может передавать в служебных сигналах такой флаг в PPS, SPS или VPS.
[0218] Согласно некоторым аспектам этого раскрытия сущности, видеокодер 20 и/или видеодекодер 30 может кодировать один или более элементов синтаксиса (например, такой как вышеописанный флаг) на одном из уровней серии последовательных макроблоков, PPS, SPS или VPS, указывающих то, активирован или деактивирован палитровый режим для конкретной серии последовательных макроблоков, изображения, последовательности и т.п., тогда как PLT_Mode_flag указывает то, используется или нет режим кодирования на основе палитр для каждой CU. В том случае, если флаг или другой элемент синтаксиса, отправленный на уровне серии последовательных макроблоков, PPS, SPS или VPS, указывает то, что режим палитрового кодирования деактивируется, в некоторых примерах, может не возникать потребности передавать в служебных сигналах PLT_Mode_flag для каждой CU. Альтернативно, если флаг или другой элемент синтаксиса, отправленный на уровне серии последовательных макроблоков, PPS, SPS или VPS, указывает то, что режим палитрового кодирования активируется, PLT_Mode_flag может быть дополнительно передан в служебных сигналах, чтобы указывать то, должен или нет режим кодирования на основе палитр использоваться для каждой CU. С другой стороны, как упомянуто выше, применение этих технологий для указания кодирования на основе палитр CU дополнительно или альтернативно может использоваться для того, чтобы указывать кодирование на основе палитр PU.
[0219] В некоторых примерах, вышеописанные элементы синтаксиса могут быть условно переданы в служебных сигналах в потоке битов. Например, видеокодер 20 и видеодекодер 30 могут кодировать или декодировать, соответственно, только элементы синтаксиса на основе размера CU, типа кадра, цветового пространства, цветового компонента, размера кадра, частоты кадров, идентификатора слоя при масштабируемом кодировании видео или идентификатора вида при многовидовом кодировании.
[0220] Хотя примеры, описанные выше, относятся к явной передаче служебных сигналов, например, с помощью одного или более элементов синтаксиса в потоке битов, в других примерах, видеокодер 20 и/или видеодекодер 30 может неявно определять то, является или нет режим палитрового кодирования активным и/или используемым для кодирования конкретного блока. Видеокодер 20 и видеодекодер 30 могут определять то, используется или нет кодирование на основе палитр для блока, например, на основе размера CU, типа кадра, цветового пространства, цветового компонента, размера кадра, частоты кадров, идентификатора слоя при масштабируемом кодировании видео или идентификатора вида при многовидовом кодировании.
[0221] Хотя технологии по фиг. 4 описываются выше в контексте CU (HEVC), следует понимать, что технологии также могут применяться к единицам прогнозирования (PU) или в других процессах и/или стандартах кодирования видео.
[0222] Фиг. 5 является концептуальной схемой, иллюстрирующей примеры определения индексов для палитры для видеоблока, в соответствии с технологиями этого раскрытия сущности. Например, фиг. 5 включает в себя карту 240 значений индекса (значения 1, 2 и 3), которые связывают соответствующие позиции пикселов, ассоциированных со значениями индекса, с записью палитр 244. Палитры 244 могут определяться аналогично первым палитрам 184 и вторым палитрам 192, описанным выше относительно фиг. 4.
[0223] С другой стороны, технологии по фиг. 5 описываются в контексте видеокодера 20 (фиг. 1 и фиг. 2) и видеодекодера 30 (фиг. 1 и фиг. 3) и относительно стандарта HEVC-кодирования видео для целей пояснения. Тем не менее, следует понимать, что технологии этого раскрытия сущности не ограничены в этом отношении и могут применяться посредством других процессоров и/или устройств кодирования видео в других процессах и/или стандартах кодирования видео.
[0224] Хотя карта 240 проиллюстрирована в примере по фиг. 5 как включающая в себя значение индекса для каждой пиксельной позиции, следует понимать, что в других примерах, не все пиксельные позиции могут быть ассоциированы со значением индекса, которое указывает запись палитр 244, которые указывают пиксельное значение блока. Иными словами, как отмечено выше, в некоторых примерах, видеокодер 20 может кодировать (и видеодекодер 30 может получать из кодированного потока битов) индикатор относительно фактического пиксельного значения (либо его квантованной версии) для позиции на карте 240, если пиксельное значение не включено в палитры 244.
[0225] В некоторых примерах, видеокодер 20 и видеодекодер 30 могут быть выполнены с возможностью кодировать дополнительную карту, указывающую то, какие пиксельные позиции ассоциированы со значениями индекса. Например, допустим, что запись (i, j) на карте соответствует позиции (i, j) CU. Видеокодер 20 может кодировать один или более элементов синтаксиса для каждой записи карты (т.е. каждой пиксельной позиции), указывающих то, имеет или нет запись ассоциированное значение индекса. Например, видеокодер 20 может кодировать флаг, имеющий значение в единицу, чтобы указывать то, что пиксельное значение в местоположении (i, j) в CU является одним из значений в палитрах 244. Видеокодер 20, в таком примере, также может кодировать индекс палитры (показанный в примере по фиг. 5 как значения 1-3), чтобы указывать это пиксельное значение в палитре и давать возможность видеодекодеру восстанавливать пиксельное значение. В случаях, в которых палитры 244 включают в себя одну запись и ассоциированное пиксельное значение, видеокодер 20 может пропускать передачу в служебных сигналах значения индекса. Видеокодер 20 может кодировать флаг таким образом, что он имеет значение в нуль, чтобы указывать то, что пиксельное значение в местоположении (i, j) в CU не является одним из значений в палитрах 244. В этом примере, видеокодер 20 также может кодировать индикатор относительно пиксельного значения для использования посредством видеодекодера 30 при восстановлении пиксельного значения. В некоторых случаях, пиксельное значение может кодироваться с потерями.
[0226] Значение пиксела в одной позиции CU может предоставлять индикатор относительно значений одного или более других пикселов в других позициях CU. Например, может быть относительно высокая вероятность того, что позиции соседнего пиксела CU имеют идентичное пиксельное значение или могут преобразовываться в идентичное значение индекса (в случае кодирования с потерями, в котором более одного пиксельного значения могут преобразовываться в одно значение индекса).
[0227] Соответственно, согласно аспектам этого раскрытия сущности, видеокодер 20 может кодировать один или более элементов синтаксиса, указывающих число последовательных пикселов или значений индекса в данном порядке сканирования, которые имеют идентичное значение пиксельного значения или индекса. Как отмечено выше, строка подобнозначных пиксельных значений или значений индекса может упоминаться в данном документе как серия. В примере для целей иллюстрации, если два последовательных пиксела или индекса в данном порядке сканирования имеют различные значения, серия равна нулю. Если два последовательных пиксела или индекса в данном порядке сканирования имеют идентичное значение, но третий пиксел или индекс в порядке сканирования имеет другое значение, серия равна единице. Для трех последовательных индексов или пикселов с идентичным значением, серия равна двум, и т.д. Видеодекодер 30 может получать элементы синтаксиса, указывающие серию из кодированного потока битов, и использовать данные для того, чтобы определять число последовательных местоположений, которые имеют идентичное пиксельное значение или значение индекса.
[0228] В некоторых примерах, все пиксельные местоположения в текущей CU, имеющей пиксельные значения, которые находятся в палитре для текущей CU, кодируются с индексом палитры, после которого следует "серия" пиксельного значения в последовательных пиксельных местоположениях. В случае если существует только одна запись в палитре, передача индекса палитры или "серии" может пропускаться для текущей CU. В случае если пиксельное значение в одном из пиксельных местоположений в текущей CU не имеет точного совпадения с пиксельным значением в палитре, видеокодер 20 может выбирать одну из записей палитры, имеющих ближайшее пиксельное значение, и может вычислять ошибку прогнозирования или остаточное значение между исходным пиксельным значением и прогнозным пиксельным значением, включенными в палитру. Видеокодер 20 кодирует и передает остаточное значение для пиксельного местоположения в видеодекодер. Видеодекодер 30 затем может получать пиксельное значение в пиксельном местоположении на основе соответствующего принимаемого индекса палитры, и полученное пиксельное значение и остаточное значение затем используются для того, чтобы прогнозировать исходное пиксельное значение в пиксельном местоположении в текущей CU. В одном примере, остаточное значение кодируется с использованием HEVC-способа, указываемого посредством HEVC-проекта 10, такого как применение RQT для того, чтобы преобразовывать остаточное значение, квантовать коэффициенты преобразования и энтропийно кодировать квантованные коэффициенты преобразования. В некоторых случаях, вышеприведенный пример может упоминаться в качестве кодирования с потерями.
[0229] В примере для целей иллюстрации, рассмотрим линию 248 карты 240. При условии направления сканирования по горизонтали слева направо, линия 248 включает в себя пять значений индекса "2" и три значения индекса "3". Согласно аспектам этого раскрытия сущности, видеокодер 20 может кодировать значение индекса 2 для первой позиции линии 248 в направлении сканирования. Помимо этого, видеокодер 20 может кодировать один или более элементов синтаксиса, указывающих серию последовательных значений в направлении сканирования, которые имеют значение индекса, идентичное передаваемому в служебных сигналах значению индекса. В примере линии 248, видеокодер 20 может передавать в служебных сигналах серию 4, в силу этого указывая то, что значения индекса следующих четырех позиций в направлении сканирования совместно используют значение индекса, идентичное передаваемому в служебных сигналах значению значение индекса, идентичное передаваемому в служебных сигналах значению индекса. Видеокодер 20 может выполнять идентичный процесс для следующего другого значения индекса в линии 248. Иными словами, видеокодер 20 может кодировать значение индекса 3 и один или более элементов синтаксиса, указывающих серию в два. Видеодекодер 30 может получать элементы синтаксиса, указывающие значение индекса и число последовательных индексов в направлении сканирования, имеющем идентичное значение индекса (серию).
[0230] Как отмечено выше, индексы карты сканируются в конкретном порядке. Согласно аспектам этого раскрытия сущности, направление сканирования может быть вертикальным, горизонтальным или по диагонали (например, на 45 градусов или 135 градусов по диагонали в блоке). В некоторых примерах, видеокодер 20 может кодировать один или более элементов синтаксиса для каждого блока, указывающего направление сканирования для сканирования индексов блока. Дополнительно или альтернативно, направление сканирования может передаваться в служебных сигналах или логически выводиться на основе так называемой вспомогательной информации, такой как, например, размер блока, цветовое пространство и/или цветовой компонент. Видеокодер 20 может указывать сканирования для каждого цветового компонента блока. Альтернативно, указанное сканирование может применяться ко всем цветовым компонентам блока.
[0231] Например, относительно сканирования на основе столбцов, рассмотрим столбец 252 карты 240. При условии направления сканирования по вертикали сверху вниз, столбец 252 включает в себя одно значение индекса "1", пять значений индекса "2" и два значения индекса "3". Согласно аспектам этого раскрытия сущности, видеокодер 20 может кодировать значение индекса 1 для первой позиции линии 252 в направлении сканирования (в относительном начале столбца 252). Помимо этого, видеокодер 20 может передавать в служебных сигналах серию нуль, в силу этого указывая то, что значение индекса следующей позиции в направлении сканирования отличается. Видеокодер 20 затем может кодировать значение индекса 2 для следующей позиции в направлении сканирования и один или более элементов синтаксиса, указывающих серию в четыре, т.е. что значения индекса следующих четырех позиций в направлении сканирования совместно используют значение индекса, идентичное передаваемому в служебных сигналах значению индекса. Видеокодер 20 затем может кодировать значение индекса 3 для следующего другого значения индекса в направлении сканирования и один или более элементов синтаксиса, указывающих серию в единицу. Видеодекодер 30 может получать элементы синтаксиса, указывающие значение индекса и число последовательных индексов в направлении сканирования, имеющем идентичное значение индекса (серию).
[0232] Согласно аспектам этого раскрытия сущности, видеокодер 20 и видеодекодер 30 дополнительно или альтернативно могут выполнять линейное копирование для одной или более записей карты 240. Линейное копирование может зависеть, в некоторых примерах, от направления сканирования. Например, видеокодер 20 может указывать то, что пиксельное значение или значение индекса для конкретной записи на карте равно пиксельному значению или значению индекса в линии выше конкретной записи (для горизонтального сканирования) или в столбце слева от конкретной записи (для вертикального сканирования). Видеокодер 20 также может указывать, в качестве серии, число пиксельных значений или значений индекса в порядке сканирования, которые равны записи в линии выше или в столбце слева от конкретной записи. В этом примере, видеокодер 20 и/или видеодекодер 30 может копировать пиксельные значения или значения индекса из указанной соседней линии и из указанного числа записей для линии карты, в данный момент кодируемой.
[0233] В примере для целей иллюстрации, рассмотрим столбцы 256 и 260 карты 240. При условии направления сканирования по вертикали сверху вниз, столбец 256 включает в себя три значения индекса "1", три значения индекса "2" и два значения индекса "3". Столбец 260 включает в себя идентичные значения индекса, имеющие идентичный порядок в направлении сканирования. Согласно аспектам этого раскрытия сущности, видеокодер 20 может кодировать один или более элементов синтаксиса для столбца 260, указывающих то, что весь столбец 260 копируется из столбца 256. Один или более элементов синтаксиса могут быть ассоциированы с первой записью столбца 260 в относительном начале карты 240. Видеодекодер 30 может получать элементы синтаксиса, указывающие линейное копирование, и копировать значения индекса столбца 256 для столбца 260 при декодировании столбца 260.
[0234] Согласно аспектам этого раскрытия сущности, технологии для кодирования так называемых серий записей могут использоваться в сочетании с технологиями для линейного копирования, описанными выше. Например, видеокодер 20 может кодировать один или более элементов синтаксиса (например, флаг), указывающих то, получается значение записи на карте из палитры, либо значение записи на карте получается из ранее кодированной линии на карте 240. Видеокодер 20 также может кодировать один или более элементов синтаксиса, указывающих значение индекса палитры или местоположение записи в линии (строке или столбце). Видеокодер 20 также может кодировать один или более элементов синтаксиса, указывающих число последовательных записей, которые совместно используют идентичное значение. Видеодекодер 30 может получать эту информацию из кодированного потока битов и может использовать информацию для того, чтобы восстанавливать карту и пиксельные значения для блока.
[0235] В примере для целей иллюстрации, рассмотрим строки 264 и 268 карты 240. При условии направления сканирования по горизонтали слева направо, строка 264 включает в себя пять значений индекса "1" и три значения индекса "3". Строка 268 включает в себя три значения индекса "1", два значения индекса "2" и три значения индекса "3". В этом примере, видеокодер 20 может идентифицировать конкретные записи строки 264, после которых следует серия при кодировании данных для строки 268. Например, видеокодер 20 может кодировать один или более элементов синтаксиса, указывающих то, что первая позиция строки 268 (самая левая позиция строки 268) является идентичной первой позиции строки 264. Видеокодер 20 также может кодировать один или более элементов синтаксиса, указывающих то, что следующая серия из двух последовательных записей в направлении сканирования в строке 268 является идентичной первой позиции строки 264.
[0236] В некоторых примерах, видеокодер 20 также может определять то, следует кодировать текущее пиксельное значение или значение индекса относительно позиции в другой строке (или столбце) либо кодировать текущее пиксельное значение или значение индекса с использованием элемента синтаксиса серии. Например, после кодирования одного или более элементов синтаксиса, указывающих первую позицию строки 264 и серию из двух записей (отмеченных выше), видеокодер 20 может кодировать, для четвертой и пятой позиций в линии 268 (слева направо), один или более элементов синтаксиса, указывающих значение 2 для четвертой позиции, и один или более элементов синтаксиса, указывающих серию 1. Следовательно, видеокодер 20 кодирует эти две позиции независимо от другой линии (или столбца). Видеокодер 20 затем может кодировать первую позицию, имеющую значение индекса 3 в строке 268 относительно верхней строки 264 (например, указывающую копию из верхней строки 264 и серию последовательных позиций в порядке сканирования, имеющих идентичное значение индекса). Следовательно, согласно аспектам этого раскрытия сущности, видеокодер 20 может выбирать между кодированием пиксельных значений или значений индекса линии (или столбца) относительно других значений линии (или столбца), например, с использованием серии, кодированием пиксельных значений или значений индекса линии (или столбца) относительно значений другой линии (или столбца) либо комбинацией вышеозначенного. В некоторых примерах, видеокодер 20 может выполнять оптимизацию искажения в зависимости от скорости передачи для того, чтобы осуществлять выбор.
[0237] Видеодекодер 30 может принимать элементы синтаксиса, описанные выше, и может восстанавливать строку 268. Например, видеодекодер 30 может получать данные, указывающие конкретное местоположение в соседней строке, из которой можно копировать ассоциированное значение индекса для позиции карты 240, в данный момент кодируемой. Видеодекодер 30 также может получать данные, указывающие число последовательных позиций в порядке сканирования, имеющих идентичное значение индекса.
[0238] В некоторых случаях, линия, из которой копируются записи, может быть непосредственно смежной с записью линии, в данный момент кодируемой (как проиллюстрировано в примерах по фиг. 5). Тем не менее, в других примерах, число линий может быть буферизовано посредством видеокодера 20 и/или видеодекодера 30, так что любая из определенного числа линий карты может использоваться в качестве прогнозирующих записей для линии карты, в данный момент кодируемой. Следовательно, в некоторых примерах, пиксельное значение для записи может передаваться в служебных сигналах таким образом, что оно равно пиксельному значению записи в строке непосредственно выше (или в столбце слева) либо в двух или более строках выше (или в столбце слева) относительно текущей строки.
[0239] В примере для целей иллюстрации, видеокодер 20 и/или видеодекодер 30 может быть выполнен с возможностью сохранять предыдущие n строк записей до кодирования текущей строки записей. В этом примере, видеокодер 20 может указывать прогнозирующую строку (строку, из которой копируются записи) в потоке битов с усеченным унарным кодом или другими кодами. В другом примере, видеокодер 20 может кодировать (и видеодекодер 30 может декодировать) значение смещения между текущей линией и прогнозирующей линией карты 240, используемой в качестве опорной для кодирования текущей линии. Иными словами, видеокодер 20 может кодировать индикатор относительно конкретной линии (или столбца), из которой копируется значение индекса. В некоторых примерах, значение смещения может быть вектором смещения. Иными словами, пусть c[0], c[1]..., обозначают индексы текущей линии карты 240, и пусть u[0], u[1], u[2]..., обозначают индексы прогнозирующей линии карты 240, такой как верхняя соседняя линия. В этом примере, с учетом того, что вектор смещения составляет d, значение индекса для c[i] может прогнозироваться из u[i+d] или u[i-d], чтобы не допускать d, принимающего отрицательные значения. Значение d может кодироваться с использованием унарных кодов, усеченных унарных кодов, экспоненциальных кодов Голомба или кодов Голомба-Райса.
[0240] В качестве другого примера, видеокодер 20 может передавать в служебных сигналах инструкцию, такую как "копирование из левой половины верхней линии" или "копирование из правой половины верхней линии", указывающую соседнюю линию и число или часть записей соседней линии, которые следует копировать в линию карты, в данный момент кодируемой. В качестве дополнительного примера, карта значений индекса может быть переупорядочена перед кодированием. Например, карта значений индекса может быть циклически сдвинута на 90, 180 или 270 градусов либо переворачиваться сверху вниз или слева направо, с тем чтобы повышать эффективность кодирования.
[0241] В других примерах, видеокодер 20 не может передавать серии подобнозначных значений индекса карты 240 в видеодекодер 30. В этом случае, видеокодер 20 и/или видеодекодер 30 может неявно извлекать значения серий. В одном примере, значение серии может быть постоянным значением, например, 4, 8, 16 и т.п. В другом примере, значение серии может зависеть от вспомогательной информации для кодируемого текущего блока видеоданных, такой как, например, размер блока, параметр квантования (QP), тип кадра, цветовой компонент, цветовой формат (например, 4:4:4, 4:2:2 или 4:2:0), цветовое пространство (например, YUV или RGB), направление сканирования и/или другие типы характеристической информации для текущего блока. В случае если значение серии зависит от размера блока, серия может быть равна ширине текущего блока, высоте текущего блока, полуширине (или полувысоте) текущего блока, части ширины и/или высоты текущего блока или кратному числу от ширины и/или высоты текущего блока. В другом примере, видеокодер 20 может передавать в служебных сигналах значение серии в видеодекодер 30 с использованием высокоуровневого синтаксиса, к примеру, синтаксиса в наборе параметров изображения (PPS), наборе параметров последовательности (SPS), наборе параметров видео (VPS) и/или заголовке серии последовательных макроблоков.
[0242] Дополнительно или альтернативно, видеокодер 20, возможно, даже не должен передавать карту 240 в видеодекодер 30. Вместо этого, видеокодер 20 и/или видеодекодер 30 может неявно извлекать начальную позицию или местоположение каждой серии значений индекса, включенных в карту 240. В одном примере, стандарт кодирования видео, применяемый посредством видеокодера 20 и/или видеодекодера 30, может определять то, что серия может начинаться только в определенных местоположениях. Например, серия может начинаться только в начале каждой строки или в начале каждой из N строк кодируемого текущего блока. Начальное местоположение может отличаться для различных направлений сканирования. Например, если используется вертикальное сканирование, серия может начинаться только в начале столбца или в начале каждого из N столбцов текущего блока.
[0243] В другом примере, начальное местоположение может извлекаться в зависимости от вспомогательной информации для текущего блока, такой как, например, размер блока, QP, тип кадра, цветовой компонент, цветовой формат (например, 4:4:4, 4:2:2 или 4:2:0), цветовое пространство (например, YUV или RGB), направление сканирования и/или другие типы характеристической информации для текущего блока. В случае если начальное местоположение серии зависит от размера блока, начальное местоположение может быть средней точкой каждой строки и/или каждого столбца либо части (например, 1/n, 2/n, ..., (n-1)/n) каждой строки и/или столбца. В другом примере, видеокодер 20 может передавать в служебных сигналах начальную позицию в видеодекодер 30 с использованием высокоуровневого синтаксиса, к примеру, синтаксиса в PPS, SPS, VPS и/или в заголовке серии последовательных макроблоков.
[0244] В некоторых примерах, неявное извлечение начальной позиции и неявное извлечение серии, каждое из которых описано выше, могут быть комбинированы. Например, видеокодер 20 и/или видеодекодер 30 может определять то, что серия подобнозначных значений индекса карты равна расстоянию между двумя соседними начальными позициями. В случае если начальная позиция является началом (т.е. первой позицией) каждой строки текущего блока, в таком случае видеокодер 20 и/или видеодекодер 30 может определять то, что длина серии равна длине всей строки текущего блока.
[0245] Фиг. 6 является концептуальной схемой, иллюстрирующей примеры определения геометрического края 270, 272 или 274 видеоблока с использованием серии индексов палитры для компонента сигнала яркости, адаптивно понижающе дискретизированного для компонентов сигнала цветности, в соответствии с технологиями этого раскрытия сущности. На фиг. 6, выборки сигнала яркости проиллюстрированы в качестве незаполненных окружностей, и выборки сигнала цветности проиллюстрированы в качестве одной из выборок сигнала яркости с наложенным x-символом. Фиг. 6 иллюстрирует примеры различных значений серии для компонентов сигнала яркости и сигнала цветности на основе местоположения геометрического края 270, 272 или 274 видеоблока.
[0246] В некоторых случаях, одна палитра формируется и совместно используется для нескольких цветовых компонентов в текущем блоке, и в других случаях, отдельные палитры формируются для одного или более цветовых компонентов. В одном случае, одна палитра может формироваться для компонента сигнала яркости, а другая палитра может формироваться для обоих компонентов сигнала цветности. В любом случае, геометрическая информация может совместно использоваться цветовыми компонентами. Обычно, возникает высокая корреляция между краевыми местоположениями совместно размещенных блоков в различных цветовых компонентах, поскольку компоненты сигнала цветности, возможно, понижающе дискретизированы из компонентов сигнала яркости предварительно заданным способом, таким как дискретизация 4:2:2 или 4:2:0.
[0247] Например, при кодировании на основе палитр, кодирование по сериям может использоваться для того, чтобы указывать геометрическую информацию для текущего блока, поскольку край текущего блока разрывает серию. В случае формата сигнала цветности 4:4:4, серия может формироваться один раз и использоваться для всех цветовых компонентов. Серия может формироваться на основе одного из цветовых компонентов, или серия может формироваться с использованием более чем одного из цветовых компонентов. В случае формата сигнала цветности 4:2:2, серия, используемая для компонента сигнала яркости, может горизонтально понижающе дискретизироваться на коэффициент два для применения к компонентам сигнала цветности. В случае формата сигнала цветности 4:2:0, серия, используемая для компонента сигнала яркости, может горизонтально и вертикально понижающе дискретизироваться на коэффициент два для применения к компонентам сигнала цветности.
[0248] В некоторых случаях, способ понижающей дискретизации серии может быть адаптивным к способу понижающей дискретизации сигнала цветности. В этом случае, значение серии после понижающей дискретизации для компонентов сигнала цветности может по-разному вычисляться согласно местоположению края, например, края 270, 272 или 274, видеоблока, как показано на фиг. 6. В первом примере, фиг. 6 иллюстрирует геометрический край 270 между двумя соседними видеоблоками, который позиционируется таким образом, что серия для компонента сигнала яркости имеет значение "1" в левом блоке и значение "3" в правом блоке. В этом случае, серия после понижающей дискретизации для компонентов сигнала цветности имеет значение "1" как в левом блоке, так и в правом блоке. Во втором примере, фиг. 6 иллюстрирует геометрический край 272 между двумя соседними видеоблоками, который позиционируется таким образом, что серия для компонента сигнала яркости имеет значение "2" как в левом блоке, так и в правом блоке. В этом случае, серия после понижающей дискретизации для компонентов сигнала цветности имеет значение "1" как в левом блоке, так и в правом блоке. В третьем примере, фиг. 6 иллюстрирует геометрический край 274 между двумя соседними видеоблоками, который позиционируется таким образом, что серия для компонента сигнала яркости имеет значение "3" в левом блоке и значение "1" в правом блоке. В этом случае, серия после понижающей дискретизации для компонентов сигнала цветности имеет значение "2" в левом блоке и значение "0" в правом блоке.
[0249] В дополнение к геометрической информации, также может быть возможным иметь одну палитру для пиксельного значения всех цветовых компонентов. Например, для каждого пиксельного местоположения в текущем блоке, пиксельные значения в трех цветовых компонентах (например, в компонентах Y-сигнала яркости и U- и V-сигнала цветности) могут формировать вектор (т.е. цветовой вектор). Затем палитра может формироваться посредством выбора определенного числа векторов для того, чтобы представлять текущий блок. Может быть возможным иметь одну палитру пиксельных значений для компонента сигнала яркости и другую палитру пиксельных значений для компонентов сигнала цветности. В некоторых случаях, также может быть возможным комбинировать два способа совместного использования геометрической информации и наличия одной палитры пиксельных значений с использованием цветового вектора.
[0250] В некоторых примерах, линейное копирование, подробнее описанное в другом месте в этом раскрытии сущности, также может работать с одной палитрой. В этом случае, индекс палитры для каждого пиксельного местоположения передается в служебных сигналах как равный индексу палитры строки выше, если сканирование является горизонтальным, или столбца слева, если сканирование является вертикальным, и затем ассоциированная серия индексов палитры также копируется из предыдущей строки или столбца. Для совместно используемой палитры, запись палитры может быть триплетом (Y, U, V), так что последующие Y-, U-, V-значения могут быть восстановлены из индекса палитры. Восстановленные значения могут служить в качестве декодированных пиксельных значений или могут служить в качестве прогнозных значений, которые комбинированы с остаточными значениями, чтобы получать декодированные пиксельные значения. В формате сигнала цветности 4:2:2 и формате сигнала цветности 4:2:0, компоненты сигнала цветности понижающе дискретизированы по сравнению с компонентами сигнала яркости. В примере понижающей дискретизации 2:1 позиции сигнала яркости могут быть в 0, 1, 2, ..., а позиции сигнала цветности могут быть в 1, 3, 5... либо могут быть в 0, 2, 4.... Для позиций, в которых компоненты сигнала цветности не существуют, U- и V-компоненты в записи палитры могут отбрасываться.
[0251] Фиг. 7 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс для кодирования видеоданных остатков прогнозирования с использованием режима кодирования на основе палитр, в соответствии с технологиями этого раскрытия сущности. Примерный процесс, проиллюстрированный на фиг. 7, описывается в данном документе относительно модуля 122 кодирования на основе палитр видеокодера 20 из фиг. 2. В других примерах, один или более других либо дополнительных компонентов могут выполнять примерный процесс, проиллюстрированный на фиг. 7.
[0252] Видеокодер 20 принимает видеоданные текущего видеоблока, который должен кодироваться с использованием кодирования видео на основе палитр прогнозных видеоблоков, и отправляет видеоданные в модуль 122 кодирования на основе палитр. Модуль 122 кодирования на основе палитр определяет остаточные прогнозные значения для текущего блока на основе пиксельных значений текущего блока и ранее кодированных опорных пиксельных значений (280).
[0253] Модуль 122 кодирования на основе палитр может вычислять остаточные прогнозные значения с использованием любого режима прогнозирования, например, режима взаимного прогнозирования или режима внутреннего прогнозирования HEVC-стандарта. В одном примере, модуль 122 кодирования на основе палитр может использовать процессор 120 взаимного прогнозирования для того, чтобы прогнозировать пиксельные значения текущего блока с использованием ранее кодированных пиксельных значений в опорном блоке. В другом примере, модуль 122 кодирования на основе палитр может использовать процессор 126 внутреннего прогнозирования для того, чтобы прогнозировать пиксельные значения текущего блока с использованием ранее кодированных пиксельных значений в текущем блоке.
[0254] В некоторых случаях, модуль 122 кодирования на основе палитр может определять остаточные прогнозные значения для текущего блока с использованием только поднабора процессов на основе режима прогнозирования. Например, в случае режима внутреннего прогнозирования, процессы DC-, горизонтального и/или вертикального прогнозирования могут активироваться, но другие процессы на основе режима внутреннего прогнозирования могут деактивироваться. Деактивированные процессы могут включать в себя фильтрацию в режиме внутреннего прогнозирования, например, одно или более из MDIS, 1/32-пелной билинейной интерполяции, краевого фильтра или DC-фильтра. В качестве дополнительного примера, в случае режима взаимного прогнозирования, может деактивироваться процесс на основе среднего пикселов, например, одно или более из взвешенного прогнозирования, бипрогнозирования или субпелной интерполяции.
[0255] В одном примере, остаточные прогнозные значения для текущего блока могут быть остаточными пиксельными значениями для текущего блока. В этом примере, модуль 122 кодирования на основе палитр вычисляет остаточные пиксельные значения для текущего блока из пиксельных значений текущего блока и ранее кодированных опорных пиксельных значений. Модуль 122 кодирования на основе палитр затем продолжает кодировать остаточные пиксельные значения для текущего блока с использованием кодирования видео на основе палитр, как описано на следующих этапах.
[0256] В другом примере, остаточные прогнозные значения для текущего блока могут быть остаточными значениями квантованных коэффициентов преобразования для текущего блока. В этом примере, модуль 122 кодирования на основе палитр вычисляет остаточные пиксельные значения для текущего блока из пиксельных значений текущего блока и ранее кодированных опорных пиксельных значений и затем отправляет остаточные пиксельные значения в процессор 104 преобразования и модуль 106 квантования таким образом, что они преобразуются и квантуются в остаточные значения квантованных коэффициентов преобразования для текущего блока. Модуль 122 кодирования на основе палитр затем продолжает кодировать остаточные значения квантованных коэффициентов преобразования для текущего блока с использованием кодирования видео на основе палитр, как описано на следующих этапах.
[0257] Модуль 122 кодирования на основе палитр формирует палитру для текущего блока, включающую в себя одну или более записей, которые указывают остаточные прогнозные значения для текущего блока (282). Модуль 122 кодирования на основе палитр преобразует одно или более остаточных прогнозных значений для текущего блока в значения индекса, которые идентифицируют записи в палитре, используемые для того, чтобы представлять остаточные прогнозные значения в палитре для текущего блока (284). Модуль 122 кодирования на основе палитр кодирует значения индекса для одной или более позиций в текущем блоке (286). Кодированные значения индекса указывают остаточные прогнозные значения, включенные в палитру для текущего блока, которые используются для того, чтобы представлять остаточные прогнозные значения для текущего блока. Видеокодер 20 затем передает значения индекса для одной или более позиций в текущем блоке.
[0258] Фиг. 8 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс для декодирования видеоданных остатков прогнозирования с использованием режима кодирования на основе палитр, в соответствии с технологиями этого раскрытия сущности. Примерный процесс, проиллюстрированный на фиг. 8, описывается в данном документе относительно модуля 165 декодирования на основе палитр видеодекодера 30 из фиг. 3. В других примерах, один или более других либо дополнительных компонентов могут выполнять примерный процесс, проиллюстрированный на фиг. 8.
[0259] Видеодекодер 30 принимает поток битов, представляющий кодированные видеоданные с использованием кодирования на основе палитр, и отправляет энтропийно декодированные видеоданные в модуль 165 декодирования на основе палитр. На основе одного или более элементов синтаксиса, включенных в декодированный поток битов, модуль 165 декодирования на основе палитр формирует палитру для текущего блока видеоданных, включающую в себя одну или более записей, которые указывают остаточные прогнозные значения для текущего блока (290). Модуль 165 декодирования на основе палитр затем декодирует значения индекса для одной или более позиций в текущем блоке (292). Декодированные значения индекса указывают остаточные прогнозные значения, включенные в палитру для текущего блока, которые используются для того, чтобы представлять остаточные прогнозные значения для текущего блока.
[0260] Модуль 165 декодирования на основе палитр определяет одно или более остаточных прогнозных значений для текущего блока на основе значений индекса, которые идентифицируют записи в палитре, которые представляют остаточные прогнозные значения для текущего блока (294). Модуль 165 декодирования на основе палитр может определять остаточные прогнозные значения с использованием любого режима прогнозирования, например, режима взаимного прогнозирования или режима внутреннего прогнозирования HEVC-стандарта. В одном примере, модуль 165 декодирования на основе палитр может использовать модуль 164 компенсации движения для того, чтобы прогнозировать пиксельные значения текущего блока с использованием ранее кодированных пиксельных значений в опорном блоке. В другом примере, модуль 165 декодирования на основе палитр может использовать процессор 166 внутреннего прогнозирования для того, чтобы прогнозировать пиксельные значения текущего блока с использованием ранее кодированных пиксельных значений в текущем блоке.
[0261] В некоторых случаях, модуль 165 декодирования на основе палитр может определять остаточные прогнозные значения для текущего блока с использованием только поднабора процессов на основе режима прогнозирования. Например, в случае режима внутреннего прогнозирования, процессы DC-, горизонтального и/или вертикального прогнозирования могут активироваться, но другие процессы на основе режима внутреннего прогнозирования могут деактивироваться. Деактивированные процессы могут включать в себя фильтрацию в режиме внутреннего прогнозирования, например, одно или более из MDIS, 1/32-пелной билинейной интерполяции, краевого фильтра или DC-фильтра. В качестве дополнительного примера, в случае режима взаимного прогнозирования, может деактивироваться процесс на основе среднего пикселов, например, одно или более из взвешенного прогнозирования, бипрогнозирования или субпелной интерполяции.
[0262] Видеодекодер 30 затем определяет пиксельные значения текущего блока на основе остаточных прогнозных значений для текущего блока и ранее кодированных опорных пиксельных значений (296). В одном примере, остаточные прогнозные значения для текущего блока могут быть остаточными пиксельными значениями для текущего блока. В этом случае, видеодекодер 30 восстанавливает пиксельные значения текущего блока с использованием остаточных пиксельных значений и ранее кодированных опорных пиксельных значений. В другом примере, остаточные прогнозные значения для текущего блока могут быть остаточными значениями квантованных коэффициентов преобразования для текущего блока. В этом случае, модуль 165 декодирования на основе палитр сначала отправляет остаточные значения квантованных коэффициентов преобразования в модуль 154 обратного квантования и процессор 156 обратного преобразования таким образом, что они обратно квантуются и обратно преобразуются в остаточные пиксельные значения для текущего блока. Видеодекодер 30 затем восстанавливает пиксельные значения текущего блока с использованием остаточных пиксельных значений и ранее кодированных опорных пиксельных значений.
[0263] Фиг. 9 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс для формирования палитры для кодирования на основе палитр, в соответствии с технологиями этого раскрытия сущности. Примерный процесс, проиллюстрированный на фиг. 9, описывается в данном документе относительно модуля 165 декодирования на основе палитр видеодекодера 30 из фиг. 3. В других примерах, процесс также может выполняться посредством модуля 122 кодирования на основе палитр видеокодера 20 из фиг. 2. Примерный процесс для формирования палитры для кодирования на основе палитр может использоваться для того, чтобы формировать палитру, включающую в себя записи палитры, которые указывают пиксельные значения. В других примерах, аналогичный процесс может использоваться для того, чтобы формировать палитру, включающую в себя записи палитры, которые указывают остаточные прогнозные значения.
[0264] Видеодекодер 30 принимает поток битов, представляющий кодированные видеоданные с использованием кодирования на основе палитр, и отправляет энтропийно декодированные видеоданные в модуль 165 декодирования на основе палитр. Модуль 165 декодирования на основе палитр формирует прогнозирующую палитру, включающую в себя записи палитры, которые указывают пиксельные значения (300). В некоторых примерах, модуль 165 декодирования на основе палитр формирует прогнозирующую палитру таким образом, что она включает в себя записи палитры из одного или более ранее кодированных блоков видеоданных. Ранее кодированные блоки могут включать в себя соседние блоки относительно текущего блока, включающие в себя пространственно соседние блоки и/или соседние блоки в конкретном порядке сканирования блоков.
[0265] Модуль 165 декодирования на основе палитр затем определяет, из энтропийно декодированных видеоданных, одну или более записей палитры в прогнозирующей палитре, которые копируются в текущую палитру для текущего блока (302). Более конкретно, модуль 165 декодирования на основе палитр может декодировать один или более элементов синтаксиса, указывающих то, копируется или нет каждая из записей палитры в прогнозирующей палитре в текущую палитру. В одном примере, один или более элементов синтаксиса содержат двоичный вектор, включающий в себя флаг для каждой из записей палитры в прогнозирующей палитре, который указывает то, копируется или нет соответствующая запись палитры в текущую палитру. В другом примере, один или более элементов синтаксиса содержат сжатую без потерь версию двоичного вектора, причем несжатая версия двоичного вектора включает в себя флаг для каждой из записей палитры в прогнозирующей палитре, который указывает то, копируется или нет соответствующая запись палитры в текущую палитру.
[0266] Модуль 165 декодирования на основе палитр также определяет, из энтропийно декодированных видеоданных, число новых записей палитры не в прогнозирующей палитре, которые включены в текущую палитру для текущего блока (304). Модуль 165 декодирования на основе палитр может декодировать один или более элементов синтаксиса, указывающих число новых записей палитры, которые включены в текущую палитру. В некоторых примерах, модуль 165 декодирования на основе палитр декодирует элементы синтаксиса с использованием одного из унарных кодов, усеченных унарных кодов, экспоненциальных кодов Голомба или кодов Голомба-Райса. После определения числа новых записей палитры, которые включены в текущую палитру, модуль 165 декодирования на основе палитр декодирует один или более элементов синтаксиса, указывающих пиксельное значение для каждой из новых записей палитры.
[0267] На основе информации, определенной из энтропийно декодированных видеоданных, модуль 165 декодирования на основе палитр вычисляет размер текущей палитры как равный сумме числа скопированных записей палитры и числа новых записей палитры (306). После определения размера текущей палитры, модуль 165 декодирования на основе палитр формирует текущую палитру таким образом, что она включает в себя скопированные записи палитры и новые записи палитры (308). В одном примере, модуль 165 декодирования на основе палитр формирует текущую палитру посредством конкатенации скопированных записей палитры и новых записей палитры.
[0268] Модуль 165 декодирования на основе палитр затем имеет возможность выполнять кодирование на основе палитр текущего блока с использованием текущей палитры. Например, модуль 165 декодирования на основе палитр определяет значения индекса для одного или более пиксельных значений текущего блока, которые идентифицируют записи палитры в текущей палитре, используемые для того, чтобы представлять пиксельные значения текущего блока (310). В случае если одно или более пиксельных значений текущего блока не имеют соответствующего пиксельного значения в текущей палитре, видеокодер 20 может использовать принцип управляющего пиксела, чтобы указывать то, какие из пиксельных значений не включены в текущую палитру, и явно передавать эти пиксельные значения. Модуль 165 декодирования на основе палитр в видеодекодере 30 затем может декодировать один или более элементов синтаксиса, указывающих пиксельные значения для одного или более пиксельных значений, которые не имеют соответствующего пиксельного значения в текущей палитре.
[0269] В другом примере, видеокодер 20 может не использовать принцип управляющего пиксела, а вместо этого может идентифицировать пиксельные значения, включенные в текущую палитру, в качестве прогнозных пиксельных значений для каждого одного или более пиксельных значений текущего блока, и передавать остаточные значения между пиксельными значениями текущего блока и прогнозными пиксельными значениями в текущей палитре. Модуль 165 декодирования на основе палитр в видеодекодере 30 затем может декодировать один или более элементов синтаксиса, указывающих значения индекса, которые идентифицируют соответствующие прогнозные пиксельные значения, включенные в текущую палитру, и остаточные значения между одним или более пиксельными значениями текущего блока и идентифицированных прогнозных пиксельных значений в текущей палитре.
[0270] Это раскрытие сущности также описывает несколько альтернативных технологий для формирования палитры для кодирования на основе палитр, которые могут использоваться для того, чтобы формировать палитру, имеющую записи, которые ассоциируют значения индекса либо с пиксельными значениями, либо с остаточными прогнозными значениями для текущего блока. В одном примере, модуль 165 декодирования на основе палитр декодирует индикатор относительно размера палитры для текущего блока, декодирует вектор, имеющий размер, идентичный размеру палитры для текущего блока, причем каждая запись в векторе указывает то, передается или копируется либо нет ассоциированная запись палитры из прогнозирующей палитры, и для одной или более записей палитры, скопированных из прогнозирующей палитры, декодирует индикатор относительно позиции записи в прогнозирующей палитре. В другом примере, модуль 165 декодирования на основе палитр декодирует индикатор относительно числа записей в палитре для текущего блока, декодирует однобитовый флаг для каждой из записей палитры, который указывает то, отправляется запись палитры явно или извлекается из ранее восстановленного пиксела, и для каждой одной или более записей палитры, извлекаемых из ранее восстановленного пиксела, декодирует индикатор относительно позиции восстановленного пиксела, которая соответствует соответствующей записи палитры. В этом примере, индикатор относительно позиции восстановленного пиксела может быть вектором смещения относительно левой верхней позиции текущего блока, либо он может быть индексом в списке восстановленных пикселов, который может включать в себя все опорные пикселы, используемые для нормального внутреннего прогнозирования.
[0271] В другом примере, модуль 165 декодирования на основе палитр начинается из прогнозирующей палитры для соседнего блока, имеющего данный размер, и декодирует двоичный вектор, имеющий размер, идентичный размеру прогнозирующей палитры, причем каждая запись в векторе указывает то, использована многократно или нет ассоциированная запись палитры из прогнозирующей палитры. Модуль 165 декодирования на основе палитр также декодирует индикатор относительно числа новых записей, которые должны передаваться, и принимает новые записи из видеокодера 20. Модуль 165 декодирования на основе палитр затем объединяет многократно используемые записи и новые записи для того, чтобы формировать новую палитру для текущего блока.
[0272] Следует признать, что в зависимости от примера, определенные этапы или события любой из технологий, описанных в данном документе, могут выполняться в другой последовательности, могут добавляться, объединяться или вообще исключаться (например, не все описанные этапы или события требуются для практической реализации технологий). Кроме того, в определенных примерах, этапы или события могут выполняться одновременно, например, посредством многопоточной обработки, обработки прерывания или посредством нескольких процессоров, а не последовательно. Помимо этого, хотя конкретные аспекты этого раскрытия сущности описываются как выполняемые посредством одного модуля или блока для понятности, следует понимать, что технологии этого раскрытия сущности могут выполняться посредством комбинации блоков или модулей, ассоциированных с видеокодером.
[0273] Конкретные аспекты этого раскрытия сущности описаны относительно разрабатываемого HEVC-стандарта для целей иллюстрации. Тем не менее, технологии, описанные в этом раскрытии сущности, могут быть полезными для других процессов кодирования видео, включающих в себя другие стандартные или собственные процессы кодирования видео, еще не разработанные.
[0274] Технологии, описанные выше, могут выполняться посредством видеокодера 20 (фиг. 1 и 2) и/или видеодекодера 30 (фиг. 1 и 3), оба из которых могут, в общем, упоминаться в качестве видеокодера. Аналогично, кодирование видео может означать кодирование видео или декодирование видео, при соответствующих условиях.
[0275] Хотя выше описываются конкретные комбинации различных аспектов технологий, эти комбинации предоставляются просто для того, чтобы иллюстрировать примеры технологий, описанных в этом раскрытии сущности. Соответственно, технологии этого раскрытия сущности не должны быть ограничены этими примерными комбинациями и могут охватывать любую возможную комбинацию различных аспектов технологий, описанных в этом раскрытии сущности.
[0276] В одном или более примеров, описанные функции могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или любой комбинации вышеозначенного. При реализации в программном обеспечении, функции могут быть сохранены или переданы, в качестве одной или более инструкций или кода, по машиночитаемому носителю и выполнены посредством аппаратного процессора. Машиночитаемые носители могут включать в себя машиночитаемые носители хранения данных, которые соответствуют материальному носителю, такие как носители хранения данных, или среды связи, включающие в себя любой носитель, который упрощает перенос компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, машиночитаемые носители, в общем, могут соответствовать (1) материальному машиночитаемому носителю хранения данных, который является невременным, или (2) среде связи, такой как сигнал или несущая. Носители хранения данных могут представлять собой любые доступные носители, к которым может осуществляться доступ посредством одного или более компьютеров или одного или более процессоров, с тем чтобы извлекать инструкции, код и/или структуры данных для реализации технологий, описанных в этом раскрытии сущности. Компьютерный программный продукт может включать в себя машиночитаемый носитель.
[0277] В качестве примера, а не ограничения, эти машиночитаемые носители хранения данных могут содержать RAM, ROM, EEPROM, CD-ROM или другое устройство хранения на оптических дисках, устройство хранения на магнитных дисках или другие магнитные устройства хранения, флэш-память либо любой другой носитель, который может быть использован для того, чтобы хранить требуемый программный код в форме инструкций или структур данных, и к которому можно осуществлять доступ посредством компьютера. Так же, любое подключение корректно называть машиночитаемым носителем. Например, если инструкции передаются из веб-узла, сервера или другого удаленного источника с помощью коаксиального кабеля, оптоволоконного кабеля, "витой пары", цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасные, радиопередающие и микроволновые среды, то коаксиальный кабель, оптоволоконный кабель, "витая пара", DSL или беспроводные технологии, такие как инфракрасные, радиопередающие и микроволновые среды, включаются в определение носителя. Тем не менее, следует понимать, что машиночитаемые носители хранения данных и носители хранения данных не включают в себя соединения, несущие, сигналы или другие энергозависимые носители, а вместо этого направлены на невременные материальные носители хранения данных. Диск (disk) и диск (disc) при использовании в данном документе включают в себя компакт-диск (CD), лазерный диск, оптический диск, универсальный цифровой диск (DVD), гибкий диск и диск Blu-Ray, при этом диски (disk) обычно воспроизводят данные магнитно, тогда как диски (disc) обычно воспроизводят данные оптически с помощью лазеров. Комбинации вышеперечисленного также следует включать в число машиночитаемых носителей.
[0278] Инструкции могут выполняться посредством одного или более процессоров, например, одного или более процессоров цифровых сигналов (DSP), микропроцессоров общего назначения, специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA) либо других эквивалентных интегральных или дискретных логических схем. Соответственно, термин "процессор" при использовании в данном документе может означать любую вышеуказанную структуру или другую структуру, подходящую для реализации технологий, описанных в данном документе. Помимо этого, в некоторых аспектах функциональность, описанная в данном документе, может быть предоставлена в рамках специализированных программных и/или аппаратных модулей, выполненных с возможностью кодирования или декодирования либо встроенных в комбинированный кодек. Кроме того, технологии могут быть полностью реализованы в одной или более схем или логических элементов.
[0279] Технологии этого раскрытия сущности могут быть реализованы в широком спектре устройств или приборов, в том числе в беспроводном переносном телефоне, в интегральной схеме (IC) или в наборе IC (к примеру, в наборе микросхем). Различные компоненты, модули или блоки описываются в этом раскрытии сущности для того, чтобы подчеркивать функциональные аспекты устройств, выполненных с возможностью осуществлять раскрытые технологии, но необязательно требуют реализации посредством различных аппаратных модулей. Наоборот, как описано выше, различные блоки могут быть комбинированы в аппаратный модуль кодека или предоставлены посредством набора взаимодействующих аппаратных модулей, включающих в себя один или более процессоров, как описано выше, в сочетании с надлежащим программным обеспечением и/или микропрограммным обеспечением.
[0280] Описаны различные примеры. Эти и другие примеры находятся в пределах объема прилагаемой формулы изобретения.