[0001] Настоящая заявка испрашивает приоритет предварительной заявки США 62/175,137, поданной 12 июня 2015 г., все содержание которой включено в настоящий документ посредством ссылки.
ОБЛАСТЬ ТЕХНИКИ
[0002] Данное раскрытие относится к кодированию и декодированию видео.
ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ
[0003] Возможности цифрового видео могут быть включены в широкий спектр устройств, включая цифровые телевизоры, системы цифрового прямого вещания, беспроводные широковещательные системы, персональные цифровые помощники (PDA), портативные или настольные компьютеры, планшетные компьютеры, электронные книги, цифровые камеры, устройства цифровой записи, цифровые медиаплееры, видеоигровые устройства, игровые приставки, сотовые или спутниковые радиотелефоны, так называемые "смартфоны", устройства видеоконференцсвязи, устройства потоковой передачи видео и т.п. Цифровые видеоустройства реализуют методы кодирования видео, такие как те, которые описаны в стандартах, определенных MPEG-2, MPEG-4, ITU-T Н.263, ITU-T Н.264/MPEG-4, часть 10, Усовершенствованное кодирование видео (AVC), ITU-T Н.265, стандарте Высокоэффективное кодирование видео (HEVC) и расширениях таких стандартов. Видеоустройства могут более эффективно передавать, принимать, кодировать, декодировать и/или сохранять цифровую видеоинформацию, путем реализации таких методов сжатия видео.
[0005] Методы сжатия видео включают в себя пространственное (внутрикадровое, "внутри картинки") предсказание и/или временное (межкадровое, "между картинками") предсказание для уменьшения или удаления избыточности, присущей видеопоследовательностям. Для блочного кодирования видео, видео вырезка (т.е. видеокадр или часть видеокадра) может быть разделена на видеоблоки. Видеоблоки во внутри- (интра-) кодируемой (I) вырезке изображения (картинки) кодируются с использованием пространственного предсказания относительно опорных выборок в соседних блоках в той же самой картинке. Видеоблоки во взаимно- (интер-) кодируемой (Р или В) вырезке картинки могут использовать пространственное предсказание относительно опорных выборок в соседних блоках в той же самой картинке или временное предсказание относительно опорных выборок в других опорных картинках. Картинки могут упоминаться как кадры, и опорные картинки могут упоминаться как опорные кадры.
[0005] Пространственное или временное предсказание приводит к блоку предсказания для блока, подлежащего кодированию. Остаточные данные представляют пиксельные разности между исходным блоком, подлежащим кодированию, и блоком предсказания. Интер-кодированный блок кодируется в соответствии с вектором движения, который указывает на блок опорных выборок, формирующих блок предсказания, и остаточные данные указывают разность между кодированным блоком и блоком предсказания. Интра-кодированный блок кодируется в соответствии с режимом интра-кодирования и остаточными данными. Для дальнейшего сжатия, остаточные данные могут быть преобразованы из пиксельной области в область преобразования, что приводит к остаточным коэффициентам, которые затем могут быть квантованы. Квантованные коэффициенты преобразования, первоначально упорядоченные в двумерном массиве, могут сканироваться для получения одномерного вектора коэффициентов, и энтропийное кодирование может применяться для достижения еще большего сжатия.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0006] В одном примере, способ декодирования видеоданных включает в себя декодирование, из битового потока кодированного видео, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных; декодирование, из битового потока кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, одного или нескольких синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных; и декодирование текущего блока видеоданных на основе палитры для текущего блока видеоданных и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
[0007] В другом примере, способ кодирования видеоданных включает в себя кодирование, в битовом потоке кодированного видео, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных; кодирование, в битовом потоке кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных; и кодирование текущего блока видеоданных на основе палитры для текущего блока видеоданных и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
[0008] В другом примере, устройство для кодирования видеоданных включает в себя память, сконфигурированную, чтобы хранить видеоданные, и один или несколько процессоров. В этом примере, один или несколько процессоров сконфигурированы, чтобы: кодировать, в битовом потоке кодированного видео, синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных; кодировать, в битовом потоке кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных; и кодировать текущий блок видеоданных на основе палитры для текущего блока видеоданных и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
[0009] В другом примере, устройство для кодирования видеоданных включает в себя средство для кодирования, в битовом потоке кодированного видео, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных; средство для кодирования, в битовом потоке кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, одного или нескольких синтаксических элементов, относящиеся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных; и средство для кодирования текущего блока видеоданных на основе палитры для текущего блока видеоданных и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
[0010] В другом примере, считываемый компьютером носитель хранения данных хранит инструкции, которые, при исполнении, побуждают один или несколько процессоров устройства кодирования видео: кодировать, в битовом потоке кодированного видео, синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных; кодировать, в битовом потоке кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных; и кодировать текущий блок видеоданных на основе палитры для текущего блока видеоданных и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
[0011] В другом примере, считываемый компьютером носитель хранения данных хранит по меньшей мере часть битового потока кодированного видео, который, при обработке устройством декодирования видео, побуждает один или несколько процессоров устройства декодирования видео: определять, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных; и декодировать текущий блок видеоданных на основе палитры для текущего блока видеоданных и дельта-QP и одного или нескольких смещений QP цветности для текущего блока видеоданных, причем один или несколько синтаксических элементов, относящихся к дельта-QP, и один или несколько синтаксических элементов, относящихся к одному или нескольким смещениям QP цветности для текущего блока видеоданных расположены в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных.
[0012] Детали одного или нескольких примеров приведены на прилагаемых чертежах и в описании ниже. Другие признаки, цели и преимущества будут очевидны из описания и чертежей и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0013] Фиг. 1 - блок-схема, иллюстрирующая примерную систему кодирования видео, которая может использовать методы, описанные в настоящем раскрытии.
[0014] Фиг. 2 - блок-схема, иллюстрирующая примерный видеокодер, который может реализовывать методы, описанные в настоящем раскрытии.
[0015] Фиг. 3 - блок-схема, иллюстрирующая примерный видеодекодер, который может реализовывать методы, описанные в настоящем раскрытии.
[0016] Фиг. 4 - концептуальная диаграмма, иллюстрирующая пример определения палитры для кодирования видеоданных, в соответствии с методами настоящего раскрытия.
[0017] Фиг. 5 - концептуальная диаграмма, иллюстрирующая пример определения индексов для палитры для блока пикселов, в соответствии с методами настоящего раскрытия.
[0018] Фиг. 6 - блок-схема последовательности операций, иллюстрирующая примерный процесс декодирования блока видеоданных с использованием режима палитры в соответствии с одним или несколькими методами настоящего раскрытия.
[0019] Фиг. 7 - блок-схема последовательности операций, иллюстрирующая примерный процесс кодирования блока видеоданных с использованием режима палитры в соответствии с одним или несколькими методами настоящего раскрытия.
ПОДРОБНОЕ ОПИСАНИЕ
[0020] Настоящее раскрытие описывает методы кодирования и сжатия видео. В частности, настоящее раскрытие описывает методы кодирования видеоданных на основе палитры. Например, настоящее раскрытие описывает методы для поддержки кодирования видеоконтента, особенно экранного контента с кодированием палитры, такие как методы для улучшения бинаризации индекса палитры и методы для сигнализации для кодирования палитры.
[0021] В традиционном кодировании видео, изображения предполагаются тонально-непрерывными и пространственно плавными. На основе этих предположений были разработаны различные инструменты, такие как преобразование на основе блоков, фильтрация и т.д., и такие инструменты показали хорошую производительность для видео естественного контента.
[0022] Однако в таких приложениях, как удаленный рабочий стол, совместная работа и беспроводной дисплей, экранный контент, генерируемый компьютером, может быть преобладающим контентом, подлежащим сжатию. Этот тип контента имеет тенденцию к линиям дискретного тона и четких признаков и высококонтрастным границам объектов. Предположение о непрерывном тоне и плавности больше не может применяться, и, следовательно, традиционные методы кодирования видео могут быть неэффективными способами сжатия.
[0023] На основе характеристик видео экранного контента, введено кодирование палитры для улучшения эффективности кодирования экранного контента (SCC), как предложено в Guo et al., "Palette Mode for Screen Content Coding," Joint Collaborative Team on Video Coding (JCT-VC), ITU-T SG 16 WP 3 и ISO/IEC JTC 1/SC 29/WG 11, 13th Meeting: Incheon, KR, 18-26 Apr. 2013, Документ: JCTVC-M0323, доступный по адресу: http://phenix.it-sudparis.eu/jct/doc_end_user/documents/13_Incheon/wg11/JCTVC-M0323-v3.zip, (далее "JCTVC-M0323"). В частности, кодирование палитры вводит таблицу поиска (перекодировки), то есть цветовую палитру, для сжатия повторяющихся пиксельных значений на основе того факта, что в SCC, цвета в пределах одной CU (единицы кодирования) обычно концентрируются на нескольких пиковых значениях. Учитывая палитру для конкретной CU, пикселы внутри CU отображаются на индексы палитры. На втором этапе предлагается эффективный способ копирования слева длины серии (одинаковых элементов), чтобы эффективно сжимать повторяющийся шаблон индексного блока. В некоторых примерах, режим кодирования индекса палитры может быть обобщен как на копирование слева, так и копирование сверху с кодированием длины серии. Отметим, что в некоторых примерах никакой процесс преобразования не может быть вызван для кодирования палитры, чтобы избежать размытия резких краев, что может оказать сильнейшее негативное влияние на визуальное качество экранного контента.
[0024] Как обсуждалось выше, настоящее раскрытие описывает кодирование на основе палитры, которое может быть особенно подходящим для кодирования контента, генерируемого на экране. Например, предположим, что конкретная область видеоданных имеет относительно небольшое количество цветов. Устройство кодирования видео (видеокодер или видеодекодер) может кодировать так называемую "палитру" в виде таблицы цветов для представления видеоданных конкретной области (например, заданного блока). Каждый пиксел может быть ассоциирован с записью в палитре, которая представляет цвет пиксела. Например, видеокодер может кодировать индекс, который отображает пиксельное значение на соответствующее значение в палитре.
[0025] В приведенном выше примере, видеокодер может кодировать блок видеоданных путем определения палитры для блока, локализации записи в палитре, чтобы представлять значение цвета каждого пиксела, и кодирования палитры с индексными значениями для пикселов, отображающих пиксельное значение на палитру. Видеодекодер может получать, из закодированного битового потока, палитру для блока, а также индексные значения для пикселов блока. Видеодекодер может отображать индексные значения пикселов на записи палитры для восстановления пиксельных значений яркости и цветности блока.
[0026] Приведенный выше пример предназначен для предоставления общего описания кодирования на основе палитры. В различных примерах, методы, описанные в настоящем раскрытии, могут включать в себя методы для различных комбинаций одного или нескольких из сигнализации режимов кодирования на основе палитры, передачи палитр, предсказания палитр, получения палитр и передачи карт кодирования на основе палитр и других синтаксических элементов. Такие методы могут улучшить эффективность кодирования видео, например, требуя меньшего количества битов для представления генерируемого экраном контента.
[0027] Например, в соответствии с аспектами настоящего раскрытия, устройство кодирования видео (видеокодер или видеодекодер) может кодировать один или несколько синтаксических элементов для каждого блока, который кодируется с использованием режима кодирования палитры. Например, устройство кодирования видео может кодировать palette_mode_flag, чтобы указывать, следует ли использовать режим кодирования на основе палитры для кодирования конкретного блока. В этом примере, видеокодер может кодировать palette_mode_flag со значением, равным единице, чтобы указать, что кодируемый в текущее время блок ("текущий блок") кодируется с использованием режима палитры. В этом случае, видеодекодер может получить palette_mode_flag из закодированного битового потока и применить режим кодирования на основе палитры для декодирования блока. В случаях, когда доступно более одного режима кодирования на основе палитры (например, существует более чем один метод на основе палитры, доступный для кодирования), один или несколько синтаксических элементов могут указывать один из множества различных режимов палитры для блока.
[0028] В некоторых случаях, видеокодер может кодировать palette_mode_flag со значением, равным нулю, чтобы указывать, что текущий блок не закодирован с использованием режима палитры. В таких случаях, видеокодер может кодировать блок с использованием любого из множества режимов интер-предсказания, интра-предсказания или других режимов кодирования. Когда palette_mode_flag равен нулю, видеокодер может кодировать дополнительную информацию (например, синтаксические элементы), чтобы указывать конкретный режим, который используется для кодирования соответствующего блока. В некоторых примерах, как описано ниже, режим может быть режимом кодирования HEVC. Использование palette_mode_flag описано в качестве примера. В других примерах, другие синтаксические элементы, такие как многобитовые коды, могут использоваться для указания, следует ли использовать режим кодирования на основе палитры для одного или нескольких блоков, или для указания, какой из множества режимов должен использоваться.
[0029] Когда используется режим кодирования на основе палитры, палитра может передаваться кодером в битовом потоке закодированных видеоданных для использования декодером. Палитра может передаваться для каждого блока или может совместно использоваться несколькими блоками в картинке или вырезке. Палитра может относиться к некоторому числу пиксельных значений, которые являются доминирующими и/или репрезентативными для блока, включая, например, значение яркости и два значения цветности.
[0030] В некоторых примерах, синтаксический элемент, такой как флаг транспонирования, может кодироваться, чтобы указывать, применяется ли процесс транспонирования к индексам палитры текущей палитры. Если флаг транспонирования равен нулю, индексы палитры для выборок могут кодироваться при сканировании горизонтального прохода. Аналогично, если флаг транспонирования равен единице, индексы палитры для выборок могут кодироваться при сканировании вертикального прохода. Это можно рассматривать как декодирование индексных значений в предположении сканирования горизонтального прохода и затем транспонирования блока (строк в столбцы).
[0031] Аспекты настоящего раскрытия включают в себя методы кодирования палитры. Например, согласно аспектам настоящего раскрытия, видеокодер может кодировать один или несколько синтаксических элементов для определения палитры. Некоторые примерные синтаксические элементы, которые видеокодер может закодировать для определения текущей палитры для текущего блока видеоданных, включают в себя, без ограничения указанным, синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры текущей палитры (например, palette_transpose_flag), один или несколько синтаксических элементов, относящихся к дельта-параметру квантования (QP) (например, cu_qp_delta_palette_abs, cu_qp_delta_palette_sign_flag, cu_chroma_qp_palette_offset_flag и/или cu_chroma_qp_palette_offset_idx), один или несколько синтаксических элементов, относящихся к смещениям QP цветности для текущего блока видеоданных, один или несколько синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, будут ли записи из палитры предсказателя повторно использоваться в текущей палитре (например, palette_predictor_run), один или несколько синтаксических элементов, которые указывают количество записей в текущей палитре, которые явно сигнализируются (например, num_signalled_palette_entries), один или несколько синтаксических элементов, которые указывают значение компонента в записи палитры в текущей палитре (например, palette_entry), один или несколько синтаксических элементов, которые указывают, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода (например, palette_escape_val_present_flag), один или несколько синтаксических элементов, которые указывают количество записей в текущей палитре, которые явно сигнализируются или выводятся (например, num_palette_indices_idc), и один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры (например, palette_index_idc). Например, при работе в соответствии с HEVC Screen Content Coding (SCC) Draft 3 (Joshi et al., "High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 3," Joint Collaborative Team on Video Coding (JCT-VC), ITU-T SG 16 WP 3 и ISO/IEC JTC 1/SC 29/WG 11, 20th Meeting: Geneva, CH, 10 February - 17 February 2015, Документ: JCTVC-T1005, доступный по адресу http://phenix.int-evry.fr/jct/doc_end_user/documents/20_Geneva/wg11/JCTVC-T1005-v2.zip, (далее "HEVC SCC Draft 3"), устройство кодирования видео может сигнализировать синтаксические элементы, перечисленные в таблице синтаксиса palette_coding () (Раздел 7.3.8.8 HEVC SCC Draft 3), воспроизведенной ниже как Таблица 1.
[0032] В дополнение к обеспечению порядка, в котором синтаксические элементы включены в поток битов, Таблица 1 также предоставляет дескриптор для каждого из синтаксических элементов, который указывает тип кодирования для каждого синтаксического элемента. В качестве одного примера, видеокодер может кодировать синтаксические элементы с дескриптором ue(v), используя беззнаковые целочисленные 0-го порядка Exp-Golomb-коды с первым левым битом. В качестве другого примера, видеокодер может кодировать синтаксические элементы с дескриптором ае(v), используя контекстно-адаптивные арифметические энтропийные коды (САВАС). Когда бины (элементы кодированного сигнала) синтаксического элемента кодируются с использованием САВАС, видеокодер может кодировать один или несколько бинов с использованием контекста и/или может кодировать один или несколько бинов без контекста. Кодирование бина с использованием САВАС без контекста может упоминаться как режим обхода. В HEVC SCC Draft 3 приведена таблица (Таблица 9-47 в HEVC SCC Draft 3), частично воспроизведенная ниже как Таблица 2, которая указывает, какие бины синтаксических элементов, перечисленных в Таблице 1, кодируются с контекстами (то есть, как указано контекстом "0" и контекстом "1"), и какие бины кодируются в режиме обхода.
[0033] Сравнение Таблицы 1 и Таблицы 2 показывает, что HEVC SCC Draft 3 предписывает, что все синтаксические элементы перед cu_qp_delta_palette_abs (т.е. num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag) кодируются в режиме обхода. Аналогичным образом, синтаксические элементы после palette_transpose_flag и перед last_palette_run_type_flag (т.е., num_palette_indices_idc и palette_index_idc) также кодируются в режиме обхода.
[0034] При кодировании бина с использованием САВАС с контекстом, видеокодер может загружать контекст из хранилища в память. В некоторых примерах, видеокодер может иметь ограниченные доступные ресурсы памяти, и/или может потребоваться много времени для загрузки контекста в память. Таким образом, может быть желательным, чтобы видеокодер минимизировал количество раз загрузки контекста в память. В некоторых примерах, группировка бинов обхода вместе может уменьшить количество раз загрузки контекстов в память, что может увеличить пропускную способность САВАС.
[0034] В Ye et al., "CE1-related: Palette Mode Context and Codeword Simplification", Joint Collaborative Team on Video Coding (JCT-VC), ITU-T SG 16 WP 3 и ISO/IEC JTC 1/SC 29/WG 11, 21st Meeting: Warsaw, PL, 19-26 June 2015, Документ: JCTVC-U0090, доступный по адресу: http://phenix.it-sudparis.eu/jct/doc_end_user/documents/21_Warsaw/wg11/JCTVC-U0090-v1.zip (далее, "JCTVC-U0090"), было предложено, чтобы palette_transpose_flag сигнализировался после last_palette_run_type_flag. В частности, JCTVC-U0090 предлагает модифицировать таблицу синтаксиса palette_coding(), как показано ниже в Таблице 3 (где текст, выделенный курсивом, вставлен, а текст в двойных скобках, выделенный курсивом, удален).
[0036] Однако в некоторых примерах расположение синтаксических элементов, предложенное JCTVC-U0090, может оказаться не оптимальным. Например, когда синтаксические элементы, относящиеся к дельта-QP (т.е., cu_qp_delta_palette_abs и cu_qp_delta_palette_sign_flag) и смещению QP цветности (т.е., cu_chroma_qp_palette_of f set_flag и cu_chroma_qp_palette_offset_idx), присутствуют, расположение синтаксических элементов, предложенное JCTVC-U0090, может не привести к группировке каких-либо дополнительных бинов обхода.
[0037] В соответствии с одним или несколькими способами настоящего раскрытия, видеокодер может кодировать синтаксические элементы, используемые для определения текущей палитры, так, что синтаксические элементы, которые кодируются с использованием режима обхода, являются последовательно кодируемыми. Например, в противоположность кодированию одного или нескольких синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных, перед синтаксическим элементом, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, видеокодер может закодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных.
[0038] Один пример того, как таблица синтаксиса palette_coding() может быть изменена для перемещения сигнализации синтаксических элементов, относящихся к дельта-QP и смещениям QP цветности, после palette_transpose_flag, показан ниже в Таблице 4 (где текст, выделенный курсивом, вставлен, а текст в двойных скобках, выделенный курсивом, удален), относительно предыдущей версии Таблицы 4 в HEVC SCC Draft 3).
[0039] Путем перемещения одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, видеокодер может группировать вместе (то есть последовательно кодировать) большее количество синтаксических элементов, которые кодируются с использованием режима обхода. Например, путем перемещения одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, видеокодер может группировать вместе один или несколько синтаксических элементов, которые указывают количество записей в текущей палитре, которые явно сигнализируются или выводятся (например, num_palette_indices_idc), и один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры (например, palette_index_idc), с одним или несколькими синтаксическими элементами, относящимися к смещениям QP цветности для текущего блока видеоданных, одним или несколькими синтаксическими элементами, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, будут ли записи из палитры предсказателя повторно использоваться в текущей палитре (например, palette_predictor_run), одним или несколькими синтаксическими элементами, которые указывают количество записей в текущей палитре, которые явно сигнализируются (например, num_signalled_palette_entries), одним или несколькими синтаксическими элементами, которые указывают значение компонента в записи палитры в текущей палитре (например, palette_entry), и одним или несколькими синтаксическими элементами, которые указывают, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода (например, palette_escape_val_present_flag). Таким образом, методы настоящего раскрытия могут увеличить пропускную способность САВАС, что может сократить время, необходимое для кодирования видеоданных с использованием кодирования режима палитры. Например, группируя вместе кодируемые в режиме обхода синтаксические элементы, видеокодер может последовательно кодировать сгруппированные синтаксические элементы без использования запуска, остановки, перезапуска, перезагрузки и сброса механизма кодирования САВАС.
[0034] Таблица 4 является только одним примером того, как могут быть упорядочены синтаксические элементы. В некоторых примерах, синтаксические элементы, относящиеся к дельта-QP и смещению QP цветности, могут перемещаться дальше по таблице синтаксиса. Например, синтаксические элементы, относящиеся к дельта-QP и смещению QP цветности, могут быть размещены непосредственно перед компонентными значениями для выборок выхода (т.е. palette_escape_val). Один пример того, как синтаксические элементы, относящиеся к дельта-QP и смещению QP цветности, можно разместить непосредственно перед компонентными значениями для выборок выхода, показан ниже в Таблице 5 (где текст, выделенный курсивом, вставлен, а текст в двойных скобках, выделенный курсивом, удален, относительно HEVC SCC Draft 3).
[0041] Методы кодирования видеоданных на основе палитры могут использоваться с одним или несколькими другими методами кодирования, такими как методы кодирования с интер- или интра-предсказанием. Например, как описано подробно ниже, кодер или декодер или комбинированный кодер-декодер (кодек) могут быть сконфигурированы для выполнения кодирования с интер- или интра-предсказанием, а также для кодирования на основе палитры.
[0042] В некоторых примерах, методы кодирования на основе палитры могут быть сконфигурированы для использования с одним или несколькими стандартами кодирования видео. Некоторые примеры стандартов кодирования видео включают в себя, без ограничения указанным, ITU-T Н.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 или ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual и ITU-T H.264 (также известный как ISO/IEC MPEG-4 AVC), включая его расширения для масштабируемого кодирования видео (SVC) и многовидового кодирования видео (MVC).
[0043] Недавно, разработка нового стандарта кодирования видео, а именно, Высокоэффективное кодирование видео (HEVC), было завершена Объединенной Группой Сотрудничества по Кодированию Видео (JCT-VC) ITU-T Группы Экспертов по Кодированию Видео (VCEG) и ISO/IEC Группы Экспертов по Движущимся Изображениям (MPEG). Копия завершенного стандарта HEVC (т.е. ITU-T Н.265, Series Н: AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services - Coding of moving video, April, 2015) доступна по адресу: https://www.itu.int/rec/T-REC-H.265-201504-I/en (далее "стандарт HEVC").
[0044] Расширение диапазона до HEVC, а именно HEVC Screen Content Coding (SCC), также разрабатывается JCT-VC. Недавний проект HEVC SCC (Joshi et al., "High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 4", Joint Collaborative Team on Video Coding (JCT-VC), ITU-T SG 16 WP 3 и ISO/IEC JTC 1/SC 29/WG 11, 21st Meeting: Warsaw, PL, 19 June - 16 June 2015), доступен no адресу: http://phenix.it-sudparis.eu/jct/doc_end_user/documents/21_Warsaw/wg11/JCTVC-U1005-v2.zip (далее "HEVC SCC Draft 4").
[0045] Что касается структуры HEVC, в качестве примера, методы кодирования на основе палитры могут быть сконфигурированы для использования в качестве режима единицы кодирования (CU). В других примерах, методы кодирования на основе палитры могут быть сконфигурированы для использования в качестве режима единицы предсказания (PU) в структуре HEVC. Соответственно, все раскрытые ниже процессы, описанные в контексте режима CU, могут, дополнительно или альтернативно, применяться к PU. Однако эти примеры на основе HEVC не следует рассматривать как ограничение описанных здесь методов кодирования на основе палитры, поскольку такие методы могут применяться, чтобы работать независимо или как часть других существующих или еще подлежащих разработке систем/стандартов. В этих случаях, единица для кодирования палитры может представлять собой квадратные блоки, прямоугольные блоки или даже области не прямоугольной формы.
[0046] Фиг. 1 является блок-схемой, иллюстрирующей примерную систему 10 кодирования видео, которая может использовать методы настоящего раскрытия. Используемый здесь термин "устройство кодирования видео" относится в общем как к видеокодерам, так и к видеодекодерам. В настоящем раскрытии, термины "кодирование видео" или "кодирование" могут относиться в общем к кодированию видео или декодированию видео. Видеокодер 20 и видеодекодер 30 системы 10 кодирования видео представляют собой примеры устройств, которые могут быть сконфигурированы для выполнения методов кодирования видео на основе палитры в соответствии с различными примерами, описанными в настоящем раскрытии. Например, видеокодер 20 и видеодекодер 30 могут быть сконфигурированы для избирательного кодирования различных блоков видеоданных, таких как CU или PU в кодировании HEVC, с использованием кодирования на основе палитры или кодирования не на основе палитры. Режимы кодирования не на основе палитры могут относиться к различным режимам временного кодирования с интер-предсказанием или режимам пространственного кодирования с интра-предсказанием, таким как различные режимы кодирования, определенные стандартом HEVC.
[0047] Как показано на фиг. 1, система 10 кодирования видео включает в себя устройство-источник 12 и устройство-получатель 14. Устройство-источник 12 генерирует закодированные видеоданные. Соответственно, устройство-источник 12 может относиться к устройству кодирования видео или аппаратуре кодирования видео. Устройство-получатель 14 может декодировать закодированные видеоданные, сгенерированные устройством-источником 12. Соответственно, устройство-получатель 14 может упоминаться как устройство декодирования видео или аппаратура декодирования видео. Устройство-источник 12 и устройство-получатель 14 могут быть примерами устройств кодирования видео или аппаратуры кодирования видео.
[0048] Устройство-источник 12 и устройство-получатель 14 могут принадлежать к широкому диапазону устройств, включая настольные компьютеры, мобильные вычислительные устройства, портативные персональные компьютеры (например, ноутбуки), планшетные компьютеры, телевизионные приставки, телефонные трубки, такие как смартфоны, телевизоры, камеры, устройства отображения, цифровые медиаплееры, игровые консоли, автомобильные компьютеры и т.п.
[0049] Устройство-получатель 14 может принимать закодированные видеоданные от устройства-источника 12 по каналу 16. Канал 16 может содержать одну или несколько сред или устройств, способных передавать закодированные видеоданные от устройства-источника 12 к устройству-получателю 14. В одном примере, канал 16 может содержать одну или несколько сред связи, которые позволяют устройству-источнику 12 передавать закодированные видеоданные непосредственно в устройство-получатель 14 в реальном времени. В этом примере, устройство-источник 12 может модулировать закодированные видеоданные в соответствии со стандартом связи, таким как протокол беспроводной связи, и может передавать модулированные видеоданные в устройство-получатель 14. Одна или несколько сред связи могут включать в себя беспроводные и/или проводные среды связи, например, радиочастотный (RF) спектр или одну или несколько физических линий передачи. Одна или несколько сред связи могут формировать часть сети на основе пакетов, такой как локальная сеть, сеть широкого охвата или глобальная сеть (например, Интернет). Одна или несколько сред связи могут включать в себя маршрутизаторы, коммутаторы, базовые станции или другое оборудование, которое обеспечивает связь от устройства-источника 12 к устройству-получателю 14.
[0050] В другом примере, канал 16 может включать в себя носитель хранения данных, который хранит закодированные видеоданные, сгенерированные устройством-источником 12. В этом примере, устройство-получатель 14 может осуществлять доступ к носителю хранения данных посредством доступа к диску или карте. Носитель хранения данных может включать в себя множество носителей хранения данных с локальным доступом, таких как Blu-ray диски, DVD, CD-ROM, флэш-память или другие подходящие цифровые носители для хранения закодированных видеоданных.
[0051] В другом примере, канал 16 может включать в себя файловый сервер или другое промежуточное устройство хранения данных, которое хранит закодированные видеоданные, сгенерированные устройством-источником 12. В этом примере, устройство-получатель 14 может получать доступ к закодированным видеоданным, хранящимся на файловом сервере или другом промежуточном устройстве хранения данных, через потоковую передачу или загрузку. Файловый сервер может быть некоторым типом сервера, способным хранить закодированные видеоданные и передавать закодированные видеоданные в устройство-получатель 14. Примерные файловые серверы включают в себя веб-серверы (например, для веб-сайта), серверы протокола передачи файлов (FTP), устройства сетевой системы хранения данных (NAS) и накопители локальных дисков.
[0052] Устройство-получатель 14 может получать доступ к закодированным видеоданным через стандартное соединение передачи данных, например, через Интернет-соединение. Примерные типы соединений передачи данных могут включать в себя беспроводные каналы (например, соединения Wi-Fi), проводные соединения (например, DSL, кабельный модем и т.д.) или их комбинации, которые подходят для доступа к закодированным видеоданным, хранящимся на файловом сервере. Передача закодированных видеоданных из файлового сервера может быть потоковой передачей, передачей загрузки или их комбинацией.
[0053] Методы настоящего раскрытия не ограничиваются беспроводными приложениями или настройками. Эти методы могут быть применены к кодированию видео для поддержки множества мультимедийных приложений, таких как эфирные телевизионные трансляции, передачи кабельного телевидения, передачи спутникового телевидения, передачи потокового видео, например, через Интернет, кодирование видеоданных для хранения на носителе хранения данных, декодирование видеоданных, хранящихся на носителе хранения данных, или других приложений. В некоторых примерах, система 10 кодирования видео может быть сконфигурирована для поддержки односторонней или двусторонней передачи видео для поддержки таких приложений, как потоковое видео, воспроизведение видео, вещательные передачи видео и/или видеотелефония.
[0054] Фиг. 1 является просто примером, и методы настоящего раскрытия могут применяться к настройкам кодирования видео (например, кодированию видео или декодированию видео), которые не обязательно включают в себя какую-либо передачу данных между кодирующими и декодирующими устройствами. В других примерах, данные извлекаются из локальной памяти, передаются в потоке по сети и т.п. Устройство кодирования видео может кодировать и сохранять данные в памяти, и/или устройство декодирования видео может извлекать и декодировать данные из памяти. Во многих примерах, кодирование и декодирование выполняются устройствами, которые не осуществляют связь друг с другом, а просто кодируют данные в память и/или извлекают и декодируют данные из памяти. Устройство-источник 12 и устройство-получатель 14 могут содержать любое из широкого спектра устройств, включая настольные компьютеры, персональные переносные компьютеры (например, ноутбуки), планшетные компьютеры, телевизионные приставки, электронные бытовые приборы, телефонные трубки, такие как смартфоны, смарт-планшеты, телевизоры, камеры, устройства отображения, цифровые медиаплееры, видеоигровые консоли, устройства потоковой передачи видео и т.п. В некоторых случаях, устройство-источник 12 и устройство-получатель 14 могут быть приспособлены для беспроводной связи.
[0055] Устройство-получатель 14 может принимать закодированные видеоданные, подлежащие декодированию, по каналу 16. Канал 16 может содержать любой тип носителя (среды) или устройства, способного перемещать закодированные видеоданные из устройства-источника 12 в устройство-получатель 14. В одном примере, канал 16 может содержать среду связи, позволяющую устройству-источнику 12 передавать закодированные видеоданные непосредственно в устройство-получатель 14 в реальном времени. Закодированные видеоданные могут модулироваться в соответствии со стандартом связи, таким как протокол беспроводной связи, и передаваться в устройство-получатель 14. Среда связи может содержать любую беспроводную или проводную среду связи, например, радиочастотный (RF) спектр или одна или более физических линий передачи. Среда связи может формировать часть сети на основе пакетов, такой как локальная сеть, сеть широкого охвата или глобальная сеть, такая как Интернет. Средство связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может использоваться для обеспечения связи от устройства-источника 12 к устройству-получателю 14.
[0056] Альтернативно, закодированные данные могут выводиться из интерфейса 22 вывода в устройство 19 хранения данных. Аналогичным образом, закодированные данные могут быть доступны из устройства 19 хранения данных посредством интерфейса ввода. Устройство 19 хранения данных может включать в себя любой из множества распределенных или локально доступных носителей хранения данных, таких как жесткий диск, Blu-ray диски, DVD, CD-ROM, флэш-память, энергозависимая или энергонезависимая память или любые другие подходящие цифровые носители хранения данных для хранения кодированных видеоданных. В другом примере, устройство 19 хранения данных может соответствовать файловому серверу или другому промежуточному устройству хранения данных, которое может хранить закодированное видео, сгенерированное устройством-источником 12. Устройство-получатель 14 может получать доступ к сохраненным видеоданным из устройства 19 хранения данных через потоковую передачу или загрузку. Файловый сервер может быть любым типом сервера, способным хранить закодированные видеоданные и передавать эти закодированные видеоданные в устройство-получатель 14. Примерные файловые серверы включают в себя веб-сервер (например, для веб-сайта), FTP-сервер, устройства сетевой системы хранения данных (NAS) или локальный дисковый накопитель. Устройство-получатель 14 может осуществлять доступ к закодированным видеоданным через любое стандартное соединение для передачи данных, включая Интернет-соединение. Это может включать в себя беспроводной канал (например, соединение Wi-Fi), проводное соединение (например, DSL, кабельный модем и т.д.) или их комбинацию, которая подходит для получения доступа к закодированным видеоданным, хранящимся на файловом сервере. Передача закодированных видеоданных из устройства 19 хранения данных может быть потоковой передачей, передачей загрузки или их комбинацией.
[0057] Методы настоящего раскрытия не должны обязательно ограничиваться беспроводными приложениями или настройками. Эти методы могут применяться к кодированию видео в поддержку любого из множества мультимедийных приложений, таких как эфирные телевизионные передачи, передачи кабельного телевидения, передачи спутникового телевидения, передачи потокового видео, например, через Интернет, кодирование цифрового видео для хранения на носителе хранения данных, декодирование цифрового видео, хранящегося на носителе хранения данных, или других приложений. В некоторых примерах, система 10 кодирования видео может быть сконфигурирована для поддержки односторонней или двусторонней передачи видео для поддержки таких приложений, как потоковое видео, воспроизведение видео, вещательные передачи видео и/или видеотелефония.
[0058] В примере на фиг. 1, устройство-источник 12 включает в себя источник 18 видео, видеокодер 20 и интерфейс 22 вывода. В некоторых случаях интерфейс 22 вывода может включать в себя модулятор/демодулятор (модем) и/или передатчик. В устройстве-источнике 12, источник 18 видео может включать в себя такой источник, как устройство захвата (съемки) видео, например видеокамеру, видеоархив, содержащий ранее снятое видео, интерфейс ввода видео для приема видео от поставщика видеоконтента и/или систему компьютерной графики для генерации данных компьютерной графики в качестве исходного видео или комбинацию таких источников. В качестве примера, если источником 18 видео является видеокамера, устройство-источник 12 и устройство-получатель 14 могут образовывать так называемые видеотелефоны. Однако методы, описанные в настоящем раскрытии, могут применяться к кодированию видео в общем и могут применяться к беспроводным и/или проводным приложениям.
[0059] Захваченное, предварительно захваченное или сгенерированное компьютером видео может быть закодировано видеокодером 20. Закодированные видеоданные могут передаваться непосредственно к устройству-получателю 14 через интерфейс 22 вывода устройства-источника 12. Закодированные видеоданные могут также (или альтернативно) сохраняться в устройстве 19 хранения данных для последующего доступа устройством-получателем 14 или другими устройствами для декодирования и/или воспроизведения.
[0060] Устройство-получатель 14 включает в себя интерфейс 28 ввода, видеодекодер 30 и устройство 32 отображения. В некоторых случаях, интерфейс 28 ввода может включать в себя приемник и/или модем. Интерфейс 28 ввода устройства-получателя 14 принимает закодированные видеоданные по каналу 16. Закодированные видеоданные, переданные по каналу 16 или предоставленные в устройстве 19 хранения данных, могут включать в себя множество синтаксических элементов, сгенерированных видеокодером 20, для использования видеодекодером, например, видеодекодером 30, при декодировании видеоданных. Такие синтаксические элементы могут быть включены в закодированные видеоданные, передаваемые по среде связи, сохраненные на носителе хранения данных или сохраненные файловым сервером.
[0061] Устройство 32 отображения может быть встроенным в устройство-получатель 14 или быть внешним относительно него. В некоторых примерах, устройство-получатель 14 может включать в себя встроенное устройство отображения и также быть сконфигурировано для взаимодействия с внешним устройством отображения. В других примерах, устройство-получатель 14 может быть устройством отображения. В общем, устройство 32 отображения отображает декодированные видеоданные пользователю и может содержать любое из множества устройств отображения, таких как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или другие типы устройств отображения.
[0062] Видеокодер 20 и видеодекодер 30 могут работать в соответствии со стандартом сжатия видео, таким как недавно завершенный стандарт HEVC (и различные его расширения, разрабатываемые в настоящее время). В качестве альтернативы, видеокодер 20 и видеодекодер 30 могут работать в соответствии с другими проприетарными (фирменными) стандартами или промышленными стандартами, такими как стандарт ITU-T Н.264, альтернативно называемый MPEG-4, часть 10, Усовершенствованное кодирование видео (AVC) или расширения подобных стандартов. Однако методы настоящего раскрытия не ограничиваются каким-либо конкретным стандартом кодирования. Другие примеры стандартов сжатия видео включают в себя VP8 и VP9.
[0063] Хотя не показано на фиг. 1, в некоторых аспектах, видеокодер 20 и видеодекодер 30 могут быть интегрированы с аудиокодером и декодером и могут включать в себя соответствующие блоки MUX-DEMUX или другие аппаратные средства и программное обеспечение для обработки кодирования как аудио, так и видео в общем потоке данных или отдельных потоках данных. Если применимо, в некоторых примерах, блоки MUX-DEMUX могут соответствовать протоколу мультиплексора ITU Н.223 или другим протоколам, таким как протокол пользовательских дейтаграмм (UDP).
[0064] Каждый из видеокодера 20 и видеодекодера 30 может быть реализован как любая из множества подходящих схем кодера, таких как одна или несколько интегральных схем, включая микропроцессоры, цифровые сигнальные процессоры (DSP), специализированные интегральные схемы (ASIC), программируемые вентильные матрицы (FPGA), дискретная логика, программное обеспечение, аппаратные средства, встроенное программное обеспечение или любые их комбинации. Когда методы реализованы частично в программном обеспечении, устройство может хранить инструкции для программного обеспечения в подходящем, нетранзиторном (не-временном) считываемом компьютером носителе и выполнять инструкции в аппаратных средствах, таких как интегральные схемы, с использованием одного или нескольких процессоров для выполнения методов настоящего раскрытия. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или несколько кодеров или декодеров, каждый из которых может быть интегрирован как часть комбинированного кодера/декодера (кодека) в соответствующем устройстве.
[0065] Как отмечено выше, JCT-VC недавно завершила разработку стандарта HEVC. Усилия по стандартизации HEVC были основаны на развивающейся модели устройства кодирования видео, упоминаемой как тестовая модель HEVC (НМ). НМ предполагает несколько дополнительных возможностей устройств кодирования видео относительно существующих устройств, например, в ITU-T H.264/AVC. Например, в то время как Н.264 предоставляет девять режимов кодирования с интра-предсказанием, НМ может обеспечивать до тридцати пяти режимов кодирования с интра-предсказанием.
[0066] В HEVC и других спецификациях кодирования видео, видеопоследовательность обычно включает в себя последовательность изображений (картинок). Картинки также могут упоминаться как "кадры". Картинка может включать в себя три массива выборок, обозначенных SL, SCb и SCr. SL представляет собой двумерный массив (то есть блок) выборок яркости. SCb представляет собой двумерный массив выборок вектора цветности (цветоразностного сигнала) Cb. SCr представляет собой двумерный массив выборок вектора цветности Cr. Выборки вектора цветности также могут упоминаться здесь как выборки "цветности". В других случаях, картинка может быть монохромной и может содержать только массив выборок яркости.
[0067] Чтобы сформировать кодированное представление картинки, видеокодер 20 может генерировать набор единиц дерева кодирования (CTU). Каждая из CTU может содержать блок дерева кодирования выборок яркости, два соответствующих блока дерева кодирования выборок цветности и синтаксические структуры, используемые для кодирования выборок блоков деревьев кодирования. В монохромных картинках или картинках, имеющих три отдельные цветовые плоскости, CTU может содержать один блок дерева кодирования и синтаксические структуры, используемые для кодирования выборок блока дерева кодирования. Блок дерева кодирования может быть блоком выборок N×N. CTU также может упоминаться как "блок дерева" или LCU. CTU в HEVC могут быть в общем аналогичными макроблокам других стандартов, таких как H.264/AVC. Однако CTU не обязательно ограничивается конкретным размером и может включать в себя одну или несколько единиц кодирования (CU). Вырезка может включать в себя целое число CTU, упорядоченных последовательно в порядке растрового сканирования.
[0068] Для генерации кодированной CTU, видеокодер 20 может рекурсивно выполнять квадрантное разбиение дерева по блокам дерева кодирования CTU для разделения блоков дерева кодирования на блоки кодирования, отсюда название "единицы дерева кодирования". Блок кодирования может представлять собой блок выборок N×N. CU может содержать блок кодирования выборок яркости и два соответствующих блока кодирования выборок цветности картинки, которая имеет массив выборок яркости, массив выборок Cb и массив выборок Cr, а также синтаксические структуры, используемые для кодирования выборок блоков кодирования. В монохромных картинках или картинках, имеющих три отдельные цветовые плоскости, CU может содержать один блок кодирования и синтаксические структуры, используемые для кодирования выборок блока кодирования.
[0069] Видеокодер 20 может разбивать блок кодирования CU на один или несколько блоков предсказания. Блок предсказания представляет собой прямоугольный (т.е. квадратный или неквадратный) блок выборок, на котором применяется то же самое предсказание. Единица предсказания (PU) в CU может содержать блок предсказания выборок яркости, два соответствующих блока предсказания выборок цветности и синтаксические структуры, используемые для предсказания блоков предсказания. В монохромных картинках или картинках, имеющих три отдельные цветовые плоскости, PU может содержать один блок предсказания и синтаксические структуры, используемые для предсказания блока предсказания. Видеокодер 20 может генерировать предиктивные (предсказывающие) блоки яркости, Cb и Cr для блоков предсказания яркости, Cb и Cr каждой PU из CU.
[0070] Видеокодер 20 может использовать интра-предсказание или интер-предсказание для генерации предиктивных блоков для PU. Если видеокодер 20 использует интра-предсказание для генерации предиктивных блоков некоторой PU, то видеокодер 20 может генерировать предиктивные блоки для PU на основе декодированных выборок картинки, ассоциированной с PU. Если видеокодер 20 использует интер-предсказание для генерации предиктивных блоков некоторой PU, то видеокодер 20 может генерировать предиктивные блоки для PU на основе декодированных выборок одной или нескольких картинок, отличных от картинки, ассоциированной с PU.
[0071] После того, как видеокодер 20 генерирует предиктивные блоки яркости, Cb и Cr для одной или нескольких PU в CU, видеокодер 20 может генерировать остаточный блок яркости для CU. Каждая выборка в остаточном блоке яркости для CU указывает разность между выборкой яркости в одном из предиктивных блоков яркости для CU и соответствующей выборкой в исходном блоке кодирования яркости из CU. Кроме того, видеокодер 20 может генерировать остаточный блок Cb для CU. Каждая выборка в остаточном блоке Cb для CU может указывать разность между выборкой Cb в одном из предиктивных блоков Cb для CU и соответствующей выборкой в исходном блоке кодирования Cb из CU. Видеокодер 20 может также генерировать остаточный блок Cr для CU. Каждая выборка в остаточном блоке Cr для CU может указывать разность между выборкой Cr в одном из предиктивных блоков Cr для CU и соответствующей выборкой в исходном блоке кодирования Cr из CU.
[0072] Кроме того, видеокодер 20 может использовать квадрантное разбиение дерева для разложения остаточных блоков яркости, Cb и Cr для CU на один или несколько блоков преобразования яркости, Cb и Cr. Блок преобразования представляет собой прямоугольный (например, квадратный или неквадратный) блок выборок, на котором применяется одно и то же преобразование. Единица преобразования (TU) из CU может содержать блок преобразования выборок яркости, два соответствующих блока преобразования выборок цветности и синтаксические структуры, используемые для преобразования выборок блока преобразования. Таким образом, каждая TU из CU может быть ассоциирована с блоком преобразования яркости, блоком преобразования Cb и блоком преобразования Cr. Блок преобразования яркости, ассоциированный с TU, может быть подблоком остаточного блока яркости для CU. Блок преобразования Cb может быть подблоком остаточного блока Cb для CU. Блок преобразования Cr может быть подблоком остаточного блока Cr для CU. В монохромных картинках или картинках, имеющих три отдельные цветовые плоскости, TU может содержать один блок преобразования и синтаксические структуры, используемые для преобразования выборок блока преобразования.
[0073] Видеокодер 20 может применять одно или несколько преобразований к блоку преобразования яркости из TU для генерации блока коэффициентов яркости для TU. Блок коэффициентов может быть двумерным массивом коэффициентов преобразования. Коэффициент преобразования может быть скалярной величиной. Видеокодер 20 может применять одно или несколько преобразований к блоку преобразования Cb из TU для генерации блока коэффициентов Cb для TU. Видеокодер 20 может применять одно или несколько преобразований к блоку преобразования Cr из TU для генерации блока коэффициентов Cr для TU.
[0074] После генерации блока коэффициентов (например, блока коэффициентов яркости, блока коэффициентов Cb или блока коэффициентов Cr), видеокодер 20 может квантовать блок коэффициентов. Квантование обычно относится к процессу, в котором коэффициенты преобразования квантуются, чтобы, возможно, уменьшить количество данных, используемых для представления коэффициентов преобразования, обеспечивая дополнительное сжатие. После того как видеокодер 20 квантует блок коэффициентов, видеокодер 20 может энтропийно кодировать синтаксические элементы, указывающие квантованные коэффициенты преобразования. Например, видеокодер 20 может выполнять контекстно-адаптивное двоичное арифметическое кодирование (САВАС) на синтаксических элементах, указывающих квантованные коэффициенты преобразования.
[0075] Видеокодер 20 может выводить битовый поток, который включает в себя последовательность битов, которая формирует представление кодированных картинок и ассоциированных данных. Битовый поток может содержать последовательность единиц NAL. Единица NAL представляет собой синтаксическую структуру, содержащую указание типа данных в единице NAL и байты, содержащие эти данные в форме RBSP, распределенного, как необходимо, с битами предотвращения эмуляции. Каждая из единиц NAL включает в себя заголовок единицы NAL и инкапсулирует RBSP. Заголовок единицы NAL может включать в себя синтаксический элемент, который указывает код типа единицы NAL. Код типа единицы NAL, указанный в заголовке единицы NAL, указывает тип единицы NAL. RBSP может представлять собой синтаксическую структуру, содержащую целое число байтов, которое инкапсулировано в единице NAL. В некоторых случаях, RBSP включает в себя нулевые биты.
[0076] Различные типы единиц NAL могут инкапсулировать различные типы RBSP. Например, первый тип единицы NAL может инкапсулировать RBSP для PPS, второй тип единицы NAL может инкапсулировать RBSP для кодированной вырезки, третий тип единицы NAL может инкапсулировать RBSP для сообщений SEI и т.д. Единицы NAL, которые инкапсулируют RBSP для данных кодирования видео (в отличие от RBSP для наборов параметров и сообщений SEI), могут упоминаться как единицы VCL NAL.
[0077] Видеодекодер 30 может принимать битовый поток, генерируемый видеокодером 20. Кроме того, видеодекодер 30 может анализировать битовый поток для получения синтаксических элементов из битового потока. Видеодекодер 30 может восстанавливать картинки видеоданных, основываясь, по меньшей мере частично, на синтаксических элементах, полученных из битового потока. Процесс восстановления видеоданных может быть, в общем, обратным процессу, выполняемому видеокодером 20. Кроме того, видеодекодер 30 может выполнять обратное квантование блоков коэффициентов, ассоциированных с TU текущей CU. Видеодекодер 30 может выполнять обратные преобразования на блоках коэффициентов для восстановления блоков преобразования, ассоциированных с TU текущей CU. Видеодекодер 30 может восстанавливать блоки кодирования текущей CU путем суммирования выборок предиктивных блоков для PU текущей CU с соответствующими выборками блоков преобразования для TU текущей CU. Путем восстановления блоков кодирования для каждой CU картинки, видеодекодер 30 может восстановить картинку.
[0078] В некоторых примерах, видеокодер 20 и видеодекодер 30 могут быть сконфигурированы для выполнения кодирования на основе палитры. Например, при кодировании на основе палитры, вместо выполнения методов кодирования с интра-предсказанием или интер-предсказанием, описанных выше, видеокодер 20 и видеодекодер 30 могут кодировать так называемую палитру в виде таблицы значений цвета для представления видеоданных конкретной области (например, данного блока). Каждый пиксел может быть ассоциирован с записью в палитре, которая представляет цвет пиксела, например, со значениям яркости (Y) и значениями цветности (Cb и Cr). Например, видеокодер 20 и видеодекодер 30 могут кодировать индекс, который связывает пиксельное значение с соответствующим значением в палитре.
[0079] В приведенном выше примере, видеокодер 20 может кодировать блок видеоданных путем определения палитры для блока, локализации записи в палитре для представления значения каждого пиксела и кодирования палитры с индексными значениями для пикселов, связывающих пиксельное значение с палитрой. Видеодекодер 30 может получать, из кодированного битового потока, палитру для блока, а также индексные значения для пикселов блока. Видеодекодер 30 может связывать индексные пиксельных значений с записями палитры для восстановления пиксельных значений блока.
[0080] Аспекты настоящего раскрытия направлены на вывод палитры, которая может быть получена в кодере и декодере. В качестве одного примера, видеокодер 20 может выводить палитру для текущего блока путем вывода гистограммы пикселов в текущем блоке. В некоторых примерах, гистограмма может быть выражена как
где М+1 - количество различных пиксельных значений в текущем блоке, vi - пиксельное значение и fi - число экземпляров (появлений) (то есть, сколько пикселов в текущем блоке имеют пиксельное значение vi). В таких примерах, гистограмма обычно представляет собой число раз, когда пиксельное значение возникает в текущем блоке.
[0081] Видеокодер 20 может инициализировать одну или несколько переменных при выводе гистограммы. В качестве одного примера, видеокодер 20 может инициализировать индекс палитры idx в 0 (т.е. установить idx=0). В качестве другого примера, видеокодер 20 может инициализировать палитру Р как пустую (т.е. Р=∅, установить j=0).
[0082] Видеокодер 20 может сортировать гистограмму, например, в порядке убывания, так что пикселы с большим числом появлений помещаются ближе к началу списка значений. Например, видеокодер 20 может сортировать H в порядке убывания fi, и упорядоченный список может быть выражен как В этом примере упорядоченный список включает в себя наиболее часто встречающиеся пиксельные значения в начале (вверху) списка и наименее часто встречающиеся пиксельные значения в конце (внизу) списка.
[0083] Видеокодер 20 может копировать одну или несколько записей из гистограммы в палитру. В качестве одного примера, видеокодер 20 может вставить запись в гистограмме с наибольшей частотой в палитру. Например, видеокодер 20 может вставить (j, uj) в палитру Р (т.е. ). В некоторых примерах, после вставки записи в палитру, видеокодер 20 может оценивать запись в гистограмме со следующей по высоте частотой для вставки в палитру. Например, видеокодер 20 может установить idx=idx+1, j=j+1.
[0084] Видеокодер 20 может определить, находится ли запись со следующей по высоте частотой (т.е. uj+1) в окрестности любого пиксела (т.е., х) в палитре (т.е. Distance (uj+1, x)<Thresh). Например, видеокодер 20 может определить, находится ли запись в окрестности любого пиксела в палитре, путем определения того, находится ли значение записи в пределах порогового расстояния от значения любого пиксела в палитре. В некоторых примерах, видеокодер 20 может гибко выбирать функцию расстояния. В качестве одного примера, видеокодер 20 может выбирать функцию расстояния как сумму абсолютных разностей (SAD) или сумму квадратичных ошибок предсказания (SSE) трех цветовых компонентов (например, каждого из яркости, цветности синего оттенка или цветности красного оттенка) или одного цветового компонента (например, одного из яркости, цветности синего оттенка или цветности красного оттенка). В некоторых примерах, видеокодер 20 может гибко выбирать пороговое значение (Thresh). В качестве одного примера, видеокодер 20 может выбирать пороговое значение в зависимости от параметра квантования (QP) текущего блока. В качестве другого примера, видеокодер 20 может выбирать пороговое значение в зависимости от значения idx или значения j.
[0085] Если видеокодер 20 определяет, что запись со следующей по высоте частотой (то есть, uj+1) находится в окрестности любого пиксела в палитре, то видеокодер 20 может не вставлять запись в гистограмму. Если видеокодер 20 определяет, что запись со следующей по высоте частотой (то есть, uj+1) не находится в окрестности любого пиксела в палитре, то видеокодер 20 может вставить запись в гистограмму.
[0086] Видеокодер 20 может продолжать вставлять записи в палитру до тех пор, пока не будет удовлетворено одно или несколько условий. Некоторыми примерными условиями являются, когда idx=M, когда j=M, или когда размер палитры больше предопределенного значения.
[0087] Кодирование на основе палитры может иметь определенную величину служебной нагрузки сигнализации. Например, может потребоваться несколько битов, чтобы сигнализировать характеристики палитры, такие как размер палитры, а также собственно палитру. Кроме того, для сигнализации индексных значений для пикселов блока может потребоваться несколько битов. Методы настоящего раскрытия, в некоторых примерах, могут уменьшать количество битов, необходимых для сигнализации такой информации. Например, способы, описанные в настоящем раскрытии, могут включать в себя методы для различных комбинаций одного или нескольких из режимов сигнализации кодирования на основе палитры, передачи палитр, предсказания палитр, вывода палитр и передачи карт кодирования на основе палитры и других синтаксических элементов.
[0088] В некоторых примерах, видеокодер 20 и/или видеодекодер 30 могут предсказывать палитру с использованием другой палитры. Например, видеокодер 20 и/или видеодекодер 30 могут определять первую палитру, имеющую первые записи, указывающие первые пиксельные значения. Видеокодер 20 и/или видеодекодер 30 могут затем определять, на основе первых записей первой палитры, одну или несколько вторых записей, указывающих вторые пиксельные значения второй палитры. Видеокодер 20 и/или видеодекодер 30 могут также кодировать пикселы блока видеоданных с использованием второй палитры.
[0089] При определении записей второй палитры на основе записей в первой палитре, видеокодер 20 может кодировать множество синтаксических элементов, которые могут использоваться видеодекодером для восстановления второй палитры. Например, видеокодер 20 может кодировать один или несколько синтаксических элементов в битовом потоке, чтобы указывать, что целая палитра (или палитры, в случае каждого цветового компонента, например, Y, Cb, Cr или Y, U, V или R, G, В видеоданных, имеющего отдельную палитру) копируется из одного или нескольких соседних блоков того блока, который в настоящее время кодируется. Палитра, из которой предсказываются (например, копируются) записи текущей палитры текущего блока, может упоминаться как палитра предсказания. Палитра предсказания может содержать записи палитры из одного или нескольких соседних блоков, включая пространственно соседние блоки и/или соседние блоки в конкретном порядке сканирования блоков. Например, соседние блоки могут быть пространственно расположены слева (левый соседний блок) или выше (верхний соседний блок) того блока, который в настоящее время кодируется. В другом примере, видеокодер 20 может определять записи палитры предсказания с использованием наиболее частых значений выборок в нерегулярном соседе текущего блока. В другом примере, соседние блоки могут соседствовать с блоком, кодируемым в текущее время в соответствии с конкретным порядком сканирования, используемым для кодирования блоков. То есть, соседние блоки могут быть одним или несколькими блоками, кодируемыми перед текущим блоком в порядке сканирования. Видеокодер 20 может кодировать один или несколько синтаксических элементов для указания местоположения соседних блоков, из которых копируются палитры.
[0090] В некоторых примерах, предсказание палитры может выполняться по записям. Например, видеокодер 20 может кодировать один или несколько синтаксических элементов, чтобы указывать, для каждой записи палитры предсказания, включена ли запись палитры в палитру для текущего блока. Если видеокодер 20 не предсказывает запись палитры для текущего блока, видеокодер 20 может кодировать один или несколько дополнительных синтаксических элементов для указания непредсказанных записей, а также количества таких записей.
[0091] Синтаксические элементы, описанные выше, могут упоминаться как вектор предсказания палитры. Например, как отмечено выше, видеокодер 20 и видеодекодер 30 могут предсказывать палитру для текущего блока на основе одной или нескольких палитр из соседних блоков (упоминаемых совместно как опорная палитра). При генерации опорной палитры, может использоваться метод "первым пришел - первым обслужен" (FIFO) путем добавления самой последней палитры вперед очереди. Если очередь превышает предопределенный порог, самые старые элементы могут выводиться. После перемещения новых элементов вперед очереди, может быть применен процесс отсечения, чтобы удалять дублированные элементы, считая от начала очереди. В частности, в некоторых примерах, видеокодер 20 может кодировать (и видеодекодер 30 может декодировать) вектор 0-1, чтобы указывать, будут ли пиксельные значения в опорной палитре повторно использоваться для текущей палитры. В качестве примера, как показано в примере Таблицы 6, опорная палитра может включать в себя шесть элементов (например, шесть индексных значений и соответствующие пиксельные значения).
В примере для целей иллюстрации, видеокодер 20 может сигнализировать вектор (1, 0, 1, 1, 1, 1), который указывает, что v0, v2, v3, v4 и v5 являются повторно используемыми в текущей палитре, a v1 не используется повторно. В дополнение к повторному использованию v0, v2, v3, v4 и v5, видеокодер 20 может добавить два новых элемента в текущую палитру с индексами 5 и 6. Текущая палитра для этого примера показана в Таблице 7, ниже.
[0092] Для кодирования вектора 0-1 предсказания палитры, для каждого элемента вектора, видеокодер 20 может кодировать один бит для представления его значения. Кроме того, количество элементов палитры, которые не могут быть предсказаны (например, количество новых записей палитры (u0 и u1 в примере Таблицы 7 выше)), могут быть бинаризованы и сигнализированы.
[0093] Другие аспекты настоящего раскрытия относятся к конструированию и/или передаче карты, которая позволяет видеокодеру 20 и/или видеодекодеру 30 определять пиксельные значения. Например, другие аспекты настоящего раскрытия относятся к конструированию и/или передаче карты индексов, которые связывают конкретный пиксел с записью палитры.
[0094] В некоторых примерах, видеокодер 20 может указывать, имеют ли пикселы блока соответствующее значение в палитре. В одном примере для целей иллюстрации, предположим, что запись (i, j) карты соответствует пиксельной позиции (i, j) в блоке видеоданных. В этом примере, видеокодер 20 может кодировать флаг для каждой пиксельной позиции блока. Видеокодер 20 может установить флаг, равный единице, для записи (i, j), чтобы указать, что пиксельное значение в местоположении (i, j) является одним из значений в палитре. Когда цвет включен в палитру (т.е. флаг равен единице), видеокодер 20 также может кодировать данные, указывающие индекс палитры для записи (i, j), которая идентифицирует цвет в палитре. Когда цвет пиксела не включен в палитру (т.е. флаг равен нулю), видеокодер 20 также может кодировать данные, указывающие значение выборки для пиксела, который может указываться как пиксел выхода. Видеодекодер 30 может получать вышеописанные данные из закодированного битового потока и использовать данные для определения индекса палитры и/или пиксельного значения для конкретного местоположения в блоке.
[0095] В некоторых случаях, может иметься корреляция между индексом палитры, на который отображается пиксел в заданной позиции, и вероятностью того, что соседний пиксел отображается на тот же самый индекс палитры. То есть, когда пиксел отображается на конкретный индекс палитры, вероятность того, что один или несколько соседних пикселов (с точки зрения пространственного расположения) отображаются на тот же самый индекс палитры, может быть относительно высокой.
[0096] В некоторых примерах, видеокодер 20 и/или видеодекодер 30 могут определять и кодировать один или несколько индексов блока видеоданных относительно одного или нескольких индексов того же самого блока видеоданных. Например, видеокодер 20 и/или видеодекодер 30 могут быть сконфигурированы для определения первого индексного значения, ассоциированного с первым пикселом в блоке видеоданных, причем первое индексное значение связывает значение первого пиксела с записью палитры. Видеокодер 20 и/или видеодекодер 30 также могут быть сконфигурированы для определения, на основе первого индексного значения, одного или несколько вторых индексных значений, ассоциированных с одним или несколькими вторыми пикселами в блоке видеоданных, и для кодирования первого и одного или нескольких вторых пикселов блока видеоданных. Таким образом, в этом примере, индексы карты могут кодироваться относительно одного или нескольких других индексов карты.
[0097] Как обсуждалось выше, видеокодер 20 и/или видеодекодер 30 могут использовать несколько разных методов для кодирования индексных значений карты относительно других индексов карты. Например, видеокодер 20 и/или видеодекодер 30 могут использовать индексный режим, режим копирования сверху и переходный режим для кодирования индексных значений карты относительно других индексов карты.
[0098] В "индексном режиме" кодирования на основе палитры, видеокодер 20 и/или видеодекодер 30 могут сначала сигнализировать индекс палитры. Если индекс равен размеру палитры, это означает, что выборка является выборкой выхода. В этом случае, видеокодер 20 и/или видеодекодер 30 могут сигнализировать значение выборки или значение квантованных выборок для каждого компонента. Например, если размер палитры равен 4, для не-выходных выборок, индексы палитры находятся в диапазоне [0, 3]. В этом случае индексное значение 4 может обозначать выборку выхода. Если индекс указывает не-выходную выборку, видеокодер 20 и/или видеодекодер 30 могут сигнализировать длину серии, которая может указывать количество последовательных выборок в порядке сканирования, которые совместно используют тот же самый индекс, неотрицательным значением n-1, указывающим длину серии, что означает, что следующие n пикселов, включая текущий, имеют тот же самый индекс пиксела, что и первый сигнализированный индекс.
[0099] В режиме "копирование сверху" кодирования на основе палитры, видеокодер 20 и/или видеодекодер 30 могут сигнализировать неотрицательное значение m-1 длины серии, чтобы указывать, что для следующих m пикселов, включая текущий пиксел, индексы палитры являются теми же самыми, что и их соседи непосредственно выше, соответственно. Отметим, что режим "копирования сверху" отличается от "индексного" режима в том смысле, что индексы палитры могут быть различными в режиме "копирования сверху" серии.
[0100] Как обсуждалось выше, в некоторых примерах, может быть желательным группировать бины обхода вместе (т.е. увеличивать пропускную способность САВАС). В соответствии с одним или несколькими методами настоящего раскрытия, видеокодер 20 может кодировать, а видеодекодер 30 может декодировать синтаксические элементы, используемые для определения текущей палитры, так что синтаксические элементы, которые кодируются с использованием режима обхода, группируются вместе. Например, в отличие от кодирования одного или нескольких синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных перед синтаксическим элементом, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, видеокодер 20 и/или видеодекодер 30 могут кодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных. Таким образом, видеокодер 20 и/или видеодекодер 30 могут кодировать большую группу синтаксических элементов с использованием режима обхода, что может увеличить пропускную способность САВАС.
[0101] В некоторых примерах, один или несколько синтаксических элементов, относящихся к дельта-QP для текущего блока видеоданных, могут включать в себя синтаксические элементы, которые указывают абсолютное значение разности между QP яркости для текущего блока видеоданных и предсказателем QP яркости для текущего блока (например, cu_qp_delta_palette_abs) и синтаксический элемент, который указывает знак разности между QP яркости для текущего блока видеоданных и предсказателем QP яркости для текущего блока (например, cu_qp_delta_palette_sign_flag). В некоторых примерах, один или несколько синтаксических элементов, относящихся к смещениям QP цветности для текущего блока видеоданных, могут включать в себя синтаксический элемент, который указывает, добавлены ли записи в одном или нескольких списках смещений к QP яркости для текущего блока, чтобы определить QP цветности для текущего блока (например, cu_chroma_qp_palette_offset_flag), и синтаксический элемент, который указывает индекс записи в каждом из одного или нескольких списков смещений, которые добавлены к QP яркости для текущего блока для определения QP цветности для текущего блока (например, cu_chroma_qp_palette_offset_idx). Таким образом, видеокодер 20 и/или видеодекодер 30 могут быть сконфигурированы, чтобы кодировать синтаксический элемент palette_transpose_flag в первой позиции в битовом потоке и кодировать синтаксический элемент cu_qp_delta_palette_abs, синтаксический элемент cu_qp_delta_palette_sign_flag, синтаксический элемент cu_chroma_qp_palette_offset_flag и синтаксический элемент cu_chroma_qp_palette_offset_idx во второй позиции в битовом потоке, который находится после первой позиции.
[0102] Фиг. 2 является блок-схемой, иллюстрирующей примерный видеокодер 20, который может реализовывать методы настоящего раскрытия. Фиг. 2 приведена в целях пояснения и не должна рассматриваться как ограничение методов, которые широко проиллюстрированы и описаны в настоящем раскрытии. В целях пояснения, настоящее раскрытие описывает видеокодер 20 в контексте кодирования HEVC. Однако методы настоящего раскрытия могут быть применимы к другим стандартам или способам кодирования.
[0103] Видеокодер 20 представляет собой пример устройства, которое может быть сконфигурировано для выполнения методов кодирования видео на основе палитры в соответствии с различными примерами, описанными в настоящем раскрытии. Например, видеокодер 20 может быть сконфигурирован для избирательного кодирования различных блоков видеоданных, таких как CU или PU в кодировании HEVC, с использованием кодирования на основе палитры или кодирования не на основе палитры. Кодирование не на основе палитры может относиться к различным режимам временного кодирования с интер-предсказанием или режимам пространственного кодирования с интра-предсказанием, таким как различные режимы кодирования, определенные стандартом HEVC. Видеокодер 20, в одном примере, может быть сконфигурирован для генерации палитры, содержащей записи, указывающие пиксельные значения, выбора пиксельных значений в палитре для представления пиксельных значений по меньшей мере некоторых позиций блока видеоданных и сигнализации информации, ассоциирующей по меньшей мере некоторые из позиций блока видеоданных с записями в палитре, соответствующими, соответственно, выбранным пиксельным значениям. Сигнализируемая информация может использоваться видеодекодером 30 для декодирования видеоданных.
[0104] В примере на фиг. 2, видеокодер 20 включает в себя модуль 100 обработки предсказания, модуль 102 генерации остатка, модуль 104 обработки преобразования, модуль 106 квантования, модуль 108 обратного квантования, модуль 110 обработки обратного преобразования, модуль 112 восстановления, модуль 114 фильтрации, буфер 116 декодированных картинок и модуль 118 энтропийного кодирования. Модуль 100 обработки предсказания включает в себя модуль 120 обработки интер-предсказания и модуль 126 обработки интра-предсказания. Модуль 120 обработки интер-предсказания включает в себя модуль оценки движения и модуль компенсации движения (не показаны). Видеокодер 20 также включает в себя модуль 122 кодирования на основе палитры, сконфигурированный для выполнения различных аспектов методов кодирования на основе палитры, описанных в настоящем раскрытии. В других примерах, видеокодер 20 может включать в себя больше или меньше функциональных компонентов или другие функциональные компоненты.
[0105] Видеокодер 20 может принимать видеоданные. Видеокодер 20 может кодировать каждую CTU в вырезке картинки видеоданных. Каждая из CTU может быть ассоциирована с блоками дерева кодирования (СТВ) яркости одинакового размера и соответствующими СТВ картинки. В рамках кодирования CTU, модуль 100 обработки предсказания может выполнять разбиение дерева на квадранты для разделения СТВ из CTU на все меньшие блоки. Меньший блок может представлять блоки кодирования в CU. Например, блок 100 обработки предсказания может разбивать СТВ, ассоциированный с CTU, на четыре подблока одинакового размера, разбивать один или несколько подблоков на четыре под-подблока одинакового размера и так далее.
[0106] Видеокодер 20 может кодировать CU из CTU для генерации закодированных представлений CU (т.е. кодированных CU). В рамках кодирования CU, модуль 100 обработки предсказания может разбивать блоки кодирования, ассоциированные с CU, среди одной или нескольких PU для CU. Таким образом, каждая PU может быть ассоциирована с блоком предсказания яркости и соответствующими блоками предсказания цветности. Видеокодер 20 и видеодекодер 30 могут поддерживать PU, имеющие различные размеры. Как указано выше, размер CU может относиться к размеру блока кодирования яркости CU, а размер PU может относиться к размеру блока предсказания яркости PU. Предполагая, что размер конкретной CU равен 2N×2N, видеокодер 20 и видеодекодер 30 могут поддерживать размеры PU 2N×2N или N×N для интра-предсказания и симметричные размеры PU 2N×2N, 2N×N, N×2N, N×N или аналогичные для интер-предсказания. Видеокодер 20 и видеодекодер 30 могут также поддерживать асимметричное разбиение для размеров PU 2N×nU, 2N×nD, nL×2N и nR×2N для интер-предсказания.
[0107] Модуль 120 обработки интер-предсказания может генерировать данные предсказания для PU, выполняя интер-предсказание на каждой PU для CU. Данные предсказания для PU могут включать в себя блоки выборок предсказания PU и информацию о движении для PU. Модуль 120 обработки интер-предсказания может выполнять различные операции для PU для CU в зависимости от того, находится ли PU в I-вырезке, Р-вырезке или В-вырезке. В I-вырезке, все PU являются интра-предсказываемыми. Следовательно, если PU находится в I-вырезке, модуль 120 обработки интер-предсказания не выполняет интер-предсказание на PU. Таким образом, для блоков, закодированных в I-режиме, предсказанный (предиктивный) блок формируется с использованием пространственного предсказания из ранее кодированных соседних блоков внутри того же самого кадра.
[0108] Если PU находится в Р-вырезке, модуль оценки движения модуля 120 обработки интер-предсказания может осуществлять поиск опорных картинок в списке опорных картинок (например, "RefPicList0") для опорной области для PU. Опорная область для PU может представлять собой область, в пределах опорной картинки, которая содержит блоки выборок, которые наиболее близко соответствуют блокам выборок PU. Модуль оценки движения может генерировать опорный индекс, который указывает позицию в RefPicList0 опорной картинки, содержащей опорную область для PU. Кроме того, модуль оценки движения может генерировать MV, который указывает пространственное смещение между блоком кодирования PU и опорным местоположением, ассоциированным с опорной областью. Так, например, MV может быть двумерным вектором, который обеспечивает смещение от координат в текущей декодированной картинке к координатам в опорной картинке. Модуль оценки движения может выводить опорный индекс и MV в качестве информации о движении PU. Модуль компенсации движения модуля 120 обработки интер-предсказания может генерировать модули выборок предсказания PU на основе реальных или интерполированных выборок в опорном местоположении, указанном вектором движения PU.
[0109] Если PU находится в В-вырезке, модуль оценки движения может выполнять uni- (однонаправленное) предсказание или bi-(двунаправленное) предсказание для PU. Чтобы выполнить uni-предсказание для PU, модуль оценки движения может осуществлять поиск опорных картинок из RefPicList0 или второго списка опорных картинок ("RefPicList1") для опорной области для PU. Модуль оценки движения может выводить, в качестве информации о движении PU, опорный индекс, который указывает позицию в RefPicList0 или RefPicList1 опорной картинки, которая содержит опорную область, MV, который указывает пространственное смещение между блоком выборок PU и опорным местоположением, ассоциированным с опорной областью, и один или несколько указателей направления предсказания, которые указывают, находится ли опорная картинка в RefPicList0 или RefPicList1. Модуль компенсации движения модуля 120 обработки интер-предсказания может генерировать блоки выборок предсказания PU, основываясь, по меньшей мере частично, на реальных или интерполированных выборках в опорной области, указанной вектором движения PU.
[0110] Для выполнения двунаправленного интер-предсказания для PU, модуль оценки движения может выполнять поиск опорных картинок в RefPicList0 для опорной области для PU и может также выполнять поиск опорных картинок в RefPicList1 для другой опорной области для PU. Модуль оценки движения может генерировать индексы опорных картинок, которые указывают позиции в RefPicList0 и RefPicList1 опорных картинок, которые содержат опорные области. Кроме того, модуль оценки движения может генерировать MV, которые указывают пространственные смещения между опорным местоположением, ассоциированным с опорными областями, и блоком выборок PU. Информация о движении PU может включать в себя опорные индексы и MV для PU. Модуль компенсации движения может генерировать блоки выборок предсказания PU, основываясь, по меньшей мере частично, на реальных или интерполированных выборках в опорной области, указанной вектором движения PU.
[0111] В соответствии с различными примерами настоящего раскрытия, видеокодер 20 может быть сконфигурирован для выполнения кодирования на основе палитры. По отношению к структуре HEVC, в качестве примера, методы кодирования на основе палитры могут быть сконфигурированы для использования в качестве режима единицы кодирования (CU). В других примерах, методы кодирования на основе палитры могут быть сконфигурированы для использования в режиме PU в структуре HEVC. Соответственно, все процессы, описанные здесь (по всему настоящему раскрытию) в контексте режима CU могут, дополнительно или альтернативно, применяться к PU. Однако эти примеры на основе HEVC не следует рассматривать как ограничение описанных здесь методов кодирования на основе палитры, поскольку такие методы могут применяться, чтобы работать независимо или как часть других существующих или еще подлежащих разработке систем/стандартов. В этих случаях единица для кодирования палитры может представлять собой квадратные блоки, прямоугольные блоки или даже области не прямоугольной формы.
[0112] Модуль 122 кодирования на основе палитры может, например, выполнять кодирование на основе палитры, когда выбран режим кодирования на основе палитры, например, для CU или PU. Например, модуль 122 кодирования основе палитры может быть сконфигурирован для генерации палитры, содержащей записи, указывающие пиксельные значения, выбора пиксельных значений в палитре для представления пиксельных значений по меньшей мере некоторых позиций блока видеоданных и сигнализации информации, ассоциирующей по меньшей мере некоторые из позиций блока видеоданных с записями в палитре, соответствующими соответственно, выбранным пиксельным значениям. Хотя различные функции описываются как выполняемые модулем 122 кодирования на основе палитры, некоторые или все такие функции могут выполняться другими модулями обработки или комбинацией различных модулей обработки.
[0113] Модуль 122 кодирования на основе палитры может генерировать синтаксические элементы для определения палитры для блока видеоданных. Некоторые примерные синтаксические элементы, которые модуль 122 кодирования на основе палитры может генерировать для определения текущей палитры для текущего блока видеоданных, включают в себя, без ограничения указанным, синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры текущей палитры (например, palette_transpose_flag), один или несколько синтаксических элементов, относящихся к дельта-параметру квантования (QP) (например, cu_qp_delta_palette_abs, cu_qp_delta_palette_sign_flag, cu_chroma_qp_palette_offset_flag и/или cu_chroma_qp_palette_offset_idx), один или несколько синтаксических элементов, относящихся к смещениям QP цветности для текущего блока видеоданных, один или несколько синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, будут ли записи из палитры предсказателя повторно использоваться в текущей палитре (например, palette_predictor_run), один или несколько синтаксических элементов, которые указывают количество записей в текущей палитре, которые явно сигнализируются (например, num_signalled_palette_entries), один или несколько синтаксических элементов, которые указывают значение компонента в записи палитры в текущей палитре (например, palette_entry) один или несколько синтаксических элементов, которые указывают, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода (например, palette_escape_val_present_flag), один или несколько синтаксических элементов, которые указывают количество записей в текущей палитре, которые явно сигнализируются или выводятся (например, num_palette_indices_idc) и один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры (например, palette_index_idc). Модуль 122 кодирования на основе палитры может выводить сгенерированные синтаксические элементы, которые определяют текущую палитру для текущего блока, на один или несколько других компонентов видеокодера 20, таких как модуль 118 энтропийного кодирования.
[0114] Соответственно, видеокодер 20 может быть сконфигурирован для кодирования блоков видеоданных с использованием режимов кодирования на основе палитры, как описано в настоящем раскрытии. Видеокодер 20 может избирательно кодировать блок видеоданных с использованием режима кодирования палитры или кодировать блок видеоданных с использованием другого режима, например, такого как режим кодирования с интер-предсказанием или интра-предсказанием HEVC. Блок видеоданных может представлять собой, например, CU или PU, сгенерированные в соответствии с процессом кодирования HEVC. Видеокодер 20 может кодировать некоторые блоки с использованием режимов временного кодирования с интер-предсказанием или пространственного кодирования с интра-предсказанием и декодировать другие блоки с использованием режима кодирования на основе палитры.
[0115] Модуль 126 обработки интра-предсказания может генерировать данные предсказания для PU посредством выполнения интра-предсказания на PU. Данные предсказания для PU могут включать в себя блоки выборок предсказания для PU и различные синтаксические элементы. Модуль 126 обработки интра-предсказания может выполнять интра-предсказание на PU в I-вырезках, Р-вырезках и В-вырезках.
[0116] Для выполнения интра-предсказания на PU, модуль 126 обработки интра-предсказания может использовать несколько режимов интра-предсказания для генерации множества наборов данных предсказания для PU. Чтобы использовать режим интра-предсказания для генерации набора данных предсказания для PU, модуль 126 обработки интра-предсказания может распространять выборки из блоков выборок соседних PU по блокам выборок PU в направлении, ассоциированном с режимом интра-предсказания. Соседние PU могут быть выше, выше и правее, выше и левее или слева от PU, предполагая порядок кодирования слева направо, сверху-вниз для PU, CU и CTU. Модуль 126 обработки интра-предсказания может использовать различное количество режимов интра-предсказания, например, 33 режима направленного интра-предсказания. В некоторых примерах, количество режимов интра-предсказания может зависеть от размера области, ассоциированной с PU.
[0017] Модуль 100 обработки предсказания может выбирать данные предсказания для PU для CU из данных предсказания, генерируемых модулем 120 обработки интер-предсказания для PU, или данных предсказания, генерируемых модулем 126 обработки интра-предсказания для PU. В некоторых примерах, модуль 100 обработки предсказания выбирает данные предсказания для PU для CU на основе показателей скорости/искажения наборов данных предсказания. Блоки выборок предсказания выбранных данных предсказания могут упоминаться здесь как выбранные блоки выборок предсказания.
[0118] Модуль 102 генерации остатка может генерировать, на основе блока кодирования яркости, Cb и Cr для CU и выбранных блоков предсказания яркости, Cb и Cr для PU для CU, остаточные блоки яркости, Cb и Cr для CU. К примеру, модуль 102 генерации остатка может генерировать остаточные блоки CU таким образом, что каждая выборка в остаточных блоках имеет значение, равное разности между выборкой в блоке кодирования CU и соответствующей выборкой в соответствующем выбранном блоке выборок предсказания PU для CU.
[0119] Модуль 104 обработки преобразования может выполнять разбиение дерева на квадранты для разбиения остаточных блоков, ассоциированных с CU, на блоки преобразования, ассоциированные с TU из CU. Таким образом, TU может быть ассоциирована с блоком преобразования яркости и двумя блоками преобразования цветности. Размеры и позиции блоков преобразования яркости и цветности TU из CU могут быть или не быть основаны на размерах и позициях блоков предсказания PU для CU. Структура дерева квадрантов, известная как "дерево остаточных квадрантов" (RQT), может включать в себя узлы, ассоциированные с каждой из областей. TU из CU могут соответствовать листовым узлам RQT.
[0120] Модуль 104 обработки преобразования может генерировать блоки коэффициентов преобразования для каждой TU из CU путем применения одного или нескольких преобразований к блокам преобразования TU. Модуль 104 обработки преобразования может применять различные преобразования к блоку преобразования, ассоциированному с TU. Например, модуль 104 обработки преобразования может применять дискретное косинусное преобразование (DCT), направленное преобразование или концептуально подобное преобразование к блоку преобразования. В некоторых примерах, модуль 104 обработки преобразования не применяет преобразований к блоку преобразования. В таких примерах, блок преобразования может рассматриваться как блок коэффициентов преобразования.
[0121] Модуль 106 квантования может квантовать коэффициенты преобразования в блоке коэффициентов. Процесс квантования может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами преобразования. Например, n-битовый коэффициент преобразования может быть округлен до m-битового коэффициента преобразования во время квантования, где n больше, чем m. Модуль 106 квантования может квантовать блок коэффициентов, ассоциированный с TU из CU, на основе значения параметра квантования (QP), ассоциированного с CU. Видеокодер 20 может корректировать степень квантования, применяемую к блокам коэффициентов, ассоциированным с CU, путем коррекции значения QP, ассоциированного с CU. Квантование может вносить потерю информации, поэтому квантованные коэффициенты преобразования могут иметь меньшую точность, чем исходные.
[0122] Модуль 108 обратного квантования и модуль 110 обработки обратного преобразования могут применять обратное квантование и обратные преобразования к блоку коэффициентов, соответственно, для восстановления остаточного блока из блока коэффициентов. Модуль 112 восстановления может добавить восстановленный остаточный блок к соответствующим выборкам из одного или нескольких блоков выборок предсказания, сгенерированных модулем 100 обработки предсказания, для создания восстановленного блока преобразования, ассоциированного с TU. Таким образом, путем восстановления блоков преобразования для каждой TU из CU, видеокодер 20 может восстанавливать блоки кодирования CU.
[0123] Модуль 114 фильтрации может выполнять одну или несколько операций устранения блочности для уменьшения артефактов блочности в блоках кодирования, ассоциированных с CU. Буфер 116 декодированных картинок может сохранять восстановленные блоки кодирования после того, как модуль 114 фильтрации выполняет одну или более операций устранения блочности на восстановленных блоках кодирования. Модуль 120 обработки интер-предсказания может использовать опорную картинку, которая содержит восстановленные блоки кодирования для выполнения интер-предсказания на PU других картинок. Кроме того, модуль 126 обработки интра-предсказания может использовать восстановленные блоки кодирования в буфере 116 декодированных картинок для выполнения интра-предсказания на других PU в той же картинке, что и CU.
[0124] Модуль 118 энтропийного кодирования может принимать данные от других функциональных компонентов видеокодера 20. Например, модуль 118 энтропийного кодирования может принимать блоки коэффициентов из модуля 106 квантования и может принимать синтаксические элементы из модуля 100 обработки предсказания. Модуль 118 энтропийного кодирования может выполнять одну или несколько операций энтропийного кодирования на данных для генерации энтропийно закодированных данных. Например, модуль 118 энтропийного кодирования может выполнять операцию контекстно-адаптивного кодирования переменной длины (CAVLC), операцию САВАС, операцию кодирования от переменной к переменной (V2V) длины, операцию контекстно-адаптивного двоичного арифметического кодирования на основе синтаксиса (SBAC), операцию энтропийного кодирования с разбиением на интервалы вероятностей (PIPE), операцию кодирования на основе экспоненциального кода Голомба (Golomb) или другой тип операции энтропийного кодирования данных. Видеокодер 20 может выводить битовый поток, который включает в себя энтропийно закодированные данные, генерируемые модулем 118 энтропийного кодирования. Например, битовый поток может включать в себя данные, которые представляют RQT для CU.
[0125] Как обсуждалось выше, модуль 122 кодирования на основе палитры может выводить сгенерированные синтаксические элементы, которые определяют текущую палитру для текущего блока, на модуль 118 энтропийного кодирования. Модуль 118 энтропийного кодирования может кодировать один или несколько бинов синтаксических элементов, полученных из модуля 122 кодирования на основе палитры, с использованием САВАС с контекстами и один или несколько бинов синтаксических элементов, полученных из модуля 122 кодирования на основе палитры, с использованием САВАС без контекстов (то есть в режиме обхода). В некоторых примерах, модуль 118 энтропийного кодирования может кодировать синтаксические элементы с использованием контекстов или режима обхода, как определено выше в Таблице 2.
[0126] Как обсуждалось выше, может оказаться желательным группировать бины, кодированные в режиме обхода, вместе, чтобы увеличить пропускную способность САВАС. В SCC Draft 3, бины синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag кодируются в режиме обхода и группируются вместе. Однако в то время как бины синтаксических элементов num_palette_indices_idc и palette_index_idc также кодируются в режиме обхода, они не группируются с бинами синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag. Вместо этого, в HEVC SCC Draft 3, синтаксические элементы num_palette_indices_idc и palette_index_idc отделены от синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag одним или несколькими синтаксическими элементами, относящимся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных (например, cu_qp_delta_palette_abs, cu_qp_delta_palette_sign_flag, cu_chroma_qp_palette_offset_flag и cu_chroma_qp_palette_offset_idx), и синтаксическим элементом, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных (например, palette_transpose_flag).
[0127] В соответствии с одним или несколькими методами настоящего раскрытия, модуль 118 энтропийного кодирования может кодировать синтаксические элементы, используемые для определения текущей палитры, так что синтаксические элементы, которые кодируются с использованием режима обхода, последовательно кодируются. Например, в противоположность разделению бинов синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag и бинов синтаксических элементов num_palette_indices_idc и palette_index_idc, модуль 118 энтропийного кодирования может кодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, так что бины синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag, num_palette_indices_idc и palette_index_idc группируются вместе. Таким образом, пропускная способность САВАС модуля 118 энтропийного кодирования может быть увеличена.
[0128] Фиг. 3 представляет собой блок-схему, иллюстрирующую примерный видеодекодер 30, который сконфигурирован для реализации методов настоящего раскрытия. Фиг. 3 приведена в целях пояснений и не ограничивает методы, как широко проиллюстрировано и описано в настоящем раскрытии. В целях пояснения, настоящее раскрытие описывает видеодекодер 30 в контексте кодирования HEVC. Однако методы настоящего раскрытия могут применяться к другим стандартам или методам кодирования.
[0129] Видеодекодер 30 представляет собой пример устройства, которое может быть сконфигурировано для выполнения методов кодирования видео на основе палитры в соответствии с различными примерами, описанными в настоящем раскрытии. Например, видеодекодер 30 может быть сконфигурирован для избирательного декодирования различных блоков видеоданных, таких как CU или PU, в кодировании HEVC, с использованием кодирования на основе палитры или не на основе палитры. Режимы кодирования не на основе палитры могут относиться к различным режимам временного кодирования с интер-предсказанием или режимам пространственного кодирования с интра-предсказанием, таким как различные режимы кодирования, определенные стандартом HEVC. Видеодекодер 30, в одном примере, может быть сконфигурирован для генерации палитры, содержащей записи, указывающие пиксельные значения, приема информации, ассоциирующей по меньшей мере некоторые позиции блока видеоданных с записями в палитре, выбора пиксельных значений в палитре на основе информации и восстановления пиксельных значений блока на основе выбранных пиксельных значений.
[0130] В примере на фиг. 3, видеодекодер 30 включает в себя модуль 150 энтропийного декодирования, модуль 152 обработки предсказания, модуль 154 обратного квантования, модуль 156 обработки обратного преобразования, модуль 158 восстановления, модуль 160 фильтрации и буфер 162 декодированных картинок. Модуль 152 обработки предсказания включает в себя модуль 164 компенсации движения и модуль 166 обработки интра-предсказания. Видеодекодер 30 также включает в себя модуль 165 декодирования на основе палитры, сконфигурированный для выполнения различных аспектов методов кодирования на основе палитры, описанных в настоящем раскрытии. В других примерах, видеодекодер 30 может включать в себя больше или меньше функциональных компонентов или другие функциональные компоненты.
[0131] В некоторых примерах, видеодекодер 30 может дополнительно включать в себя память 149 видеоданных. Память 149 видеоданных может хранить видеоданные, такие как битовый поток кодированного видео, подлежащий декодированию компонентами видеодекодера 30. Видеоданные, хранящиеся в памяти 149 видеоданных, могут быть получены, например, из канала 16, например, из локального источника видео, такого как камера, посредством передачи видеоданных по проводной или беспроводной сети или путем доступа к физическим носителям данных. Память 149 видеоданных может формировать буфер кодированных картинок (СРВ), который хранит закодированные видеоданные из битового потока кодированного видео. СРВ может представлять собой память опорных картинок, которая хранит опорные видеоданные для использования при декодировании видеоданных видеодекодером 30, например, в режимах интра- или интер-кодирования. Память 149 видеоданных может быть образована любым из множества устройств памяти, таких как динамическая память с произвольным доступом (DRAM), включая синхронную DRAM (SDRAM), магниторезистивную RAM (MRAM), резистивную RAM (RRAM) или другие типы устройств памяти. Память 149 видеоданных и буфер 162 декодированного изображения могут быть обеспечены одним и тем же устройством памяти или отдельными устройствами памяти. В различных примерах, память 149 видеоданных может быть интегрирована в чип с другими компонентами видеодекодера 30 или находиться вне чипа относительно этих компонентов.
[0132] Буфер кодированных картинок (СРВ) может принимать и хранить кодированные видеоданные (например, единицы NAL) битового потока. Модуль 150 энтропийного декодирования может принимать закодированные видеоданные (например, единицы NAL) из СРВ и анализировать единицы NAL для декодирования синтаксических элементов. Модуль 150 энтропийного декодирования может энтропийно декодировать энтропийно-кодированные синтаксические элементы в единицах NAL. Модуль 152 обработки предсказания, модуль 154 обратного квантования, модуль 156 обработки обратного преобразования, модуль 158 восстановления и модуль 160 фильтрации могут генерировать декодированные видеоданные на основе синтаксических элементов, извлеченных из битового потока.
[0133] Единицы NAL битового потока могут включать в себя единицы NAL кодированной вырезки. В рамках декодирования битового потока, модуль 150 энтропийного декодирования может извлекать и энтропийно декодировать синтаксические элементы из единиц NAL кодированной вырезки. Каждая из кодированных вырезок может включать в себя заголовок вырезки и данные вырезки. Заголовок вырезки может содержать синтаксические элементы, относящиеся к вырезке. Синтаксические элементы в заголовке вырезки могут включать в себя синтаксический элемент, который идентифицирует PPS, ассоциированный с картинкой, содержащей вырезку.
[0134] В дополнение к декодированию синтаксических элементов из битового потока, видеодекодер 30 может выполнять операцию восстановления на неразделенной CU. Для выполнения операции восстановления на неразделенной CU, видеодекодер 30 может выполнить операцию восстановления на каждой TU из CU. Путем выполнения операции восстановления для каждой TU из CU, видеодекодер 30 может восстанавливать остаточные блоки CU.
[0135] В рамках выполнения операции восстановления на TU из CU, модуль 154 обратного квантования может обратно квантовать, то есть деквантовать, блоки коэффициентов, ассоциированные с TU. Модуль 154 обратного квантования может использовать значение QP, ассоциированное с CU для TU, для определения степени квантования и, аналогично, степени обратного квантования для применения в модуле 154 обратного квантования. Таким образом, коэффициент сжатия, т.е. отношение количества битов, используемых для представления исходной последовательности и сжатой последовательности, можно регулировать путем коррекции значения QP, используемого при квантовании коэффициентов преобразования. Степень сжатия также может зависеть от используемого способа энтропийного кодирования.
[0136] После того, как модуль 154 обратного квантования выполнит обратное квантование блока коэффициентов, модуль 156 обработки обратного преобразования может применять одно или несколько обратных преобразований к блоку коэффициентов для формирования остаточного блока, ассоциированного с TU. Например, модуль 156 обработки обратного преобразования может применять обратное DCT, обратное целочисленное преобразование, обратное преобразование Карунена-Лоэве (Karhunen-Loeve, KLT), обратное вращательное преобразование, обратное направленное преобразование или другое обратное преобразование к блоку коэффициентов.
[0137] Если PU закодирован с использованием интра-предсказания, модуль 166 обработки интра-предсказания может выполнять интра-предсказание для генерации предиктивных блоков для PU. Модуль 166 обработки интра-предсказания может использовать режим интра-предсказания для генерации предиктивных блоков яркости, Cb и Cr для PU на основе блоков предсказания пространственно соседних PU. Модуль 166 обработки интра-предсказания может определять режим интра-предсказания для PU на основе одного или нескольких синтаксических элементов, декодированных из битового потока.
[0138] Модуль 152 обработки предсказания может сформировать первый список опорных картинок (RefPicList0) и второй список опорных картинок (RefPicList1) на основе синтаксических элементов, извлеченных из битового потока. Кроме того, если PU кодируется с использованием интер-предсказания, модуль 150 энтропийного декодирования может извлекать информацию о движении для PU. Модуль 164 компенсации движения может определять, на основе информации о движении PU, одну или несколько опорных областей для PU. Модуль 164 компенсации движения может генерировать, на основе блоков выборок в одном или нескольких опорных блоках для PU, предиктивные блоки яркости, Cb и Cr для PU.
[0139] Модуль 158 восстановления может использовать блоки преобразования яркости, Cb и Cr, ассоциированные с TU из CU, и предиктивные блоки яркости, Cb и Cr PU для CU, то есть данные интра-предсказания или интер-предсказания, если это применимо, для восстановления блоков кодирования яркости, Cb и Cr для CU. Например, модуль 158 восстановления может суммировать выборки блоков преобразования яркости, Cb и Cr с соответствующими выборками предиктивных блоков яркости, Cb и Cr для восстановления блоков кодирования яркости, Cb и Cr для CU.
[0140] Модуль 160 фильтрации может выполнять операцию устранения блочности для уменьшения артефактов блочности, ассоциированных с блоками кодирования яркости, Cb и Cr для CU. Видеодекодер 30 может хранить блоки кодирования яркости, Cb и Cr для CU в буфере 162 декодированных картинок. Буфер 162 декодированных картинок может предоставлять опорные картинки для последующей компенсации движения, интра-предсказания, представления на устройстве отображения, таком как устройство 32 отображения на фиг. 1. Например, видеодекодер 30 может выполнять, на основе блоков яркости, Cb и Cr в буфере 162 декодированных картинок, операции интра-предсказания или интер-предсказания на PU других CU. Таким образом, видеодекодер 30 может извлекать, из битового потока, уровни коэффициентов преобразования значимого блока коэффициентов яркости, обратно квантовать уровни коэффициентов преобразования, применять преобразование к уровням коэффициентов преобразования для генерации блока преобразования, генерировать, основываясь по меньшей мере частично на блоке преобразования, блок кодирования и выводить блок кодирования для отображения.
[0141] В соответствии с различными примерами настоящего раскрытия, видеодекодер 30 может быть сконфигурирован для выполнения кодирования на основе палитры. Модуль 165 декодирования на основе палитры может, например, выполнять декодирование на основе палитры, когда выбран режим декодирования на основе палитры, например, для CU или PU. Например, модуль 165 декодирования на основе палитры может быть сконфигурирован, чтобы генерировать палитру, содержащую записи, указывающие пиксельные значения, принимать информацию, ассоциирующую по меньшей мере некоторые позиции блока видеоданных с записями в палитре, выбирать пиксельные значения в палитре на основе информации и восстанавливать пиксельные значения блока на основе выбранных пиксельных значений. Хотя различные функции описаны как выполняемые модулем 165 декодирования на основе палитры, некоторые или все такие функции могут выполняться другими модулями обработки или комбинацией различных модулей обработки.
[0142] Модуль 165 декодирования на основе палитры может принимать информацию о режиме кодирования палитры и выполнять вышеупомянутые операции, когда информация о режиме кодирования палитры указывает, что режим кодирования палитры применяется к блоку. Когда информация о режиме кодирования палитры указывает, что режим кодирования палитры не применяется к блоку, или когда информация о другом режиме указывает на использование другого режима, модуль 152 обработки предсказания декодирует блок видеоданных с использованием режима кодирования не на основе палитры, например, такого как режим интер-предсказания HEVC с использованием модуля 164 компенсации движения или режим интра-предсказания с использованием модуля 166 обработки интра-предсказания, когда информация о режиме кодирования палитры указывает, что режим кодирования палитры не применяется к блоку. Блок видеоданных может представлять собой, например, CU или PU, сгенерированные в соответствии с процессом кодирования HEVC. Видеодекодер 30 может декодировать некоторые блоки с использованием режимов временного кодирования с интер-предсказанием или пространственного кодирования с интра-предсказанием и декодировать другие блоки с использованием режима кодирования на основе палитры. Режим кодирования на основе палитры может содержать один из множества различных режимов кодирования на основе палитры, или может иметься один режим кодирования на основе палитры.
[0143] Информация о режиме кодирования палитры, принятая модулем 165 декодирования на основе палитры, может содержать синтаксический элемент режима палитры, такой как флаг. Первое значение синтаксического элемента режима палитры указывает, что режим кодирования палитры применяется к блоку, а второе значение синтаксического элемента режима палитры указывает, что режим кодирования палитры не применяется к блоку видеоданных. Модуль 165 декодирования на основе палитры может принимать информацию о режиме кодирования палитры на одном или нескольких из уровня единицы предсказания, уровня единицы кодирования, уровня вырезки или уровня картинки или может принимать информацию о режиме кодирования палитры в по меньшей мере в одном из набора параметров картинки (PPS), набора параметров последовательности (SPS) или набора параметров видео (VPS).
[0144] В некоторых примерах, модуль 165 декодирования на основе палитры может выводить информацию о режиме кодирования палитры на основе одного или более из размера блока кодирования, типа кадра, цветового пространства, цветового компонента, размера кадра, частоты кадров, идентификатора (id) уровня в масштабируемом кодировании видео или id вида в многовидовом кодировании, ассоциированном с блоком видеоданных.
[0145] Модуль 165 декодирования на основе палитры также может быть сконфигурирован, чтобы принимать информацию, определяющую по меньшей мере некоторые из записей в палитре с видеоданными, и генерировать палитру, основываясь по меньшей мере частично, на принятой информации. Размер палитры может быть фиксированным или переменным. В некоторых случаях, размер палитры является переменным и корректируемым на основе информации, сигнализируемой с видеоданными. Сигнализированная информация может указывать, является ли запись в палитре последней записью в палитре. Кроме того, в некоторых случаях, палитра может иметь максимальный размер.
[0146] Палитра может быть одиночной палитрой, включающей в себя записи, указывающие пиксельные значения для компонента яркости и компонентов цветности блока. В этом случае, каждая запись в палитре представляет собой тройную запись, указывающую пиксельные значения для компонента яркости и двух компонентов цветности. Альтернативно, палитра содержит палитру яркости, включающую в себя записи, указывающие пиксельные значения компонента яркости блока, и палитры цветности, включающие в себя записи, указывающие пиксельные значения для соответствующих компонентов цветности блока.
[0147] В некоторых примерах, модуль 165 декодирования на основе палитры может генерировать палитру путем предсказания записей в палитре на основе ранее обработанных данных. Ранее обработанные данные могут включать в себя палитры или информацию из палитр для ранее декодированных соседних блоков. Модуль 165 декодирования на основе палитры может принимать синтаксический элемент предсказания, указывающий, должны ли предсказываться записи в палитре. Синтаксический элемент предсказания может включать в себя множество синтаксических элементов предсказания, указывающих, соответственно, должны ли предсказываться записи в палитрах для компонентов яркости и цветности.
[0148] Модуль 165 декодирования на основе палитры может, в некоторых примерах, предсказывать по меньшей мере некоторые из записей в палитре на основе записей в палитре для левого соседнего блока или верхнего соседнего блока в вырезке или картинке. В этом случае, записи в палитре, которые предсказываются на основе записей в палитре для левого соседнего блока или верхнего соседнего блока, могут быть предсказаны модулем 165 декодирования на основе палитры на основе синтаксического элемента, который указывает выбор левого соседнего блока или верхнего соседнего блока для предсказания. Синтаксический элемент может быть флагом, имеющим значение, которое указывает выбор левого соседнего блока или верхнего соседнего блока для предсказания.
[0149] В некоторых примерах, модуль 165 декодирования на основе палитры может принимать один или несколько синтаксических элементов предсказания, которые указывают, должны ли предсказываться по меньшей мере некоторые выбранные записи в палитре на основе от записи к записи, и генерировать записи соответствующим образом. Модуль 165 декодирования на основе палитры может предсказывать некоторые из записей и принимать информацию, непосредственно указывающую другие записи в палитре.
[0150] Информация, принятая модулем 165 декодирования на основе палитры, ассоциирующая по меньшей мере некоторые позиции блока видеоданных с записями в палитре, может содержать информацию карты, включающую в себя индексные значения палитры по меньшей мере для некоторых позиций в блоке, причем каждое из индексных значений палитры соответствует одной из записей в палитре. Информация о карте может включать в себя один или несколько синтаксических элементов серии, каждый из которых указывает количество последовательных позиций в блоке, имеющих то же самое индексное значение палитры.
[0151] В некоторых примерах, модуль 165 декодирования на основе палитры может принимать информацию, указывающую копирование строки, при этом записи палитры для строки позиций в блоке копируются из записей палитры для другой строки позиций в блоке. Модуль 165 декодирования на основе палитры может использовать эту информацию для выполнения копирования строки для определения записей в палитре для различных позиций блока. Строка позиций может содержать строку, часть строки, столбец или часть столбца позиций блока.
[0152] Модуль 165 декодирования на основе палитры может генерировать палитру отчасти путем приема пиксельных значений для одной или нескольких позиций блока и добавления пиксельных значений к записям в палитре, чтобы динамически генерировать по меньшей мере часть палитры "на лету". Добавление пиксельных значений может содержать добавление пиксельных значений в исходную палитру, содержащую начальный набор записей, или в пустую палитру, которая не включает в себя начальный набор записей. В некоторых примерах, добавление содержит добавление пиксельных значений для добавления новых записей в исходную палитру, содержащую начальный набор записей, или заполнение существующих записей в исходной палитре, или замену или изменение пиксельных значений записей в исходной палитре.
[0153] В некоторых примерах, палитра может представлять собой квантованную палитру, в которой пиксельное значение, выбранное из палитры для одной из позиций в блоке, отличается от фактического пиксельного значения позиции в блоке, так что процесс декодирования выполняется с потерями. Например, одно и то же пиксельное значение может быть выбрано из палитры для двух разных позиций, имеющих разные фактические пиксельные значения.
[0154] Как обсуждалось выше, модуль 165 декодирования на основе палитры может принимать информацию, которая определяет палитру для текущего блока видеоданных. Например, модуль 165 декодирования на основе палитры может принимать множество синтаксических элементов из модуля 150 энтропийного декодирования. В некоторых примерах, модуль 150 энтропийного декодирования может декодировать множество синтаксических элементов из битового потока кодированного видео в соответствии с синтаксической таблицей. В качестве одного примера, модуль 150 энтропийного декодирования может декодировать множество синтаксических элементов из битового потока кодированного видео в соответствии с таблицей синтаксиса палитры HEVC SCC Draft 3, которая воспроизведена выше в Таблице 1. Однако, как обсуждалось выше, расположение синтаксических элементов в HEVC SCC Draft 3 может оказаться не оптимальным. В частности, расположение синтаксических элементов в HEVC SCC Draft 3 не максимизирует количество сгруппированных вместе синтаксических элементов, кодируемых в режиме обхода, что может снизить пропускную способность САВАС.
[0155] В соответствии с одним или несколькими способами настоящего раскрытия, модуль 150 энтропийного декодирования может декодировать синтаксические элементы, используемые для определения текущей палитры, так, что дополнительные синтаксические элементы, кодируемые в режиме обхода, группируются вместе. Например, в противоположность разделению бинов синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag и бинов синтаксических элементов num_palette_indices_idc и palette_index_idc, модуль 150 энтропийного декодирования может декодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, так что бины синтаксических элементов palette_predictor_run, num_signalled_palette_entries, palette_entry и palette_escape_val_present_flag, num_palette_indices_idc и palette_index_idc группируются вместе. В качестве одного примера, модуль 150 энтропийного декодирования может декодировать синтаксические элементы, используемые для определения текущей палитры, в порядке, показанном выше в Таблице 4. В качестве другого примера, модуль 150 энтропийного декодирования может декодировать синтаксические элементы, используемые для определения текущей палитры, в порядке, показанном выше в Таблице 5. Таким образом, пропускная способность САВАС модуля 150 энтропийного декодирования может быть увеличена.
[0156] Фиг. 4 представляет собой концептуальную диаграмму, иллюстрирующую пример определения палитры для кодирования видеоданных, в соответствии с методами настоящего раскрытия. Пример на фиг. 4 включает в себя картинку 178, имеющую первую единицу кодирования (CU) 180, которая ассоциирована с первыми палитрами 184, и вторую CU 188, которая ассоциирована со вторыми палитрами 192. Как описано более подробно ниже и в соответствии с методами настоящего раскрытия, вторые палитры 192 основаны на первых палитрах 184. Картинка 178 также включает в себя блок 196, кодируемый в режиме кодирования с интра-предсказанием, и блок 200, который кодируется в режиме кодирования с интер-предсказанием.
[0157] Методы, иллюстрируемые на фиг. 4, описаны в контексте видеокодера 20 (фиг. 1 и фиг. 2) и видеодекодера 30 (фиг. 1 и фиг. 3) ив отношении стандарта HEVC в целях пояснения. Однако следует понимать, что методы настоящего раскрытия не ограничены таким образом и могут применяться другими процессорами и/или устройствами кодирования видео в других процессах и/или стандартах кодирования видео.
[0158] В общем, палитра относится к некоторому числу пиксельных значений, которые являются доминирующими и/или репрезентативными для CU, кодируемой в текущее время, такой как CU 188 в примере на фиг. 4. Первые палитры 184 и вторые палитры 192 показаны как включающие в себя множество палитр. В некоторых примерах, устройство кодирования видео (такое как видеокодер 20 или видеодекодер 30) может кодировать палитры отдельно для каждого цветового компонента CU. Например, видеокодер 20 может кодировать одну палитру для компонента яркости (Y) CU, другую палитру для компонента цветности (U) CU и еще одну палитру для компонента цветности (V) CU. В этом примере, записи палитры Y могут представлять значения Y пикселов CU, записи палитры U могут представлять значения U пикселов CU, и записи палитры V могут представлять значения V пикселов CU. В другом примере, видеокодер 20 может кодировать палитру для компонента яркости (Y) CU и другую палитру для двух компонентов (U, V) CU. В этом примере, записи палитры Y могут представлять значения Y пикселов CU, а записи палитры U-V могут представлять пары значений U-V пикселов CU.
[0159] В других примерах, видеокодер 20 может кодировать единственную палитру для всех цветовых компонентов CU. В этом примере, видеокодер 20 может кодировать палитру, имеющую i-ую запись, которая является тройным значением, включающим в себя Yi, Ui и Vi. В этом случае, палитра включает в себя значения для каждого из компонентов пикселов. Соответственно, представление палитр 184 и 192 в виде набора палитр, содержащих множество отдельных палитр, является лишь одним примером и не рассматривается в качестве ограничения.
[0160] В примере на фиг. 4, первые палитры 184 включают в себя три записи 202-206, имеющие индексное значение 1 записи, индексное значение 2 записи и индексное значение 3 записи, соответственно. Записи 202-206 связывают индексные значения с пиксельными значениями, включающими в себя пиксельное значение А, пиксельное значение В и пиксельное значение С, соответственно. Как описано здесь, вместо того, чтобы кодировать фактические пиксельные значения первой CU 180, устройство кодирования видео (такое как видеокодер 20 или видеодекодер 30) может использовать кодирование на основе палитры для кодирования пикселов блока с использованием индексов 1-3. То есть, для каждой позиции пиксела первой CU 180, видеокодер 20 может кодировать индексное значение для пиксела, где индексное значение ассоциировано с пиксельным значением в одной или нескольких из первых палитр 184. Видеодекодер 30 может получить индексные значения из битового потока и восстанавливать пиксельные значения с использованием индексных значений и одной или нескольких из первых палитр 184. Таким образом, первые палитры 184 передаются видеокодером 20 в битовом потоке кодированных видеоданных для использования видеодекодером 30 в декодировании на основе палитры. В общем, одна или несколько палитр могут быть переданы для каждой CU или могут совместно использоваться различными CU.
[0161] Видеокодер 20 и видеодекодер 30 могут определять вторые палитры 192 на основе первых палитр 184. Например, видеокодер 20 может кодировать pred_palette_flag для каждой CU (включая, например, вторую CU 188), чтобы указывать, предсказывается ли палитра для CU из одной или нескольких палитр, ассоциированных с одной или несколькими другими CU, такими как соседние CU (пространственно или на основе порядка сканирования) или наиболее частые выборки нерегулярного соседа. Например, когда значение такого флага равно единице, видеодекодер 30 может определить, что вторые палитры 192 для второй CU 188 предсказываются из одной или нескольких уже декодированных палитр, и поэтому никакие новые палитры для второй CU 188 не включаются в битовый поток, содержащий pred_palette_flag. Когда такой флаг равен нулю, видеодекодер 30 может определить, что палитра 192 для второй CU 188 включена в битовый поток в качестве новой палитры. В некоторых примерах, pred_palette_flag может отдельно кодироваться для каждого другого цветового компонента CU (например, три флага, один для Y, один для U и один для V, для CU в YUV-видео). В других примерах, для всех цветовых компонентов CU может кодироваться один pred_palette_flag.
[0162] В приведенном выше примере, pred_palette_flag сигнализируется для каждой CU, чтобы указывать, предсказаны ли какие-либо из записей палитры для текущего блока. В некоторых примерах, один или несколько синтаксических элементов могут сигнализироваться на основе по каждой записи. То есть, флаг может сигнализироваться для каждой записи предсказателя палитры, чтобы указывать, присутствует ли эта запись в текущей палитре. Как отмечено выше, если запись палитры не предсказана, запись палитры может сигнализироваться явным образом.
[0163] При определении вторых палитр 192 относительно первых палитр 184 (например, pred_palette_flag равен единице), видеокодер 20 и/или видеодекодер 30 могут локализовать один или несколько блоков, из которых определяются палитры предсказания, в этом примере первые палитры 184. Палитры предсказания могут быть ассоциированы с одной или несколькими соседними CU для кодируемой в текущее время CU (например, такими как соседние CU (пространственно или на основе порядка сканирования) или наиболее частые выборки нерегулярного соседа), то есть второй CU 188. Палитры одной или нескольких соседних CU могут быть ассоциированы с палитрой предсказателя. В некоторых примерах, таких как пример, показанный на фиг. 4, видеокодер 20 и/или видеодекодер 30 могут локализовать левую соседнюю CU, первую CU 180, при определении палитры предсказания для второй CU 188. В других примерах, видеокодер 20 и/или видеодекодер 30 могут локализовать одну или несколько CU в других позициях относительно второй CU 188, такую как верхняя CU, CU 196.
[0164] Видеокодер 20 и/или видеодекодер 30 могут определять CU для предсказания палитры на основе иерархии. Например, видеокодер 20 и/или видеодекодер 30 могут первоначально идентифицировать левую соседнюю CU, первую CU 180, для предсказания палитры. Если левая соседняя CU недоступна для предсказания (например, левая соседняя CU кодируется в режиме, отличном от режима кодирования на основе палитры, таком как режим интра-предсказания или интра-предсказания, или расположена на крайнем левом краю картинки или вырезки), видеокодер 20 и/или видеодекодер 30 могут идентифицировать верхнюю соседнюю CU, CU 196. Видеокодер 20 и/или видеодекодер 30 могут продолжать поиск доступной CU в соответствии с заданным порядком локализаций, пока не будет локализована CU, имеющую палитру, доступную для предсказания палитры. В некоторых примерах, видеокодер 20 и/или видеодекодер 30 могут определять палитру предсказания на основе нескольких блоков и/или восстановленных выборок соседнего блока.
[0165] В то время как пример на фиг. 4 иллюстрирует первые палитры 184 в качестве палитр предсказания из одной CU, первой CU 180, в других примерах, видеокодер 20 и/или видеодекодер 30 могут локализовать палитры для предсказания из комбинации соседних CU. Например, видеокодер 20 и/или видеодекодер могут применять одну или несколько формул, функций, правил и т.п. для генерации палитры на основе палитр одной или комбинации множества соседних CU.
[0166] В других примерах, видеокодер 20 и/или видеодекодер 30 могут формировать список кандидатов, включающий в себя множество потенциальных кандидатов для предсказания палитры. Процесс отсечения может применяться как в видеокодере 20, так и в видеодекодере 30 для удаления дублированных кандидатов в списке. В таких примерах, видеокодер 20 может кодировать индекс в список кандидатов для указания CU-кандидата в списке, из которого выбирается текущая CU, используемая для предсказания палитры (например, копирует палитру). Видеодекодер 30 может формировать список кандидатов таким же образом, декодировать индекс и использовать декодированный индекс для выбора палитры соответствующей CU для использования с текущей CU.
[0167] В одном примере в целях иллюстрации, видеокодер 20 и видеодекодер 30 могут формировать список кандидатов, который включает в себя одну CU, которая расположена выше CU, кодируемой в текущее время, и одну CU, которая расположена слева от CU, кодируемой в текущее время. В этом примере, видеокодер 20 может кодировать один или несколько синтаксических элементов для указания выбора кандидата. Например, видеокодер 20 может кодировать флаг, имеющий значение нуля, чтобы указывать, что палитра для текущего CU копируется из CU, расположенной слева от текущей CU. Видеокодер 20 может кодировать флаг, имеющий значение единицы, чтобы указывать, что палитра для текущей CU копируется из CU, расположенной выше текущей CU. Видеодекодер 30 декодирует флаг и выбирает соответствующую CU для предсказания палитры.
[0168] В других примерах, видеокодер 20 и/или видеодекодер 30 определяют палитру для CU, кодируемой в текущее время, на основе частоты, с которой значения выборок, включенные в одну или несколько других палитр, возникают в одной или нескольких соседних CU. Например, видеокодер 20 и/или видеодекодер 30 могут отслеживать цвета, ассоциированные с наиболее часто используемыми индексными значениями, во время кодирования заданного количества CU. Видеокодер 20 и/или видеодекодер 30 могут включать наиболее часто используемые цвета в палитре для CU, кодируемой в текущее время.
[0169] В некоторых примерах, видеокодер 20 и/или видеодекодер 30 могут выполнять предсказание палитры на основе по каждой записи. Например, видеокодер 20 может кодировать один или несколько синтаксических элементов, таких как один или несколько флагов, для каждой записи палитры предсказания, указывающей, будут ли соответствующие записи палитры предсказания повторно использоваться в текущей палитре (например, будут ли пиксельные значения в палитре другой CU повторно использоваться текущей палитрой). В этом примере, видеокодер 20 может кодировать флаг, имеющий значение, равное единице для данной записи, когда запись является предсказанным значением из палитры предсказания (например, соответствующей записью палитры, ассоциированной с соседней CU). Видеокодер 20 может кодировать флаг, имеющий значение, равное нулю для конкретной записи, чтобы указывать, что конкретная запись не предсказана из палитры другой CU. В этом примере, видеокодер 20 может также кодировать дополнительные данные, указывающие значение не предсказанной записи палитры.
[0170] В примере на фиг. 4, вторые палитры 192 включают в себя четыре записи 208-214, имеющие индексное значение 1 записи, индексное значение 2 записи, индексное значение 3 записи и индексное значение 4 записи, соответственно. Записи 208-214 связывают индексные значения с пиксельными значениями, включающими в себя пиксельное значение А, пиксельное значение В, пиксельное значение С и пиксельное значение D, соответственно. Видеокодер 20 и/или видеодекодер 30 могут использовать любой из вышеописанных методов для локализации первой CU 180 для целей предсказания палитры и копирования записей 1-3 первых палитр 184 в записи 1-3 вторых палитр 192 для кодирования второй CU 188. Таким образом, видеокодер 20 и/или видеодекодер 30 могут определять вторые палитры 192 на основе первых палитр 184. Кроме того, видеокодер 20 и/или видеодекодер 30 могут кодировать данные для записи 4, которые должны быть включены со вторыми палитрами 192. Такая информация может включать в себя ряд записей палитры, не предсказанных из палитры предсказания, и пиксельные значения, соответствующие этим записям палитры.
[0171] В некоторых примерах, в соответствии с аспектами настоящего раскрытия, один или несколько синтаксических элементов могут указывать, предсказываются ли палитры, такие как вторые палитры 192, из палитры предсказания (показанной на фиг. 4 как первые палитры 184, которые могут состоять из записей из одного или нескольких блоков), или предсказываются ли конкретные записи вторых палитр 192. Например, исходный синтаксический элемент может указывать, предсказываются ли все записи. Если исходный синтаксический элемент указывает, что не все записи предсказываются (например, флаг имеет значение 0), один или несколько дополнительных синтаксических элементов могут указывать, какие записи вторых палитр 192 предсказываются из палитры предсказания.
[0172] В соответствии с некоторыми аспектами настоящего раскрытия, определенная информация, ассоциированная с предсказанием палитры, может быть выведена из одной или нескольких характеристик кодируемых данных. То есть, вместо кодирования видеокодером 20 синтаксических элементов (и декодирования видеодекодером 30 таких синтаксических элементов), видеокодер 20 и видеодекодер 30 могут выполнять предсказание палитры на основе одной или более характеристик кодируемых данных.
[0173] Фиг. 5 представляет собой концептуальную диаграмму, иллюстрирующую пример определения индексов в палитру для блока пикселов в соответствии с методами настоящего раскрытия. Например, фиг. 5 включает в себя карту 240 индексных значений (значения 1, 2 и 3), которые связывают соответствующие позиции пикселов, ассоциированные с индексными значениями, с записью палитр 244. Палитры 244 могут быть определены аналогично первым палитрам 184 и вторым палитрам 192, описанным выше со ссылкой на фиг. 4.
[0174] Вновь, методы, иллюстрируемые на фиг. 5, описаны в контексте видеокодера 20 (фиг. 1 и фиг. 2) и видеодекодера 30 (фиг. 1 и фиг. 3) ив отношении стандарта кодирования видео HEVC для целей пояснения. Однако следует понимать, что методы настоящего раскрытия не ограничены таким образом и могут применяться другими процессорами и/или устройствами кодирования видео в других процессах и/или стандартах кодирования видео.
[0175] Хотя карта 240 проиллюстрирована в примере на фиг. 5, как включающая в себя индексное значение для каждой позиции пиксела, следует понимать, что в других примерах не все позиции пикселов могут быть ассоциированы с индексным значением, связывающим пиксельное значение с записью палитр 244. То есть, как отмечено выше, в некоторых примерах, видеокодер 20 может кодировать (и видеодекодер 30 может получить из кодированного битового потока) указание фактического пиксельного значения (или его квантованной версии) для позиции на карте 240, если пиксельное значение не включено в палитры 244.
[0176] В некоторых примерах, видеокодер 20 и видеодекодер 30 могут быть сконфигурированы для кодирования дополнительной карты, указывающей, какие позиции пикселов ассоциированы с индексными значениями. Например, предположим, что запись (i, j) на карте соответствует позиции (i, j) для CU. Видеокодер 20 может кодировать один или несколько синтаксических элементов для каждой записи карты (то есть каждой позиции пиксела), указывающей, имеет ли запись ассоциированное индексное значение. Например, видеокодер 20 может кодировать флаг, имеющий значение единицы, чтобы указывать, что пиксельное значение в местоположении (i, j) в CU является одним из значений в палитрах 244. Видеокодер 20 может, в таком примере, также кодировать индекс палитры (показан в примере на фиг. 5 как значения 1-3), чтобы указывать такое пиксельное значение в палитре и позволять видеодекодеру восстанавливать пиксельное значение. В случаях, когда палитры 244 включают в себя одну запись и ассоциированное пиксельное значение, видеокодер 20 может пропускать сигнализацию индексного значения. Видеокодер 20 может кодировать флаг, чтобы он имел значение нуля, для указания, что пиксельное значение в местоположении (i, j) в CU не является одним из значений в палитрах 244. В этом примере, видеокодер 20 также может кодировать указание пиксельного значения для использования видеодекодером 30 при восстановлении пиксельного значения. В некоторых случаях, пиксельное значение может кодироваться с потерями.
[0177] Значение пиксела в одной позиции CU может обеспечивать указание значений одного или нескольких других пикселов в других позициях CU. Например, может быть относительно высокая вероятность того, что соседние позиции пикселов CU будут иметь то же самое пиксельное значение или могут быть отображены на то же самое индексное значение (в случае кодирования с потерями, в котором более одного пиксельного значения может отображаться на одно индексное значение).
[0178] Соответственно, видеокодер 20 может кодировать один или несколько синтаксических элементов, указывающих количество последовательных пикселов или индексных значений в заданном порядке сканирования, которые имеют то же самое пиксельное значение или индексное значение. Как отмечено выше, строка равнозначных пиксельных или индексных значений может упоминаться здесь как серия. В одном примере для целей иллюстрации, если два последовательных пиксела или индекса в заданном порядке сканирования имеют разные значения, то серия равна нулю. Если два последовательных пиксела или индекса в заданном порядке сканирования имеют одно и то же значение, но третий пиксел или индекс в порядке сканирования имеет другое значение, серия равна единице. Для трех последовательных индексов или пикселов с одинаковым значением серия равна двум и так далее. Видеодекодер 30 может получать синтаксические элементы, указывающие серию из кодированного битового потока, и использовать данные для определения количества последовательных местоположений, имеющих одинаковое пиксельное или индексное значение.
[0179] На число индексов, которые могут быть включены в серию, может влиять порядок сканирования. Например, рассмотрим растровое сканирование строк 266, 268 и 270 карты 240. Предполагая горизонтальное направление сканирования слева направо (такое как порядок растрового сканирования), строка 266 включает в себя три индексных значения "1", два индексных значения "2" и три индексных значения "3". Строка 268 включает в себя пять индексных значений "1" и три индексных значения "3". В этом примере, для строки 266, видеокодер 20 может кодировать синтаксические элементы, указывающие, что первое значение строки 266 (крайнее левое значение строки) равно 1 с серией 2, за которым следует индексное значение 2 с серией 1, за которым следует индексное значение 3 с серией 2. После растрового сканирования, видеокодер 20 может затем начать кодирование строки 268 с крайнего левого значения. Например, видеокодер 20 может кодировать синтаксические элементы, указывающие, что первое значение строки 268 равно 1 с серией 4, за которым следует индексное значение 3 с серией 2. Видеокодер 20 может действовать таким же образом со строкой 270.
[0180] Следовательно, в порядке растрового сканирования, первый индекс текущей строки может сканироваться непосредственно после последнего индекса предыдущей строки. Однако, в некоторых примерах, может оказаться нежелательным сканирование индексов в порядке растрового сканирования. Например, может оказаться нежелательным сканировать индексы в порядке растрового сканирования, где первая строка блока видеоданных (например, строка 266) включает в себя первый пиксел, смежный с первым краем блока видеоданных (например, крайний левый пиксел строки 266, который имеет индексное значение 1), и последний пиксел, смежный со вторым краем блока видеоданных (например, крайний правый пиксел строки 266, который имеет индексное значение 3), вторая строка блока видеоданных (например, строка 268) включает в себя первый пиксел, смежный с первым краем блока видеоданных (например, крайний левый пиксел строки 268, который имеет индексное значение 1), и последний пиксел, смежный со вторым краем блока видеоданных (например, крайний правый пиксел строки 268, который имеет индексное значение 3), последний пиксел первой строки является смежным с последним пикселом второй строки, и первый край и второй край параллельны, и последний пиксел в первой строке имеет то же самое индексное значение, что и последний пиксел во второй строке, но имеет другое индексное значение, чем у первого пиксела во второй строке. Эта ситуация (т.е. когда индексное значение последнего пиксела в первой строке является тем же самым, что и у последнего пиксела во второй строке, но отличается от первого пиксела во второй строке) может происходить более часто в экранном контенте, генерируемом компьютером, чем в других типах видеоконтента.
[0181] В некоторых примерах, видеокодер 20 может использовать зигзагообразный порядок сканирования (змейкой) при кодировании индексов карты. Например, видеокодер 20 может сканировать последний пиксел второй строки непосредственно после последнего пиксела первой строки. Таким образом, видеокодер 20 может повысить эффективность кодирования длины серии.
[0182] Например, в противоположность использованию порядка растрового сканирования, видеокодер 20 может использовать зигзагообразный порядок сканирования для кодирования значений карты 240. В одном примере для целей иллюстрации, рассмотрим строки 266, 268 и 270 карты 240. Используя зигзагообразный порядок сканирования (например, порядок сканирования змейкой), видеокодер 20 может кодировать значения карты 240, начиная с левой позиции строки 266, проходя через крайнюю правую позицию строки 266, перемещаясь вниз к крайней левой позиции строки 268, проходя через крайнюю левую позицию строки 268 и перемещаясь вниз в крайнюю левую позицию строки 270. Например, видеокодер 20 может кодировать один или несколько синтаксических элементов, указывающих, что первая позиция строки 266 равна одному и что в следующей серии две последовательные записи в направлении сканирования являются такими же, как и первая позиция строки 266.
[0183] Видеокодер 20 может кодировать один или несколько синтаксических элементов, указывающих, что следующая позиция строки 266 (то есть четвертая позиция слева направо) равна двум и что следующая последовательная запись в направлении сканирования является такой же, как четвертая позиция строки 266. Видеокодер 20 может кодировать один или несколько синтаксических элементов, указывающих, что следующая позиция строки 266 (то есть шестая позиция) равна трем и что в следующей серии пять последовательных записей в направлении сканирования являются такими же, как шестая позиция строки 266. Видеокодер 20 может кодировать один или несколько синтаксических элементов, указывающих, что следующая позиция в направлении сканирования (то есть четвертая позиция строки 268 справа налево) строки 268 равна одному и что в следующей серии девять последовательных записей в направлении сканирования являются такими же, как четвертая позиция строки 268.
[0184] Таким образом, с помощью зигзагообразного порядка сканирования, видеокодер 20 может кодировать серии большей длины, что может улучшить эффективность кодирования. Например, используя растровое сканирование, конечная серия строки 266 (для индексного значения 3) равна 2. Однако, используя зигзагообразное сканирование, конечная серия строки 266 продолжается на строке 268 и равна 5.
[0185] Видеодекодер 30 может принимать синтаксические элементы, описанные выше, и восстанавливать строки 266, 268 и 270. Например, видеодекодер 30 может получать, из кодированного битового потока, данные, указывающие индексное значение для позиции карты 240, кодируемой в текущее время. Видеодекодер 30 также может получать данные, указывающие количество последовательных позиций в порядке сканирования, имеющих то же самое индексное значение.
[0186] Фиг. 6 является блок-схемой последовательности операций, иллюстрирующей примерный процесс декодирования блока видеоданных с использованием режима палитры в соответствии с одним или несколькими методами настоящего раскрытия. Методы, иллюстрируемые на фиг. 6, могут выполняться видеодекодером, таким как видеодекодер 30, показанный на фиг. 1 и фиг. 3. В целях иллюстрации, методы, иллюстрируемые на фиг. 6, описаны в контексте видеодекодера 30, показанного на фиг. 1 и фиг. 3, хотя видеодекодеры, имеющие конфигурации, отличные от конфигурации видеодекодера 30, могут выполнять методы, иллюстрируемые на фиг. 6.
[0187] Как обсуждалось выше, может быть желательно максимизировать количество закодированных в режиме обхода бинов синтаксических элементов, которые сгруппированы вместе. В соответствии с одним или несколькими методами настоящего раскрытия, видеодекодер 30 может декодировать, из битового потока кодированного видео и используя режим обхода, группу синтаксических элементов для палитры для текущего блока видеоданных (602). Например, модуль 150 энтропийного декодирования видеодекодера 30 может декодировать, используя режим обхода, бины одного или нескольких синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре (например, одного или нескольких синтаксических элементов palette_predictor_run), синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются (например, синтаксического элемента num_signalled_palette_entries), одного или нескольких синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре (например, одного или нескольких синтаксических элементов palette_entry), синтаксического элемента, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода (например, синтаксического элемента palette_escape_val_present_flag), синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются или выводятся (например, синтаксического элемента num_palette_indices_idc), и одного или нескольких синтаксических элементов, которые указывают индексы в массиве записей текущей палитры (например, одного или нескольких синтаксических элементов palette_index_idc). В некоторых примерах, чтобы декодировать группу синтаксических элементов, кодированных в режиме обхода, видеодекодер 30 может последовательно декодировать синтаксические элементы, включенные в группу синтаксических элементов, без декодирования каких-либо бинов, кодированных не в режиме обхода. Как обсуждалось выше, группирование большого количества бинов/синтаксических элементов, кодированных в режиме обхода, может улучшить пропускную способность САВАС видеодекодера 30. В частности, группировка синтаксических элементов, кодированных в режиме обхода, может позволить видеодекодеру 30 избежать запуска/остановки/перезапуска механизма САВАС. В противоположность этому, когда синтаксические элементы, кодированные в режиме обхода, не сгруппированы, видеодекодеру 30 может потребоваться постоянно запускать механизм САВАС для декодирования бина, кодированного не в режиме обхода с первым контекстом, останавливать механизм САВАС для декодирования бина, кодированного в режиме обхода, запускать механизм САВАС, чтобы декодировать другой бин, кодированный не в режиме обхода с первым контекстом, и т.д. Как обсуждалось выше, повторное переключение механизма САВАС может снизить пропускную способность механизма САВАС.
[0188] Видеодекодер 30 может декодировать, используя САВАС с контекстом и в позиции в битовом потоке кодированного видео, которая находится после группы синтаксических элементов, синтаксический элемент, который указывает, применяется ли процесс транспонирования к палитре индексов палитры для текущего блока видеоданных (604). Например, модуль 150 энтропийного декодирования видеодекодера 30 может декодировать, используя САВАС с контекстом, бин синтаксического элемента palette_transpose_flag.
[0189] Видеодекодер 30 может декодировать, используя САВАС с контекстом и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, один или несколько синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных (606). Например, модуль 150 энтропийного декодирования видеодекодера 30 может декодировать, используя САВАС с одним или несколькими контекстами, бины синтаксического элемента, который указывает абсолютное значение разности между QP (например, QP яркости) для текущего блока видеоданных и предсказателем QP для текущего блока (например, cu_qp_delta_abs), синтаксического элемента, который указывает знак разности между QP для текущего блока видеоданных и предсказателем QP для текущего блока (например, cu_qp_delta_sign_flag), синтаксического элемента, который указывает, добавлены ли записи в одном или нескольких списках смещений к QP яркости для текущего блока, чтобы определять QP цветности для текущего блока (например, cu_chroma_qp_offset_flag), и синтаксического элемента, который указывает индекс записи в каждом из одного или нескольких списков смещений, которые добавлены к QP яркости для текущего блока, чтобы определить QP цветности для текущего блока (например, cu_chroma_qp_off set_idx).
[0190] В некоторых примерах, видеодекодер 30 может декодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, на основе значения синтаксического элемента группы синтаксических элементов, декодируемых с использованием режима обхода. В качестве одного примера, видеодекодер 30 может декодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, когда синтаксический элемент группы синтаксических элементов, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, указывает, что текущий блок видеоданных включает в себя по меньшей мере одну выборку выхода. В качестве еще одного примера, видеодекодер 30 может не декодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, когда синтаксический элемент группы синтаксических элементов, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, указывает, что текущий блок видеоданных не включает в себя по меньшей мере одну выборку выхода.
[0191] Видеодекодер 30 может генерировать палитру для текущего блока видеоданных на основе группы синтаксических элементов и синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных (608), и декодировать текущий блок видеоданных на основе сгенерированной палитры и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных (610). Например, модуль 165 декодирования на основе палитры может генерировать палитру, содержащую записи, указывающие пиксельные значения, принимать информацию, ассоциирующую по меньшей мере некоторые позиции текущего блока видеоданных с записями в палитре, выбирать пиксельные значения в палитре на основе информации и восстанавливать пиксельные значения блока на основе выбранных пиксельных значений.
[0192] Фиг. 7 является блок-схемой последовательности операций, иллюстрирующей примерный процесс кодирования блока видеоданных с использованием режима палитры в соответствии с одним или несколькими методами настоящего раскрытия. Методы, иллюстрируемые на фиг. 7, могут выполняться видеокодером, таким как видеокодер 20, показанный на фиг. 1 и фиг. 2. В целях иллюстрации, методы согласно фиг. 7 описаны в контексте видеокодера 20, показанного на фиг. 1 и фиг. 2, хотя видеокодеры, имеющие конфигурации, отличные от конфигураций видеокодера 20, могут выполнять методы, иллюстрируемые на фиг. 7.
[0193] Как обсуждалось выше, может быть желательным максимизировать количество кодируемых в режиме обхода бинов синтаксических элементов, которые сгруппированы вместе. В соответствии с одним или несколькими методами настоящего раскрытия, видеокодер 20 может кодировать, в битовом потоке кодированного видео и используя режим обхода, группу синтаксических элементов для палитры для текущего блока видеоданных (702). Например, модуль 118 энтропийного кодирования видеокодера 20 может кодировать, используя режим обхода, бины одного или нескольких синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказания повторно используемыми в текущей палитре (например, одного или нескольких синтаксических элементов palette_predictor_run), синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются (например, синтаксического элемента num_signalled_palette_entries), одного или нескольких синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре (например, одного или нескольких синтаксических элементов palette_entry), синтаксического элемента, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода (например, синтаксического элемента palette_escape_val_present_flag), синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются или выводятся (например, синтаксического элемента num_palette_indices_idc или num_palette_indices_minus1), и одного или нескольких синтаксических элементов, которые указывают индексы в массиве записей текущей палитры (например, одного или нескольких синтаксических элементов palette_index_idc).
[0194] Видеокодер 20 может кодировать, используя САВАС с контекстом и в позиции в битовом потоке кодированного видео, которая находится после группы синтаксических элементов, синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных (704). Например, модуль 118 энтропийного кодирования видеокодера 20 может кодировать, используя САВАС с контекстом, бин синтаксического элемента palette_transpose_flag.
[0195] Видеокодер 20 может кодировать, используя САВАС с контекстом и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, один или несколько синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных (706). Например, модуль 118 энтропийного кодирования видеокодера 20 может кодировать, используя САВАС с одним или несколькими контекстами, бины синтаксического элемента, который указывает абсолютное значение разности между QP яркости для текущего блока видеоданных и предсказателем QP яркости для текущего блока (например, cu_qp_delta_abs), синтаксического элемента, который указывает знак разности между QP яркости для текущего блока видеоданных и предсказателем QP яркости для текущего блока (например, cu_qp_delta_sign_flag), синтаксического элемента, который указывает, добавляются ли записи в один или несколько списков смещений к QP яркости для текущего блока для определения QP цветности для текущего блока (например, cu_chroma_qp_offset_flag), и синтаксического элемента, который указывает индекс записи в каждом из одного или нескольких списков смещений, которые добавлены к QP яркости для текущего блока, чтобы определять QP цветности для текущего блока (например, cu_chroma_qp_offset_idx).
[0196] В некоторых примерах, видеокодер 20 может кодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, на основе значения синтаксического элемента группы синтаксических элементов, закодированных с использованием режима обхода. В качестве одного примера, видеокодер 20 может кодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, когда синтаксический элемент группы синтаксических элементов, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, указывает, что текущий блок видеоданных включает в себя по меньшей мере одну выборку выхода. В качестве еще одного примера, видеокодер 20 может не кодировать один или несколько синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных, когда синтаксический элемент группы синтаксических элементов, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, указывает, что текущий блок видеоданных не включает в себя по меньшей мере одну выборку выхода.
[0197] Следует иметь в виду, что в зависимости от примера, некоторые действия или события любого из описанных здесь методов могут быть выполнены в другой последовательности, могут быть добавлены, объединены или вообще опущены (например, не все описанные действия или события необходимы для реализации этих методов). Более того, в некоторых примерах, действия или события могут выполняться одновременно, например, посредством обработки с несколькими потоками, обработки прерываний или нескольких процессоров, а не последовательно. Кроме того, хотя некоторые аспекты настоящего раскрытия описываются как выполняемые одним модулем или блоком для ясности, следует понимать, что методы настоящего раскрытия могут быть выполнены комбинацией блоков или модулей, ассоциированных с видеокодером.
[0198] Некоторые аспекты настоящего раскрытия были описаны в отношении разрабатываемого стандарта HEVC для целей иллюстрации. Однако способы, описанные в настоящем раскрытии, могут быть полезны для других процессов кодирования видео, включая другие, еще не разработанные стандартные или проприетарные процессы кодирования видео.
[0199] Методы, описанные выше, могут выполняться видеокодером 20 (фиг. 1 и 2) и/или видеодекодером 30 (фиг. 1 и 3), оба из которых могут, в общем, упоминаться как устройство кодирования видео. Аналогично, кодирование видео может относиться к кодированию видео или декодированию видео, как это применимо.
[0200] Хотя выше описаны конкретные комбинации различных аспектов методов, эти комбинации приведены только для иллюстрации примеров методов, описанных в настоящем раскрытии. Соответственно, методы настоящего раскрытия не должны ограничиваться этими примерными комбинациями и могут охватывать любую возможную комбинацию различных аспектов методов, описанных в настоящем раскрытии.
[0201] В одном или нескольких примерах, описанные функции могут быть реализованы в аппаратных средствах, программном обеспечении, встроенном программном обеспечении или любой их комбинации. При реализации в программном обеспечении, функции могут храниться или передаваться в виде одной или нескольких инструкций или кода на считываемом компьютером носителе и исполняться аппаратным процессором. Считываемые компьютером носители могут включать в себя считываемые компьютером носители хранения данных, которые соответствуют материальному носителю, такому как носители хранения данных, или среды связи, включая любую среду, которая облегчает перенос компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, считываемые компьютером носители, в общем, могут соответствовать (1) материальному считываемому компьютером носителю хранения данных, который является не-временным, или (2) среде связи, такой как сигнал или несущая волна. Носителями хранения данных могут быть любые доступные носители, к которым может получить доступ один или несколько компьютеров или один или несколько процессоров для извлечения инструкций, кода и/или структур данных для реализации методов, описанных в настоящем раскрытии. Компьютерный программный продукт может включать в себя считываемый компьютером носитель.
[0202] В качестве примера, а не ограничения, такие считываемые компьютером носители хранения данных могут содержать RAM, ROM, EEPROM, CD-ROM или другое хранилище на оптических дисках, хранилище на магнитных дисках или другие магнитные запоминающие устройства, флэш-память или любой другой носитель, который можно использовать для хранения желательного программного кода в виде инструкций или структур данных, и к которому может получать доступ компьютер. Кроме того, любое соединение может надлежащим образом определяться как считываемый компьютером носитель. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, волоконно-оптического кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасная, радио и микроволновая, то коаксиальный кабель, волоконно-оптический кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасная, радио и микроволновая, включаются в определение носителя. Однако следует понимать, что считываемые компьютером носители хранения и носители хранения данных не включают в себя соединения, несущие волны, сигналы или другие временные (переходные) носители, но вместо этого ориентированы на не-временные материальные носители хранения. Магнитный диск (disk) и оптический диск (disc), как используется здесь, включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой многофункциональный диск (DVD), гибкий диск и Blu-ray диск, где магнитные диски (disks) обычно воспроизводят данные магнитным способом, в то время как оптические диски (discs) воспроизводят данные оптически, с помощью лазеров. Комбинации вышеизложенного также должны быть включены в объем считываемых компьютером носителей.
[0203] Инструкции могут исполняться одним или несколькими процессорами, такими как один или несколько процессоров цифровых сигналов (DSP), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые вентильные матрицы (FPGA) или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин "процессор", используемый здесь, может относиться к любой из вышеперечисленных структур или любой другой структуре, подходящей для реализации описанных здесь методов. Кроме того, в некоторых аспектах, функциональность, описанная здесь, может быть предоставлена в рамках специализированных аппаратных средств и/или программных модулей, сконфигурированных для кодирования и декодирования или интегрированных в объединенный кодек. Кроме того, методы могут быть полностью реализованы в одной или нескольких схемах или логических элементах.
[0204] Методы настоящего раскрытия могут быть реализованы в самых разных приборах или устройствах, включая беспроводную трубку, интегральную схему (IC) или набор IC (например, чипсет). Различные компоненты, модули или блоки описаны в настоящем раскрытии, чтобы подчеркнуть функциональные аспекты устройств, сконфигурированных для выполнения раскрытых методов, но не обязательно требуют реализации различными аппаратными модулями. Скорее, как описано выше, различные модули могут быть объединены в аппаратный модуль кодека или обеспечены набором взаимодействующих аппаратных модулей, включая один или несколько процессоров, как описано выше, в сочетании с подходящим программным обеспечением и/или встроенным программным обеспечением.
[0205] Выше были описаны различные примеры. Эти и другие примеры находятся в пределах объема следующей формулы изобретения.
Данное раскрытие относится к кодированию и декодированию видео. Технический результат заключается в улучшении эффективности кодирования экранного контента. Способ кодирования видеоданных включает в себя кодирование из битового потока кодированного видео, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры; декодирование из битового потока кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных одного или нескольких синтаксических элементов, относящихся к параметру квантования (QP) дельты и/или смещениям QP цветности для текущего блока видеоданных; и декодирование текущего блока видеоданных на основе палитры для текущего блока видеоданных и одного или нескольких синтаксических элементов, относящихся к QP дельты и/или смещениям QP цветности для текущего блока видеоданных. 5 н. и 19 з.п. ф-лы, 7 ил., 7 табл.
1. Способ декодирования видеоданных, причем способ содержит:
декодирование, из битового потока кодированного видео и с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных;
декодирование, из битового потока кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, и с использованием САВАС с контекстом, одного или нескольких синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных;
декодирование, из битового потока кодированного видео, группы синтаксических элементов с использованием режима обхода, причем группа содержит:
один или несколько синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре,
синтаксический элемент, который указывает количество записей в текущей палитре, которые явно сигнализируются,
один или несколько синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре,
синтаксический элемент, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода,
синтаксический элемент, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, и
один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры; и
декодирование текущего блока видеоданных на основе палитры для текущего блока видеоданных, группы синтаксических элементов и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
2. Способ по п. 1, в котором синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры текущего блока видеоданных, содержит синтаксический элемент palette_transpose_flag.
3. Способ по п. 1, в котором один или несколько синтаксических элементов, относящихся к дельта-QP, содержат один или оба из синтаксического элемента, который указывает абсолютное значение разности между QP текущего блока и предсказателем QP текущего блока, и синтаксического элемента, который указывает знак разности между QP текущего блока и предсказателем QP текущего блока.
4. Способ по п. 1, в котором один или несколько синтаксических элементов, относящихся к смещениям QP цветности, содержат один или оба из синтаксического элемента, который указывает, добавлены ли записи в одном или нескольких списках смещений к QP яркости текущего блока для определения QP цветности для текущего блока, и синтаксического элемента, который указывает индекс записи в каждом из одного или нескольких списков смещений, которые добавлены к QP яркости для текущего блока для определения QP цветности для текущего блока.
5. Способ по п. 1, в котором один или несколько из:
одного или нескольких синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре, содержат один или несколько синтаксических элементов palette_predictor_run,
синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются, содержит синтаксический элемент num_signalled_palette_entries,
одного или нескольких синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре, содержат один или несколько синтаксических элементов palette_entry,
синтаксического элемента, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, содержит palette_escape_val_present_flag,
синтаксического элемента, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, содержит синтаксический элемент num_palette_indices_idc, и
одного или нескольких синтаксических элементов, которые указывают индексы в массиве записей текущей палитры, содержат один или несколько синтаксических элементов palette_index_idc.
6. Способ по п. 1, в котором декодирование группы синтаксических элементов содержит декодирование группы синтаксических элементов из битового потока кодированного видео в позиции в битовом потоке кодированного видео, которая находится перед синтаксическим элементом, который указывает, применяется ли процесс транспонирования к индексам палитры текущего блока видеоданных.
7. Способ по п. 1, дополнительно содержащий:
декодирование, из битового потока кодированного видео после группы синтаксических элементов, кодируемых с использованием режима обхода, синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных.
8. Способ по п. 7, в котором декодирование синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных, содержит декодирование синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных, с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом.
9. Способ кодирования видеоданных, причем способ содержит:
кодирование, в битовом потоке кодированного видео и с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных;
кодирование, в битовом потоке кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, и с использованием САВАС с контекстом, одного или нескольких синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных;
кодирование, в битовом потоке кодированного видео, группы синтаксических элементов с использованием режима обхода, причем группа содержит:
один или несколько синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре,
синтаксический элемент, который указывает количество записей в текущей палитре, которые явно сигнализируются,
один или несколько синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре,
синтаксический элемент, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода,
синтаксический элемент, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, и
один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры; и
кодирование текущего блока видеоданных на основе палитры для текущего блока видеоданных, группы синтаксических элементов и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
10. Способ по п. 9, в котором синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры текущего блока видеоданных, содержит синтаксический элемент palette_transpose_flag.
11. Способ по п. 9, в котором один или несколько синтаксических элементов, относящихся к дельта-QP, содержат один или оба из синтаксического элемента, который указывает абсолютное значение разности между QP текущего блока и предсказателем QP текущего блока, и синтаксического элемента, который указывает знак разности между QP текущего блока и предсказателем QP текущего блока.
12. Способ по п. 9, в котором один или несколько синтаксических элементов, относящихся к смещениям QP цветности, содержат один или оба из синтаксического элемента, который указывает, добавлены ли записи в один или несколько списков смещений к QP яркости текущего блока для определения QP цветности для текущего блока, и синтаксического элемента, который указывает индекс записи в каждом из одного или нескольких списков смещений, которые добавлены к QP яркости для текущего блока для определения QP цветности для текущего блока.
13. Способ по п. 9, в котором один или несколько из:
одного или нескольких синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре, содержат один или несколько синтаксических элементов palette_predictor_run,
синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются, содержит синтаксический элемент num_signalled_palette_entries,
одного или нескольких синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре, содержат один или несколько синтаксических элементов palette_entry,
синтаксического элемента, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, содержит palette_escape_val_present_flag,
синтаксического элемента, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, содержит синтаксический элемент num_palette_indices_minus1, и
одного или нескольких синтаксических элементов, которые указывают индексы в массиве записей текущей палитры, содержат один или несколько синтаксических элементов palette_index_idc.
14. Способ по п. 9, в котором кодирование группы синтаксических элементов содержит кодирование группы синтаксических элементов в битовом потоке кодированного видео в позиции в битовом потоке кодированного видео, которая находится перед синтаксическим элементом, который указывает, применяется ли процесс транспонирования к индексам палитры текущего блока видеоданных.
15. Способ по п. 9, дополнительно содержащий:
кодирование, в битовом потоке кодированного видео после группы синтаксических элементов, кодируемых с использованием режима обхода, синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных.
16. Способ по п. 15, в котором кодирование синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных, содержит кодирование синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных, с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом.
17. Устройство для кодирования или декодирования видеоданных, причем устройство содержит:
память, сконфигурированную, чтобы хранить видеоданные;
один или несколько процессоров, сконфигурированных, чтобы:
кодировать или декодировать, в битовом потоке кодированного видео и с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом, синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных;
кодировать или декодировать, в битовом потоке кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, и с использованием САВАС с контекстом, один или несколько синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных;
кодировать или декодировать, в битовом потоке кодированного видео, группу синтаксических элементов с использованием режима обхода, причем группа содержит:
один или несколько синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре,
синтаксический элемент, который указывает количество записей в текущей палитре, которые явно сигнализируются,
один или несколько синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре,
синтаксический элемент, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода,
синтаксический элемент, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, и
один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры; и
кодировать или декодировать текущий блок видеоданных на основе палитры для текущего блока видеоданных, группы синтаксических элементов и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
18. Устройство по п. 17, в котором синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры текущего блока видеоданных, содержит синтаксический элемент palette_transpose_flag.
19. Устройство по п. 17, в котором один или несколько из:
одного или нескольких синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре, содержат один или несколько синтаксических элементов palette_predictor_run,
синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются, содержит синтаксический элемент num_signalled_palette_entries,
одного или нескольких синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре, содержат один или несколько синтаксических элементов palette_entry,
синтаксического элемента, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода, содержит palette_escape_val_present_flag,
синтаксического элемента, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, содержит синтаксический элемент num_palette_indices_minus1, и
одного или нескольких синтаксических элементов, которые указывают индексы в массиве записей текущей палитры, содержат один или несколько синтаксических элементов palette_index_idc.
20. Устройство по п. 17, в котором, для кодирования или декодирования группы синтаксических элементов, один или несколько процессоров сконфигурированы, чтобы кодировать или декодировать группу синтаксических элементов в битовом потоке кодированного видео в позиции в битовом потоке кодированного видео, которая находится перед синтаксическим элементом, который указывает, применяется ли процесс транспонирования к индексам палитры текущего блока видеоданных.
21. Устройство по п. 17, в котором один или несколько процессоров дополнительно сконфигурированы, чтобы:
кодировать или декодировать, в битовом потоке кодированного видео после группы синтаксических элементов, кодируемых с использованием режима обхода, синтаксический элемент, который указывает последнее появление флага типа серии в текущем блоке видеоданных.
22. Устройство по п. 21, в котором, для кодирования или декодирования синтаксического элемента, который указывает последнее появление флага типа серии в текущем блоке видеоданных, один или несколько процессоров сконфигурированы, чтобы кодировать или декодировать синтаксический элемент, который указывает последнее появление флага типа серии в текущем блоке видеоданных, с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом.
23. Устройство для декодирования видеоданных, причем устройство содержит:
средство для декодирования, из битового потока кодированного видео и с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом, синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных;
средство для декодирования, из битового потока кодированного видео и в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, и с использованием САВАС с контекстом, одного или нескольких синтаксических элементов, относящихся к дельта-параметру квантования (QP) и/или смещениям QP цветности для текущего блока видеоданных;
средство для декодирования, из битового потока кодированного видео, группы синтаксических элементов с использованием режима обхода, причем группа содержит:
один или несколько синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре,
синтаксический элемент, который указывает количество записей в текущей палитре, которые явно сигнализируются,
один или несколько синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре,
синтаксический элемент, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода,
синтаксический элемент, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, и
один или несколько синтаксических элементов, которые указывают индексы в массиве записей текущей палитры; и
средство для декодирования текущего блока видеоданных на основе палитры для текущего блока видеоданных, группы синтаксических элементов и одного или нескольких синтаксических элементов, относящихся к дельта-QP и/или смещениям QP цветности для текущего блока видеоданных.
24. Считываемый компьютером носитель данных, хранящий по меньшей мере часть битового потока кодированного видео, который, при обработке устройством декодирования видео, побуждает один или несколько процессоров устройства декодирования видео:
определять, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных;
генерировать палитру для текущего блока видеоданных на основе:
одного или нескольких синтаксических элементов, которые указывают количество нулей, которые предшествуют ненулевой записи в массиве, который указывает, являются ли записи из палитры предсказателя повторно используемыми в текущей палитре,
синтаксического элемента, который указывает количество записей в текущей палитре, которые явно сигнализируются,
одного или нескольких синтаксических элементов, которые указывают, каждый, значение компонента в записи в текущей палитре,
синтаксического элемента, который указывает, включает ли в себя текущий блок видеоданных по меньшей мере одну кодированную выборку выхода,
синтаксического элемента, который указывает количество индексов в текущей палитре, которые явно сигнализируются или выводятся, и
одного или нескольких синтаксических элементов, которые указывают индексы в массиве записей текущей палитры; и
декодировать текущий блок видеоданных на основе палитры для текущего блока видеоданных и дельта-параметра квантования (QP) и одного или нескольких смещений QP цветности для текущего блока видеоданных,
при этом один или несколько синтаксических элементов, относящихся к дельта-QP, и один или несколько синтаксических элементов, относящихся к одному или нескольким смещениям QP цветности для текущего блока видеоданных, расположены в позиции в битовом потоке кодированного видео, которая находится после синтаксического элемента, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, причем синтаксический элемент, который указывает, применяется ли процесс транспонирования к индексам палитры для палитры для текущего блока видеоданных, декодируется с использованием контекстно-адаптивного двоичного арифметического кодирования (САВАС) с контекстом, причем по меньшей мере один из одного или нескольких синтаксических элементов, относящихся к дельта-QP, и одного или нескольких синтаксических элементов, относящихся к одному или нескольким смещениям QP цветности, декодируется с использованием САВАС с контекстом, и причем группа синтаксических элементов декодируется с использованием режима обхода.
WO2015006724 A3, 26.03.2015 | |||
US2014301475 A1, 09.10.2014 | |||
US2014185665 A1, 03.07.2014 | |||
CN104104951 A, 15.10.2014. |
Авторы
Даты
2019-11-21—Публикация
2016-06-09—Подача