ХАРАКТЕРИСТИКИ РЕЖИМА ИНДЕКСНОЙ КАРТЫ ОСНОВНЫХ ЦВЕТОВ ДЛЯ КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ВИДЕО И ИЗОБРАЖЕНИЯ
FEATURES OF BASE COLOUR INDEX MAP MODE FOR VIDEO AND IMAGE CODING AND DECODING

УРОВЕНЬ ТЕХНИКИ
[001] Инженеры используют сжатие (также называемое кодирование источника или закодирование источника) для уменьшения скорости передачи битов (битрейта) цифрового видео. Сжатие уменьшает затраты на хранение и передачу видеоинформации посредством преобразования информации в вид с меньшей скоростью передачи битов. Возвращение в состояние до сжатия (также называемое декодированием) восстанавливает вариант исходной информации из сжатого вида. «Кодек» представляет собой систему кодера/декодера.
[002] В течение последних двух десятилетий были приняты различные стандарты видеокодеков, включая стандарты ITU-T (Сектор по стандартизации средств электросвязи Международного союза электросвязи) H.261, H.262 (MPEG-2 или ISO/IEC (Международная организация по стандартизации/Международная электротехническая комиссия) 13818-2), H.263 и H.264 (AVC (усовершенствованное видеокодирование) MPEG-4 или ISO/IEC 14496-10), стандарты MPEG-1 (ISO/IEC 11172-2) и MPEG-4 Visual (ISO/IEC 14496-2) и стандарт SMPTE (Общество инженеров кино и телевидения) 421M. Недавно был одобрен стандарт HEVC (высокоэффективное видеокодирование) (ITU-T H.265 или ISO/IEC 23008-2). В настоящее время находятся в разработке расширения стандарта HEVC (например, для масштабируемого кодирования/декодирования видео, для кодирования/декодирования видео с более высокой верностью воспроизведения в отношении битовой глубины отсчетов или частоты дискретизации цветности, или для многоракурсного кодирования/декодирования). Стандарт видеокодека обычно определяет возможные варианты для синтаксиса закодированного битового видеопотока, параметров детализации в битовом потоке, когда конкретные характеристики используются при закодировании и декодировании. Во многих случаях, стандарт видеокодека также предусматривает подробности операций декодирования, которые декодер должен выполнять для достижения согласующихся результатов при декодировании. Кроме стандартов кодека различные проприетарные форматы кодеков определяют другие возможные варианты для синтаксиса закодированного битового видеопотока и соответствующих операций декодирования.
[003] В режиме индексной карты основных цветов (BCIM) видеокодер кодирует значения отсчетов, используя индексные значения, которые представляют основные цвета. Каждое из индексных значений ассоциируется с разным значением (основным цветом) из числа значений отсчетов. Например, если блок размером 8×8 имеет четыре разных значения из числа 64 значений отсчетов блока, кодер назначает четыре разных индексных значения для этих четырех основных цветов. Во время закодирования значения отсчетов заменяются соответствующими индексными значениями. Кодер кодирует и сигнализирует отображение индексных значений на основные цвета (таблицу основных цветов), а также данные для размещения индексных значений, представляющих значения отсчетов (индексную карту). Декодер принимает и декодирует отображение индексных значений на основные цвета. Используя это отображение, декодер заменяет индексные значения в индексной карте основными цветами для исходных значений отсчетов.
[004] Режим BCIM может быть полезен при закодировании некоторого «искусственно» созданного содержимого видео, такого как содержимое захвата экрана. Содержимое захвата экрана обычно включает в себя повторяющиеся структуры (например, графику, текстовые знаки), которые используют несколько отличающихся значений отсчетов по сравнению с обычным видео. Это предоставляет возможности для улучшения рабочих характеристик посредством BCIM.
[005] Текущая разработка режима BCIM для стандарта HEVC и реализации в некоторых ссылочных программных средствах для стандарта HEVC имеет несколько проблем. Например, BCIM требует много новых синтаксических элементов и структур синтаксиса для отображения основных цветов и индексной карты, что усложняет реализацию. Также, подход к закодированию/декодированию отображения основных цветов и индексной карты использует инструментальные средства, которые отличаются от тех, которые уже включены в стандарт HEVC, снова усложняя реализацию. Также, является неэффективным закодирование таблицы основных цветов и индексной карты.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[006] Вкратце, подробное описание представляет нововведения в режиме индексной карты основных цветов (BCIM). Например, некоторые нововведения относятся к повторному использованию синтаксической структуры для коэффициентов преобразования в режиме не-BCIM и для элементов индексной карты в режиме BCIM. Это может уменьшать количество модификаций, делаемых для поддержки режима BCIM. Другие нововведения относятся к стратегиям для отображения индексных значений или предсказания элементов индексной карты, которые могут улучшить эффективность кодирования режима BCIM. Еще другие нововведения относятся к обработке значений исключения в режиме BCIM.
[007] Нововведения для индексной карты основных цветов могут быть реализованы как часть способа, как часть вычислительного устройства, выполненного с возможностью выполнения способа, или как часть материальных считываемых компьютером сред (носителей), хранящих исполняемые компьютером инструкции, вызывающие выполнение способа вычислительным устройством. Различные нововведения могут использоваться в комбинации или отдельно.
[008] Вышеприведенные и другие задачи, признаки и преимущества изобретения станут более очевидными из последующего подробного описания, которое выполнено с ссылкой на прилагаемые фигуры.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[009] Фиг.1 представляет собой схему примерной вычислительной системы, в которой могут быть реализованы некоторые описанные варианты осуществления.
[010] Фиг.2a и 2b представляют собой схемы примерных сетевых окружений, в которых могут быть реализованы некоторые описанные варианты осуществления.
[011] Фиг.3 представляет собой схему примерной системы кодера, вместе с которой могут быть реализованы некоторые описанные варианты осуществления.
[012] Фиг.4 представляет собой схему примерной системы декодера, вместе с которой могут быть реализованы некоторые описанные варианты осуществления.
[013] Фиг.5a и 5b представляют собой схемы, иллюстрирующие примерный видеокодер, вместе с которым могут быть реализованы некоторые описанные варианты осуществления.
[014] Фиг.6 представляет собой схему, иллюстрирующую примерный видеодекодер, вместе с которым могут быть реализованы некоторые описанные варианты осуществления.
[015] Фиг.7 представляет собой диаграмму, иллюстрирующую режим индексной карты основных цветов для блока в видеокадре.
[016] Фиг.8 и 9 представляют собой схемы, иллюстрирующие примерные последовательности процессов во время закодирования и декодирования соответственно, когда может использоваться одинаковая структура синтаксиса кодирования коэффициентов для сигнализации элементов индексной карты или коэффициентов преобразования.
[017] Фиг.10 и 11 представляют собой блок-схемы последовательности операций, иллюстрирующие обобщенные методы закодирования и декодирования соответственно, которые используют структуру синтаксиса кодирования коэффициентов, селективно представляющую элементы индексной карты или коэффициенты преобразования.
[018] Фиг.12 представляет собой блок-схему последовательности операций примерного метода декодирования, который использует структуру синтаксиса кодирования коэффициентов, которая селективно представляет элементы индексной карты или коэффициенты преобразования.
[019] Фиг.13 представляет собой диаграмму, иллюстрирующую отображение индексных значений на упакованные индексные значения и отображение упакованных индексных значений обратно на индексные значения.
[020] Фиг.14 и 15 представляют собой блок-схемы последовательности операций, иллюстрирующие обобщенные методы отображения индексных значений для основных цветов во время закодирования и декодирования соответственно.
[021] Фиг.16 и 17 представляют собой диаграммы, иллюстрирующие предсказание элементов индексной карты, использующее операции вычитания во время операций закодирования и сложения во время декодирования.
[022] Фиг.18 представляет собой диаграмму, иллюстрирующую предсказание элемента индексной карты, используя операцию исключающего ИЛИ (XOR) во время закодирования, и соответствующее восстановление элемента, используя операцию XOR во время декодирования.
[023] Фиг.19 и 20 представляют собой блок-схемы последовательности операций, иллюстрирующие обобщенные методы предсказания элементов индексной карты во время закодирования и декодирования соответственно.
[024] Фиг.21a и 21b представляют собой диаграммы, иллюстрирующие обработку значений исключения и индексных значений для режима BCIM во время закодирования и декодирования соответственно.
[025] Фиг.22 и 23 представляют собой блок-схемы последовательности операций, иллюстрирующие обобщенные методы закодирования и декодирования соответственно, используя индексные значения и значения исключения в режиме BCIM.
[026] Фиг.24 представляет собой блок-схему последовательности операций, иллюстрирующую примерный метод использования индексных значений и значений исключения в режиме BCIM.
ПОДРОБНОЕ ОПИСАНИЕ
[027] Подробное описание представляет нововведения при использовании режима индексной карты основных цветов (BCIM) во время закодирования и/или декодирования. В частности, подробное описание представляет нововведения для повторного использования структуры синтаксиса, которая адаптируется для коэффициентов преобразования для сигнализации вместо этого данных для элементов индексной карты в режиме BCIM, отображения индексных значений в режиме BCIM, предсказания элементов индексной карты и обработки значений исключения в режиме BCIM. Некоторые из этих нововведений упрощают реализацию посредством уменьшения количества модификаций, выполняемых для поддержки режима BCIM. Другие нововведения улучшают эффективность кодирования режима BCIM.
[028] Хотя операции, описанные в данном документе, местами описываются как выполняемые видеокодером или видеодекодером, во многих случаях операции могут выполняться другим типом инструментального средства обработки мультимедиа (например, кодера изображения, декодера изображения).
[029] Некоторые нововведения, описанные в данном документе, иллюстрируются с ссылкой на элементы синтаксиса и операции, характерные для стандарта HEVC. Например, ссылка делается на версию проекта JCTVC-N1005 стандарта HEVC – «High Efficiency Video Coding (HEVC) Range Extensions Text Specification: Draft 4», JCTVC-N1005, июль 2013 г. Нововведения, описанные в данном документе, также могут быть реализованы для других стандартов или форматов.
[030] В общем, возможны различные альтернативы примерам, описанным в данном документе. Например, некоторые способы, описанные в данном документе, могут быть модифицированы изменением упорядочения описанных действий способа посредством разделения, повторения или исключения некоторых действий способа, и т.д. Различные аспекты описанной технологии могут использоваться в комбинации или отдельно. Разные варианты осуществления используют одно или несколько из описанных нововведений. Некоторые нововведения, описанные в данном документе, рассматривают одну или несколько из проблем, отмеченных в разделе «Уровень техники». Обычно, данный метод/инструментальное средство не решает всех таких проблем.
I. Примерные вычислительные системы
[031] Фиг.1 иллюстрирует обобщенный пример подходящей вычислительной системы (100), в которой могут быть реализованы несколько из описанных нововведений. Предполагается, что вычислительная система (100) не предполагает никаких ограничений в отношение объема использования или функциональных возможностей, так как нововведения могут быть реализованы в многообразных вычислительных системах общего назначения или специального назначения.
[032] Как показано на фиг.1, вычислительная система (100) включает в себя один или несколько узлов (110, 115) обработки и память (120, 125). Узлы (110, 115) обработки исполняют исполняемые компьютером инструкции. Узел обработки может представлять собой центральный узел обработки (CPU) общего назначения, процессор в специализированной интегральной микросхеме (ASIC) или процессор любого другого типа. В системах многопроцессорной обработки многочисленные узлы обработки исполняют исполняемые компьютером инструкции для повышения вычислительной мощности. Например, фиг.1 изображает центральный узел (110) обработки, а также узел обработки графики или узел (115) совместной обработки. Материальная память (120, 125) может представлять собой энергозависимую память (например, регистры, кэш, оперативное запоминающее устройство (RAM)), энергонезависимую память (например, постоянное запоминающее устройство (ROM), электрически стираемое программируемое постоянной запоминающее устройство (EEPROM), флэш-память и т.д.), или некоторую комбинацию из двух, к которым может обращаться узел (узлы) обработки. Память (120, 125) хранит программное обеспечение (180), реализующее одно или несколько нововведений для режима BCIM, в виде исполняемых компьютером инструкций, пригодных для исполнения узлом (узлами) обработки.
[033] Вычислительная система может иметь дополнительные характеристики. Например, вычислительная система (100) включает в себя запоминающее устройство (140), одно или несколько устройств (150) ввода, одно или несколько устройств (160) вывода и одно или несколько соединений (170) передачи данных. Механизм межсоединений (не показан), такой как шина, контроллер или сеть, соединяют между собой компоненты вычислительной системы (100). Обычно, программное обеспечение операционной системы (не показано) обеспечивает операционное окружение для другого программного обеспечения, исполняющегося в вычислительной системе (100), и координирует деятельность компонентов вычислительной системы (100).
[034] Материальное запоминающее устройство (140) может быть съемным или несъемным и включает в себя магнитные диски, магнитные ленты или кассеты, неперезаписываемые компакт-диски (CD-ROM), цифровые многофункциональные диски (DVD) или любую другую среду, которая может использоваться для хранения информации, и к которой могут обращаться в вычислительной системе (100). Запоминающее устройство (140) хранит инструкции для программного обеспечения (180), реализующего одно или несколько нововведений для режима BCIM.
[035] Устройство (устройства) (150) ввода могут представлять собой устройство ввода касания, такое как клавиатура, мышь, перо или трекбол, устройство ввода голоса, сканирующее устройство или другое устройство, которое обеспечивает ввод в вычислительную систему (100). Для видео устройством (устройствами) (150) ввода может быть камера, видеокарта, карта телевизионного (ТВ) тюнера или подобное устройство, которое принимает видеоввод в аналоговой или цифровой форме, или CD-ROM или перезаписываемый компакт-диск (CD-RW), которое считывает отсчеты видео в вычислительную систему (100). Устройством (устройствами) (160) вывода может быть дисплей, принтер, громкоговоритель, устройство записи на компакт-диск (CD) или другое устройство, которое обеспечивает вывод из вычислительной системы (100).
[036] Соединение (соединения) (170) передачи данных позволяет выполнять передачу данных по среде передачи данных на другой вычислительный объект. Среда передачи данных передает информацию, такую как исполняемые компьютером инструкции, ввод или вывод аудио или видео или другие данные в модулированном данными сигнале. Модулированный данными сигнал представляет собой сигнал, в котором одна или несколько из его характеристик устанавливается или изменяется таким образом, чтобы закодировать информацию в сигнале. В качестве примера и не ограничения, среды передачи данных могут использовать электрический, оптический, радиочастотный (RF) или другой носитель.
[037] Нововведения могут описываться в общем контексте считываемых компьютером сред. Считываемыми компьютером средами являются любые доступные материальные среды, к которым можно обращаться в вычислительном окружении. В качестве примера и не ограничения, с вычислительной системой (100) считываемые компьютером среды включают в себя память (120, 125), запоминающее устройство (140) и комбинации любых из вышеупомянутых.
[038] Нововведения могут описываться в общем контексте исполняемых компьютером инструкций, таких как те, которые включены в программные модули, исполняемые в вычислительной системе на целевом реальном или виртуальном процессоре. Обычно, программные модули включают в себя подпрограммы, программы, библиотеки, объекты, классы, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Функциональная возможность программных модулей может объединяться или разделяться между программными модулями, как требуется, в различных окружениях. Исполняемые компьютером инструкции для программных модулей могут исполняться в локальной или распределенной вычислительной системе.
[039] Термины «система» и «устройство» используются взаимозаменяемо в данном документе. Если только контекст не указывает явно иначе, никакой из терминов не подразумевает никакое ограничение типа вычислительной системы или вычислительного устройства. В общем, вычислительная система или вычислительное устройство может быть локальным или распределенным, и может включать в себя любую комбинацию аппаратных средств специального назначения и/или аппаратных средств общего назначения с программным обеспечением, реализующим функциональную возможность, описанную в данном документе.
[040] Описанные способы также могут быть реализованы с использованием специализированных вычислительных аппаратных средств, выполненных с возможностью выполнения любых из описанных способов. Например, описанные способы могут быть реализованы посредством интегральной схемы (например, ASIC (такой как узел цифровой обработки сигналов ASIC (DSP), узел обработки графики (GPU) или программируемое логическое устройство (PLD), такое как программируемая вентильная матрица (FPGA)), специально разработанной или выполненной с возможностью реализации любого из описанных способов.
[041] Ради представления, подробное описание использует термины, подобные «определять» или «использовать» для описания компьютерных операций в вычислительной системе. Эти термины представляют собой абстракцию высокого уровня для операций, выполняемых компьютером и не следует путать их с действиями, выполняемыми человеком. Реальные компьютерные операции, соответствующие этим терминам, изменяются в зависимости от реализации.
II. Примерные сетевые окружения
[042] Фиг.2a и 2b изображают примерные сетевые окружения (201, 202), которые включают в себя видеокодеры (220) и видеодекодеры (270). Кодеры (220) и декодеры (270) соединены по сети (250) с использованием соответствующего протокола передачи данных. Сеть (250) может включать в себя Интернет или другую компьютерную сеть.
[043] В сетевом окружении (201), показанном на фиг.2a, каждое инструментальное средство (210) передачи данных в реальном времени (RTC) включает в себя как кодер (220), так и декодер (270) для двунаправленной передачи данных. Данный кодер (220) может создавать выходной сигнал, согласующийся с вариантом или расширением стандарта HEVC, стандарта SMPTE 421M, стандарта ISO-IEC 14496-10 (также известным как H.264 или AVC), другого стандарта, или проприетарным форматом, причем соответствующий декодер (270) принимает закодированные данные от кодера (220). Двунаправленная передача данных может быть частью видеоконференции, вызова по видеотелефону или другого сценария двусторонней передачи данных. Хотя сетевое окружение (201) на фиг.2a включает в себя два инструментальных средства (210) передачи данных в реальном времени, сетевое окружение (201), вместо этого, может включать в себя три или более инструментальных средств (210) передачи данных в реальном времени, которые принимают участие в многосторонней передаче данных.
[044] Инструментальное средство (210) передачи данных в реальном времени управляет закодированием посредством кодера (220). Фиг.3 изображает примерную систему (300) кодера, которая может быть включена в инструментальное средство (210) передачи данных в реальном времени. Альтернативно, инструментальное средство (210) передачи данных в реальном времени использует другую систему кодера. Инструментальное средство (210) передачи данных в реальном времени также управляет декодированием посредством декодера (270). Фиг.4 изображает примерную систему (400) декодера, которая может быть включена в инструментальное средство (210) передачи данных в реальном времени. Альтернативно, инструментальное средство (210) передачи данных в реальном времени использует другую систему декодера.
[045] В сетевом окружении (202), показанном на фиг.2b, инструментальное средство (212) закодирования включает в себя кодер (220), который кодирует видео для доставки многочисленным инструментальным средствам (214) воспроизведения, которые включают в себя декодеры (270). Однонаправленная передача данных может обеспечиваться для системы видеонаблюдения, системы мониторинга веб-камерами, представления конференций на удаленном рабочем столе или для других сценариев, в которых видео кодируется и посылается из одного местоположения в одно или несколько других местоположений. Хотя сетевое окружение (202) на фиг.2b включает в себя два инструментальных средства (214) воспроизведения, сетевое окружение (202) может включать в себя большее количество или меньшее количество инструментальных средств (214) воспроизведения. Обычно, инструментальное средство (214) воспроизведения передает данные на инструментальное средство (212) закодирования для определения потока видео для приема инструментальным средством (214) воспроизведения. Инструментальное средство (214) воспроизведения принимает поток, буферизует принятые закодированные данные в течение соответствующего периода и начинает декодирование и воспроизведение.
[046] Фиг.3 изображает примерную систему (300) кодера, которая может быть включена в инструментальное средство (212) закодирования. Альтернативно, инструментальное средство (212) закодирования использует другую систему кодера. Инструментальное средство (212) закодирования также может включать в себя логику контроллера на стороне сервера для управления соединениями с одним или несколькими инструментальными средствами (214) воспроизведения. Фиг.4 изображает примерную систему (400) декодера, которая может быть включена в инструментальное средство (214) воспроизведения. Альтернативно, инструментальное средство (214) воспроизведения использует другую систему декодера. Инструментальное средство (214) воспроизведения также может включать в себя логику контроллера на стороне клиента для управления соединениями с инструментальным средством (212) закодирования.
III. Примерные системы кодера
[047] Фиг.3 представляет собой блок-схему примерной системы (300) кодера, вместе с которой могут быть реализованы некоторые описанные варианты осуществления. Системой (300) кодера может быть инструментальное средство закодирования общего назначения, способное работать в любом из многочисленных режимов закодирования, таком как режим закодирования с малым временем ожидания для передачи данных в реальном времени, режим транскодирования и обычный режим закодирования для воспроизведения мультимедиа из файла или потока, или она может быть инструментальным средством закодирования специального назначения, адаптированным для одного такого режима закодирования. Система (300) кодера может быть реализована в виде модуля операционной системы, как часть библиотеки приложений или как отдельное приложение. В целом, система (300) кодера принимает последовательность кадров (311) видео источника от источника (310) видео и создает закодированные данные в виде выходного сигнала для канала (390). Выходной сигнал закодированных данных для канала может включать в себя содержимое, закодированное с использованием режима BCIM.
[048] Источником (310) видео может быть камера, карта тюнера, запоминающие среды или другой источник цифрового видео. Источник (310) видео создает последовательность кадров видео с частотой кадров, например, 30 кадров в секунду. Как используется в данном документе, термин «кадр» обычно ссылается на данные кодированного или восстановленного изображения источника. Для прогрессивного видео кадром является кадр прогрессивного видео. Для чересстрочного видео, в примерных вариантах осуществления, перед закодированием выполняется расперемежение кадра чересстрочного видео. Альтернативно, два дополняющих чересстрочных поля видео кодируются как кадр чересстрочного видео или отдельные поля. Кроме указания кадра прогрессивного видео термин «кадр» или «видеокадр» может указывать единственное неспаренное поле видео, дополняющую пару полей видео, плоскость видеообъекта, которая представляет видеообъект в данный момент времени, или представляющую интерес зону на большем изображении. Плоскость видеообъекта или зона могут быть частью большего изображения, которое включает в себя многочисленные объекты или зоны сцены.
n
[049] Поступающий кадр (311) источника сохраняется в области (320) хранения временной памяти кадров источника, которая включает в себя многочисленные области (321, 322, …, 32) хранения буфера кадров. Буфер (321, 322 и т.д.) кадров хранит один кадр источника в области (320) хранения кадров источника. После того как один или несколько кадров (311) источника были сохранены в буферах (321, 322 и т.д.) кадров, селектор (330) кадров периодически выбирает индивидуальный кадр источника из области (320) хранения кадров источника. Порядок, в котором кадры выбираются селектором (330) кадров для ввода в кодер (340), может отличаться от порядка, в котором кадры создаются источником (310) видео, например, кадр может быть впереди по порядку, чтобы способствовать временно обратному предсказанию. Перед кодером (340) система (300) кодера может включать в себя препроцессор (не показан), который выполняет предварительную обработку (например, фильтрацию) выбранного кадра (331) перед закодированием. Предварительная обработка также может включать в себя преобразование цветового пространства в первичные и вторичные составляющие для закодирования. Обычно, перед закодированием видео преобразуется в цветовое пространство, такое как YUV, в котором значения отсчетов яркостной (Y) составляющей представляют значения яркости или интенсивности, и значения отсчетов цветовых (U, V) составляющих представляют цветоразностные значения. Значения отсчетов цветности могут субдискретизироваться с меньшей частотой дискретизации цветности (например, для формата YUV 4:2:0), или значения отсчетов цветности могут иметь такое же разрешение, что значения отсчетов яркости (например, для формата YUV 4:4:4). Или видео может кодироваться в другом формате (например, в формате RGB 4:4:4).
[050] Кодер (340) кодирует выбранный кадр (331) и получает кодированный кадр (341) и также создает сигналы (342) операции контроля управления памятью (MMCO) или информацию о наборе опорных видеокадров (RPS). Если текущим кадром не является первый кадр, который был закодирован при выполнении его процесса закодирования, кодер (340) может использовать один или несколько ранее закодированных/декодированных кадров (369), которые были сохранены в области (360) хранения временной памяти декодированных кадров. Такие сохраненные декодированные кадры (369) используются в качестве опорных кадров для межкадрового предсказания содержимого текущего кадра (331) источника. Обычно, кодер (340) включает в себя многочисленные модули закодирования, которые выполняют задачи закодирования, такие как разбиение на плитки, оценка внутреннего предсказания и предсказание, оценка и компенсация движения, преобразования частоты, квантование и энтропийное кодирование. Точные операции, выполняемые кодером (340), могут меняться в зависимости от формата сжатия. Форматом выходных закодированных данных может быть вариант или расширение формата HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2 или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264) или другого формата.
[051] Кодер (340) может разделять кадр на многочисленные плитки одинакового размера и разных размеров. Например, кодер (340) разбивает кадр по строке плиток и столбцам плиток, которые, с помощью границ кадра, определяют горизонтальные и вертикальные границы плиток в кадре, где каждая плитка представляет собой прямоугольную область. Плитки часто используются для улучшения параметров для параллельной обработки. Кадр также может быть организован как один или несколько слайсов, где слайсом может быть весь кадр или область кадра. Слайс может декодироваться независимо от других слайсов в кадре, что улучшает устойчивость к ошибкам. Содержимое слайса или плитки дополнительно разбивается на блоки или другие наборы отсчетов для целей закодирования и декодирования.
[052] Для синтаксиса в соответствии со стандартом HEVC кодер разбивает содержимое кадра (или слайса или плитки) на единицы дерева кодирования. Единица дерева кодирования (CTU) включает в себя значения отсчетов яркости, организованные в виде блока дерева кодирования (CTB) яркости, и соответствующие значения отсчетов цветности, организованные в виде двух CTB цветности. Размер CTU (и его CTB) выбирается кодером и может, например, составлять 64×64, 32×32 или 16×16 значений отсчетов. CTU включает в себя одну или несколько единиц кодирования. Единица кодирования (CU) имеет блок кодирования (CB) яркости и два соответствующих CB цветности. Например, CTU с CTB яркости размером 64×64 и два CTB цветности размером 64×64 (формат YUV 4:4:4) могут разбиваться на четыре CU, причем каждая CU включает в себя CB яркости размером 32×32 и два CB цветности размером 32×32, и каждая CU, возможно, разбивается дополнительно на меньшие CU. Или, в качестве другого примера, CTU с CTB яркости размером 64×64 и двумя CTB цветности размером 32×32 (формат YUV 4:2:0) может разбиваться на четыре CU, причем каждая CU включает в себя CB яркости размером 32×32 и два CB цветности размером 16×16, и каждая CU, возможно, дополнительно разбивается на меньшие CU. Наименьший допустимый размер CU (например, 8×8, 16×16) может сигнализироваться в битовом потоке.
[053] Как правило, CU имеет режим предсказания, такой как внешний или внутренний. CU включает в себя одну или несколько единиц предсказания с целью сигнализации информации о предсказании (такой как подробности режима предсказания и т.д.) и/или обработки предсказания. Единица предсказания (PU) имеет блок предсказания (PB) яркости и два PB цветности. Для CU с внутренним предсказанием, PU имеет такой же размер, что и CU, если только CU не имеет наименьший размер (например, 8×8). В этом случае, CU может быть разбита на четыре меньшие PU (например, каждая размером 4×4, если наименьшим размером CU является 8×8), или PU может иметь наименьший размер CU, как указывается синтаксическим элементов для CU. CU также имеет одну или несколько единиц преобразования с целью остаточного кодирования/декодирования, где единица преобразования (TU) имеет блок преобразования (TB) и два TB цветности. PU в CU с внутренним предсказанием может содержать единственную TU (равную по размеру PU) или многочисленные TU. Как используется в данном документе, термин «блок» может указывать CB, PB, TB или другой набор значений отсчетов в зависимости от контекста. Кодер принимает решение, как разбить видео на CTU, CU, PU, TU и т.д.
[054] Возвращаясь к фиг.3, кодер представляет блок с внутренним кодированием кадра (331) источника с точки зрения предсказания из других, раннее восстановленных значений отсчетов в кадре (331). Для внутреннего пространственного предсказания для блока, устройство оценки внутри видеокадра оценивает экстраполяцию соседних восстановленных значений отсчетов в блок. Устройство оценки внутреннего предсказания выводит информацию о предсказании (такую как режим (направление) предсказания для внутреннего пространственного предсказания), которая энтропийно кодируется. Предсказатель внутреннего предсказания применяет информацию о предсказании для определения значений внутреннего предсказания. Для режима BCIM кодер представляет блок с внутренним кодированием с индексными значениями для основных цветов из числа значений отсчетов блока, используя таблицу основных цветов для индексных значений и используя элементы индексной карты. Кодер также может представлять значения исключения в блоке режима BCIM без использования индексных значений, как описано ниже.
[055] Кодер (340) представляет предсказанный блок с внешним кодированием кадра (331) источника с точки зрения предсказания из опорных кадров. Устройство оценки движения оценивает движение блока относительно одного или нескольких опорных кадров (369). Когда используются многочисленные опорные кадры, многочисленные опорные кадры могут быть с разных временных направлений или одного и того же временного направления. Опорная зона предсказания с компенсацией движения представляет собой зону отсчетов в опорном кадре (кадрах), которые используются для генерирования значений предсказания с компенсацией движения для блока отсчетов текущего кадра. Устройство оценки движения выводит информацию о движении, такую как информация о векторе движения, которая энтропийно кодируется. Компенсатор движения применяет векторы движения к опорным кадрам (369) для определения значений предсказания с компенсацией движения.
[056] В режимах не-BCIM кодер определяет разности (если они есть) между значениями предсказания блока (внутренние или внешние) и соответствующие исходные значения. Эти значения остатка предсказания дополнительно кодируются с использованием преобразования частоты, квантования и энтропийного закодирования. Например, кодер (340) устанавливает значения для параметра квантования (OP) для видеокадра, плитки, слайса и/или другого участка видео, и квантует коэффициенты преобразования соответствующим образом. В режиме BCIM кодер пропускает операции преобразования и квантования, за исключением некоторых операций квантования при обработке значений исключения.
[057] Энтропийный кодировщик кодера (340) сжимает квантованные значения коэффициентов преобразования, а также некоторую дополнительную информацию (например, информацию о векторе движения, значения QP, решения о режиме, варианты параметра). В частности, энтропийный кодировщик может сжимать данные для элементов индексной карты, используя структуру синтаксиса кодирования коэффициентов. Типовые методы энтропийного кодирования включают в себя экспоненциальное кодирование Голомба, арифметическое кодирование, дифференциальное кодирование, кодирование методом Хаффмана, кодирование длины серий, кодирование переменной длины в переменную длину (V2V), кодирование переменной длины в фиксированную длину (V2F), кодирование по алгоритму Лемпеля-Зива (LZ-кодирование), словарное кодирование, энтропийное кодирование разделения интервала вероятности (PIPE) и комбинации вышеупомянутых. Энтропийный кодировщик может использовать разные методы кодирования для разных видов информации и может выбирать из числа многочисленных кодовых таблиц в конкретном методе кодирования.
[058] Кодированные кадры (341) и информация (342) о MMCO/RPS обрабатываются эмулятором (350) процесса декодирования. Эмулятор (350) процесса декодирования реализует некоторые функциональные возможности декодера, например, задачи декодирования по восстановлению опорных кадров. Эмулятор (350) процесса декодирования использует информацию (342) о MMCO/RPS для определения, требуется ли восстановление и сохранение данного кодированного кадра (341) для использования в качестве опорного кадра в межкадровом предсказании последующих кадров, подлежащих закодированию. Если информация (342) о MMCO/RPS указывает, что кодированный кадр (341) требует сохранения, эмулятор (350) процесса декодирования моделирует процесс декодирования, который выполнялся бы декодером, который принимает кодированный кадр (341) и создает соответствующий декодированный кадр (351). Выполняя так, когда кодер (340) использует декодированный кадр(-ы) (369), которые были сохранены в области (360) хранения декодированных кадров, эмулятор (350) процесса декодирования также использует декодированный кадр(-ы) (369) из области (360) хранения как часть процесса декодирования.
n
[059] Область (360) хранения временной памяти декодированных кадров включает в себя многочисленные области (361, 362, …, 36) хранения буфера кадров. Эмулятор (350) процесса декодирования использует информацию (342) о MMCO/RPS для управления содержимым области (360) хранения, чтобы идентифицировать любой буфер (361, 362 и т.д.) кадров с кадрами, которые больше не требуются для кодера (340) для использования в качестве опорных кадров. После моделирования процесса декодирования эмулятор (350) процесса декодирования сохраняет вновь декодированный кадр (351) в буфере (361, 362 и т.д.) кадров, который был идентифицированы таким образом.
[060] Кодированные кадры (341) и информация (342) о MMCO/RPS буферизуются в области (370) временных кодированных данных. Кодированные данные, которые агрегируются в области (370) кодированных данных, содержат, как часть синтаксиса элементарного кодированного битового видеопотока, закодированные данные для одного или нескольких видеокадров. Кодированные данные, которые агрегируются в области (370) кодированных данных, также могут включать в себя метаданные мультимедиа, относящиеся к кодированным видеоданным (например, в виде одного или нескольких параметров в одном или нескольких сообщениях дополнительной информации об улучшениях (SEI) или сообщениях информации по используемости видео (VUI)).
[061] Агрегированные данные (371) из области (370) временных кодированных данных обрабатываются канальным кодером (380). Канальный кодер (380) может пакетировать агрегированные данные для передачи в качестве медиапотока (например, в соответствии с форматом мультиплексирования медиапотока, таким как ISO/IEC 13818-1), в этом случае, канальный кодер (380) может добавить синтаксические элементы в качестве части синтаксиса медиапотока передачи. Или канальный кодер (380) может организовать агрегированные данные для хранения в виде файла (например, в соответствии с форматом медиаконтейнера, таким как ISO/IEC 14496-12), в этом случае канальный кодер (380) может добавить синтаксические элементы в качестве части синтаксиса файла хранения медиа. Или, в общем, канальный кодер (380) может реализовать один или несколько протоколов мультиплексирования медиасистемы или транспортных протоколов, в этом случае канальный кодер (380) может добавить синтаксические элементы как часть синтаксиса протокола(-ов). Канальный кодер (380) обеспечивает вывод в канал (390), который представляет запоминающее устройство, соединение передачи данных или другой канал для вывода.
IV. Примерные системы декодера
[062] Фиг.4 представляет собой блок-схему примерной системы (400) декодера, вместе с которой могут быть реализованы некоторые описанные варианты осуществления. Система (400) декодера может представлять собой инструментальное средство декодирования общего назначения, способное работать в любом из многочисленных режимов декодирования, таком как режим декодирования с малым временем ожидания для передачи данных в реальном времени, и обычный режим декодирования для воспроизведения мультимедиа из файла или потока, или она может представлять собой инструментальное средство декодирования специального назначения, адаптированное для одного такого режима декодирования. Система (400) декодера может быть реализована в виде модуля операционной системы, как часть библиотеки приложения или в виде отдельного приложения. В целом, система (400) декодера принимает кодированные данные из канала (410) и создает восстановленные кадры в виде выходного сигнала для пункта (490) назначения вывода. Кодированные данные могут включать в себя содержимое, закодированное с использованием режима BCIM.
[063] Система (400) декодера включает в себя канал (410), который может представлять запоминающее устройство, соединение передачи данных или другой канал для кодированных данных в качестве ввода. Канал (410) создает кодированные данные, которые были канально кодированы. Канальный декодер (420) может обрабатывать кодированные данные. Например, канальный декодер (420) распаковывает данные, которые были агрегированы для передачи в виде медиапотока (например, в соответствии с форматом мультиплексирования медиапотока, такого как ISO/IEC 13818-1), в этом случае канальный декодер (420) может выполнять синтаксический анализ синтаксических элементов, добавленных как часть синтаксиса потока передачи мультимедиа. Или канальный декодер (420) отделяет кодированные видеоданные, которые были агрегированы для хранения в виде файла (например, в соответствии с форматом медиаконтейнера, такого как ISO/IEC 14496-12), в этом случае канальный декодер (420) может выполнять синтаксический анализ синтаксических элементов, добавленных как часть синтаксиса файла хранения мультимедиа. Или, в общем, канальный декодер (420) может реализовать один или несколько протоколов демультиплексирования медиасистемы или транспортных протоколов, в этом случае канальный декодер (420) может выполнять синтаксический анализ синтаксических элементов, добавленных как часть синтаксиса протокола(-ов).
[064] Кодированные данные (421), которые выводятся из канального декодера (420), сохраняются в области (430) временных кодированных данных до тех пор, пока не будет принято достаточное количество таких данных. Кодированные данные (421) включают в себя кодированные кадры (431) и информацию (432) о MMCO/RPS. Кодированные данные (421) в области (430) кодированных данных содержат, как часть синтаксиса элементарного кодированного битового видеопотока, кодированные данные для одного или нескольких видеокадров. Кодированные данные (421) в области (430) кодированных данных также могут включать в себя метаданные мультимедиа, относящиеся к закодированным видеоданным (например, в виде одного или нескольких параметров в одном или нескольких сообщениях SEI или сообщениях VUI).
[065] В общем, область (430) кодированных данных временно хранит кодированные данные (421) до тех пор, пока такие кодированные данные (421) используются декодером (450). В этот момент, кодированные данные для кодированного кадра (431) и информация (432) о MMCO/RPS пересылаются из области (430) кодированных данных на декодер (450). Когда декодирование продолжается, новые кодированные данные добавляются в область (430) кодированных данных, и самые старые кодированные данные, остающиеся в области (430) кодированных данных, пересылаются на декодер (450).
[066] Декодер (450) периодически декодирует кодированный кадр (431) и получает соответствующий декодированный кадр (451). При необходимости, при выполнении своего процесса декодирования, декодер (450) может использовать один или несколько ранее декодированных кадров (469) в качестве опорных кадров для межкадрового предсказания. Декодер (450) считывает такие ранее декодированные кадры (469) из области (460) хранения временной памяти декодированных кадров. Обычно, декодер (450) включает в себя многочисленные модули декодирования, которые выполняют задачи декодирования, такие как энтропийное декодирование, обратное квантование, обратное преобразование частоты, внутреннее предсказание, компенсация движения и объединение плиток. Точные операции, выполняемые декодером (450), могут меняться в зависимости от формата сжатия.
[067] Например, декодер (450) принимает закодированные данные для сжатого кадра или последовательности кадров и создает вывод, включающий в себя декодированный кадр (451). В декодере (450) буфер принимает закодированные данные для сжатого кадра и, в соответствующий момент времени, делает принятые закодированные данные доступными для энтропийного декодера. Энтропийный декодер энтропийно декодирует энтропийно кодированные квантованные данные, а также энтропийно кодированную дополнительную информацию, обычно применяя процесс, обратный энтропийному закодированию, выполняемому в кодере. Компенсатор движения применяет информацию о движении к одному или нескольким опорным кадрам и формирует значения предсказания с компенсацией движения для любого блока с внешним кодированием восстанавливаемого кадра. Модуль внутреннего предсказания может пространственно предсказывать значения отсчетов текущего блока из соседних ранее восстановленных значений отсчетов. Для режима BCIM декодер восстанавливает блок с внутренним кодированием с индексными значениями для основных цветов из числа значений отсчетов блока, используя таблицу основных цветов для индексных значений и используя элементы индексной карты.
[068] В режимах не-BCIM декодер (450) также восстанавливает остатки предсказания. Обратный квантователь выполняет обратное квантование энтропийно декодированных данных. Например, декодер (450) устанавливает значения для QP для видеокадра, плитки, слайса и/или другого участка видео, основываясь на синтаксических элементах в битовом потоке, и выполняет обратное квантование коэффициентов преобразования соответствующим образом. Обратный преобразователь частоты преобразует квантованные данные частотной области в информацию пространственной области. В режиме BCIM декодер пропускает операции обратного квантования и обратного преобразования частоты, за исключением некоторых операций обратного квантования при декодировании значений исключения. Для блока с внешним предсказанием декодер (450) объединяет восстановленные остатки предсказания с предсказаниями с компенсацией движения. Декодер (450) может, аналогичным образом, объединять остатки предсказания с предсказаниями от внутреннего предсказания. Контур компенсации движения в видеодекодере (450) включает в себя адаптивный деблокинг-фильтр для сглаживания нарушений непрерывности по строкам и/или столбцам границ блока в декодированном кадре (451).
n
[069] Область (460) хранения временной памяти декодированных кадров включает в себя многочисленные области (461, 462, …, 46) хранения буфера кадров. Область (460) хранения декодированных кадров представляет собой пример буфера декодированных видеокадров. Декодер (450) использует информацию (432) о MMCO/RPS для идентификации буфера (461, 462 и т.д.) кадров, в котором он может сохранять декодированный кадр (451). Декодер (450) сохраняет декодированный кадр (451) в этом буфере кадров.
[070] Задатчик (480) последовательности вывода использует информацию (432) о MMCO/RPS для идентификации, когда следующий кадр, подлежащий созданию в порядке вывода, является доступным в области (460) хранения декодированных кадров. Когда следующий кадр (481), подлежащий созданию в порядке вывода, является доступным в области (460) хранения декодированных кадров, он считывается задатчиком (480) последовательности вывода и выводится на пункт (490) назначения вывода (например, дисплей). Обычно, порядок, в котором кадры выводятся из области (460) хранения декодированных кадров задатчиком (480) последовательности вывода, может отличаться от порядка, в котором кадры декодируются декодером (450).
V. Примерные видеокодеры
[071] Фиг.5a и 5b представляют собой блок-схему обобщенного видеокодера (500), вместе с которым могут быть реализованы некоторые описанные варианты осуществления. Кодер (500) принимает последовательность видеокадров, включая текущий видеокадр, в качестве входного видеосигнала (505) и создает закодированные данные в кодированном битовом видеопотоке (595) в качестве вывода.
[072] Кодер (500) основан на блоках и использует формат блока, который зависит от реализации. Блоки могут дополнительно разделяться на разных этапах, например, на этапах предсказания, преобразования частоты и/или энтропийного закодирования. Например, видеокадр может разделяться на блоки размером 64×64, блоки размером 32×32 или блоки размером 16×16, которые, в свою очередь, могут разделяться на меньшие блоки значений отсчетов для кодирования и декодирования. При реализации закодирования для стандарта HEVC, кодер разбивает видеокадр на CTU (CTB), CU (CB), PU (PB) и TU (TB).
[073] Кодер (500) сжимает видеокадры, используя кодирование внутри видеокадра и/или кодирование между видеокадрами. Многие компоненты кодера (500) используются как для кодирования внутри видеокадра, так и для кодирования между видеокадрами. Точные операции, выполняемые этими компонентами, могут меняться в зависимости от типа сжимаемой информации.
[074] Модуль (510) образования плиток необязательно разбивает видеокадр на многочисленные плитки одинакового размера или разных размеров. Например, модуль (510) образования плиток разбивает видеокадр по строкам плиток и столбцам плиток, которые с границами видеокадра определяют горизонтальные и вертикальные границы плиток в видеокадре, где каждая плитка представляет собой прямоугольную область. Модуль (510) образования плиток затем может группировать плитки в один или несколько наборов плиток, где набор плиток представляет собой группу из одного или нескольких плиток.
[075] Узел (520) общего управления закодированием принимает видеокадры для входного видеосигнала (505), а также обратной связи (не показана) от различных модулей кодера (500). В целом, узел (520) общего управления закодированием подает сигналы управления (не показаны) на другие модули (такие как модуль (510) образования плиток, преобразователь/узел масштабирования/квантователь (530), узел масштабирования/обратный преобразователь (535), узел (540) оценки внутри видеокадра, узел (550) оценки движения и переключатель «внутренний/внешний») для установки и изменения параметров кодирования во время закодирования. В частности, узел (520) общего управления закодированием может принимать решение, использовать ли и как использовать режим BCIM во время закодирования. Узел (520) общего управления закодированием также может оценивать промежуточные результаты во время закодирования, например, выполняя анализ «скорость-искажение». Узел (520) общего управления закодированием создает данные (522) общего управления, которые указывают решения, принятые во время закодирования, так что соответствующий декодер может принять согласованные решения. Данные (522) общего управления подаются на узел форматирования заголовка/энтропийный кодировщик (590).
[076] Если текущий видеокадр предсказывается с использованием предсказания между видеокадрами, узел (550) оценки движения оценивает движение блоков значений отсчетов текущего видеокадра входного видеосигнала (505) относительно одного или нескольких опорных видеокадров. Буфер (570) декодированных видеокадров буферизует один или несколько ранее восстановленных кодированных видеокадров для использования в качестве опорных видеокадров. Когда используются многочисленные опорные видеокадры, многочисленные опорные видеокадры могут быть с разных временных направлений или с одного и того же временного направления. Узел (550) оценки движения создает в качестве дополнительной информации данные (552) движения, такие как данные вектора движения и данные выбора опорного видеокадра. Данные (552) движения подаются на узел форматирования заголовка/энтропийный кодировщик (590), а также компенсатор (555) движения.
[077] Компенсатор (555) движения применяет векторы движения к восстановленному опорному видеокадру(-ам) из буфера (570) декодированных видеокадров. Компенсатор (555) движения создает предсказания с компенсацией движения для текущего видеокадра.
[078] В отдельном тракте в кодере (500) узел (540) оценки внутри видеокадра определяет, как выполнять предсказание внутри видеокадра для блоков значений отсчетов текущего видеокадра входного видеосигнала (505). Текущий видеокадр может полностью или частично кодироваться с использованием кодирования внутри видеокадра. Используя значения восстановления (538) текущего видеокадра для внутреннего пространственного предсказания, узел (540) оценки внутри видеокадра определяет, как пространственно предсказать значения отсчетов текущего блока текущего видеокадра из соседних, ранее восстановленных значений отсчетов текущего видеокадра.
[079] Для режима BCIM кодер (500) представляет блок с внутренним кодированием с индексными значениями для основных цветов из числа значений отсчетов блока, используя индексную карту для индексных значений и используя элементы индексной карты.
[080] Узел (540) оценки внутреннего предсказания создает в качестве дополнительной информации данные (542) внутреннего предсказания, такие как информацию, указывающую, использует ли внутреннее предсказание пространственное предсказание или режим BCIM (например, значение флага для каждого внутреннего блока или для каждого внутреннего блока некоторых направлений режима предсказания), направление режима предсказания (для внутреннего пространственного предсказания). Данные (542) внутреннего предсказания подаются на узел форматирования заголовка/энтропийный кодировщик (590), а также предсказатель (545) внутри видеокадра. Согласно данным (542) внутреннего предсказания, предсказатель (545) внутри видеокадра пространственно предсказывает значения отсчетов текущего блока текущего видеокадра из соседних, ранее восстановленных значений отсчетов текущего видеокадра или восстанавливает значения отсчетов блоков режима BCIM.
[081] В режиме не-BCIM переключатель «внутренний/внешний» выбирает значения предсказания с компенсацией движения или предсказания внутри видеокадра для использования в качестве предсказания (558) для данного блока. В режимах не-BCIM, разность (если она есть) между блоком предсказания (558) и соответствующей частью исходного текущего видеокадра входного видеосигнала (505) обеспечивает значения остатка (518). Во время восстановления текущего видеокадра, восстановленные значения остатка объединяются с предсказанием (558) для получения восстановления (538) исходного содержимого из видеосигнала (505). При сжатии с потерями, однако, некоторая информация все же теряется из видеосигнала (505).
[082] В преобразователе/узле масштабирования/квантователе (530), для режимов не-BCIM, преобразователь частоты преобразует видеоинформацию пространственной области в данные (например, спектральные данные, данные преобразования) частотной области. Для видеокодирования на основе блоков, преобразователь частоты применяет дискретное косинусное преобразование (DCT), его целочисленную аппроксимацию, или другой тип прямого преобразования блоков в блоки данных остатка предсказания (или данных значений отсчетов, если предсказание (558) нулевое), получая блоки коэффициентов преобразования частоты. Кодер (500) также может быть способен указывать, что пропускается такой этап преобразования. Узел масштабирования/квантователь масштабирует и квантует коэффициенты преобразования. Например, квантователь применяет неравномерное скалярное квантование к данным частотной области с размером шага, который изменяется на покадровой основе, на поплитокой основе, послайсовой основе, на поблочной основе или на другой основе. Данные (532) квантованных коэффициентов преобразования подаются на узел форматирования заголовка/энтропийный кодировщик (590).
[083] В узле масштабирования/обратном преобразователе (535), для режимов не-BCIM, узел масштабирования/обратный квантователь выполняет обратное масштабирование и обратное квантование квантованных коэффициентов преобразования. Обратный преобразователь частоты выполняет обратное преобразование частоты, создавая блоки восстановленных остатков предсказания или значений отсчетов. Кодер (500) объединяет восстановленные остатки со значениями предсказания (558) (например, значениями предсказания с компенсацией движения, значениями предсказания внутри видеокадра) для формирования восстановления (538).
[084] Для предсказания внутри видеокадра, значения восстановления (538) могут подаваться обратно на узел (540) оценки внутри видеокадра и предсказатель (545) внутри видеокадра. Также, значения восстановления (538) могут использоваться для предсказания с компенсацией движения последующих видеокадров. Значения восстановления (538) могут дополнительно фильтроваться. Управление (560) фильтрацией определяет, как выполнять фильтрацию с устранением блочности (деблокинг-фильтрацию) и фильтрацию с адаптивным смещением отсчетов (SAO) значений восстановления (538) для данного видеокадра видеосигнала (505). Управление (560) фильтрацией создает данные (562) управления фильтром, которые подаются на узел форматирования заголовка/энтропийный кодировщик (590) и узел объединения/фильтр(-ы) (565).
[085] В узле объединения/фильтре(-ах) (565), кодер (500) объединяет содержимое из разных плиток в восстановленную версию видеокадра. Кодер (500) селективно выполняет деблокинг-фильтрацию и SAO-фильтрацию в соответствии с данными (562) управления фильтром, чтобы адаптивно сглаживать нарушения непрерывности по границам в кадрах. Границы плиток могут фильтроваться селективно или могут совсем не фильтроваться в зависимости от установок кодера (500), и кодер (500) может обеспечивать синтаксис в кодированном битовом потоке для указания, применялась ли или нет такая фильтрация. Буфер (570) декодированных видеокадров буферизует восстановленный текущий видеокадр для использования в последующем предсказании с компенсацией движения.
[086] Узел форматирования заголовка/энтропийный кодировщик (590) форматирует и/или энтропийно кодирует данные (522) общего управления, данные (532) квантованных коэффициентов преобразования, данные (542) внутреннего предсказания и упакованные индексные значения, данные (552) движения и данные (562) управления фильтром. Например, узел форматирования заголовка/энтропийный кодировщик (590) использует контекстно-адаптивное двоичное арифметическое кодирование (CABAC) для энтропийного кодирования различных синтаксических элементов структуры синтаксиса кодирования коэффициентов.
[087] Узел форматирования заголовка/энтропийный кодировщик (590) обеспечивает закодированные данные в кодированном битовом видеопотоке (595). Форматом кодированного битового видеопотока (595) может быть вариант или расширение формата HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2 или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264) или другого формата.
[088] В зависимости от реализации и типа требуемого сжатия модули кодера могут добавляться, исключаться, разделяться на многочисленные модули, объединяться с другими модулями и/или заменяться подобными модулями. В альтернативных вариантах осуществления кодеры с разными модулями и/или другие конфигурации модулей выполняют один или несколько из описанных методов. Конкретные варианты осуществления кодеров обычно используют вариант или дополненную версию кодера (500). Зависимости, показанные между модулями в кодере (500), указывают общие потоки информации в кодере; другие зависимости не показаны ради упрощения.
VI. Примерные видеодекодеры
[089] Фиг.6 представляет собой блок-схему обобщенного декодера (600), вместе с которым могут быть реализованы несколько описанных вариантов осуществления. Декодер (600) принимает закодированные данные в кодированном битовом видеопотоке (605) и создает выходной сигнал, включающий в себя видеокадры для восстановленного видео (695). Форматом кодированного битового видеопотока (605) может быть вариант или расширение формата HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2 или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264) или другого формата.
[090] Декодер (600) основан на блоках и использует формат блока, который зависит от реализации. Блоки дополнительно могут подразделяться на разных этапах. Например, видеокадр может разделяться на блоки размером 64×64, блоки размером 32×32 или блоки размером 16×16, которые, в свою очередь, могут разделяться на меньшие блоки значений отсчетов. В реализациях декодирования для стандарта HEVC, видеокадр разбивается на CTU (CTB), CU (CB), PU (PB) и TU (TB).
[091] Декодер (600) возвращает к состоянию до сжатия видеокадры, используя декодирование внутри видеокадра и/или декодирование между видеокадрами. Многие компоненты декодера (600) используются как для декодирования внутри видеокадра, так и для декодирования между видеокадрами. Точные операции, выполняемые этими компонентами, могут меняться в зависимости от типа информации, которая возвращается к состоянию до сжатия.
[092] Буфер принимает закодированные данные в кодированном битовом видеопотоке (605) и делает принятые закодированные данные доступными для узла синтаксического анализа/энтропийного декодера (610). Узел синтаксического анализа/энтропийный декодер (610) декодирует энтропийно кодированные энтропийно данные, обычно применяя обратную форму энтропийного кодирования, выполняемого в кодере (500) (например, контекстно-адаптивное двоичное арифметическое декодирование). Например, узел синтаксического анализа/энтропийный декодер (610) использует контекстно-адаптивное двоичное арифметическое декодирование для энтропийного декодирования различных синтаксических элементов структуры синтаксиса кодирования коэффициентов. В результате синтаксического анализа и энтропийного декодирования узел синтаксического анализа/энтропийный декодер (610) создает данные (622) общего управления, данные (632) квантованных коэффициентов преобразования, данные (642) внутреннего предсказания и упакованные индексные значения, данные (652) движения и данные (662) управления фильтром.
[093] Узел (620) общего управления декодированием принимает данные (622) общего управления и подает сигналы управления (не показаны) на другие модули (такие как узел масштабирования/обратный преобразователь (635), предсказатель (645) внутри видеокадра, компенсатор (655) движения и переключатель «внутренний/внешний») для установки и изменения параметров декодирования во время декодирования.
[094] Если текущий видеокадр предсказывается с использованием предсказания между видеокадрами, компенсатор (655) движения принимает данные (652) движения, такие как данные вектора движения и данные выбора опорного видеокадра. Компенсатор (655) движения применяет векторы движения к восстановленному опорному видеокадру(-ам) из буфера (670) декодированных видеокадров. Компенсатор (655) движения создает предсказания с компенсацией движения для блоков с внешним кодированием текущего видеокадра. Буфер (670) декодированных видеокадров хранит один или несколько ранее восстановленных видеокадров для использования в качестве опорных видеокадров.
[095] В отдельном тракте в декодере (600) предсказатель (645) внутреннего предсказания принимает данные (642) внутреннего предсказания, такие как информация, указывающая использует ли внутреннее предсказание пространственное предсказание или режим BCIM (например, значение флага для каждого внутреннего блока или для каждого внутреннего блока некоторых направлений режима предсказания), направление режима предсказания (для внутреннего пространственного предсказания). Для внутреннего пространственного предсказания, используя значения восстановления (638) текущего видеокадра, согласно данным режима предсказания, предсказатель (645) внутри видеокадра пространственно предсказывает значения отсчетов текущего блока текущего видеокадра из соседних, ранее восстановленных значений отсчетов текущего видеокадра. Для режима BCIM, декодер восстанавливает блок с внутренним кодированием с индексными значениями для основных цветов из числа значений отсчетов блока, используя таблицу основных цветов для индексных значений и используя элементы индексной карты.
[096] Для режимов не-BCIM, переключатель «внутренний/внешний» выбирает значения предсказания с компенсацией движения или предсказания внутри видеокадра для использования в качестве предсказания (658) для данного блока. Например, если придерживаться синтаксиса HEVC, переключатель «внутренний/внешний» может управляться на основе синтаксического элемента, закодированного для CU видеокадра, который может содержать CU с внутренним предсказанием и CU с внешним предсказанием. Декодер (600) объединяет предсказание (658) с восстановленными значениями остатка для получения восстановления (638) содержимого из видеосигнала.
[097] Для восстановления остатка, для режимов не-BCIM, узел масштабирования/обратный преобразователь (635) принимает и обрабатывает данные (632) квантованных коэффициентов преобразования. В узле масштабирования/обратном преобразователе (635), узел масштабирования/обратный квантователь выполняет обратное масштабирование и обратное квантование квантованных коэффициентов преобразования. Обратный преобразователь частоты выполняет обратное преобразование частоты, создавая блоки восстановленных остатков предсказания или значения отсчетов. Например, обратный преобразователь частоты применяет обратное преобразование блока в коэффициенты преобразования частоты, создавая данные значений отсчетов или данные остатка предсказания. Обратным преобразованием частоты может быть обратное DCT, его целочисленная аппроксимация, или другой тип обратного преобразования частоты.
[098] Для предсказания внутри видеокадра, значения восстановления (638) могут подаваться обратно на предсказатель (645) внутри видеокадра. Для предсказания между видеокадрами, значения восстановления (638) могут дополнительно фильтроваться. В узле объединения/фильтре(-ах) (665), декодер (600) объединяет содержимое из разных плиток в восстановленную версию видеокадра. Декодер (600) селективно выполняет деблокинг-фильтрацию и SAO-фильтрацию в соответствии с данными (662) управления фильтром и правилами для адаптации фильтра, чтобы адаптивно сглаживать нарушения непрерывности по границам в кадрах. Границы плиток могут селективно фильтроваться или могут не фильтроваться совсем в зависимости от установок декодера (600) или указания синтаксиса в данных закодированного битового потока. Буфер (670) декодированных видеокадров буферизует восстановленный текущий видеокадр для использования в последующем предсказании с компенсацией движения.
[099] Декодер (600) также может включать в себя деблокинг-фильтр постобработки. Деблокинг-фильтр постобработки, необязательно, сглаживает нарушения непрерывности в восстановленных видеокадрах. Другая фильтрация (такая как фильтрация эффектов Гиббса) также может применяться как часть фильтрации постобработки.
[0100] В зависимости от реализации и типа требуемого возвращения к состоянию до сжатия, модули декодера могут добавляться, исключаться, разделяться на многочисленные модули, объединяться с другими модулями и/или заменяться подобными модулями. В альтернативных вариантах осуществления декодеры с разными модулями и/или с другими конфигурациями модулей выполняют один или несколько из описанных методов. Конкретные варианты осуществления декодеров обычно используют вариант или дополненную версию декодера (600). Зависимости, показанные между модулями в декодере (600), указывают общие потоки информации в декодере; другие зависимости не показаны ради упрощения.
VII. Нововведения для режима индексной карты основных цветов
[0101] Этот раздел представляет различные нововведения для режима индексной карты основных цветов (BCIM). Некоторые нововведения относятся к повторному использованию структуры синтаксиса кодирования коэффициентов или для коэффициентов преобразования, или для данных индексной карты в режиме BCIM, тогда как другие относятся к отображению или предсказанию индексных значений в режиме BCIM. Еще другие относятся к обработке значений исключения в режиме BCIM. Эти нововведения могут способствовать режиму BCIM, который является более эффективным в смысле рабочих характеристик «скорость-искажение» и/или эффективности вычислений закодирования и декодирования. В частности, использование режима BCIM может улучшить рабочие характеристики «скорость-искажение» при закодировании некоторого «искусственно» созданного содержимого видео, такого как содержимое захвата экрана. Содержимое захвата экрана обычно включает в себя повторяющиеся структуры (например, графика, текстовый символ), которые предоставляют возможность для внутреннего BC-предсказания для улучшения рабочих характеристик. Содержимое захвата экрана обычно кодируется в формате (например, YUV 4:4:4 или RGB 4:4:4) с высоким разрешением дискретизации цветности, хотя оно также может кодироваться в формате с меньшим разрешением дискретизации цветности (например, YUV 4:2:0).
A. Режим индексной карты основных цветов - Введение
[0102] В режиме BCIM видеокодер или кодер изображения кодирует значения отсчетов, используя индексные значения, которые представляют основные цвета. Каждое индексное значение ассоциируется с разным значением (основной цвет) из числа значений отсчетов. Во время закодирования значения отсчетов заменяются соответствующими индексными значениями. Кодер кодирует и сигнализирует таблицу индексных значений и соответствующие основные цвета (таблицу основных цветов), а также размещение индексных значений, которые представляют значения отсчетов (индексную карту). Видеодекодер или декодер изображения принимает и декодирует таблицу индексных значений и соответствующие основные цвета. Используя эта таблицу основных цветов, декодер заменяет индексные значения индексной карты основными цветами для исходных значений отсчетов.
s
i
j
i
j
s
s
[0103] Фиг.7 изображает блок (710) значений  отсчетов в двумерном размещении с размерами ,  для 0≤≤7 и 0≤≤7. На фиг.7 значения  отсчетов представляют значения интенсивности или яркости для содержимого захвата экрана. Значения  отсчетов включают в себя секции одинаковых значений и определенных комбинаций. Блок (710) включает в себя значения 26, 85, 41, 127, 168 и 200 отсчетов.
[0104] Кодер создает таблицу (720) основных цветов, которая назначает индексные значения соответствующим основным цветам. В примере на фиг.7 индексное значение 0 назначается значению 200 отсчета, индексное значение 1 назначается значению 168 отсчета и т.д. Кодер может назначать индексное значения основным цветам в соответствии с вероятностью их появления в видеокадре, так что больше общих значений отсчетов имеют меньшие индексные значения, и меньшие общие значения отсчетов имеют более высокие индексные значения, результатом которых является более эффективное кодирование, если меньшие индексные значения представлены меньшим количеством битов. Альтернативно, кодер может назначать индексные значения основным цветам в соответствии с порядком появления, когда сканируется блок, основываясь на последующих процессах, таких как предсказание использования избыточности среди индексных значений индексной карты. Таблица (720) основных цветов может быть реализована в виде таблицы поиска или другой структуры данных.
s
n
[0105] Фиг. 7 изображает блок (730), в котором значения  отсчетов заменены соответствующими индексными значениями . Процесс замены значений отсчетов индексными значениями выполняется без потерь. Альтернативно, в варианте сжатия с потерями значение отсчета может быть заменено индексным значением, представляющим основной цвет, ближайший к значению отсчета, если не является доступным точное совпадение. Это может уменьшить размер таблицы (720) основных цветов, но также вводит заметные искажения. Ниже описывается другой подход к обработке значений отсчетов, не представленных индексными значениями (так называемыми значениями исключения).
n
n
[0106] Кодер кодирует и выводит таблицу (720) основных цветов, а также индексную карту с элементами, представляющими блок (730) индексных значений . Например, кодер использует структуру синтаксиса кодирования коэффициентов для представления элементов блока (730), как описано ниже. Как часть закодирования, индексные значения  для блока (730) могут обрабатываться посредством дополнительных операций отображения и/или предсказания.
n
[0107] Во время декодирования декодер принимает и декодирует таблицу (720) основных цветов и данные для индексной карты. Например, декодер декодирует элементы блока (730) из структуры синтаксиса кодирования коэффициентов, как описано ниже. Как часть декодирования, индексные значения  для блока (730) могут обрабатываться посредством дополнительных операций отображения и/или предсказания. Декодер тогда изменяет на обратный процесс отображения, используя таблицу (720) основных цветов, как показано на фиг.7.
m
n
m
n
[0108] В примере на фиг.7, кодер создает таблицу (720) основных цветов для значений отсчетов блока размером 8×8. Альтернативно, блок имеет другой размер (например, 4×4, 16×16, 32×32 или 64×64). В общем, блоком является блок размером ×, где  и  могут иметь равное значение или могут иметь разные значения. Или кодер может создавать отображение основных цветов для значений отсчетов слайса, плитки, всего видеокадра, группы видеокадров или видеопоследовательности.
B. Повторное использование структуры синтаксиса кодирования коэффициентов
[0109] В некоторых примерных реализациях, видеокодер или кодер изображения использует структуру синтаксиса, обычно используемую для сигнализации информации о коэффициентах преобразования, для сигнализации вместо этого данных режима BCIM. В частности, кодер повторно использует структуру синтаксиса кодирования коэффициентов для сигнализации информации об индексной карте в режиме BCIM.
[0110] Фиг.8 изображает последовательность (800) процессов данного подхода во время закодирования. Кодер принимает блок значений (810) пространственной области. Значениями (810) пространственной области могут быть значения отсчетов. Или значениями (810) пространственной области могут быть остатки предсказания после предсказания между видеокадрами или предсказания внутри видеокадра. Кодер может применять операции закодирования в режиме BCIM или применять операции в режиме не-BCIM, используя одинаковую структуру синтаксиса кодирования коэффициентов в обоих режимах.
[0111] Для режима BCIM кодер отображает (812) значения (810) пространственной области (например, значения отсчетов) в индексные значения (830), заменяя значения (810) пространственной области соответствующими индексными значениями (830). Кодер дополнительно отображает (832) индексные значения на упакованные индексные значения (840) для индексной карты, например, как описано в следующем разделе. Операции (812, 832) отображения в режиме BCIM не включают в себя операции квантования или преобразования (за исключением для закодирования значений исключения в некоторых реализациях). Кодер кодирует (842) таблицу основных цветов и элементы индексной карты, используя структуру (890) синтаксиса кодирования коэффициентов для сигнализации упакованных индексных значений (840) индексной карты.
[0112] Для режима не-BCIM, кодер применяет (814) преобразование частоты к значениям (810) пространственной области (например, значениям остатка), получая коэффициенты (860) преобразования, которые кодер квантует (862). Альтернативно, преобразование и/или квантование пропускаются. Квантованные коэффициенты (870) преобразования затем кодируются с использованием структуры (890) синтаксиса кодирования коэффициентов.
[0113] В некоторых примерных реализациях, которые придерживаются синтаксиса HEVC, структурой синтаксиса кодирования коэффициентов является структура синтаксиса residual_coding (кодирование остатка). См., например, разделы 7.3.8.11 и 7.4.9.11 стандарта JCTVC-N1005. В режиме BCIM кодер обрабатывает элементы индексной карты (например, индексные значения, упакованные индексные значения, индексные значения остатка или упакованные индексные значения остатка, как описано ниже), как если бы они были квантованными коэффициентами преобразования. Конкретно, кодер сигнализирует позицию последнего ненулевого коэффициента в блоке, которым может быть блок размером 4×4, блок размером 8×8, блок размером 16×16 или блок размером 32×32. Для каждой группы размера 4×4 значений в блоке кодер сигнализирует флаг, указывающий, имеет ли группа размера 4×4 по меньшей мере один ненулевой коэффициент. Для группы размера 4×4, которая имеет по меньшей мере один ненулевой коэффициент, кодер сигнализирует флаги, указывающие, какие коэффициенты имеют ненулевые значения, затем сигнализирует информацию об уровне и (в большинстве случаев) информацию о знаке для коэффициентов с ненулевыми значениями. Кодер использует CABAC для закодирования различных элементов структуры синтаксиса residual_coding. Альтернативно, используется другая структура синтаксиса кодирования коэффициентов. Например, может использоваться структура синтаксиса кодирования коэффициентов, которая придерживается синтаксиса стандарта H.264, стандарта VC-1 или другого стандарта или проприетарного формата.
[0114] Фиг.9 изображает последовательность (900) процессов данного подхода во время декодирования. Декодер принимает структуру (990) синтаксиса кодирования коэффициентов. Декодер может применять операции в режиме BCIM или применять операции в режиме не-BCIM, используя одинаковую структуру синтаксиса кодирования коэффициентов в обоих режимах.
[0115] Для режима BCIM декодер декодирует (942) таблицу основных цветов и, используя структуру (990) синтаксиса кодирования коэффициентов, также декодирует (942) элементы индексной карты. Это создает упакованные индексные значения (940) для индексной карты. Декодер отображает (932) упакованные индексные значения (940) на индексные значения (930) для индексной карты, например, как описано в следующем разделе. Кодер затем отображает (912) индексные значения (930) на значения (910) пространственной области (например, значения отсчетов) для блока. Операции (912, 932) отображения в режиме BCIM не включают в себя операции обратного квантования или обратного преобразования (за исключением декодирования значений исключения в некоторых реализациях).
[0116] Для режима не-BCIM декодер декодирует (972) квантованные коэффициенты (970) преобразования, которые были сигнализированы с использованием структуры (990) синтаксиса кодирования коэффициентов. Декодер может обратно квантовать (962) квантованные коэффициенты преобразования, затем применять (914) обратное преобразование частоты для восстановления значений (910) пространственной области (например, остатков предсказания). Альтернативно, обратное квантование и/или обратное преобразование пропускаются. Декодер затем может выполнять предсказание между видеокадрами или предсказание внутри видеокадра (не показано) и объединять восстановленные значения отсчетов с предсказанными значениями (не показаны).
[0117] Фиг.10 иллюстрирует обобщенный метод (1000) закодирования, который использует структуру синтаксиса кодирования коэффициентов для селективного представления элементов индексной карты или коэффициентов преобразования. Метод (1000) может выполняться кодером, описанным с ссылкой на фиг.3 или фиг.5a или 5b, или другим кодером.
[0118] Кодер кодирует (1010) данные, используя структуру синтаксиса кодирования коэффициентов для блока, чтобы селективно представлять элементы индексной карты для блока или коэффициенты преобразования для блока. Например, если структура кодирования коэффициентов используется для коэффициентов преобразования в режиме не-BCIM, кодер (a) вычисляет значения остатка для блока, (b) выполняет преобразование частоты значений остатка для получения коэффициентов преобразования, (c) квантует коэффициенты преобразования и (d) кодирует результирующие значения в структуру синтаксиса кодирования коэффициентов. Или, если структура кодирования коэффициентов используется для индексной карты в режиме BCIM, кодер (a) отображает значения отсчетов для блока на индексные значения, причем каждое индексное значение представляет основной цвет, (b) отображает индексные значения на упакованные индексные значения или упакованные индексные значения остатка и (c) кодирует результирующие значения в структуру синтаксиса кодирования коэффициентов.
[0119] Для режима BCIM индексная карта может включать в себя упакованные индексные значения для блока, где каждым упакованным индексным значением является индексное значение, которое представляет основной цвет и упаковано в структуру синтаксиса кодирования коэффициентов. Или индексная карта может включать в себя упакованные индексные значения остатка для блока, причем каждое упакованное индексное значение остатка представляет основной цвет и упаковано в структуру синтаксиса кодирования коэффициентов. Упакованным индексным значением остатка может быть индексное значение остатка, основанное на разности между индексным значением и предсказанным индексным значением, или упакованное индексное значение остатка может основываться на разности между упакованным индексным значением и предсказанным упакованным индексным значением. Индексная карта также может включать в себя одно или несколько значений исключения, не представляющих никакой основной цвет, что может обрабатываться так, как описано ниже.
[0120] Кодер выводит (1020) закодированные данные. Например, для реализаций, которые придерживаются синтаксиса HEVC, закодированные данные могут включать в себя структуру синтаксиса residual_coding для элементов индексной карты или коэффициентов преобразования. Альтернативно, закодированные данные форматируются некоторым другим образом. Кодер может повторять метод (1000) для другого блока.
[0121] Фиг.11 иллюстрирует обобщенный метод (1100) декодирования, который использует структуру синтаксиса кодирования коэффициентов, которая селективно представляет элементы индексной карты или коэффициенты преобразования. Метод (1100) может выполняться декодером, описанным с ссылкой на фиг.4 или фиг.6, или другим декодером.
[0122] Декодер принимает (1110) закодированные данные. Например, для реализаций, которые придерживаются синтаксиса HEVC, закодированные данные могут включать в себя структуру синтаксиса residual_coding для элементов индексной карты или коэффициентов преобразования. Альтернативно, закодированные данные форматируются некоторым другим образом.
[0123] Декодер декодирует (1120) закодированные данные, используя структуру синтаксиса кодирования коэффициентов для блока, которая селективно представляет элементы индексной карты для блока или коэффициенты преобразования для блока. Например, если структура кодирования коэффициентов используется для коэффициентов преобразования в режиме не-BCIM, декодер (a) декодирует значения для коэффициентов преобразования из структуры синтаксиса кодирования коэффициентов, (b) обратно квантует коэффициенты преобразования, (c) выполняет обратное преобразование частоты коэффициентов преобразования для получения значений остатка для блока и (d) объединяет значения остатка со значениями предсказания для восстановления значений отсчетов для блока. Или, если структура кодирования коэффициентов используется для индексной карты в режиме BCIM, декодер (a) декодирует значения для индексной карты из структуры синтаксиса кодирования коэффициентов, (b) отображает упакованные индексные значения или упакованные индексные значения остатка на индексные значения, причем каждое индексное значение представляет основной цвет, и (c) отображает индексные значения на значения отсчетов для блока.
[0124] Для режима BCIM индексная карта может включать в себя упакованные индексные значения для блока, где каждым упакованным индексным значением является индексное значение, которое представляет основной цвет и упаковано в структуру синтаксиса кодирования коэффициентов. Или индексная карта может включать в себя упакованные индексные значения остатка для блока, причем каждое упакованное индексное значение остатка представляет основной цвет и упаковано в структуру синтаксиса кодирования коэффициентов. Упакованным индексным значением остатка может быть индексное значение остатка, основанное на разности между индексным значением и предсказанным индексным значением, или упакованное индексное значение остатка может основываться на разности между упакованным индексным значением и предсказанным упакованным индексным значением. Индексная карта также может включать в себя одно или несколько значений исключения, не представляющих никакой основной цвет, которые могут обрабатываться так, как описано ниже.
[0125] Декодер может повторять метод (1100) для другого блока.
[0126] Фиг.12 иллюстрирует более конкретный примерный метод (1200) декодирования, который использует структуру синтаксиса кодирования коэффициентов, которая селективно представляет элементы индексной карты или коэффициенты преобразования. Метод (1200) может выполняться декодером, описанным с ссылкой на фиг.4 или фиг.6, или другим декодером.
[0127] Декодер принимает (1210) структуру синтаксиса кодирования коэффициентов для блока. Например, для реализаций, которые придерживаются синтаксиса HEVC, структурой синтаксиса кодирования коэффициентов является структура синтаксиса residual_coding. Альтернативно, структура синтаксиса кодирования коэффициентов организуется некоторым другим образом.
[0128] Декодер проверяет (1220), является ли режимом блока BCIM. Например, декодер проверяет значение одного или нескольких синтаксических элементов для блока. Для реализаций, которые придерживаются синтаксиса HEVC, синтаксический элемент(-ы), который указывает, является ли блок блоком в режиме BCIM, может сигнализироваться для PU. Альтернативно, синтаксический элемент(-ы) сигнализируется для CU, CB, PB, TU или TB.
[0129] Если блоком является блок BCIM, декодер декодирует (1240) элементы индексной карты из структуры кодирования коэффициентов для блока. В противном случае, декодер декодирует (1230) коэффициенты преобразования из структуры синтаксиса кодирования коэффициентов для блока. Например, декодер выполняет операции, описанные с ссылкой на фиг.9 или 11.
[0130] Декодер проверяет (1250), продолжать ли со следующим блоком. Если продолжать, декодер принимает (1210) структуру синтаксиса кодирования коэффициентов для следующего блока.
C. Отображение индексных значений на упакованные индексные значения
n
n
n
n
n
n
packed
packed
packed
[0131] Чтобы сигнализировать индексные значения, как если бы они были коэффициентами преобразования, кодер отображает индексные значения  на упакованные индексные значения . Во время декодирования декодер отображает упакованные индексные значения  обратно на индексные значения . Кодер и декодер могут придерживаться различных стратегий при отображении между индексными значениями  и упакованными индексными значениями .
n
n
n
n
n
packed
packed
packed
[0132] Например, кодер может просто использовать индексное значение в качестве упакованного индексного значения. Т.е. = во время закодирования, и = во время декодирования. Кроме его простоты, одним преимуществом этого подхода является то, что значения знака для упакованных индексных значений  могут исключаться из сигнализируемых закодированных данных, так как упакованные индексные значения всегда являются неотрицательными.
n
n
packed
[0133] В качестве второго примерного подхода, кодер может отображать индексное значение  на упакованное индексное значение  следующим образом.
n
n
n
packed
если %2 равно 0, тогда =-(/2); и
n
n
packed
иначе, =(+1)/2.
x
y
x
y
n
n
packed
где % представляет оператор MOD, так что % представляет собой остаток, когда  делится на , и/представляет деление с усечением результата к нулю. Декодер может отображать упакованное индексное значение  обратно на индексное значение  следующим образом.
n
n
n
packed
packed
если ≤0, =-2*; и
n
n
packed
иначе, =2*-1.
n
n
n
packed
[0134] Фиг.13 изображает отображение индексных значений на упакованные индексные значения и отображение упакованных индексных значений обратно на индексные значения в соответствии с данным подходом. Индексные значения  в блоке (1310) отображаются на упакованные индексные значения  в блоке (1330) во время закодирования, и отображаются обратно на индексные значения  в блоке (1310) во время декодирования. Индексные значения в диапазоне от 0 до 5 отображаются на упакованные индексные значения в диапазоне от -2 до 3, и наоборот.
[0135] В варианте второго примерного подхода, кодер может отображать четные индексные значения на неотрицательные числа и отображать нечетные числа на отрицательные значения при помощи декодера, который изменяет на обратное это отображение. Для отображения во время закодирования:
n
n
n
packed
если %2 равно 0, тогда =(/2); и
n
n
packed
иначе, =-(+1)/2.
При декодировании:
n
n
n
packed
packed
если ≥0, =2*; и
n
n
packed
иначе, =-2*-1.
n
n
n
n
n
n
n
n
n
n
n
n
y
u
v
y
u
v
y
u
v
bits
packed
,
combined
bits
[0136] В качестве третьего примерного подхода, индексные значения для разных цветовых составляющих (например, составляющие яркости и цветности для видео в формате YUV 4:4:4) могут отображаться в единственное упакованное индексное значение для пикселя. Например, отсчет яркости отображается на индексное значение  яркости, и два соответствующих отсчета цветности отображаются на два индексных значения  и  цветности. Индексные значения ,  и  затем отображаются на единственное упакованное индексное значение. Если количество битов, использованных для представления каждого из индексных значений ,  и  равно , единственное упакованное индексное значение  (имеющее 3* битов) может определяться следующим образом.
n
n
n
n
n
n
packed, combined
y
bits
u
bits
v
=<<(2*)+<<+.
n
n
n
n
y
u
v
packed
,
combined
где << представляет операцию сдвига битов влево. Для декодирования индексные значения ,  и  могут быть восстановлены с использованием операций битовой маски и операций сдвига битов для идентификации значений соответствующих битов упакованного индексного значения  следующим образом.
n
n
n
y
packed, combined
bits
=>>(2*)
n
n
n
n
u
packed, combined
bits
bits
=(>>)&((1<<)-1)
n
n
n
v
packed
,
combined
bits
=&((1<<)-1)
n
n
n
n
n
n
y
u
v
y
u
v
где >> представляет операцию сдвига битов вправо, и & представляет операцию побитового И. Упорядочение индексных значений ,  и  может изменяться в операции отображения во время закодирования с соответствующими изменениями в операциях отображения во время декодирования. Также, индексные значения ,  и  могут иметь разное количество битов с соответствующими изменениями операций отображения во время закодирования и декодирования.
count
count
count
y
u
v
[0137] Альтернативно, если имеется  основных цветов для составляющей Y,  основных цветов для составляющей U, и  основных цветов для составляющей V, единственное упакованное индексное значение может определяться следующим образом.
n
n
count
count
n
count
n
packed, combined
v
y
u
u
y
y
=*(*)+*+
n
n
n
y
u
v
Для декодирования индексные значения ,  и  могут быть восстановлены следующим образом.
n
n
count
y
packed, combined
y
=%
n
n
count
count
u
packed, combined
y
u
=(/)%
n
n
count
count
v
packed, combined
y
u
=/(*)
n
n
n
y
u
v
где/представляет деление с усечением результата к нулю. Снова, упорядочение индексных значений ,  и  может меняться с соответствующими изменения, с которыми используются переменные count.
n
n
packed
[0138] Альтернативно, кодер и декодер используют разный подход при отображении между индексными значениями  и упакованными индексными значениями .
[0139] Фиг.14 иллюстрирует метод (1400) отображения индексных значений для основных цветов во время закодирования. Метод (1400) может выполняться кодером, описанным с ссылкой на фиг.3 или фиг.5a и 5b, или другим кодером.
[0140] Кодер отображает (1410) значение отсчета на индексное значение для основного цвета. Например, кодер использует таблицу основных цветов, описанную выше, для отображения значения отсчета яркости или цветности на индексное значение.
[0141] Кодер затем отображает (1420) индексное значение на по меньшей мере часть упакованного индексного значения для структуры синтаксиса кодирования коэффициентов. Например, кодер устанавливает упакованное индексное значение, основываясь на индексном значении, например, как в первом подходе отображения, описанном выше. Или, в качестве другого примера, если индексное значение четное, кодер устанавливает упакованное индексное значение, основываясь на индексном значении, деленным на два, но, в противном случае, кодер устанавливает упакованное индексное значение, основываясь на индексном значении плюс единица, затем деленным на два (например, как во втором подходе отображения, описанном выше). Или, в качестве другого примера, кодер устанавливает часть упакованного индексного значения, используя индексное значение, например, как в третьем подходе отображения, описанном выше, где упакованное индексное значение устанавливается на основе индексного значения яркости и многочисленных индексных значений цветности.
[0142] Кодер затем может определять упакованное индексное значение остатка, основываясь на упакованном индексном значении и предсказанном упакованном индексном значении, как описано ниже. Или индексными значениями, которые отображаются на упакованные индексные значения остатка, могут быть индексные значения остатка.
[0143] Кодер проверяет (1430), продолжать ли со следующим значением отсчета. Если продолжать, кодер отображает (1410) следующие значения отсчетов на следующее индексное значение. Кодер может проходить по схеме растрового сканирования по значениям отсчетов блока. Или, для третьего подхода, кодер может отображать значения отсчетов соответствующих позиций в блоке яркости и блоках цветности на индексные значения, затем отображать эти индексные значения на упакованное индексное значение.
[0144] Фиг.15 иллюстрирует метод (1500) отображения индексных значений для основных цветов во время декодирования. Метод (1500) может выполняться декодером, описанным с ссылкой на фиг.4 или фиг.6, или другим декодером.
[0145] Декодер отображает (1510) по меньшей мере часть упакованного индексного значения для структуры синтаксиса кодирования коэффициентов на индексное значение для основного цвета.
Например, декодер устанавливает индексное значение на основе упакованного индексного значения, например, как в первом подходе отображения, описанном выше. Или, в качестве другого примера, если упакованное индексное значение имеет данное отношение к нулю, декодер устанавливает индексное значение на основе упакованного индексного значения, умноженного в два раза, но, в противном случае, декодер устанавливает индексное значение на основе упакованного индексного значения, умноженного в два раза минус единица (например, как во втором подходе отображения, описанном выше). Или, в качестве другого примера, декодер устанавливает индексное значение с использованием части упакованного индексного значения, например, как в третьем подходе отображения, описанном выше, где индексное значение яркости и многочисленные индексные значения цветности устанавливаются на основе упакованного индексного значения.
[0146] Декодер отображает (1520) индексное значение на значение отсчета. Например, декодер использует таблицу основных цветов, описанную выше, для отображения индексного значения яркости или цветности на значение отсчета.
[0147] Перед операциями отображения декодер может предсказывать данное упакованное индексное значение, затем объединять упакованное индексное значение остатка с предсказанным упакованным индексным значением для восстановления упакованного индексного значения. Или индексными значениями, которые восстанавливаются, могут быть индексные значения остатка.
[0148] Декодер проверяет (1530), продолжать ли со следующим индексным значением. Если продолжать, декодер отображает (1510) по меньшей мере часть упакованного индексного значения для структуры синтаксиса кодирования коэффициентов на следующее индексное значение для основного цвета. Декодер может проходить по схеме растрового сканирования по индексным значениям для блока. Или, для третьего подхода, декодер может отображать упакованное индексное значение на многочисленные индексные значения для соответствующих позиций в блоке яркости и блоках цветности, затем может отображать эти индексные значения на значения отсчетов.
D. Предсказание элементов индексной карты
[0149] Кодер и декодер также могут использовать предсказание элементов индексной карты. Если предсказание работает хорошо, многие индексные значения остатка (или упакованные индексные значения остатка) имеют значение нуля. Предсказание улучшает эффективность кодирования в типовых схемах энтропийного кодирования, так как значения ближе к нулю кодируются с использованием меньшего количества битов.
n
i
j
i
j
n
i
j
n
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
resid
resid
resid
resid
resid
resid
resid
resid
resid
[0150] Фиг.16 изображает блок (1610) индексных значений  с размерами , , для 0≤≤7 и 0≤≤7. Альтернативно, предсказание применяется к блоку другого размера (например, 4×4, 16×16 или 32×32). Во время закодирования кодер предсказывает данное индексное значение (, ) из одного или нескольких соседних индексных значений в зависимости от конкретного индексного значения. Направление предсказания может быть горизонтальным, вертикальным, по диагонали в направлении вправо-вниз или в некотором другом направлении. На фиг.16, например, направлением предсказания является вертикальное, получая блок (1630) индексных значений  остатка. Индексное значение (, ) предсказывается с использованием предыдущего индексного значения в этом же столбце (, -1). Индексное значение остатка представляет собой просто разность между двумя значениями. (, )=(, )-(, -1). Аналогично, для горизонтального предсказания индексным значением остатка является разность между индексным значением и его левым соседним индексным значением в качестве предсказанного индексного значения: (, )=(, )-(-1, ). Для диагонального предсказания под углом 45 градусов вниз индексное значение остатка может вычисляться как (, )=(, )-((, -1)+(-1, ))>>1, или оно может вычисляться как (, )=(, )-(-1, -1). Предсказание в другом диагональном направлении может аналогично смешивать соседние индексные значения в зависимости от угла предсказания. Для предсказания на краю блока (например, <0 и/или <0), соседнее индексное значение может иметь значение нуля или может задаваться значение по умолчанию (например, количество индексных значений, деленное на два). Во время декодирования декодер определяет это же предсказанное индексное значение (в зависимости от направления предсказания) и объединяет предсказанное индексное значение с индексным значением остатка. Для вертикального предсказания (, )=(, )+(, -1). Для горизонтального предсказания (, )=(, )+(-1, ). Для диагонального предсказания под углом 45 градусов вниз (, )=(, )+((, -1)+(-1, ))>>1, или (, )=(, )+(-1, -1). Предсказание по другим диагональным направлениям может смешивать аналогичным образом соседние индексные значения в зависимости от угла предсказания.
[0151] На фиг.16 предсказание применяется перед тем, как индексные значения будут отображены на упакованные индексные значения. Альтернативно, предсказание применяется после того, как индексные значения будут отображены на упакованные индексные значения.
n
i
j
i
j
n
i
j
n
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
packed
packed
packed
,
resid
packed
packed
packed
,
resid
packed
packed
packed
,
resid
packed
packed
packed
,
resid
packed
packed
packed
packed
,
resid
packed
packed
packed
packed
,
resid
packed
packed
packed
,
resid
packed
packed
packed
,
resid
packed
packed
packed
packed
,
resid
packed
[0152] Фиг.17 изображает блок (1710) упакованных индексных значений  с размерами , , для 0≤≤7 и 0≤≤7. Альтернативно, предсказание применяется к блоку другого размера (например, 4×4, 16×16 или 32×32). Во время закодирования кодер предсказывает данное упакованные индексное значение (, ) из одного или нескольких соседних упакованных индексных значений в зависимости от конкретного упакованного индексного значения. Направление предсказания может быть горизонтальным, вертикальным, по диагонали в направлении вправо-вниз или в некотором другом направлении. На фиг.17, например, направлением предсказания является вертикальное, получая блок (1730) упакованных индексных значений  остатка. Упакованное индексное значение (, ) предсказывается с использованием предыдущего упакованного индексного значения в этом же столбце (, -1). Упакованное индексное значение остатка представляет собой просто разность между двумя значениями. (, )=(, )-(, -1). Аналогично, для горизонтального предсказания упакованным индексным значением остатка является разность между упакованным индексным значением и его левым соседним упакованным индексным значением в качестве предсказанного индексного значения: (, )=(, )-(-1, ). Для диагонального предсказания под углом 45 градусов вниз упакованное индексное значение остатка может вычисляться как (, )=(, )-((, -1)+(-1, ))>>1, или оно может вычисляться как (, )=(, )-(-1, -1). Предсказание по другим диагональным направлениям может аналогично смешивать соседние упакованные индексные значения в зависимости от угла предсказания. Для предсказания на краю блока (например, <0 и/или <0), соседнее упакованное индексное значение может иметь значение нуля или может задаваться значение по умолчанию. Во время декодирования декодер определяет это же предсказанное упакованное индексное значение (в зависимости от направления предсказания) и объединяет предсказанное упакованное индексное значение с упакованным индексным значением остатка. Для вертикального предсказания (, )=(, )+(, -1). Для горизонтального предсказания (, )=(, )+(-1, ). Для диагонального предсказания под углом 45 градусов вниз (, )=(, )+((, -1)+(-1, ))>>1, или (, )=(, )+(-1, -1). Предсказание по другим диагональным направлениям может смешивать аналогичным образом соседние упакованные индексные значения в зависимости от угла предсказания.
[0153] В предыдущих примерах предсказания операции вычитания используются во время закодирования, и операции сложения используются во время декодирования. Альтернативно, кодер и декодер могут использовать операции побитового исключающего ИЛИ (XOR) при предсказании.
[0154] Когда предсказываются упакованные индексные значения, кодер определяет упакованное индексное значение остатка как упакованное индексное значение XOR его предсказанное упакованное индексное значение. Когда предсказываются индексные значения, кодер определяет индексное значение остатка как индексное значение XOR его предсказанное индексное значение. Значение остатка сигнализируется декодеру. Предсказанное значение может зависеть от направления предсказания (например, горизонтальное, вертикальное, диагональное).
[0155] Когда предсказываются упакованные индексные значения, декодер определяет упакованное индексное значение как его упакованное индексное значение остатка XOR предсказанное упакованное индексное значение. Когда предсказываются индексные значения, декодер определяет индексное значение как его индексное значение остатка XOR его предсказанное индексное значение. Снова, предсказанное значение может зависеть от направления предсказания (например, горизонтальное, вертикальное, диагональное).
[0156] Фиг.18 иллюстрирует предсказание с использованием операций XOR во время закодирования и декодирования. Упакованное индексное значение равно 7, и предсказанное упакованное индексное значение (основанное на одном или нескольких соседних упакованных индексных значений) равно 6. Во время закодирования кодер определяет, что упакованный индексный остаток равен 1:00000001=00000111 XOR 00000110. Во время декодирования декодер восстанавливает упакованное индексное значение 7 из упакованного индексного значения остатка и предсказанного упакованного индексного значения: 00000111=00000001 XOR 00000110.
p
p
p
n
i
j
n
i
j
p
p
n
i
j
p
n
i
j
p
n
i
j
n
i
j
n
i
j
n
i
j
n
i
j
p
p
n
i
j
p
n
i
j
p
mask
resid
predicted
mask
mask
predicted
resid
resid
mask
predicted
mask
[0157] Вместо применения ко всем битам значения, предсказанного значения и значения остатка, операции предсказания (вычитания, XOR или иные) могут применяться к поднабору битов. Например, операция XOR может применяться к самым младшим  битам индексного значения и его предсказанного индексного значения. Изобретатели предполагают, что  равен (1<<)-1. Кодер определяет индексное значение остатка (, )=((, )>><<)+((, )&) XOR ((, )&), где (, ) может быть равен (, -1) или (-1, ) или некоторому другому предсказанному значению в зависимости от направления предсказания. Значение остатка сигнализируется декодеру. Декодер определяет индексное значение (, )=((, )>><<)+((, )&) XOR ((, )&). Эти же операции могут применяться к предсказанным упакованным индексным значениям. Операции над частичными битами могут применяться к младшим битам, старшим битам или средним битам значений. Биты, подвергаемые операциям предсказания, могут быть непрерывными или могут не быть непрерывными.
[0158] В реализациях, которые придерживаются синтаксиса HEVC, кодер и декодер могут повторно использовать инструментальное средство кодирования, которое нормально используется для предсказания значений остатка, могут вместо этого использовать его для предсказания элементов индексной карты. В частности, когда преобразование не применяется к значениям остатка (но квантование может применяться или может не применяться), кодер и декодер могут использовать инструментальное средство для предсказания значений остатка из соседних значений остатка. Инструментальное средство кодирования и синтаксис для сигнализации его использования также могут применяться к элементам индексной карты.
[0159] Фиг.19 изображает метод (1900) предсказания элементов индексной карты во время закодирования. Метод (1900) может выполняться кодером, описанным с ссылкой на фиг.3 или фиг.5a или 5b, или другим кодером.
[0160] Кодер кодирует (1910) данные, в частности, кодирующие элементы индексной карты для блока, используя предсказание. Например, когда индексная карта включает в себя индексные значения остатка, кодер предсказывает индексное значение, которое представляет основной цвет, затем определяет индексное значение остатка, основываясь на индексном значении и предсказанном индексном значении. Или, когда индексная карта включает в себя упакованные индексные значения остатка, кодер предсказывает упакованное индексное значение (где упакованным индексным значением является индексное значение, которое представляет основной цвет и упаковано в структуру синтаксиса кодирования коэффициентов), затем определяет упакованное индексное значение остатка, основываясь на упакованном индексном значении и предсказанном упакованном индексном значении. Закодирование с предсказанием может включать в себя операции вычитания, операции XOR или другие операции, по всем битам значений или по частичным битам значений.
[0161] Кодер выводит (1920) закодированные данные. Кодер проверяет (1930), продолжать ли со следующим блоком. Если продолжать, кодер продолжает закодированием (1910) элементов индексной карты для следующего блока.
[0162] Фиг.20 изображает метод (2000) предсказания элементов индексной карты во время декодирования. Метод (2000) может выполняться декодером, описанным с ссылкой на фиг.4 или фиг.6, или другим декодером.
[0163] Декодер принимает (2010) закодированные данные и декодирует (2020) закодированные данные. В частности, декодер декодирует элементы индексной карты для блока, используя предсказание. Например, когда индексная карта включает в себя индексные значения остатка, декодер предсказывает индексное значение, которое представляет основной цвет, затем объединяет индексное значение остатка и предсказанное индексное значение. Или, когда индексная карта включает в себя упакованные индексные значения остатка, декодер предсказывает упакованное индексное значение (где упакованным индексным значением является индексное значение, которое представляет основной цвет и упаковано в структуру синтаксиса кодирования коэффициентов), затем объединяет упакованное индексное значение остатка и предсказанное упакованное индексное значение. Декодирование с предсказанием может включать в себя операции сложения, операции XOR или другие операции по всем битам значений или по частичным битам значений.
[0164] Декодер проверяет (2030), продолжать ли со следующим блоком. Если продолжать, декодер продолжает приемом (2010) закодированных данных для следующего блока.
E. Обработка значений исключения
[0165] Когда используется режим BCIM, в таблице основных цветов, кодер и декодер могут назначать индексные значения каждому разному значению отсчета, которое используется в блоке. В некоторых случаях, это может приводить к таблице основных цветов, которая является неэффективной для сигнализации, особенно когда некоторые индексные значения используются очень редко. Если конкретный основной цвет редко появляется в блоке, то может не иметь смысла назначать индексное значение этому основному цвету.
[0166] В некоторых примерных реализациях кодер и декодер могут использовать любой из нескольких подходов для обработки основных цветов, которые редко встречаются в блоке. Значение «исключения» с одним из этих редких основных цветов не кодируется или декодируется с использованием индексного значения.
[0167] В одном подходе, когда кодер идентифицирует значение исключения, кодер определяет ближайший основной цвет, который представляется индексным значением в таблице основных цветов. Кодер использует индексное значение для ближайшего основного цвета для представления значения исключения. Декодер восстанавливает значение исключения как значение отсчета, ассоциированное с индексным значением в таблице основных цветов. Этот подход представляет собой тип сжатия с потерями и, в некоторых случаях, может приводить к существенным искажениям.
h
n
n
h
n
n
n
n
h
n
packed
packed
packed
packed
[0168] В другом подходе кодер сигнализирует значения исключения непосредственно в виде значений отсчетов, которые могут квантоваться. Например, кодер определяет наибольшее упакованное индексное значение , которое является возможным для таблицы основных цветов, которое зависит от подхода, используемого для отображения. Когда =, значение  является наибольшим значением . Когда нечетные значения  отображаются в соответствии с =(+1)/2, значение  снова является наибольшим значением .
e
s
q
h
q
q
n
h
s
n
h
e
s
e
h
q
packed
packed
[0169] Кодер представляет значение исключения в виде =/++1, где  представляет собой параметр квантования, и/представляет деление с усечением к нулю. Если не применяется квантование, =1, и операция деления может пропускаться. На стороне декодера, если упакованное индексное значение  меньше или равно , декодер декодирует значение  отсчета из упакованного индексного значения , используя операции отображения и таблицу основных цветов, как описано выше. Если упакованное индексное значение больше , однако, упакованное индексное значение фактически является значением  исключения, и значение отсчета восстанавливается как ”=(--1)*.
s
[0170] Фиг.21a и 21b иллюстрируют обработку (2100) значений исключения и индексных значений для режима BCIM во время закодирования и декодирования соответственно. На фиг.21a блок (2110) значений  отсчетов включает в себя некоторые значения отсчетов, которые представлены индексными значениями для основных цветов: 85, 41, 200, 168, 127, 26. Эти значения кодируются в режиме BCIM, используя таблицу основных цветов, показанную на фиг.21a.
q
q
h
h
h
q
e
[0171] Блок (2110) также включает в себя два значения отсчетов, которые происходят нечасто в блоке, и, следовательно, не представлены индексными значениями для основных цветов. Эти два значения исключения, 179 и 29, кодируются с использованием параметра квантования  (с =4 на фиг.21a и 21b) и наивысшего упакованного индексного значения  (с =3 на фиг.21a и 21b). Значение  зависит от диапазона индексных значений. Значение  может меняться от блока к блоку, от слайса к слайсу, от плитки к плитке, от видеокадра к видеокадру и т.д. Как показано в блоке (2130) упакованных индексных значений и значений  исключения, значение отсчета 179 кодируется в качестве значения исключения 49=(181/4)+3+1, и значение отсчета 29 кодируется как значение исключения 11=(29/4)+3+1.
[0172] Как показано на фиг.21b, во время декодирования любое упакованное индексное значение больше 3 обрабатывается как значение исключения. Значение исключения 49 восстанавливается как значение отсчета 180=(49-3-1)*4, и значение исключения 11 восстанавливается как значение отсчета 28=(11-3-1)*4. Большинство значений в блоке (2150) декодируется в режиме BCIM, используя операции отображения и таблицу основных цветов, показанную на фиг.21b.
[0173] Фиг.22 изображает обобщенный метод (2200) закодирования с использованием индексных значений и значений исключения в режиме BCIM. Метод (2200) может выполняться кодером, описанным с ссылкой на фиг.3 и фиг.5a и 5b, или другим кодером.
[0174] Кодер кодирует (2210) данные для блока, используя одно или несколько индексных значений, причем каждое представляет основной цвет и одно или несколько значений исключения, не представляющих никакой основной цвет. Например, кодер кодирует некоторые значения отсчетов блока, используя упакованные индексные значения или упакованные индексные значения остатка, как описано выше. Кодер также кодирует некоторые значения отсчетов как значения исключения. Например, кодер заменяет значение отсчета значением исключения, используя параметр квантования и наибольшее упакованное индексное значение.
[0175] Кодер выводит (2220) закодированные данные. Кодер проверяет (2230), продолжать ли со следующим блоком. Если продолжать, кодер продолжает закодированием (2210) данных для следующего блока.
[0176] Фиг.23 изображает метод (2300) декодирования с использованием индексных значений и значений исключения в режиме BCIM. Метод (2300) может выполняться декодером, описанным с ссылкой на фиг.4 или фиг.6, или другим декодером.
[0177] Декодер принимает (2310) закодированные данные и декодирует (2320) закодированные данные. В частности, декодер декодирует одно или несколько индексных значений, причем каждое представляет основной цвет. Одним или несколькими индексными значениями могут быть упакованные индексные значения или упакованные индексные значения остатка. Декодер также декодирует одно или несколько значений исключения, не представляющих никакой основной цвет. Например, для одного или нескольких значений исключения декодер восстанавливает значение отсчета, используя значение исключения, параметр квантования и наибольшее упакованное индексное значение.
[0178] Декодер проверяет (2330), продолжать ли со следующим блоком. Если продолжать, декодер продолжает приемом (2310) закодированных данных для следующего блока.
[0179] Фиг.24 изображает более конкретный метод (2400) использования индексных значений и значений исключения во время декодирования блока в режиме BCIM. Метод (2400) может выполняться декодером, описанным с ссылкой на фиг.4 или фиг.6, или другим декодером.
[0180] Для упакованного индексного значения блока декодер проверяет (2520), превышает ли значение порог. Например, порог представляет собой наибольшее возможное значение для упакованного индексного значения. Если упакованное индексное значение превышает порог, декодер обрабатывает (2540) значение как значение исключения. В противном случае, декодер обрабатывает (2530) значение с использованием операций отображения и таблицы основных цветов. Декодер затем проверяет (2550), продолжать ли с другим значением в блоке. Если продолжать, декодер проверяет (2520), как декодировать следующее значение.
[0181] В вышеупомянутых примерах порог основывается на наибольшем упакованном индексном остатке. Альтернативно, если используются упакованные индексные значения остатка, порог основывается на наибольшем возможном упакованном индексном значении остатка, которое зависит от наибольшей возможной разности между упакованным индексным значением и его предсказанным упакованным индексном значении.
[0182] Принимая во внимание многочисленные возможные варианты осуществления, к которым могут быть применены принципы описанного изобретения, следует понимать, что изображенные варианты осуществления являются только предпочтительными примерами изобретения и не должны рассматриваться как ограничивающие объем изобретения. Скорее, объем изобретения определяется нижеследующей формулой изобретения. Изобретатели, поэтому, притязают своим изобретением на все, что подпадает под объем и сущность этой формулы изобретения.