ВЫВОД ПОЗИЦИИ В ПОРЯДКЕ СКАНИРОВАНИЯ ПОСЛЕДНЕГО ЗНАЧИМОГО КОЭФФИЦИЕНТА ПРЕОБРАЗОВАНИЯ ПРИ КОДИРОВАНИИ ВИДЕОСИГНАЛА Российский патент 2016 года по МПК H04N19/129 

Описание патента на изобретение RU2576590C2

[0001] Данная заявка испрашивает приоритет предварительной патентной заявки США № 61/502269, поданной 28 июня 2011 г., предварительной патентной заявки США № 61/503529, поданной 30 июня 2011 г., предварительной патентной заявки США № 61/550775, поданной 24 октября 2011 г., и предварительной патентной заявки США № 61/550784, поданной 24 октября 2011 г., содержание которых в полном объеме, таким образом, включено в настоящее описание изобретения посредством ссылки.

ОБЛАСТЬ ТЕХНИКИ

[0002] Это раскрытие относится к методам кодирования и декодирования видеоданных. В частности, это раскрытие относится к сигнализации позиций значимых коэффициентов преобразования, которые представляют информацию в видеоданных.

УРОВЕНЬ ТЕХНИКИ

[0003] Возможности обработки цифрового видеосигнала могут быть внедрены в разнообразные устройства, включая цифровые телевизоры, системы прямого цифрового вещания, беспроводные широковещательные системы, карманные персональные компьютеры (КПК), портативные или настольные компьютеры, цифровые камеры, цифровые устройства записи, цифровые медиапроигрыватели, устройства для видеоигр, консоли для видеоигр, сотовые или спутниковые радиотелефоны, устройства видеоконференцсвязи и пр. Устройства обработки цифрового видеосигнала реализуют методы сжатия видеосигнала, например, описанные в стандартах, заданных в MPEG-2, MPEG-4, ITU-T H.263 или ITU-T H.264/MPEG-4, Part 10, Advanced Video Coding (AVC), и расширениях таких стандартов, для более эффективной передачи и приема информации цифрового видеосигнала.

[0004] Методы сжатия видеосигнала осуществляют пространственное прогнозирование и/или временное прогнозирование для снижения или устранения избыточности, присущей видеопоследовательностям. Для кодирования видеосигнала на основе блоков, кадр или срез видео может делиться на блоки. Каждый блок может быть дополнительно разделен. Блоки во внутренне кодированном (I) кадре или срезе кодируются с использованием пространственного прогнозирования относительно соседних блоков. Блоки во внешне кодированном (P или B) кадре или срезе могут использовать пространственное прогнозирование относительно соседних блоков в одном и том же кадре или срезе или временное прогнозирование относительно других опорных кадров.

СУЩНОСТЬ ИЗОБРЕТЕНИЯ

[0005] Это раскрытие относится, в целом, к методам сигнализации позиции последнего значимого коэффициента (LSC) в блоке коэффициентов преобразования при выполнении кодирования видеосигнала. Например, методы предусматривают видеодекодер, который принимает индикатор LSC на основе блоков для LSC блока коэффициентов преобразования. Индикатор LSC на основе блоков указывает координаты LSC при сканировании блока согласно порядку сканирования. Видеодекодер преобразует индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования. Затем видеодекодер может использовать индикатор LSC на основе сканирования для декодирования карты значимости.

[0006] В одном примере это раскрытие описывает способ декодирования видеоданных. Способ содержит преобразование индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования. Индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования. Способ также содержит декодирование на основании индикатора LSC на основе сканирования карты значимости для блока.

[0007] В другом примере это раскрытие описывает устройство декодирования видеосигнала, содержащее один или более процессоров, выполненных с возможностью преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования. Индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования. Один или более процессоров также выполнены с возможностью декодирования на основании индикатора LSC на основе сканирования карты значимости для блока.

[0008] В другом примере это раскрытие описывает устройство декодирования видеосигнала, содержащее средство для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования. Индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования. Устройство декодирования видеосигнала также содержит средство для декодирования на основании индикатора LSC на основе сканирования карты значимости для блока.

[0009] В другом примере это раскрытие описывает компьютерный программный продукт, который содержит машиночитаемый носитель данных, на котором хранятся инструкции, предписывающие одному или более процессорам преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования. Индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования. Инструкции также предписывают одному или более процессорам декодировать на основании индикатора LSC на основе сканирования карту значимости для блока.

[0010] Детали одного или более аспектов раскрытия представлены в прилагаемых чертежах и нижеприведенном описании. Другие признаки, задачи и преимущества методов, описанных в этом раскрытии, будут очевидны из описания и чертежей, а также из формулы изобретения.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

[0011] Фиг. 1 - блок-схема, которая иллюстрирует пример системы кодирования видеосигнала.

[0012] Фиг. 2 - принципиальная схема, которая иллюстрирует пример блока коэффициентов преобразования.

[0013] Фиг. 3 - принципиальная схема, которая иллюстрирует примеры порядков сканирования.

[0014] Фиг. 4 - принципиальная схема, которая иллюстрирует двухмерное представление примера карты значимости для блока коэффициентов преобразования, показанного на фиг. 2.

[0015] Фиг. 5 - блок-схема, которая иллюстрирует пример конфигурации видеокодера.

[0016] фиг. 6 - блок-схема, которая иллюстрирует пример конфигурации видеодекодера.

[0017] Фиг. 7 - блок-схема алгоритма, которая иллюстрирует пример операции, осуществляемой видеокодером.

[0018] Фиг. 8 - блок-схема алгоритма, которая иллюстрирует пример операции для декодирования блока коэффициентов преобразования.

[0019] Фиг. 9 - блок-схема алгоритма, которая иллюстрирует пример неитерационной операции для преобразования индикатора последнего значимого коэффициента (LSC) на основе блоков в индикатор LSC на основе сканирования.

[0020] Фиг. 10 - блок-схема алгоритма, которая иллюстрирует другой пример неитерационной операции для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования.

[0021] Фиг. 11 - блок-схема алгоритма, которая иллюстрирует пример операции для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования, в которой осуществляется обращение к структуре данных карты.

[0022] Фиг. 12 - блок-схема алгоритма, которая иллюстрирует пример итерационной операции для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования.

[0023] Фиг. 13 - принципиальная схема блока коэффициентов преобразования, демонстрирующая последний значимый коэффициент преобразования.

ПОДРОБНОЕ ОПИСАНИЕ

[0024] Прилагаемые чертежи иллюстрируют примеры. Элементы, указанные ссылочными позициями в прилагаемых чертежах, соответствуют элементам, указанным сходными ссылочными позициями в нижеследующем описании. В этом раскрытии элементы, наименования которых начинаются с порядковых числительных (например, “первый”, “второй”, “третий”, и т.д.), не обязаны следовать в определенном порядке. Напротив, такие порядковые числительные используются лишь для обозначения разных элементов одинакового или аналогичного типа.

[0025] Как описано ниже, видеокодер может генерировать блоки коэффициентов преобразования. Каждый из блоков коэффициентов преобразования может представлять собой двухмерный массив коэффициентов преобразования. После того как видеокодер генерирует блок коэффициентов преобразования, видеокодер может идентифицировать последний значимый коэффициент (LSC) блока коэффициентов преобразования согласно порядку сканирования. Другими словами, когда коэффициенты преобразования блока коэффициентов преобразования упорядочены согласно порядку сканирования, LSC блока коэффициентов преобразования является последним ненулевым коэффициентом преобразования. Порядок сканирования может начинаться с коэффициента преобразования DC (т.е. верхнего левого коэффициента преобразования) блока коэффициентов преобразования.

[0026] Видеокодер может выводить индикатор LSC на основе сканирования, который указывает порядковую позицию LSC согласно порядку сканирования. Другими словами, видеокодер может выводить индикатор LSC на основе сканирования, который указывает, что LSC является n-м коэффициентом преобразования, когда коэффициенты преобразования упорядочены согласно порядку сканирования.

[0027] В некоторых традиционных видеокодерах видеокодер может осуществлять несколько проходов кодирования на блоке коэффициентов преобразования. При выполнении каждого из проходов кодирования видеокодер может обрабатывать коэффициенты преобразования блока коэффициентов преобразования согласно порядку сканирования. При выполнении каждого из проходов кодирования видеокодер кодирует информацию о коэффициентах преобразования.

[0028] При выполнении одного из проходов кодирования видеокодер генерирует карту значимости. Карта значимости включает в себя несколько флагов значимости, которые указывают, являются ли коэффициенты преобразования в блоке коэффициентов преобразования значимыми (т.е. ненулевыми). Для генерации карты значимости видеокодер может обрабатывать каждый из коэффициентов преобразования согласно порядку сканирования. Когда видеокодер обрабатывает коэффициент преобразования, видеокодер может определять, встречается ли порядковая позиция коэффициента преобразования до порядковой позиции LSC согласно порядку сканирования. Если да, видеокодер может генерировать флаг значимости для коэффициента преобразования. Флаг значимости может иметь значение “1”, если значение коэффициента преобразования отлично от нуля. Флаг значимости может иметь значение “0”, если значение коэффициента преобразования равно нулю. Если же порядковая позиция коэффициента преобразования не встречается до порядковой позиции LSC согласно порядку сканирования, видеокодер не генерирует флаг значимости для коэффициента преобразования.

[0029] Видеодекодер может принимать индикатор LSC на основе сканирования и карту значимости блока коэффициентов преобразования. Затем видеодекодер может определять на основании индикатора LSC на основе сканирования, включает ли в себя карта значимости флаги значимости для конкретных коэффициентов преобразования блока коэффициентов преобразования. Если видеокодер не генерирует флаг значимости для коэффициента преобразования, видеодекодер может придти к выводу, что коэффициент преобразования не является значимым.

[0030] В ряде случаев видеокодер может генерировать индикатор LSC на основе блоков, который указывает координаты в блоке коэффициентов преобразования LSC. Затем видеокодер может кодировать методом CABAC индикатор LSC на основе блоков. Вследствие статистических соотношений между координатами x и y может потребоваться меньше битов для указания позиции LSC с использованием индикатора LSC на основе блоков, чем для указания позиции LSC в отношении порядковой позиции LSC.

[0031] Кроме того, в ряде случаев может потребоваться меньше битов для представления карты значимости, когда видеокодер использует обратный порядок сканирования для генерации карты значимости, чем когда видеокодер использует порядок сканирования для генерации карты значимости. Если же видеокодер генерирует индикатор LSC на основе блоков и если видеокодер использует обратный порядок сканирования для генерации карты значимости, видеодекодер может быть неспособен определять на основании индикатора LSC на основе блоков, встречается ли порядковая позиция коэффициента преобразования до порядковой позиции LSC блока коэффициентов преобразования. Следовательно, видеодекодер может быть неспособен определять на основании индикатора LSC на основе блоков, включает ли в себя карта значимости флаги значимости для конкретных коэффициентов преобразования.

[0032] Для решения этой проблемы видеодекодер может в соответствии с методами этого раскрытия осуществлять операцию преобразования, которая преобразует индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Индикатор LSC на основе сканирования может указывать порядковую позицию LSC согласно порядку сканирования. Затем видеодекодер может декодировать на основании индикатора LSC на основе сканирования карту значимости для блока.

[0033] Как описано здесь, видеодекодер может по-разному преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Например, видеодекодер может осуществлять неитерационный алгоритм для вывода индикатора LSC на основе сканирования из индикатора LSC на основе блоков. В другом примере видеодекодер может преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования, по меньшей мере частично, посредством обращения к структуре данных, которая отображает индикаторы LSC на основе блоков в индикаторы LSC на основе сканирования. В еще одном примере видеодекодер может осуществлять циклическую операцию, которая сканирует по позициям в блоке коэффициентов преобразования согласно порядку сканирования, пока не будет достигнута позиция, имеющая координаты индикатора LSC на основе блоков. В этом примере видеодекодер может увеличивать индикатор LSC на основе сканирования для каждой позиции блока коэффициентов преобразования до позиции, имеющей координаты.

[0034] На фиг. 1 показана блок-схема, которая иллюстрирует пример системы 10 кодирования видеосигнала, которая может использовать методы, описанные в этом раскрытии. В этом раскрытии термин “кодирование видеосигнала” может означать кодирование видеосигнала и декодирование видеосигнала. Как показано на фиг. 1, система 10 кодирования видеосигнала включает в себя исходное устройство 12 и устройство 14 назначения. Исходное устройство 12 генерирует кодированные видеоданные. Устройство 14 назначения может декодировать кодированные видеоданные в более позднее время. Исходное устройство 12 и устройство 14 назначения могут содержать любое из разнообразных устройств, включая настольные компьютеры, компьютеры-ноутбуки (т.е. портативные компьютеры), планшетные компьютеры, телевизионные приставки, мобильные телефоны, телефонные трубки, “умные” панели, телевизоры, камеры, устройства отображения, цифровые медиапроигрыватели, консоли для видеоигр, устройства потоковой передачи видеосигнала или типы вычислительных устройств, способные кодировать и декодировать видеоданные.

[0035] Устройство 14 назначения может принимать кодированные видеоданные по каналу 16. Канал 16 может содержать среду или устройство, способное переносить кодированные видеоданные от исходного устройства 12 на устройство 14 назначения. В одном примере канал 16 может содержать среду связи, которая позволяет исходному устройству 12 передавать кодированные видеоданные непосредственно на устройство 14 назначения в реальном времени. Исходное устройство 12 или другое устройство может модулировать кодированные видеоданные согласно стандарту связи, например протоколу беспроводной связи. Среда связи может содержать любую среду беспроводной или проводной связи, например радиочастотный (РЧ) спектр или одну или более физических линий передачи. Канал 16 может составлять часть сети с коммутацией пакетов, например локальной сети, широкомасштабной сети или глобальной сети, например интернета. Канал 16 может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезно для облегчения передачи кодированных видеоданных от исходного устройства 12 на устройство 14 назначения.

[0036] В некоторых примерах исходное устройство 12 и устройство 14 назначения могут быть приспособлены для беспроводной связи. Однако методы этого раскрытия не обязательно ограничиваются беспроводными приложениями или настройками. Напротив, методы могут применяться к кодированию видеосигнала при поддержке любого из различных мультимедийных приложений, например, эфирных телевизионных программ, кабельных телевизионных передач, спутниковых телевизионных передач, потоковых передач видеосигнала, например, через интернет, кодирования цифрового видеосигнала для сохранения на носителе данных, декодирования цифрового видеосигнала, хранящегося на носителе данных, или других приложений. В некоторых примерах исходное устройство 12 и устройство 14 назначения могут быть выполнены с возможностью поддерживать одностороннюю или двустороннюю передачу видеосигнала для поддержки приложений, например потоковой передачи видеосигнала, воспроизведения видеосигнала, вещания видеосигнала и/или видеотелефонии.

[0037] Кроме того, в некоторых примерах исходное устройство 12 может выводить кодированные видеоданные в систему 34 хранения. Аналогично устройство 14 назначения может обращаться к кодированным видеоданным, хранящимся в системе 34 хранения. В различных примерах система 34 хранения может включать в себя различные распределенные или локально доступные носители данных. Примеры типов носителей данных включают в себя, но без ограничения, жесткие диски, диски Blu-ray, DVD, CD-ROM, твердотельные блоки памяти, энергозависимую или энергонезависимую память или другие цифровые носители данных, пригодные для хранения кодированных видеоданных.

[0038] В некоторых примерах система 34 хранения может содержать файловый сервер или другое промежуточное запоминающее устройство, где может храниться кодированный видеосигнал, генерируемый исходным устройством 12. Устройство 14 назначения может обращаться к сохраненным видеоданным из системы 34 хранения посредством потоковой передачи или загрузки. Файловый сервер может быть сервером любого типа, способным сохранять кодированные видеоданные и передавать эти кодированные видеоданные на устройство 14 назначения. Примеры файловых серверов включают в себя веб-сервер (например, для веб-сайта), FTP-сервер, устройства хранения данных, подключаемые к сети (NAS), или локальный дисковод. Устройство 14 назначения может обращаться к кодированным видеоданным через любое стандартное соединение для передачи данных, включая интернет-соединение. Это может быть беспроводной канал (например, соединение Wi-Fi), проводное соединение (например, DSL, кабельный модем и т.д.), или их комбинация, пригодная для осуществления доступа к кодированным видеоданным, хранящимся на файловом сервере. Передача кодированных видеоданных из системы 34 хранения может представлять собой потоковую передачу, загрузочную передачу или их комбинацию.

[0039] В примере, показанном на фиг. 1, исходное устройство 12 включает в себя источник 18 видеосигнала, видеокодер 20 и интерфейс 22 вывода. В некоторых примерах интерфейс 22 вывода также может включать в себя модулятор/демодулятор (модем) и/или передатчик. Источник 18 видеосигнала подает видеоданные на видеокодер 20. В различных примерах источник 18 видеосигнала может содержать различные типы устройств и/или систем для обеспечения видеоданных. Например, источник 18 видеосигнала может содержать устройство захвата видео, например видеокамеру. В другом примере источник 18 видеосигнала может содержать архив видеозаписей, который содержит ранее захваченное видео. В еще одном примере источник 18 видеосигнала может содержать интерфейс подачи видеосигнала, который принимает видеосигнал от поставщика видеоконтента. В еще одном примере источник 18 видеосигнала может содержать систему компьютерной графики для генерации данных компьютерной графики.

[0040] Как подробно описано ниже, видеокодер 20 может кодировать видеоданные, обеспеченные источником 18 видеосигнала. В некоторых примерах исходное устройство 12 может передавать кодированные видеоданные непосредственно на устройство 14 назначения через интерфейс 22 вывода. Кроме того, в некоторых примерах система 34 хранения может сохранять кодированные видеоданные для последующего доступа со стороны устройства 14 назначения или других устройств.

[0041] Это раскрытие может, в целом, относиться к видеокодеру 20, “сигнализирующему” определенную информацию на другое устройство, например видеодекодер 30. Однако следует понимать, что видеокодер 20 может сигнализировать информацию, связывая определенные элементы синтаксиса с различными кодированными участками видеоданных. Таким образом, видеокодер 20 может “сигнализировать” данные, сохраняя определенные элементы синтаксиса в заголовках различных кодированных участков видеоданных. В ряде случаев такие элементы синтаксиса можно кодировать и сохранять (например, сохранять в системе 34 хранения) до приема и декодирования видеодекодером 30. Таким образом, термин “сигнализация” может, в целом, относиться к передаче синтаксиса или других данных, используемых для декодирования сжатых видеоданных. Такая передача может происходить в реальном или почти реальном времени. Альтернативно такая передача может происходить в течение промежутка времени, например может происходить при сохранении элементов синтаксиса на носитель во время кодирования, которые затем могут извлекаться устройством декодирования в любой момент после сохранения на этот носитель.

[0042] В примере, показанном на фиг. 1, устройство 14 назначения включает в себя входной интерфейс 28, видеодекодер 30 и устройство 32 отображения. В некоторых примерах входной интерфейс 28 может включать в себя приемник и/или модем. Входной интерфейс 28 устройства 14 назначения принимает кодированные видеоданные из канала 16 и/или системы 34 хранения. Видеодекодер 30 декодирует кодированные видеоданные, принятые входным интерфейсом 28. Устройство 14 назначения может визуализировать декодированные видеоданные для отображения на устройстве 32 отображения.

[0043] Устройство 32 отображения может быть объединено с устройством 14 назначения или может быть внешним по отношению к нему. В некоторых примерах устройство 14 назначения может включать в себя интегрированное устройство отображения и также может быть выполнено с возможностью сопряжения с внешним устройством отображения. В различных примерах устройство 32 отображения может содержать различные типы устройств отображения. Например, устройство 32 отображения может содержать жидкокристаллический дисплей (LCD), плазменный дисплей, органо-светодиодный (OLED) дисплей или другой тип устройства отображения.

[0044] Хотя это не показано на фиг. 1, в некоторых аспектах видеокодер 20 и видеодекодер 30 может быть объединен с соответствующим аудиокодером и декодером и может включать в себя необходимые блоки мультиплексирования/демультиплексирования или другое оборудование и программное обеспечение, для осуществления кодирования аудио- и видеосигналов в общем потоке данных или отдельных потоках данных. Если применимо, в некоторых примерах блоки мультиплексирования/демультиплексирования могут отвечать протоколу мультиплексора ITU H.223 или другим протоколам, например протоколу пользовательских дейтаграмм (UDP).

[0045] Видеокодер 20 и видеодекодер 30 можно реализовать в виде любой из различных пригодных схем, например, одного или более микропроцессоров, цифровых сигнальных процессоров (DSP), специализированных интегральных схем (ASIC), вентильных матриц, программируемых пользователем (FPGA), дискретной логики, программного обеспечения, аппаратного обеспечения, программно-аппаратного обеспечения или любых их комбинаций. Когда методы реализуются частично в программном обеспечении, устройство может сохранять инструкции для программного обеспечения в пригодном неизменяемом машиночитаемом носителе и выполнять инструкции аппаратными средствами с использованием одного или более процессоров для осуществления методов этого раскрытия. Каждый из видеокодера 20 и видеодекодера 30 может входить в состав одного или более кодеров или декодеров, любой из которых может входить в состав объединенного кодера/декодера (кодека) в соответствующем устройстве.

[0046] Видеокодер 20 и видеодекодер 30 могут действовать согласно стандарту сжатия видеосигнала, например стандарту High Efficiency Video Coding (HEVC), в настоящее время находящемуся в разработке, и могут отвечать HEVC Test Model (HM). Альтернативно видеокодер 20 и видеодекодер 30 могут действовать согласно другим собственным или промышленным стандартам, например стандарту ITU-T H.264, альтернативно именуемому MPEG 4, Part 10, Advanced Video Coding (AVC) или расширениям таких стандартов. Примеры расширений стандартов включают в себя расширения стандарта H.264/AVC scalable video coding (SVC) и Multiview Video Coding (MVC). Методы этого раскрытия не ограничиваются никаким конкретным стандартом кодирования. Другие примеры стандартов сжатия видеосигнала включают в себя MPEG-2 и ITU-T H.263.

[0047] Как кратко упомянуто выше, видеокодер 20 кодирует видеоданные. Видеоданные могут содержать одну или более последовательностей изображений. Каждое из изображений является неподвижным изображением. В ряде случаев изображение может именоваться “кадром”. Когда видеокодер 20 кодирует видеоданные, видеокодер 20 может генерировать битовый поток. Битовый поток включает в себя последовательность битов, которые образуют представление кодированных изображений и соответствующих данных. Кодированное изображение является кодированным представлением изображения.

[0048] Для генерации битового потока видеокодер 20 может осуществлять операцию кодирования для последовательностей изображений в видеоданных. Когда видеокодер 20 осуществляет операцию кодирования для последовательности изображений, видеокодер 20 может генерировать несколько кодированных изображений и соответствующие данные. Кроме того, видеокодер 20 может генерировать набор параметров последовательности, который содержит параметры, применимые к нулю или более последовательностям изображений. Кроме того, видеокодер 20 может генерировать наборы параметров изображения (PPS), которые содержат параметры, применимые к нулю или более изображений в целом. В некоторых примерах видеокодер 20 может генерировать наборы параметров адаптации (APS). APS может сохранять параметры, применимые к нулю или более изображений в целом.

[0049] Для генерации кодированного изображения видеокодер 20 может разбивать изображение на один или более видеоблоков равного размера. Каждый из видеоблоков может быть связан с древовидным блоком. Видеоблок может быть двухмерным (2D) блоком видеоданных (например, выборок). В ряде случаев древовидный блок также может именоваться наибольшей единицей кодирования (LCU). Древовидные блоки HEVC могут быть в широком смысле аналогичны макроблокам предыдущих стандартов, например H.264/AVC. Однако древовидный блок не обязан ограничиваться конкретным размером и может включать в себя одну или более единиц кодирования (CU).

[0050] В некоторых примерах видеокодер 20 может разбивать изображение на множество срезов. Каждый из срезов может включать в себя целое число CU. В ряде случаев срез содержит целое число древовидных блоков. В других случаях, граница среза может находиться в древовидном блоке. Если граница среза находится в древовидном блоке, срез может именоваться мелкозернистым срезом. В некоторых примерах видеокодер 20 может кодировать срезы согласно размеру срезов в байтах или согласно количеству древовидных блоков в срезах.

[0051] В ходе осуществления операции кодирования для изображения видеокодер 20 может осуществлять операции кодирования для каждого среза изображения. Операция кодирования для среза может генерировать кодированные данные, связанные со срезом. Кодированные данные, связанные со срезом, могут именоваться “кодированным срезом”. Кодированный срез может включать в себя заголовок среза и данные среза. Данные среза могут включать в себя несколько последовательных единиц кодирования в порядке кодирования. Заголовок среза может содержать элементы данных, относящиеся к первому или всем древовидным блокам среза.

[0052] Для генерации кодированных данных среза для среза видеокодер 20 может осуществлять операции кодирования на каждом древовидном блоке в срезе. Когда видеокодер 20 осуществляет операцию кодирования на древовидном блоке, видеокодер 20 может генерировать кодированный древовидный блок. Кодированный древовидный блок может содержать данные, представляющие кодированную версию древовидного блока.

[0053] Для генерации кодированного древовидного блока видеокодер 20 может рекурсивно осуществлять разбиение квадродерева на видеоблоке древовидного блока для деления видеоблока на все меньшие и меньшие видеоблоки. Каждый из меньших видеоблоков может быть связан с отдельной CU. Например, видеокодер 20 может разбивать видеоблок древовидного блока на четыре подблока равного размера, разбивать один или более из подблоков на четыре подподблока равного размера и т.д. Один или более элементов синтаксиса в битовом потоке может указывать, сколько максимально раз видеокодер 20 может разбивать видеоблок древовидного блока. Элементы синтаксиса также могут указывать наименьшую единицу кодирования (SCU). Видеоблок CU может иметь форму квадрата.

[0054] Видеокодер 20 может осуществлять операции кодирования на каждой неразбитой CU в древовидном блоке. В ходе осуществления операции кодирования на неразбитой CU видеокодер 20 может генерировать одну или более единиц прогнозирования (PU) для CU. Каждая из PU CU может быть связана с отдельным видеоблоком в видеоблоке CU. Видеокодер 20 может использовать внутреннее прогнозирование или внешнее прогнозирование для генерации данных прогнозирования для PU CU. Когда видеокодер 20 использует внутреннее прогнозирование для генерации данных прогнозирования для PU, видеокодер 20 выводит данные прогнозирования для PU из декодированных выборок изображения, которое содержит PU. Когда видеокодер 20 использует внешнее прогнозирование для генерации данных прогнозирования для PU, видеокодер 20 выводит данные прогнозирования для PU из декодированных значений опорных изображений, отличных от изображения, которое содержит CU. Данные прогнозирования для PU могут включать в себя прогнозируемый видеоблок и различные элементы синтаксиса.

[0055] После того как видеокодер 20 генерирует данные прогнозирования для CU, видеокодер 20 может генерировать остаточные данные для CU. Остаточные данные для CU могут указывать различия между выборками в прогнозируемых видеоблоках для PU CU и выборками в исходном видеоблоке CU.

[0056] Каждая неразбитая CU древовидного блока может иметь одну или более единиц преобразования (TU). Каждая TU CU может быть связана с отдельным участком остаточных данных CU. Видеокодер 20 может осуществлять операцию преобразования для каждой TU CU. Когда видеокодер 20 осуществляет операцию преобразования для TU, видеокодер 20 может генерировать блок коэффициентов преобразования, по меньшей мере частично, посредством применения преобразования к остаточным данным, связанным с TU. Блок коэффициентов преобразования может представлять собой 2D матрицу коэффициентов преобразования. На Фиг. 2 показана принципиальная схема, которая иллюстрирует пример блока коэффициентов преобразования.

[0057] Видеокодер 20 может квантовать коэффициенты преобразования в блоке коэффициентов преобразования. Квантование, в целом, означает процесс, в котором коэффициенты преобразования в блоке коэффициентов преобразования квантуются для максимального сокращения объема данных, используемых для представления коэффициентов преобразования, обеспечивая дополнительное сжатие. Квантование может уменьшать битовую глубину, связанную с некоторыми или всеми коэффициентами преобразования. Например, n-битовое значение можно округлять в меньшую сторону до m-битового значения при выполнении квантования, где n больше m.

[0058] После квантования блока коэффициентов преобразования видеокодер 20 может генерировать набор элементов синтаксиса, связанных с блоком коэффициентов преобразования. Затем видеокодер 20 может осуществлять операции контекстно-адаптивного двоичного арифметического кодирования (CABAC) на некоторых из этих элементов синтаксиса. В других примерах видеокодер 20 может осуществлять другие операции энтропийного кодирования на элементах синтаксиса. Например, видеокодер 20 может осуществлять операции контекстно-адаптивного кодирования с переменной длиной слова (CAVLC), операции контекстно-адаптивного двоичного арифметического кодирования на синтаксической основе (SBAC), операции энтропийного кодирования разделения интервала вероятности (PIPE) или операцию энтропийного кодирования другого типа на элементах синтаксиса, связанных с блоком коэффициентов преобразования. Видеокодер 20 также может осуществлять операции CABAC на других элементах синтаксиса, связанных с видеоданными.

[0059] После того как видеокодер 20 генерирует элементы синтаксиса, связанные с блоком коэффициентов преобразования, и осуществляет операции CABAC, видеокодер 20 может включать результирующие данные в битовый поток для видеоданных. Битовый поток может включать в себя последовательность битов, которая образует представление кодированных изображений и соответствующих данных.

[0060] Битовый поток может содержать последовательность единиц уровня сетевых абстракций (NAL). Каждая из единиц NAL может быть синтаксической структурой, содержащей указание типа данных в единице NAL и байты, содержащие данные. Например, единица NAL может содержать данные, представляющие PPS, APS, кодированный срез, вспомогательную информацию улучшения, разделитель единиц доступа, данные заполнения или другой тип данных. Данные единицы NAL могут иметь вид полезной нагрузки первичной байтовой последовательности (RBSP), перемешанной с битами предотвращения эмуляции. RBSP может представлять собой синтаксическую структуру, содержащую целое число байтов, которая инкапсулирована в единице NAL.

[0061] Когда видеокодер 20 осуществляет операцию энтропийного кодирования на блоке коэффициентов преобразования, видеокодер 20 может определять, существует ли в блоке коэффициентов преобразования, по меньшей мере, один значимый (т.е. ненулевой) коэффициент преобразования. Если в блоке коэффициентов преобразования существует, по меньшей мере, один значимый коэффициент преобразования, видеокодер 20 может обновлять флаг кодированного блока (CBF) для указания того, что блок коэффициентов преобразования включает в себя, по меньшей мере, один значимый коэффициент преобразования. Если в блоке коэффициентов преобразования нет значимых коэффициентов преобразования, видеокодер 20 может обновлять CBF для указания того, что блок коэффициентов преобразования не включает в себя ни одного значимого коэффициента преобразования.

[0062] Если в блоке коэффициентов преобразования существует, по меньшей мере, один значимый коэффициент преобразования, видеокодер 20 может идентифицировать последний значимый коэффициент (LSC) блока коэффициентов преобразования согласно порядку сканирования. LSC блока коэффициентов преобразования является ненулевым коэффициентом преобразования, который встречается последним, когда коэффициенты преобразования блока коэффициентов преобразования упорядочены согласно порядку сканирования. Порядок сканирования может быть прямым порядком сканирования. Другими словами, порядок сканирования может начинаться с коэффициента преобразования DC блока коэффициентов преобразования. Коэффициент преобразования DC встречается в верхнем левом углу блока коэффициентов преобразования. Напротив, обратные или обращенные порядки сканирования начинаются с нижнего правого коэффициента преобразования блока коэффициентов преобразования.

[0063] Видеокодер 20 может идентифицировать LSC блока коэффициентов преобразования согласно различным порядкам сканирования. Например, видеокодер 20 может идентифицировать LSC согласно зигзагообразному порядку сканирования, горизонтальному порядку сканирования, вертикальному порядку сканирования, диагональному порядку сканирования или порядку сканирования подблоков. В некоторых примерах если блок коэффициентов преобразования связан с внутренне прогнозируемой CU, видеокодер 20 может выбирать порядок сканирования на основании режима внутреннего прогнозирования, связанного с CU. Кроме того, в некоторых примерах видеокодер 20 может адаптивно переключаться между порядками сканирования для оптимизации эффективности кодирования и/или субъективного качества изображения.

[0064] На фиг. 3 показана принципиальная схема, которая иллюстрирует примеры порядков сканирования. Часть (a) фиг. 3 демонстрирует пример зигзагообразного порядка сканирования. Часть (b) фиг. 3 демонстрирует пример горизонтального порядка сканирования. Часть (c) фиг. 3 демонстрирует пример вертикального порядка сканирования. Часть (d) фиг. 3 демонстрирует пример обратного диагонального порядка сканирования.

[0065] Часть (e) фиг. 3 демонстрирует пример диагонального порядка сканирования подблоков. В порядке сканирования подблоков, видеокодер 20 может разбивать большой блок коэффициентов преобразования на подблоки. В примере, показанном на фиг. 3, подблоки показаны в виде пунктирных квадратов. Для каждого из подблоков видеокодер 20 может обрабатывать коэффициенты преобразования подблока в конкретном порядке. В примере, показанном на фиг. 3, видеокодер 20 сканирует коэффициенты преобразования в верхнем левом подблоке в диагональном порядке вверх направо, затем сканирует коэффициенты преобразования в нижнем левом подблоке в диагональном порядке вверх направо, затем сканирует коэффициенты преобразования в верхнем правом подблоке в диагональном порядке вверх направо, и наконец сканирует коэффициенты преобразования в нижнем правом подблоке в диагональном порядке вверх направо.

[0066] В других примерах видеокодер 20 может разбивать блок коэффициентов преобразования на подблоки 4×4 (или подблоки других размеров). В этом примере видеокодер 20 может затем обрабатывать каждый из блоков 4×4 коэффициентов преобразования согласно порядку сканирования.

[0067] После идентификации LSC видеокодер 20 может генерировать индикатор LSC на основе блоков. Индикатор LSC на основе блоков указывает координаты LSC. Например, если блок коэффициентов преобразования имеет размер 8×8, порядок сканирования является горизонтальным порядком сканирования и видеокодер 20 определяет, что LSC встречается в 10-й позиции, когда коэффициенты преобразования блока коэффициентов преобразования упорядочены согласно порядку сканирования, видеокодер 20 может генерировать индикатор LSC на основе блоков, указывающий координаты (1, 1).

[0068] Видеокодер 20 может осуществлять операцию кодирования методом CABAC на индикаторе LSC на основе блоков. В ряде случаев осуществление операции кодирования методом CABAC на индикаторе LSC на основе блоков может быть эффективнее, чем осуществление операции кодирования методом CABAC на соответствующем индикаторе LSC на основе сканирования, поскольку операция энтропийного кодирования может быть способна использовать статистические соотношения между координатой x и координатой y индикатора LSC на основе блоков. Видеокодер 20 может добавлять кодированную методом CABAC версию индикатора LSC на основе блоков к кодированному битовому потоку.

[0069] После идентификации LSC видеокодер 20 может осуществлять один или более проходов кодирования на блоке коэффициентов преобразования для генерации и кодирования элементов синтаксиса, связанных с блоком коэффициентов преобразования. Элементы синтаксиса, связанные с блоком коэффициентов преобразования, включают в себя карту значимости для блока коэффициентов преобразования, и информацию уровня для коэффициентов преобразования.

[0070] В каждом из проходов кодирования видеокодер 20 может сканировать по коэффициентам преобразования блока коэффициентов преобразования согласно обратному порядку сканирования. Обратный порядок сканирования может быть обратным порядку сканирования, используемому для идентификации LSC. Например, если видеокодер 20 идентифицировал LSC согласно прямому диагональному порядку сканирования, обратный порядок сканирования может быть обратным диагональным порядком сканирования.

[0071] Для каждого коэффициента преобразования, обработанного при выполнении первого прохода кодирования, видеокодер 20 может определять, встречается ли порядковая позиция коэффициента преобразования до порядковой позиции LSC. Если порядковая позиция коэффициента преобразования встречается до порядковой позиции LSC, видеокодер 20 может генерировать и кодировать методом CABAC элемент синтаксиса (т.е. флаг значимости), который указывает, является ли коэффициент преобразования значимым. Коэффициент преобразования может быть “значимым”, если коэффициент преобразования не равен нулю. Если коэффициент преобразования не встречается до порядковой позиции LSC, видеокодер 20 не генерирует и не кодирует методом CABAC флаг значимости для коэффициента преобразования. Таким образом, видеокодер 20 может генерировать и кодировать методом CABAC карту значимости для блока коэффициентов преобразования. После генерации и кодирования методом CABAC карты значимости видеокодер 20 может включать кодированную методом CABAC версию карты значимости в битовый поток.

[0072] В ряде случаев могут существовать статистические соотношения между позицией LSC и содержанием карты значимости. Соответственно, видеокодер 20 может использовать позицию LSC для выбора одной или более контекстных моделей для использования при кодировании методом CABAC флагов значимости карты значимости.

[0073] Для каждого коэффициента преобразования, обработанного при выполнении второго прохода кодирования, видеокодер 20 может определять, является ли коэффициент преобразования значимым. Если коэффициент преобразования является значимым, видеокодер 20 может генерировать и кодировать методом CABAC элемент синтаксиса (т.е. флаг "уровень больше единицы"), который указывает, превышает ли единицу абсолютное значение коэффициента преобразования. Если коэффициент преобразования не является значимым, видеокодер 20 не генерирует и не кодирует методом CABAC флаг "уровень больше единицы" для коэффициента преобразования. После генерации и кодирования методом CABAC флагов "уровень больше единицы" видеокодер 20 может включать кодированную методом CABAC версию флагов "уровень больше единицы" в битовый поток.

[0074] При выполнении третьего прохода кодирования видеокодер 20 может генерировать и кодировать методом CABAC элементы синтаксиса, указывающие, превышают ли абсолютные значения коэффициентов преобразования значение два (т.е. флаги "уровень больше двух"). После генерации и кодирования методом CABAC флагов "уровень больше двух" видеокодер 20 может включать кодированную методом CABAC версию флагов "уровень больше двух" в битовый поток.

[0075] Для каждого коэффициента преобразования, обработанного при выполнении четвертого прохода кодирования, видеокодер 20 может определять, является ли коэффициент преобразования значимым. Если коэффициент преобразования является значимым, видеокодер 20 может генерировать элемент синтаксиса (т.е. флаг знака), который указывает, является ли коэффициент преобразования положительным или отрицательным. Если коэффициент преобразования не является значимым, видеокодер 20 не генерирует флаг знака для коэффициента преобразования. После генерации флагов знака видеокодер 20 может включать флаги знака в битовый поток.

[0076] Для каждого коэффициента преобразования, обработанного при выполнении пятого прохода кодирования, видеокодер 20 может определять, является ли коэффициент преобразования значимым. Если коэффициент преобразования является значимым, видеокодер 20 может генерировать значение остатка для коэффициента (т.е. элементы "уровень-остаток"). Затем видеокодер 20 может идентифицировать код Голомба-Райса, который соответствует значению остатка. После идентификации кода Голомба-Райса для коэффициента преобразования видеокодер 20 может включать код Голомба-Райса в битовый поток. Если коэффициент преобразования не является значимым, видеокодер 20 не генерирует элемент "уровень-остаток" для коэффициента преобразования.

[0077] Элементы синтаксиса, генерируемые во втором, третьем, четвертом и пятом проходах кодирования, могут составлять информацию уровня блока коэффициентов преобразования, поскольку абсолютные значения (т.е. уровни) коэффициентов преобразования можно вывести из этих элементов синтаксиса.

[0078] Когда видеодекодер 30 принимает битовый поток, видеодекодер 30 может осуществлять операцию декодирования, которая, в целом, обратна операции кодирования, осуществляемой видеокодером 20. Например, видеодекодер 30 может осуществлять операцию декодирования на каждом срезе изображения. Когда видеодекодер 30 осуществляет операцию декодирования на срезе изображения, видеодекодер 30 может осуществлять операции декодирования на древовидных блоках в срезе. Когда видеодекодер 30 заканчивает операцию декодирования на древовидном блоке, выборки в видеоблоке, связанном с древовидным блоком, оказываются декодированными видеодекодером 30. Когда выборки для каждого древовидного блока среза декодированы видеодекодером 30, выборки для среза оказываются реконструированными видеодекодером 30.

[0079] Когда видеодекодер 30 осуществляет операцию декодирования для древовидного блока, видеодекодер 30 может осуществлять операцию декодирования для каждой неразбитой CU в древовидном блоке. Как рассмотрено выше, неразбитые CU могут делиться на одну или более TU. Каждая из TU связана с одним или более блоками коэффициентов преобразования. В этом раскрытии TU является “значимой TU”, если блок коэффициентов преобразования, связанный с TU, включает в себя один или более значимых коэффициентов преобразования.

[0080] Когда видеодекодер 30 осуществляет операцию декодирования на неразбитой CU, видеодекодер 30 может принимать кодированную информацию уровня для блоков коэффициентов преобразования, связанных со значимыми TU CU, кодированные карты значимости для блоков коэффициентов преобразования, связанных со значимыми TU CU, и кодированные индикаторы LSC на основе блоков для блоков коэффициентов преобразования, связанных со значимыми TU CU.

[0081] Поскольку видеокодер 20 не генерирует флаги значимости для коэффициентов преобразования, которые встречаются после порядковой позиции LSC согласно порядку сканирования, видеодекодер 30 может быть неспособен определять, какие коэффициенты преобразования имеют флаги значимости, пока видеодекодер 30 не будет способен определять порядковую позицию LSC. Кроме того, поскольку видеокодер 20 не генерирует флаги "уровень больше единицы", флаги "уровень больше двух", флаги знака или элементы "уровень-остаток" для незначимых коэффициентов, видеодекодер может быть неспособен определять, какие коэффициенты преобразования имеют флаги "уровень больше единицы", флаги "уровень больше двух", флаги знака или элементы "уровень-остаток", пока видеодекодер 30 не будет способен определять карту значимости.

[0082] Соответственно, видеодекодер 30 может сначала декодировать методом CABAC индикатор LSC на основе блоков. Кроме того, видеодекодер 30 может преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. После преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования видеодекодер 30 может декодировать на основании индикатора LSC на основе сканирования карту значимости для блока коэффициентов преобразования. Затем видеодекодер 30 может использовать карту значимости для декодирования информации уровня блока коэффициентов преобразования.

[0083] Индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования. Порядковой позицией LSC может быть относительная позиция LSC в последовательности коэффициентов преобразования, сформированной сканированием блока коэффициентов преобразования согласно порядку сканирования. Например, блок коэффициентов преобразования может иметь размеры 8 коэффициентов преобразования на 8 коэффициентов преобразования, и индикатор LSC на основе блоков может указывать координаты (1, 1). В этом примере коэффициент преобразования с координатами (1, 1) может быть 10-м коэффициентом преобразования, когда коэффициенты преобразования упорядочены согласно горизонтальному порядку сканирования. Поэтому в этом примере видеодекодер 30 может генерировать индикатор LSC на основе сканирования, указывающий 10-ю позицию.

[0084] В соответствии с методами этого раскрытия видеодекодер 30 может эффективно преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Видеодекодер 30 может осуществлять различные операции для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Например, видеодекодер 30 может осуществлять неитерационный алгоритм, который выводит индикатор LSC на основе сканирования из координат преобразования, указанных индикатором LSC на основе блоков. В другом примере видеодекодер 30 может сохранять структуру данных, которая отображает координаты преобразования индикаторов LSC на основе блоков в индикаторы LSC на основе сканирования. В этом примере видеодекодер 30 может обращаться к этой структуре данных для генерации индикатора LSC на основе сканирования.

[0085] В еще одном примере того как видеодекодер 30 может преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования, видеодекодер 30 может генерировать индикатор LSC на основе сканирования, осуществляя циклическую операцию. В этом примере индикатор может указывать текущий коэффициент преобразования данного блока коэффициентов преобразования. При выполнении каждой итерации циклической операции видеодекодер 30 может определять, имеет ли текущий коэффициент преобразования координаты, указанные индикатором LSC на основе блоков. Если нет, видеодекодер 30 может увеличивать индикатор LSC на основе сканирования и обновлять индикатор для указания следующего коэффициента преобразования согласно порядку сканирования. Таким образом, в этом примере видеодекодер 30 может осуществлять циклическую операцию, которая сканирует по позициям в данном блоке коэффициентов преобразования согласно порядку сканирования, пока не будет достигнута позиция, имеющая координаты, увеличивая индикатор LSC на основе сканирования для каждой позиции данного блока коэффициентов преобразования до позиции, имеющей координаты. В этом примере порядок сканирования может быть порядком сканирования подблоков, в котором данный коэффициент преобразования делится на подблоки. Видеодекодер 30 может сканировать по каждому из коэффициентов преобразования в одном из подблоков, прежде чем сканировать по каждому из коэффициентов преобразования в следующем подблоке.

[0086] В некоторых примерах видеодекодер 30 может использовать разные операции преобразования на основании разных порядков сканирования. Другими словами, видеодекодер 30 может выбирать операцию преобразования на основании порядка сканирования и использовать выбранную операцию преобразования для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Например, видеодекодер 30 может использовать вышеупомянутый неитерационный алгоритм, когда порядок сканирования является обратным горизонтальным порядком сканирования, и видеодекодер 30 может использовать вышеупомянутую структуру данных отображения, когда порядок сканирования является обратным диагональным порядком сканирования.

[0087] В другом примере видеодекодер 30 может использовать комбинацию операций преобразования. В этом примере видеодекодер 30 может делить блок коэффициентов преобразования на подблоки. Видеодекодер 30 может использовать неитерационный алгоритм для идентификации координат подблоков и координат индикатора LSC на основе блоков в подблоках. Затем видеодекодер 30 может использовать другой алгоритм для определения порядка сканирования подблоков и порядка сканирования последнего значимого коэффициента преобразования в подблоках. Таким образом, видеодекодер 30 может определять индикатор LSC на основе сканирования.

[0088] На фиг. 5 показана блок-схема, которая иллюстрирует пример конфигурации видеокодера 20, который выполнен с возможностью реализации методов этого раскрытия. Фиг. 5 обеспечена в целях объяснения и не призвана ограничивать методы, представленные и описанные в этом раскрытии в широком смысле. В целях объяснения это раскрытие описывает видеокодер 20 в контексте кодирования HEVC. Однако методы этого раскрытия можно применять к другим стандартам или способам кодирования.

[0089] В примере, показанном на фиг. 5, видеокодер 20 включает в себя множество функциональных компонентов. Функциональные компоненты видеокодера 20 включают в себя модуль 40 выбора режима, модуль 42 оценивания движения, модуль 44 компенсации движения, модуль 46 внутреннего прогнозирования, модуль 50 генерации остатка, модуль 52 преобразования, модуль 54 квантования, модуль 56 CABAC, модуль 58 обратного квантования, модуль 60 обратного преобразования, модуль 62 реконструкции и буфер 64 декодированных изображений. В других примерах видеокодер 20 может включать в себя больше, меньше или другие функциональные компоненты. Например, видеокодер 20 может включать в себя модуль антиблокового фильтра для фильтрации выходного сигнала модуля 62 реконструкции для удаления артефактов блочности из реконструированного видео. Кроме того, модуль 42 оценивания движения и модуль 44 компенсации движения могут быть в высокой степени интегрированы, но представлены в примере, показанном на фиг. 5, по отдельности в целях объяснения.

[0090] Видеокодер 20 может принимать видеоданные. В различных примерах видеокодер 20 может принимать видеоданные из различных источников. Например, видеокодер 20 может принимать видеоданные из источника 18 видеосигнала (фиг. 1) или другого источника. Видеоданные могут представлять последовательности изображений. Для кодирования видеоданных видеокодер 20 может осуществлять операцию кодирования на каждой последовательности изображений.

[0091] В ходе осуществления операции кодирования на последовательности изображений видеокодер 20 может осуществлять операции кодирования на каждом изображении в последовательности изображений. В ходе осуществления операции кодирования на изображении видеокодер 20 может осуществлять операции кодирования на каждом срезе в изображении. В ходе осуществления операции кодирования на срезе видеокодер 20 может осуществлять операцию кодирования на каждом древовидном блоке в срезе.

[0092] В ходе осуществления операции кодирования на древовидном блоке видеокодер 20 может разбивать видеоблок древовидного блока на один или более видеоблоков. Каждый из видеоблоков может быть связан с отдельной CU. В некоторых примерах размеры видеоблоков CU могут разниться от 8×8 пикселей до размера видеоблока древовидного блока максимум 64×64 пикселя или более. В этом раскрытии “N×N” и “N на N” можно использовать взаимозаменяемо для обозначения пиксельных размеров видеоблока в отношении вертикального и горизонтального размеров, например 16×16 пикселей или 16 на 16 пикселей. В общем случае блок 16×16 имеет 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Аналогично блок N×N в целом имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целочисленное значение. Аналогичную систему обозначений можно использовать для указания размеров блоков коэффициентов преобразования.

[0093] В ходе осуществления операции кодирования для древовидного блока видеокодер 20 может генерировать иерархическую структуру данных квадродерева для древовидного блока. Например, древовидный блок может соответствовать корневому узлу структуры данных квадродерева. Если видеокодер 20 разбивает видеоблок древовидного блока на четыре подблока, корневой узел имеет четыре дочерних узла в структуре данных квадродерева. Дочерние узлы соответствуют CU, связанным с подблоками. Если видеокодер 20 разбивает один из подблоков на четыре подподблока, узел, соответствующий CU, связанной с подблоком, может иметь четыре дочерних узла, которые соответствуют CU, связанным с подподблоками.

[0094] Каждый узел структуры данных квадродерева может обеспечивать данные синтаксиса для соответствующей CU. Например, узел в квадродереве может включать в себя флаг разбиения, указывающий, делится ли видеоблок CU, соответствующей узлу (т.е. разбивается) на четыре подблока. Элементы синтаксиса для CU могут задаваться рекурсивно и могут зависеть от того, разбит ли видеоблок CU на подблоки. CU, видеоблок которой не разделен, может соответствовать концевому узлу в структуре данных квадродерева. Концевой узел в структуре данных квадродерева может именоваться “узлом кодирования”. Данные, представляющие кодированную версию древовидного блока, могут включать в себя данные на основании структуры данных квадродерева для древовидного блока.

[0095] Видеокодер 20 может осуществлять операции кодирования на каждой неразбитой CU древовидного блока. Когда видеокодер 20 осуществляет операцию кодирования на неразбитой CU, видеокодер 20 генерирует данные, представляющие кодированную версию неразбитой CU.

[0096] В ходе осуществления операции кодирования для CU модуль 42 оценивания движения и модуль 44 компенсации движения осуществляют внешнее прогнозирование на каждой PU CU. Другими словами, модуль 42 оценивания движения и модуль 44 компенсации движения могут генерировать данные прогнозирования для каждой PU CU на основании декодированных выборок опорных изображений, отличных от изображения, которое содержит CU. Внешнее прогнозирование может обеспечивать временное сжатие.

[0097] Видеокодер 20 и видеодекодер 30 могут поддерживать различные размеры PU. Исходя из того что размер конкретной CU равен 2N×2N, видеокодер 20 и видеодекодер 30 могут поддерживать размеры PU 2N×2N, N×N, 2N×N или N×2N. Видеокодер 20 и видеодекодер 30 также могут поддерживать асимметричное разбиение для размеров PU 2N×nU, 2N×nD, nL×2N и nR×2N. В некоторых примерах видеокодер 20 может разбивать видеоблок CU среди PU CU вдоль границы, которая не встречается со сторонами видеоблока CU под прямыми углами.

[0098] Модуль 42 оценивания движения может осуществлять операцию оценивания движения в отношении каждой PU CU. Когда модуль 42 оценивания движения осуществляет операцию оценивания движения в отношении PU, модуль 42 оценивания движения генерирует один или более векторов движения для PU. Например, срезы могут представлять собой I-срезы, P-срезы или B-срезы. Модуль 42 оценивания движения и модуль 44 компенсации движения могут осуществлять разные операции для PU CU в зависимости от того, находится ли CU в I-срезе, P-срезе или B-срезе. В I-срезе все CU (и поэтому все PU CU) подвергаются внутреннему прогнозированию. Поэтому если PU находится в I-срезе, модуль 42 оценивания движения и модуль 44 компенсации движения не осуществляют внешнее прогнозирование на PU.

[0099] Если PU находится в P-срезе, изображение, содержащее PU, связано со списком опорных изображений, именуемом “список 0”. Каждое из опорных изображений в списке 0 содержит выборки, которые можно использовать для внешнего прогнозирования последующих изображений в порядке декодирования. Когда модуль 42 оценивания движения осуществляет операцию оценивания движения в отношении PU в P-срезе, модуль 42 оценивания движения ищет опорные изображения в списке 0 для опорной выборки для PU. Опорная выборка PU может быть набором пиксельных значений, который наиболее точно соответствует пиксельным значениям PU. Модуль 42 оценивания движения может использовать различные показатели для определения, насколько точно набор пиксельных значений в опорном изображении соответствует пиксельным значениям PU. Например, модуль 42 оценивания движения может определять, насколько точно набор пиксельных значений в опорном изображении соответствует пиксельным значениям PU, по сумме абсолютных значений разности (SAD), сумме квадратов разностей (SSD) или другим разностным показателям.

[0100] После идентификации опорной выборки PU CU в P-срезе модуль 42 оценивания движения может генерировать опорный индекс, который указывает опорное изображение в списке 0, содержащий опорную выборку и вектор движения, который указывает пространственное смещение между PU и опорной выборкой. В различных примерах модуль 42 оценивания движения может генерировать векторы движения с той или иной степенью точности. Например, модуль 42 оценивания движения может генерировать векторы движения с точностью в четверть пикселя, точностью в одну восьмую пикселя или с точностью в другую дробную часть пикселя. Модуль 42 оценивания движения может выводить опорный индекс и вектор движения на модуль 56 CABAC и модуль 44 компенсации движения. Модуль 44 компенсации движения может использовать опорные индексы и векторы движения PU CU для идентификации и извлечения опорных выборок PU. Затем модуль 44 компенсации движения может использовать пиксельные значения опорных выборок PU для генерации данных прогнозирования для CU.

[0101] Если PU находится в B-срезе, изображение, содержащее PU, может быть связано с двумя списками опорных изображений, именуемыми “список 0” и “список 1”. Каждое из опорных изображений в списке 0 содержит выборки, которые можно использовать для внешнего прогнозирования последующих изображений в порядке декодирования. Опорные изображения в списке 1 могут встречаться до изображения в порядке декодирования, но после изображения в порядке представления. В некоторых примерах изображение, содержащее B-срез, может быть связано с комбинацией списков, которая является комбинацией списка 0 и списка 1.

[0102] Кроме того, если CU находится в B-срезе, модуль 42 оценивания движения может осуществлять однонаправленное прогнозирование или двунаправленное прогнозирование для PU CU. Когда модуль 42 оценивания движения осуществляет однонаправленное прогнозирование для PU, модуль 42 оценивания движения может искать опорные изображения списка 0 или списка 1 для опорной выборки для PU. Затем модуль 42 оценивания движения может генерировать опорный индекс, который указывает опорное изображение в списке 0 или списке 1, который содержит опорную выборку и вектор движения, который указывает пространственное смещение между PU и опорной выборкой. Модуль 42 оценивания движения может выводить опорные индексы и векторы движения для PU CU на модуль 56 CABAC и модуль 44 компенсации движения. Модуль 44 компенсации движения может использовать опорные индексы и векторы движения PU CU для идентификации и извлечения опорных выборок PU. Затем модуль 44 компенсации движения может использовать пиксельные значения опорных выборок PU для генерации прогнозируемых видеоблоков для PU CU.

[0103] Когда модуль 42 оценивания движения осуществляет двунаправленное прогнозирование для PU, модуль 42 оценивания движения может искать опорные изображения в списке 0 для опорной выборки для PU и также может искать опорные изображения в списке 1 для другой опорной выборки для PU. Затем модуль 42 оценивания движения может генерировать опорные индексы, которые указывают опорные выборки и векторы движения, которые указывают пространственные смещения между опорными выборками и PU. Модуль 42 оценивания движения может выводить опорные индексы и векторы движения на модуль 56 CABAC и модуль 44 компенсации движения. Модуль 44 компенсации движения может использовать опорные индексы и векторы движения для идентификации и извлечения опорных выборок PU. Затем модуль 44 компенсации движения может интерполировать пиксельные значения прогнозируемых видеоблоков PU CU из пиксельных значений в опорных выборках PU CU.

[0104] В ходе осуществления операции кодирования на CU модуль 46 внутреннего прогнозирования может осуществлять внутреннее прогнозирование на PU CU. Другими словами, модуль 46 внутреннего прогнозирования может генерировать данные прогнозирования для PU CU на основании декодированных пиксельных значений в том же срезе, что и CU. Внутреннее прогнозирование может обеспечивать пространственное сжатие.

[0105] Для осуществления внутреннего прогнозирования на PU модуль 46 внутреннего прогнозирования может использовать множественные режимы внутреннего прогнозирования для генерации множественных наборов данных прогнозирования для PU. Когда модуль 46 внутреннего прогнозирования использует режим внутреннего прогнозирования для генерации набора данных прогнозирования для PU, модуль 46 внутреннего прогнозирования может распространять пиксельные значения из соседних PU по видеоблоку PU в направлении и/или градиенте, связанном с режимом внутреннего прогнозирования. Соседние PU могут располагаться выше, выше и правее, выше и левее или слева PU, предполагая порядок кодирования слева направо, сверху вниз для PU, CU и древовидных блоков. Модуль 46 внутреннего прогнозирования может использовать различные количества режимов внутреннего прогнозирования, например 33 режима направленного внутреннего прогнозирования, в зависимости от размера PU.

[0106] Модуль 46 внутреннего прогнозирования может выбирать один из наборов данных прогнозирования для PU. В различных примерах модуль 46 внутреннего прогнозирования может по-разному выбирать набор данных прогнозирования для PU. Например, модуль 46 внутреннего прогнозирования может выбирать набор данных прогнозирования для PU на основании сравнения показателя искажения и битовой скорости для наборов данных прогнозирования и выбирать набор данных прогнозирования, имеющий самый низкий показатель искажения.

[0107] Блок 40 выбора режима может выбирать данные прогнозирования для PU CU из наборов данных прогнозирования, генерируемых модулем 44 компенсации движения для PU CU, или наборов данных прогнозирования, генерируемых блоком внутреннего прогнозирования 46 для PU CU. В некоторых примерах блок 40 выбора режима выбирает данные прогнозирования для PU CU на основании показателя ошибки (т.е. искажения) и битовой скорости наборов данных прогнозирования.

[0108] После того как блок 40 выбора режима выбирает данные прогнозирования для PU CU, модуль 50 генерации остатка может генерировать остаточные данные для CU вычитанием пиксельных значений прогнозируемых видеоблоков выбранных данных прогнозирования PU CU из пиксельных значений исходного видеоблока CU. Остаточные данные CU могут включать в себя 2D остаточные блоки, которые соответствуют разным пиксельным составляющим видеоблоков в CU. Например, остаточные данные могут включать в себя остаточный видеоблок, который соответствует различиям между яркостными составляющими пикселей в прогнозируемых видеоблоках CU и яркостными составляющими пикселей в исходном видеоблоке CU. Кроме того, остаточные данные CU могут включать в себя остаточные видеоблоки, которые соответствуют различиям между цветностными составляющими пикселей в прогнозируемых видеоблоках PU CU и цветностными составляющими пикселей исходного видеоблока CU.

[0109] Как описано выше, CU может иметь одну или более TU. Каждая TU CU может соответствовать отдельному видеоблоку в остаточных данных CU. Размеры видеоблоков TU CU могут зависеть или не зависеть от размеров видеоблоков PU CU. В некоторых примерах остаточные данные CU могут подразделяться на меньшие видеоблоки с использованием структуры квадродерева, известной как “остаточное квадродерево” (RQT). TU могут соответствовать концевым узлам RQT.

[0110] Модуль 52 преобразования может генерировать блоки коэффициентов преобразования для каждой TU CU путем применения преобразования к остаточным видеоблокам, соответствующим TU. Каждый из блоков коэффициентов преобразования может представлять собой 2D матрицу коэффициентов преобразования. В различных примерах модуль 52 преобразования может применять различные преобразования к остаточному видеоблоку, соответствующему TU. Например, модуль преобразования может применять дискретное косинусное преобразование (DCT), направленное преобразование или принципиально аналогичное преобразование. После того как модуль 52 преобразования генерирует блок коэффициентов преобразования для TU, модуль 54 квантования может квантовать коэффициенты преобразования в блоке коэффициентов преобразования.

[0111] Модуль 56 CABAC может принимать блок коэффициентов преобразования от модуля 54 квантования. Когда модуль 56 CABAC принимает блок коэффициентов преобразования, модуль 56 CABAC может генерировать карту значимости для блока коэффициентов преобразования и индикатор LSC на основе блоков. Индикатор LSC на основе блоков может указывать координаты в блоке коэффициентов преобразования последнего значимого коэффициента преобразования блока коэффициентов преобразования. Модуль 56 CABAC также может генерировать информацию уровня для блока коэффициентов преобразования. Как объяснено выше, информация уровня для блока коэффициентов преобразования может включать в себя несколько флагов "уровень больше единицы", несколько флагов "уровень больше двух", несколько флагов знака и несколько элементов "уровень-остаток".

[0112] Модуль 56 CABAC может осуществлять операции кодирования методом CABAC на карте значимости, индикаторе LSC на основе блоков, флагах "уровень больше единицы" и флагах "уровень больше двух". Кроме того, модуль 56 CABAC может осуществлять операции кодирования методом CABAC на других элементах синтаксиса, например векторах движения или информации разности векторов движения и любом из различных других элементов синтаксиса, полезных при декодировании видеоданных на видеодекодере 30.

[0113] Модуль 58 обратного квантования и модуль 60 обратного преобразования могут применять обратное квантование и обратное преобразование к блоку коэффициентов преобразования соответственно для реконструкции остаточного видеоблока из блока коэффициентов преобразования. Модуль 62 реконструкции может добавлять реконструированный остаточный видеоблок к пиксельным значениям одного или более прогнозируемых видеоблоков, генерируемых модулем 44 компенсации движения или модулем 46 внутреннего прогнозирования, для создания реконструированного видеоблока для сохранения в буфере 64 декодированных изображений. Модуль 42 оценивания движения и модуль 44 компенсации движения могут использовать опорное изображение, которое содержит реконструированный видеоблок, для осуществления внутреннего или внешнего прогнозирования на CU последующих изображений.

[0114] На фиг. 6 показана блок-схема, которая иллюстрирует пример конфигурации видеодекодера 30. Фиг. 6 обеспечена в целях объяснения и не ограничивается методами, представленными и описанными в этом раскрытии в широком смысле. В целях объяснения это раскрытие описывает видеодекодер 30 в контексте кодирования HEVC. Однако методы этого раскрытия можно применять к другим стандартам или способам кодирования.

[0115] В примере, показанном на фиг. 6, видеодекодер 30 включает в себя множество функциональных компонентов. Функциональные компоненты видеодекодера 30 включают в себя модуль 70 анализа, модуль 72 компенсации движения, модуль 74 внутреннего прогнозирования, модуль 76 обратного квантования, модуль 78 обратного преобразования, модуль 80 реконструкции и буфер 82 декодированных изображений. В некоторых примерах видеодекодер 30 может осуществлять проход декодирования, в целом, обратный проходу кодирования, описанному в отношении видеокодера 20, показанного фиг. 5. В других примерах видеодекодер 30 может включать в себя больше, меньше или другие функциональные компоненты. Например, видеодекодер 30 может включать в себя антиблоковый фильтр для фильтрации выходного сигнала модуля 80 реконструкции для удаления артефактов блочности из реконструированного видео.

[0116] Видеодекодер 30 может принимать битовый поток, который содержит кодированные видеоданные. Битовый поток может включать в себя множество элементов синтаксиса. Когда видеодекодер 30 принимает битовый поток, модуль 70 анализа может осуществлять операцию анализа на битовом потоке. В результате осуществления операции анализа на битовом потоке модуль 70 анализа может выделять элементы синтаксиса из битового потока. В ходе осуществления операции анализа модуль 70 анализа может декодировать методом CABAC различные кодированные методом CABAC элементы синтаксиса в битовом потоке. Модуль 72 компенсации движения, модуль 74 внутреннего прогнозирования, модуль 76 обратного квантования и модуль 78 обратного преобразования могут осуществлять операцию реконструкции, которая генерирует декодированные видеоданные на основании элементов синтаксиса, выделенных из битового потока.

[0117] Битовый поток может включать в себя данные, которые представляют индикатор LSC на основе блоков для блока коэффициентов преобразования, карту значимости для блока коэффициентов преобразования и информацию уровня для блока коэффициентов преобразования. В ходе осуществления операции анализа модуль 70 анализа может декодировать методом CABAC индикатор LSC на основе блоков. Затем модуль 70 анализа может преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Порядок сканирования может сигнализироваться в кодированном битовом потоке или может выводиться модулем 70 анализа из одного или более элементов синтаксиса или параметров.

[0118] После преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования модуль 70 анализа может использовать индикатор LSC на основе сканирования для анализа карты значимости из битового потока. Например, модуль 70 анализа может определять на основании индикатора LSC на основе сканирования, включает ли в себя карта значимости для блока коэффициентов преобразования флаг значимости для коэффициента преобразования. Кроме того, в некоторых примерах модуль 70 анализа может выбирать контекстную модель на основании индикатора LSC на основе сканирования. Модуль 70 анализа может использовать выбранную контекстную модель при выполнении операции декодирования методом CABAC, которая декодирует карту значимости. Модуль 70 анализа может использовать карту значимости для анализа информации уровня блока коэффициентов преобразования из битового потока.

[0119] Может быть желательно эффективно преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. В соответствии с методами этого раскрытия модуль 70 анализа может осуществлять различные операции для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Например, модуль 70 анализа может осуществлять неитерационный алгоритм, который выводит индикатор LSC на основе сканирования из координат, указанных индикатором LSC на основе блоков. Фиг. 9 и 10, подробно описанные ниже, являются блок-схемами операций примера неитерационных алгоритмов, которые позволяют выводить индикатор LSC на основе сканирования из координат, указанных индикатором LSC на основе блоков. В другом примере модуль 70 анализа может сохранять структуру данных, которая отображает координаты в индикаторы LSC на основе сканирования. В этом примере модуль 70 анализа может обращаться к этой структуре данных для генерации индикатора LSC на основе сканирования. Фиг. 11, подробно описанная ниже, иллюстрирует пример операции, в которой видеодекодер 30 преобразует индикатор LSC на основе блоков в индикатор LSC на основе сканирования, по меньшей мере частично, посредством обращения к структуре данных, которая отображает индикаторы LSC на основе блоков в индикаторы LSC на основе сканирования. В еще одном примере модуль 70 анализа может генерировать индикатор LSC на основе сканирования, осуществляя циклическую операцию, которая сканирует по позициям в блоке коэффициентов преобразования согласно прямому порядку сканирования, пока не будет достигнут коэффициент преобразования, имеющий координаты, указанные индикатором LSC на основе блоков. Фиг. 12, подробно описанная ниже, иллюстрирует пример итерационной операции, в которой видеодекодер 30 преобразует индикатор LSC на основе блоков в индикатор LSC на основе сканирования путем осуществления такой циклической операции.

[0120] В некоторых примерах модуль 70 анализа может использовать разные операции преобразования на основании разных порядков сканирования. Например, модуль 70 анализа может использовать вышеупомянутый неитерационный алгоритм, когда порядок сканирования является диагональным порядком сканирования, и модуль 70 анализа может использовать вышеупомянутую структуру данных отображения, когда порядок сканирования является зигзагообразным порядком сканирования.

[0121] После того как модуль 70 анализа декодирует блок коэффициентов преобразования, модуль 76 обратного квантования может обратно квантовать, т.е. деквантовать, блок коэффициентов преобразования. Модуль 76 обратного квантования может обратно квантовать блок коэффициентов преобразования аналогично обработке обратного квантования, предложенной для HEVC или заданной согласно стандарту декодирования H.264. Модуль 76 обратного квантования может использовать параметр квантования QPY, вычисленный видеокодером 20 для CU блока коэффициентов преобразования, для определения степени квантования и, аналогично, степени обратного квантования, применяемого модулем 76 обратного квантования.

[0122] После того как модуль 76 обратного квантования осуществляет обратное квантование блока коэффициентов преобразования, модуль 78 обратного преобразования может генерировать остаточный видеоблок для TU, связанной с блоком коэффициентов преобразования. Модуль 78 обратного преобразования может генерировать остаточный видеоблок для TU, по меньшей мере частично, посредством применения обратного преобразования к блоку коэффициентов преобразования. Например, модуль 78 обратного преобразования может применять обратное DCT, обратное целочисленное преобразование, обратное преобразование Карунена-Лева (KLT), обратное вращательное преобразование, обратное направленное преобразование или другое обратное преобразование к блоку коэффициентов преобразования. В некоторых примерах модуль 78 обратного преобразования может определять, какое обратное преобразование применять к блоку коэффициентов преобразования на основании сигнализации от видеокодера 20. В таких примерах модуль 78 обратного преобразования может определять обратное преобразование на основании сигнализируемого преобразования на корневом узле квадродерева для древовидного блока, связанного с блоком коэффициентов преобразования. В других примерах модуль 78 обратного преобразования может выводить обратное преобразование из одной или более характеристик кодирования, например размера блока, режима кодирования и т.п. В некоторых примерах модуль 78 обратного преобразования может применять каскадное обратное преобразование.

[0123] Модуль 72 компенсации движения может осуществлять компенсацию движения для генерации данных прогнозирования для PU CU. В некоторых примерах модуль 72 компенсации движения может уточнять данные прогнозирования для PU путем осуществления интерполяции на основе интерполяционных фильтров. Идентификаторы для интерполяционных фильтров, подлежащих использованию для компенсации движения с подпиксельной точностью, могут входить в состав элементов синтаксиса. Модуль 72 компенсации движения может использовать те же интерполяционные фильтры, которые использует видеокодер 20 при выполнении генерации данных прогнозирования PU, для вычисления интерполированных значений для субцелых пикселей опорного блока. Модуль 72 компенсации движения может определять интерполяционные фильтры, используемые видеокодером 20 согласно принятой синтаксической информации, и использовать интерполяционные фильтры для создания данных прогнозирования.

[0124] Модуль 72 компенсации движения и модуль 74 внутреннего прогнозирования в примере HEVC могут использовать некоторую синтаксическую информацию (например, обеспеченную квадродеревом) для определения размеров древовидных блоков, используемых для кодирования кадра(ов) кодированной видеопоследовательности, информацию разбиения, которая описывает, как разбиваются видеоблоки каждой CU кадра кодированной видеопоследовательности (и, аналогично, как разбиваются подблоки), режимы, указывающие, как кодируется каждая PU (например, внутреннего или внешнего прогнозирования, и для внутреннего прогнозирования - режим кодирования с внутренним прогнозированием), один или более опорных кадров (и/или опорные списки, содержащие идентификаторы для опорных кадров) для каждой внешне прогнозируемой CU, и другую информацию для декодирования кодированной видеопоследовательности.

[0125] Модуль 80 реконструкции объединяет остаточные видеоблоки CU с соответствующими прогнозируемыми видеоблоками PU CU, генерируемой модулем 72 компенсации движения или модулем 74 внутреннего прогнозирования для формирования декодированных видеоблоков. В некоторых примерах видеодекодер 30 может применять антиблоковый фильтр для фильтрации декодированных видеоблоков для удаления артефактов блочности из декодированных видеоблоков. В буфере 82 декодированных изображений хранятся декодированные видеоблоки. Буфер 82 декодированных изображений может обеспечивать опорные изображения для последующей компенсации движения и также может сохранять изображения для представления на устройстве отображения, например устройстве 32 отображения, показанном на фиг. 1.

[0126] На фиг. 7 показана блок-схема операций, которая иллюстрирует пример операции 100, осуществляемой видеокодером 20. После того как модуль 56 CABAC начинает операцию 100, видеокодер 20 может идентифицировать LSC блока коэффициентов преобразования согласно порядку сканирования (102). После того как видеокодер 20 идентифицирует LSC блока коэффициентов преобразования, видеокодер 20 может генерировать индикатор LSC на основе блоков, который указывает координаты идентифицированного LSC блока коэффициентов преобразования (104).

[0127] После генерации индикатора LSC на основе блоков видеокодер 20 может осуществлять операцию кодирования методом CABAC на индикаторе LSC на основе блоков (106). В различных примерах видеокодер 20 может по-разному осуществлять операцию кодирования методом CABAC на индикаторе LSC на основе блоков. Например, в некоторых примерах видеокодер 20 может сначала преобразовать каждую координату индикатора LSC на основе блоков в двоичный код. Другими словами, видеокодер 20 может “бинаризовать” координаты индикатора LSC на основе блоков. После бинаризации координат видеокодер 20 может выбирать контекстную модель для кодирования двоичного кода, который представляет координату y индикатора LSC на основе блоков. В ряде случаев видеокодер 20 может выбирать контекстную модель для кодирования двоичного кода, который представляет координату y на основании координаты x индикатора LSC на основе блоков. Видеокодер 20 может использовать выбранную контекстную модель при кодировании одного или более бинов двоичного кода, который представляет координату y. Аналогично видеокодер 20 может выбирать контекстную модель для кодирования двоичного кода, который представляет координату x индикатора LSC на основе блоков на основании координаты y индикатора LSC на основе блоков. Видеокодер 20 может использовать выбранную контекстную модель при кодировании одного или более бинов двоичного кода, который представляет координату x.

[0128] Может существовать статистическое соотношение между координатой x и координатой y индикатора LSC на основе блоков. Например, значимым коэффициентам преобразования свойственно группироваться вокруг коэффициентов преобразования DC блоков коэффициентов преобразования. Таким образом, если координата x относительно близка к коэффициенту преобразования DC, координата y также, скорее всего, будет относительно близка к коэффициенту преобразования DC, и наоборот. Благодаря выбору контекстной модели для координаты y на основании координаты x видеокодер 20 может быть способен использовать это статистическое соотношение для более точного выбора контекстной модели для координаты y. Аналогично благодаря выбору контекстной модели для координаты x на основании координаты y видеокодер 20 может быть способен использовать это статистическое соотношение для более точного выбора контекстной модели для координаты x.

[0129] В некоторых примерах видеокодер 20 может перемежать операции энтропийного кодирования символов для координат x и y. Например, видеокодер 20 может сначала осуществлять операцию энтропийного кодирования для первого символа координаты x. Исходя из того что видеокодер 20 представляет координату x унарным числом, первый символ координаты x равен 0, если координата x равна 0, и 1 в противном случае. После кодирования первого символа координаты x видеокодер 20 может осуществлять операцию энтропийного кодирования на первом символе координаты y. Видеокодер 20 может использовать разные контексты для кодирования первого символа координаты y в зависимости от значения первого символа координаты x. Затем, если координата x больше 0, видеокодер 20 может осуществлять операцию энтропийного кодирования на втором символе координаты x. Видеокодер 20 может использовать разные контексты для кодирования второго символа координаты x в зависимости от значения первого символа координаты y. Видеокодер 20 может продолжать кодировать символы координат x и y, пока видеокодер 20 не закодирует каждый из символов координат x и y.

[0130] В некоторых примерах видеокодер 20 может отображать коэффициенты преобразования из блока коэффициентов преобразования в другой 2D блок коэффициентов преобразования с использованием порядка сканирования. Например, другой 2D блок коэффициентов преобразования может иметь ширину в восемь позиций. В этом примере видеокодер 20 может отображать первые восемь коэффициентов преобразования блока коэффициентов преобразования, определенные порядком сканирования, в первую строку другого 2D блока коэффициентов преобразования, вторые восемь коэффициентов преобразования блока коэффициентов преобразования, определенные порядком сканирования, во вторую строку другого 2D блока коэффициентов преобразования и т.д. В этом примере видеокодер 20 может затем идентифицировать последний значимый коэффициент преобразования другого 2D блока коэффициентов преобразования согласно порядку сканирования и генерировать индикатор LSC на основе блоков, который указывает последний значимый коэффициент преобразования другого 2D блока. В этом примере может существовать статистическое соотношение между более низкими номерами строк и вероятностью того, что коэффициент преобразования является значимым. Например, вероятность того, что коэффициент преобразования является значимым, может быть выше в низких номерах строк, чем в высоких номерах строк. Видеокодер 20 может использовать это статистическое соотношение при осуществлении операции энтропийного кодирования на индикаторе LSC на основе блоков. Например, видеокодер 20 может сначала осуществлять операцию энтропийного кодирования на координате y и затем осуществлять операцию энтропийного кодирования на координате x. Когда видеокодер 20 осуществляет операцию энтропийного кодирования на координате x, видеокодер 20 может выбирать контекстную модель на основании координаты y.

[0131] Кроме того, видеокодер 20 может генерировать карту значимости для блока коэффициентов преобразования (108). В некоторых примерах видеокодер 20 может параллельно генерировать карту значимости и идентифицировать LSC блока коэффициентов преобразования.

[0132] В различных примерах видеокодер 20 может по-разному генерировать карту значимости. Например, видеокодер 20 может осуществлять проход кодирования, который обрабатывает каждый из коэффициентов преобразования согласно обратному порядку сканирования. Обратный порядок сканирования может быть обратным порядку сканирования, используемому для идентификации LSC. В других примерах видеокодер 20 может использовать для генерации карты значимости для блока коэффициентов преобразования тот же порядок сканирования, который видеокодер 20 использует для идентификации LSC. Для каждого коэффициента преобразования, обработанного при выполнении прохода кодирования, видеокодер 20 может генерировать и кодировать методом CABAC флаг значимости для коэффициента преобразования, если порядковая позиция коэффициента преобразования согласно порядку сканирования располагается до порядковой позиции LSC согласно порядку сканирования.

[0133] В другом примере видеокодер 20 может сначала генерировать 2D блок в качестве карты значимости. В этом примере видеокодер 20 может сканировать по блоку коэффициентов преобразования. По мере того как видеокодер 20 сканирует по блоку коэффициентов преобразования, видеокодер 20 может указывать в 2D карте значимости, являются ли соответствующие коэффициенты преобразования блока коэффициентов преобразования значимыми или незначимыми.

[0134] Кроме того, видеокодер 20 может осуществлять операцию кодирования методом CABAC на карте значимости (110). В некоторых примерах видеокодер 20 может перемежать этапы 108 и 110. Например, видеокодер 20 может генерировать флаг значимости для первого коэффициента преобразования. Затем видеокодер 20 может осуществлять операцию кодирования методом CABAC на флаге значимости для первого коэффициента преобразования. После осуществления операции кодирования методом CABAC на флаге значимости для первого коэффициента преобразования видеокодер 20 может генерировать флаг значимости для второго коэффициента преобразования и затем осуществлять операцию кодирования методом CABAC на флаге значимости для второго коэффициента преобразования, и т.д.

[0135] Видеокодер 20 может по-разному осуществлять операцию кодирования методом CABAC на карте значимости. Например, видеокодер 20 может выбирать контекстную модель на основании LSC блока коэффициентов преобразования. Может существовать статистическое соотношение между позицией LSC и значением следующего флага значимости (в обратном порядке сканирования) карты значимости. Например, если видеокодер 20 использует обратный порядок сканирования для генерации карты значимости и LSC блока коэффициентов преобразования относительно удален от коэффициента преобразования DC блока коэффициентов преобразования, вероятность того, что следующий флаг значимости равен 1, относительно больше, чем когда LSC блока коэффициентов преобразования относительно близок к коэффициенту преобразования DC блока коэффициентов преобразования. Благодаря выбору контекстной модели на основании LSC блока коэффициентов преобразования видеокодер 20 может быть способен использовать это статистическое соотношение для более точного выбора контекстной модели для кодирования карты значимости. После выбора контекстной модели для карты значимости видеокодер 20 может использовать контекстную модель для кодирования методом CABAC одного или более флагов значимости карты значимости. При выполнении операции кодирования методом CABAC на карте значимости, видеокодер 20 может использовать одну или более других контекстных моделей для кодирования методом CABAC последующих флагов значимости карты значимости.

[0136] В других примерах видеокодер 20 может иначе использовать статистическое соотношение между LSC и картой значимости. Например, видеокодер 20 может использовать один набор контекстов для кодирования методом CABAC карты значимости, если порядковая позиция LSC больше данного порога, и другой набор контекстов для кодирования карты значимости, если порядковая позиция LSC не превышает данный порог. Используя, таким образом, разные контексты, можно повысить эффективность кодирования.

[0137] В другом примере видеокодер 20 может использовать статистическое соотношение между LSC и картой значимости, группируя коэффициенты преобразования. Например, в этом примере видеокодер 20 может группировать три коэффициента преобразования и кодировать полученную группу как единый коэффициент преобразования. Таким образом, видеокодер 20 может единомоментно кодировать три коэффициента преобразования. Если все три коэффициента преобразования в группе равны 0, то видеокодер 20 может кодировать три коэффициента преобразования как 0. Если нет, видеокодер 20 может генерировать флаг 1 и флаги, указывающие, какие из трех соответствующих коэффициентов преобразования являются значимыми.

[0138] В ряде случаев все значимые коэффициенты преобразования блока коэффициентов преобразования могут располагаться в малой области в верхнем левом углу блока коэффициентов преобразования. Например, все значимые коэффициенты преобразования блока коэффициентов преобразования могут располагаться в области 4×4 в верхнем левом углу блока коэффициентов преобразования. В таких случаях может потребоваться меньше битов для указания LSC блока коэффициентов преобразования с использованием индикатора LSC на основе сканирования, чем с использованием индикатора LSC на основе блоков. Поэтому в некоторых примерах видеокодер 20 может генерировать индикатор LSC на основе сканирования вместо индикатора LSC на основе блоков, когда все значимые коэффициенты преобразования находятся в пределах области. В таких примерах видеокодер 20 может генерировать индикатор LSC на основе блоков, если блок коэффициентов преобразования включает в себя один или более значимых коэффициентов преобразования вне области. Кроме того, в некоторых таких примерах видеокодер 20 может включать флаг в битовый поток для указания, указан ли LSC с использованием индикатора LSC на основе блоков или индикатора LSC на основе сканирования.

[0139] Кроме того, видеокодер 20 может генерировать информацию уровня для коэффициентов преобразования в блоке коэффициентов преобразования (112). Как описано выше, информация уровня для коэффициентов преобразования может включать в себя флаги "уровень больше единицы", флаги "уровень больше двух", флаги знака и элементы "уровень-остаток".

[0140] Кроме того, видеокодер 20 может осуществлять операции кодирования методом CABAC на, по меньшей мере, части информации уровня для коэффициентов преобразования (114). В некоторых примерах видеокодер 20 может перемежать этапы 112 и 114. Например, видеокодер 20 может осуществлять отдельные проходы кодирования для флагов "уровень больше единицы", флагов "уровень больше двух", флагов знака и элементов "уровень-остаток". При выполнении прохода кодирования для флагов "уровень больше единицы" видеокодер 20 может генерировать и кодировать методом CABAC флаг "уровень больше единицы" для первого коэффициента преобразования, генерировать и кодировать методом CABAC флаг "уровень больше единицы" для следующего коэффициента преобразования и т.д. Аналогично при выполнении прохода кодирования для флагов "уровень больше двух" видеокодер 20 может генерировать и кодировать методом CABAC флаг "уровень больше двух" для первого коэффициента преобразования, генерировать и кодировать методом CABAC флаг "уровень больше двух" для следующего коэффициента преобразования и т.д. При выполнении прохода кодирования для флагов знака видеокодер 20 может генерировать флаг знака для первого коэффициента преобразования, генерировать флаг знака для следующего коэффициента преобразования и т.д. В этом примере видеокодер 20 не кодирует методом CABAC флаги знака. При выполнении прохода кодирования для элементов "уровень-остаток" видеокодер 20 может генерировать элемент "уровень-остаток" и идентифицировать соответствующий код Голомба-Райса для первого коэффициента преобразования, генерировать элемент "уровень-остаток" и идентифицировать соответствующий код Голомба-Райса для следующего коэффициента преобразования и т.д. В этом примере видеокодер 20 может не генерировать флаг "уровень больше единицы", флаг "уровень больше двух", флаг знака или элемент "уровень-остаток" для коэффициента преобразования, если флаг коэффициента преобразования не является значимым.

[0141] В некоторых примерах когда видеокодер 20 бинаризует информацию уровня коэффициента преобразования, первый бин бинаризованной информации уровня может указывать, является ли коэффициент преобразования значимым. Таким образом, в таких примерах генерация карты значимости на этапе 108 может входить в состав генерации информации уровня на этапе 112 и кодирование методом CABAC карты значимости на этапе 110 может входить в состав кодирования методом CABAC информации уровня на этапе 114.

[0142] На фиг. 8 показана блок-схема операций, которая иллюстрирует пример операции 130 для декодирования блока коэффициентов преобразования. После того как видеодекодер 30 начинает операцию 130, видеодекодер 30 может принимать битовый поток, который содержит данные, представляющие индикатор LSC на основе блоков для блока коэффициентов преобразования, связанного с TU, карту значимости для блока коэффициентов преобразования и информацию уровня для блока коэффициентов преобразования (132). Битовый поток может содержать другие кодированные видеоданные.

[0143] После приема данных, которые представляют индикатор LSC на основе блоков, видеодекодер 30 может осуществлять операцию декодирования методом CABAC для декодирования кодированного индикатора LSC на основе блоков (134). Таким образом, путем осуществления операции декодирования методом CABAC, видеодекодер 30 может принимать из битового потока кодированных видеоданных индикатор LSC на основе блоков для LSC блока коэффициентов преобразования.

[0144] После того как видеодекодер 30 осуществляет операцию декодирования методом CABAC для декодирования индикатора LSC на основе блоков, видеодекодер 30 может выбирать операцию преобразования (135). В некоторых примерах видеодекодер 30 может выбирать операцию преобразования на основании порядка сканирования. Затем видеодекодер 30 может использовать выбранную операцию преобразования для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования (136). В различных примерах видеодекодер 30 может по-разному преобразовывать индикатор LSC на основе блоков в индикатор LSC на основе сканирования. Например, видеодекодер 30 может использовать операции, примеры которых показаны на фиг. 9-12, для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. В других примерах видеодекодер 30 может осуществлять комбинацию одной или более операций, примеры которых показаны на фиг. 9-12, для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Кроме того, в других примерах видеодекодер 30 не выбирает операцию преобразования после декодирования индикатора LSC на основе блоков. Напротив, в некоторых таких примерах видеодекодер 30 может быть выполнен с возможностью осуществления только одной конкретной операции преобразования.

[0145] Затем видеодекодер 30 может использовать индикатор LSC на основе сканирования для декодирования карты значимости для блока коэффициентов преобразования (138). Видеодекодер 30 может по-разному использовать индикатор LSC на основе сканирования для декодирования карты значимости.

[0146] Например, видеокодер 20 может не кодировать флаги значимости для коэффициентов преобразования, встречающихся после LSC в порядке кодирования. Следовательно, количество флагов значимости в карте значимости может изменяться между блоками коэффициентов преобразования. Поскольку количество флагов значимости может изменяться, видеодекодер 30 может не быть способен определять на основании размера блока коэффициентов преобразования, сколько флагов значимости присутствует в карте значимости блока коэффициентов преобразования. Таким образом, когда видеодекодер 30 декодирует карту значимости, видеодекодеру 30 может понадобиться способность определять, проанализировал ли видеодекодер 30 все флаги значимости карты значимости из битового потока. Соответственно, видеодекодер 30 может продолжать анализ флагов значимости из битового потока, пока количество флагов значимости, проанализированных из битового потока, не будет равно порядковой позиции LSC (т.е. позиции, указанной индикатором LSC на основе сканирования). Таким образом, видеодекодер 30 может использовать индикатор LSC на основе сканирования для определения, включает ли в себя карта значимости флаги значимости для коэффициентов преобразования блока коэффициентов преобразования.

[0147] В другом примере индикатор LSC на основе сканирования может указывать количество бинов, которые указывают значимые коэффициенты преобразования, подлежащие декодированию. Кроме того, как описано выше, может существовать статистическое соотношение между количеством коэффициентов преобразования, встречающихся до LSC в порядке сканирования, и вероятностью того, что бин карты значимости равен 1 или 0. Индикатор LSC на основе сканирования указывает количество коэффициентов преобразования, встречающихся до LSC в порядке сканирования. Соответственно, видеодекодер 30 может выбирать на основании индикатора LSC на основе сканирования контекстную модель среди множества доступных контекстных моделей. Затем видеодекодер 30 может использовать выбранную контекстную модель для декодирования одного или более бинов карты значимости. При выполнении операции декодирования методом CABAC для карты значимости видеодекодер 30 может переключаться на одну или более других контекстных моделей.

[0148] В некоторых примерах блок коэффициентов преобразования может включать в себя множество подблоков. Видеодекодер 30 может идентифицировать на основании индикатора LSC на основе сканирования последний значимый подблок из множества подблоков, причем последний значимый подблок содержит LSC. Кроме того, видеодекодер 30 может осуществлять первый проход кодирования, который обрабатывает последний значимый подблок и те из подблоков, которые встречаются до последнего значимого подблока согласно первому обратному порядку сканирования, который начинается с последнего значимого подблока. Для каждого из подблоков, обработанных при выполнении первого прохода кодирования, видеодекодер 30 может осуществлять второй проход кодирования, который обрабатывает коэффициенты преобразования в подблоке согласно второму обратному порядку сканирования. Второй обратный порядок сканирования может быть идентичен первому обратному порядку сканирования или отличаться от него. Для каждого коэффициента преобразования, обработанного при выполнении второго прохода кодирования, видеодекодер 30 может определять на основании индикатора LSC на основе сканирования, включает ли в себя карта значимости флаг значимости для коэффициента преобразования.

[0149] После того как видеодекодер 30 декодирует карту значимости для блока коэффициентов преобразования, видеодекодер 30 может осуществлять операцию декодирования на информации уровня блока коэффициентов преобразования (140). Например, информация уровня блока коэффициентов преобразования может включать в себя флаги "уровень больше единицы", флаги "уровень больше двух", флаги знака и элементы "уровень-остаток". Флаги "уровень больше единицы" и флаги "уровень больше двух" можно кодировать методом CABAC, и элементы "уровень-остаток" можно кодировать как коды Голомба-Райса. В этом примере видеодекодер 30 может осуществлять операции декодирования методом CABAC для декодирования флагов "уровень больше единицы" и флагов "уровень больше двух" и может преобразовывать коды Голомба-Райса обратно в элементы "уровень-остаток".

[0150] Кроме того, видеодекодер 30 может использовать карту значимости, индикатор LSC на основе сканирования и коэффициент преобразования информация уровня блока коэффициентов преобразования для реконструкции блока коэффициентов преобразования из информации уровня для блока коэффициентов преобразования (142). В некоторых примерах видеодекодер 30 может перемежать этапы 140 и 142. Например, видеодекодер 30 может сохранять коэффициенты преобразования в двухмерном массиве. В этом примере видеодекодер 30 может добавлять или регулировать коэффициенты преобразования в массиве по мере того, как видеодекодер 30 декодирует информацию уровня на этапе 140.

[0151] Как описано выше, информация уровня для блока коэффициентов преобразования может содержать несколько флагов "уровень больше единицы", несколько флагов "уровень больше двух", несколько флагов знака и несколько элементов "уровень-остаток". В некоторых примерах несколько флагов "уровень больше единицы", несколько флагов "уровень больше двух", флаги знака и элементы "уровень-остаток" не включают в себя записей, касающихся незначимых коэффициентов преобразования в блоке коэффициентов преобразования. Поэтому несколько флагов "уровень больше единицы", несколько флагов "уровень больше двух", флаги знака и элементы "уровень-остаток" могут не включать в себя информацию, которая указывает позиции блока коэффициентов преобразования, которые соответствуют флагам "уровень больше единицы", флагам "уровень больше двух", флагами знака и элементам "уровень-остаток". Соответственно, видеодекодер 30 может использовать карту значимости для определения позиций в блоке коэффициентов преобразования, которые соответствуют флагам "уровень больше единицы", флагам "уровень больше двух", флагам знака и элементам "уровень-остаток". В этом примере видеодекодер 30 может затем использовать флаги "уровень больше единицы", флаги "уровень больше двух", флаги знака и элементы "уровень-остаток" для реконструкции блока коэффициентов преобразования.

[0152] Как описано выше, в некоторых примерах первый бин бинаризованной информации уровня коэффициента преобразования может указывать, является ли коэффициент преобразования значимым. Таким образом, карта значимости может интегрироваться в бинаризованную информацию уровня коэффициентов преобразования. В таких примерах осуществление операции энтропийного декодирования на карте значимости на этапе 138 может входить в состав осуществления операции декодирования методом CABAC на информации уровня на этапе 140.

[0153] На фиг. 9 показана блок-схема операций, которая иллюстрирует пример неитерационной операции 150 для преобразования индикатора LSC на основе блоков для блока коэффициентов преобразования в индикатор LSC на основе сканирования для блока коэффициентов преобразования. В примере, показанном на фиг. 9, операция 150 предполагает, что порядок сканирования является зигзагообразным порядком сканирования. После того как видеодекодер 30 начинает операцию 150, видеодекодер 30 может определять значение переменной диагонального числа (152). Видеодекодер 30 может определять значение переменной диагонального числа, суммируя координату y индикатора LSC на основе блоков и координату x индикатора LSC на основе блоков.

[0154] Затем видеодекодер 30 может определять, превышает ли переменная диагонального числа ширину блока для блока коэффициентов преобразования (154). Если диагональное число больше ширины блока для блока коэффициентов преобразования (“Да” на 154), видеодекодер 30 может вычислять начальное значение для индикатора LSC на основе сканирования (156). Видеодекодер 30 может вычислять начальное значение для индикатора LSC на основе сканирования следующим образом: ScanPositionLast=DiagNum * (DiagNum+1 ) )>>1, где “ScanPositionLast” - индикатор LSC на основе сканирования, “DiagNum” представляет переменную диагонального числа, и “>>” представляет операцию сдвига вправо.

[0155] Затем видеодекодер 30 может определять, является ли переменная диагонального числа нечетным числом (158). В некоторых примерах видеодекодер 30 может определять, является ли переменная диагонального числа нечетной, следующим образом: (DiagNum% 2)==1. Если переменная диагонального числа является нечетным числом (“Да” на 158), видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования на основании координаты y индикатора LSC на основе блоков (160). Например, видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования, суммируя координату y индикатора LSC на основе блоков с начальным значением индикатора LSC на основе сканирования. В противном случае, если переменная диагонального числа не является нечетным числом (“Нет” на 158), видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования на основании координаты x индикатора LSC на основе блоков (162). Например, видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования, суммируя координату x индикатора LSC на основе блоков с начальным значением индикатора LSC на основе сканирования.

[0156] Если диагональное число не превышает ширину блока (“Нет” на 154), видеодекодер 30 может вычислять значение временной переменной (164). Видеодекодер 30 может вычислять значение временной переменной следующим образом: ( BlockWidth-1) <<1) - DiagNum, где “BlockWidth” указывает ширину блока коэффициентов преобразования, и “<<” представляет операцию сдвига влево. После вычисления временного значения видеодекодер 30 может вычислять начальное значение индикатора LSC на основе сканирования (166). Видеодекодер 30 может вычислять начальное значение индикатора LSC на основе сканирования следующим образом: MaxNumCoeffM1 - ((T * (T+1))>>1), где “MaxNumCoeffM1” - максимальное количество коэффициентов преобразования в блоке коэффициентов преобразования, и “T” - временная переменная.

[0157] Затем видеодекодер 30 может определять, является ли временная переменная нечетной (168). Если временная переменная является нечетной (“Да” на 168), видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования на основании координаты y индикатора LSC на основе блоков (170). Например, видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования следующим образом: ScanPositionLast=ScanPositionLast - BlockWidth+1+PositionLastY, где “ScanPositionLast” - индикатор LSC на основе сканирования, “BlockWidth” - ширина блока коэффициентов преобразования, и “PositionLastY” - координата y индикатора LSC на основе блоков.

[0158] В противном случае, если временная переменная не является нечетной (“Нет” на 168), видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования на основании координаты x индикатора LSC на основе блоков (172). Например, видеодекодер 30 может повторно вычислять индикатор LSC на основе сканирования следующим образом: ScanPositionLast=ScanPositionLast - BlockWidth+1+PositionLastX, где “ScanPositionLast” - индикатор LSC на основе сканирования, “BlockWidth” - ширина блока коэффициентов преобразования, и “PositionLastX” - координата x индикатора LSC на основе блоков.

[0159] Следующий псевдокод описывает неитерационный алгоритм в соответствии с примером, приведенным на фиг. 9, который выводит индикатор LSC на основе сканирования из координат, указанных индикатором LSC на основе блоков.

1. DiagNum=PositionLastY+PositionLastX

2. If (DiagNum<BlockWidth)

a. ScanPositionLast=(DiagNum * (DiagNum+1))>>1

b. If ((DiagNum% 2)==1)

i. ScanPositionLast=ScanPositionLast+PositionLastY

c. Else

i. ScanPositionLast=ScanPositionLast+PositionLastX

3. Else

a. T=((BlockWidth-1)<<1) - DiagNum

b. ScanPositionLast=MaxNumCoeffM1 - ((T * (T+1))>>1)

c. If ((T% 2)==1)

i. ScanPositionLast=ScanPositionLast - BlockWidth+1

+PositionLastY

d. Else

i. ScanPositionLast=ScanPositionLast - BlockWidth+1

+PositionLastX

В этом псевдокоде “PositionLastY” и “PositionLastX” - координаты x и y последнего коэффициента преобразования (предполагая, что составляющая DC имеет координаты (0, 0)), и “BlockWidth” - ширина блока, << - операция сдвига влево, >> - операция сдвига вправо, % - операция по модулю, и “MaxNumCoeffM1” - максимальное количество коэффициентов преобразования, которое может иметь блок коэффициентов преобразования (т.е. BlockWidth*BlockHeight - 1).

[0160] Следующий псевдокод аналогичен вышеприведенному псевдокоду, но преобразует индикатор LSC на основе блоков в индикатор LSC на основе сканирования, когда используется диагональное сканирование от верхней правой до нижней левой позиции:

1. DiagNum=PositionLastY+PositionLastX

2. If (DiagNum<BlockWidth)

a. ScanPositionLast=(DiagNum * (DiagNum+1))>>1

b. ScanPositionLast=ScanPositionLast+PositionLastX

3. Else

a. T=((BlockWidth-1)<<1 ) - DiagNum

b. ScanPositionLast=MaxNumCoeffM1 - ((T * (T+1))>>1)

c. If ((T% 2)==1)

i. ScanPositionLast=ScanPositionLast - BlockWidth+1

+PositionLastY

d. Else

i. ScanPositionLast=ScanPositionLast - BlockWidth+1

+PositionLastX

[0161] Следующий псевдокод аналогичен вышеприведенному псевдокоду, но преобразует индикатор LSC на основе блоков в индикатор LSC на основе сканирования, когда используется диагональное сканирование от нижней левой до верхней правой позиции:

1. DiagNum=PositionLastY+PositionLastX

2. If (DiagNum<BlockWidth)

a. ScanPositionLast=(DiagNum * (DiagNum+1))>> 1

b. ScanPositionLast=ScanPositionLast+PositionLastY

3. Else

a. T=((BlockWidth-1)<<1 ) - DiagNum

b. ScanPositionLast=MaxNumCoeffM1 - ((T * (T+1))>> 1)

c. If ((T% 2)==1)

i. ScanPositionLast=ScanPositionLast - BlockWidth+1

+PositionLastY

d. Else

i. ScanPositionLast=ScanPositionLast - BlockWidth+1

+PositionLastX

[0162] На фиг. 10 показана блок-схема алгоритма, которая иллюстрирует другой пример неитерационной операции 200 для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. В примере, показанном на фиг. 10, видеодекодер 30 может сохранять блок коэффициентов преобразования в памяти в виде 1-D массива. В этом 1-D массиве за коэффициентами преобразования в верхней строке блока коэффициентов преобразования следуют коэффициенты преобразования в следующей более низкой строке, за которыми следуют коэффициенты преобразования, связанные со следующей более низкой строкой, и т.д. После того как видеодекодер 30 начинает операцию 200, видеодекодер 30 может устанавливать индикатор LSC на основе сканирования равным значению, которое указывает позицию в 1-D массиве, которая связана с координатами, указанными индикатором LSC на основе блоков (202). Видеодекодер 30 может определять позицию в 1-D массиве, умножая координату y, указанную индикатором LSC на основе блоков, на ширину блока коэффициентов преобразования и затем прибавляя координату x, указанную индикатором LSC на основе блоков. Если порядок сканирования является горизонтальным порядком сканирования, видеодекодер 30 может не нуждаться в осуществлении какой-либо дополнительной обработки для получения индикатора LSC на основе сканирования.

[0163] Затем видеодекодер 30 может определять, является ли порядок сканирования зигзагообразным порядком сканирования (204). В соответствии с определением, что порядок сканирования является зигзагообразным порядком сканирования (“Да” на 204), видеодекодер 30 может вычислять диагональное число (“uiD”) как сумму координаты y индикатора LSC на основе блоков (“uiPosLastY”) и координаты x индикатора LSC на основе блоков (“uiPosLastX”) (206). Затем видеодекодер 30 может определять, меньше ли диагональное число ширины блока коэффициентов преобразования (“uiWidth”) (208). В соответствии с определением, что диагональное число меньше ширины блока коэффициентов преобразования (“Да” на 208), видеодекодер 30 может вычислять значение для индикатора LSC на основе сканирования (“uiScanPosLast”) на основании диагонального числа (210). Например, видеодекодер 30 может вычислять начальное значение для индикатора LSC на основе сканирования следующим образом: uiScanPosLast=uiD * (uiD+1))>>1, где “uiScanPosLast” - индикатор LSC на основе сканирования, и “uiD” - диагональное число. В этом примере, если диагональное число является четным числом, видеодекодер 30 может затем вычислять конечное значение для индикатора LSC на основе сканирования, суммируя координату y индикатора LSC на основе блоков с начальным значением индикатора LSC на основе сканирования. Если диагональное число является нечетным числом, видеодекодер 30 может вычислять конечное значение для индикатора LSC на основе сканирования, суммируя координату x индикатора LSC на основе блоков с начальным значением индикатора LSC на основе сканирования.

[0164] В противном случае в соответствии с определением, что идентификатор позиции не меньше ширины блока коэффициентов преобразования (“Нет” на 208), видеодекодер 30 может вычислять временное значение (“uiDI”) (212). Видеодекодер 30 может вычислять временное значение следующим образом: uiDI=((uiWidth1)<<1)-uiD, где “uiDI” - временное значение, “uiWidth” - ширина блока коэффициентов преобразования, и “uiD” - диагональное число. После вычисления временного значения видеодекодер 30 может вычислять индикатор LSC на основе сканирования на основании временного значения (214). Видеодекодер 30 может вычислять начальное значение индикатора LSC на основе сканирования следующим образом: uiScanPosLast=uiMaxNumCoeffM1 - (uiDI * ( uiDI+1 )>>1 ), где “uiScanPosLast” - индикатор LSC на основе сканирования, “uiMaxNumCoeffM1” - максимальное количество коэффициентов преобразования, которое может иметь блок коэффициентов преобразования, и “uiDI” - временное значение. Если временное значение является четным, видеодекодер 30 может вычислять конечное значение индикатора LSC на основе сканирования вычитанием (uiWidth - 1 - uiPosLastY) из начального значения индикатора LSC на основе сканирования, где “uiWidth” - ширина блока коэффициентов преобразования, и “uiPosLastY” - координата y индикатора LSC на основе блоков. Если временное значение является нечетным, видеодекодер 30 может вычислять конечное значение индикатора LSC на основе сканирования вычитанием (uiWidth - 1 - uiPosLastX) из начального значения индикатора LSC на основе сканирования, где “uiWidth” - ширина блока коэффициентов преобразования, и “uiPosLastX” - координата x индикатора LSC на основе блоков.

[0165] В соответствии с определением, что порядок сканирования не является зигзагообразным порядком сканирования (“Нет” на 204), видеодекодер 30 может определять, является ли порядок сканирования вертикальным порядком сканирования (216). В соответствии с определением, что порядок сканирования является вертикальным порядком сканирования (“Да” на 216), видеодекодер 30 может вычислять индикатор LSC на основе сканирования из индикатора LSC на основе блоков и размера блока коэффициентов преобразования (218). Например, видеодекодер 30 может вычислять индикатор LSC на основе сканирования следующим образом: uiScanPosLast=uiPosLastY+(uiPosLastX<<uiLog2BlockSize), где uiScanPosLast - индикатор LSC на основе сканирования, uiPosLastY - координата y индикатора LSC на основе блоков, uiPosLastX - координата x индикатора LSC на основе блоков, и “uiLog2BlockSize” - двоичный логарифм размера блока коэффициентов преобразования.

[0166] Нижеследующий код описывает пример алгоритма для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования, когда порядок сканирования является горизонтальным, вертикальным или зигзагообразным порядком сканирования, в соответствии с примером, приведенным на фиг. 10. Предполагается, что блок коэффициентов преобразования сохраняется в памяти построчно.

/* Код для зигзагообразного сканирования */

UInt uiScanPosLast=uiBlkPosLast;// -> горизонтальное

//сканирование

if(uiScanIdx==SCAN_ZIGZAG)// -> зигзагообразное

//сканирование

{

UInt uiD=uiPosLastY+uiPosLastX;

if(uiD<uiWidth)

{

uiScanPosLast=(uiD * ( uiD+1))>>1;

uiScanPosLast += uiD% 2 ? uiPosLastY: uiPosLastX;

}

else

{

UInt uiDI=((uiWidth-1)<<1) - uiD;

uiScanPosLast=uiMaxNumCoeffM1 - ( uiDI * (uiDI+1)

>>1);

uiScanPosLast -=uiDI% 2 ? uiWidth-1

- uiPosLastY: uiWidth - 1 - uiPosLastX;

}

}

else if(uiScanIdx==SCAN_VER )// вертикальное

//сканирование

{

uiScanPosLast=uiPosLastY+(uiPosLastX<<uiLog2BlockSize);

}

[0167] Видеодекодер 30 может осуществлять аналогичную операцию в отношении диагонального порядка сканирования (в отличие от рассмотренного выше зигзагообразного сканирования). В такой операции видеодекодер 30 может вычислять индикатор LSC на основе сканирования на этапе 214 следующим образом: uiScanPosLast=uiMaxNumCoeffM1 - (uiDI * (uiDI+1)>>1 ) - uiWidth+1+uiPosLastX, где “uiScanPosLast” - индикатор LSC на основе сканирования, “uiMaxNumCoeffM1” - максимальное количество коэффициентов преобразования в блоке коэффициентов преобразования, “uiDI” - временное значение, “uiWidth” - ширина блока коэффициентов преобразования, и “uiPosLastX” - координата x индикатора LSC на основе блоков. Нижеследующий код описывает пример алгоритма для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования, когда порядок сканирования является диагональный порядок сканирования.

/* Код для диагонального сканирования */

UInt uiScanPosLast=uiBlkPosLast;// -> горизонтальное

//сканирование

if(uiScanIdx==SCAN_DIAGONAL)// -> диагональное

//сканирование

{

UInt uiD=uiPosLastY+uiPosLastX;

if(uiD<uiWidth)

{

uiScanPosLast=(uiD * ( uiD+1))>>1;

uiScanPosLast+=uiD% 2 ? uiPosLastY: uiPosLastX;

}

else

{

UInt uiDI=((uiWidth-1)<<1) - uiD;

uiScanPosLast=uiMaxNumCoeffM1 - (uiDI * (uiDI+1)

>>1) - uiWidth+1+uiPosLastX;

}

}

else if( uiScanIdx==SCAN_VER)// -> вертикальное

//сканирование

{

uiScanPosLast=uiPosLastY+(uiPosLastX<<uiLog2BlockSize);

}

[0168] На фиг. 11 показана блок-схема операций, которая иллюстрирует другой пример операции 250 для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. Как показано в примере, приведенном на фиг. 11, видеодекодер 30 может сохранять поисковую таблицу (252). Поисковая таблица отображает индикаторы LSC на основе блоков в индикаторы LSC на основе сканирования согласно порядку сканирования. Например, если порядок сканирования является зигзагообразным порядком сканирования, поисковая таблица может включать в себя запись, которая отображает координаты (1, 1) в индикатор LSC на основе сканирования “6”. В некоторых примерах видеодекодер 30 может сохранять разные поисковые таблицы для разных порядков сканирования и разных размеров блока коэффициентов преобразования.

[0169] После того как видеодекодер 30 сохраняет поисковую таблицу, видеодекодер 30 может принимать индикатор LSC на основе блоков (254). После приема индикатора LSC на основе блоков видеодекодер 30 может обращаться к поисковой таблице для извлечения индикатора LSC на основе сканирования, который соответствует индикатору LSC на основе блоков (256). В некоторых примерах видеодекодер 30 генерирует единое значение на основании координат x и y индикатора LSC на основе блоков. Например, видеодекодер 30 может генерировать единое значение, умножая координату y на ширину блока коэффициентов преобразования и затем прибавляя координату x. В таких примерах видеодекодер 30 может использовать единое значение в качестве индекса для извлечения индикатора LSC на основе сканирования из поисковой таблицы.

[0170] Видеодекодер 30 может использовать дополнительные операции для преобразования индикаторов LSC на основе блоков в индикаторы LSC на основе сканирования. Например, видеодекодер 30 может использовать следующий псевдокод для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования при сканировании коэффициентов преобразования в диагональном порядке сканирования подблоков. В этом диагональном порядке сканирования подблоков видеодекодер 30 обрабатывает подблоки в диагональном порядке от верхней правой до нижней левой позиции и сканирует коэффициенты преобразования в каждом из подблоков в диагональном порядке от верхней правой до нижней левой позиции.

uiScanPosLast=0;

UInt sWidth=uiWidth>>2;

UInt sX=uiPosLastX>>2;

UInt sY=uiPosLastY>>2;

UInt uiDs=sX+sY;

if(uiDs<sWidth)

{

UiScanPosLast +=sX+((uiDs * (uiDs+1))>>1);

}

else

{

UInt uiDI=((sWidth-1)<<1) - uiDs;

uiScanPosLast +=sWidth*(sWidth-1)

- (uiDI * (uiDI+1)>>1)+sX;

}

uiPosLastX -=sX<<2;

uiPosLastY -=sY<<2;

uiScanPosLast <<=4;

UInt uiD =uiPosLastY+uiPosLastX;

if(uiD<4)

{

uiScanPosLast += uiPosLastX+((uiD * ( uiD+1))>>1);

}

else

{

UInt uiDI =6-uiD;

uiScanPosLast +=12-(uiDI * (uiDI+1)>>1)

+uiPosLastX;

}

В вышеприведенном псевдокоде “uiWidth” указывает ширину блока коэффициентов преобразования, “uiPosLastX” указывает координату x индикатора LSC на основе блоков, “uiPosLastY” указывает координату y индикатора LSC на основе блоков и “uiScanPosLast” указывает индикатор LSC на основе сканирования. “sX” указывает координату x верхнего левого коэффициента преобразования подблока, содержащего последний значимый коэффициент преобразования. “sY” указывает координату y верхнего левого коэффициента преобразования подблока, содержащего последний значимый коэффициент преобразования. Вышеприведенный псевдокод может представлять комбинацию операций для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования, поскольку вышеприведенный псевдокод сначала осуществляет операцию для определения порядка сканирования (“uiScanPosLast”) подблока, который содержит последний значимый коэффициент преобразования, и затем осуществляет операцию для определения порядка сканирования последнего значимого коэффициента преобразования в подблоке.

[0171] На фиг. 12 показана блок-схема операций, которая иллюстрирует пример итерационной операции 300 для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. После того как видеодекодер 30 начинает операцию 300, видеодекодер 30 может принимать индикатор LSC на основе блоков, который указывает LSC блока коэффициентов преобразования согласно порядку сканирования (302). Затем видеодекодер 30 может устанавливать индикатор позиции для указания первой позиции блока коэффициентов преобразования согласно порядку сканирования (304). В некоторых примерах указание позиции может включать в себя первое значение, которое указывает горизонтальную, x, позицию текущего коэффициента преобразования, и второе значение, которое указывает вертикальную, y, позицию текущего коэффициента преобразования. Например, если порядок сканирования начинается с составляющей DC, видеодекодер 30 может устанавливать индикатор позиции для указания позиции с координатами (0,0). Кроме того, видеодекодер 30 может инициализировать индикатор LSC на основе сканирования на нуль (306).

[0172] Затем видеодекодер 30 может продвигать позицию, указанную индикатором позиции, согласно порядку сканирования (308). Например, если порядок сканирования является горизонтальным порядком сканирования и индикатор позиции в данный момент указывает позицию (3, 4), видеодекодер 30 может продвигать позицию, указанную индикатором позиции, таким образом, чтобы индикатор позиции указывал позицию (3, 5). Затем видеодекодер 30 может увеличивать индикатор LSC на основе сканирования (310).

[0173] Затем видеодекодер 30 может определять, идентична ли позиция, указанная индикатором позиции, позиции, указанной индикатором LSC на основе блоков (312). Другими словами, видеодекодер 30 может определять, совпадают ли указанные позиции. Если позиция, указанная индикатором позиции, идентична позиции, указанной индикатором LSC на основе блоков, индикатор LSC на основе сканирования указывает позицию LSC. Если позиция, указанная индикатором позиции, не является позицией, указанной индикатором LSC на основе блоков (“Нет” на 312), видеодекодер 30 может повторять этапы 308-312 с продвинутым индикатором позиции. Если позиция, указанная индикатором позиции, совпадает с позицией, указанной индикатором LSC на основе блоков (“Да” на 312), видеодекодер 30 может заканчивать операцию 300.

[0174] Следующий псевдокод может описывать перемежающуюся итерационную операцию для преобразования индикатора LSC на основе блоков в индикатор LSC на основе сканирования. В этом псевдокоде видеодекодер 30 проверяет каждую позицию сканирования для определения, совпадает ли соответствующая позиция на основе блоков с позицией, указанной индикатором LSC. Видеодекодер 30 прекращает проверку позиций, когда текущая позиция сканирования (“uiBlkPosLast”) равна индикатору LSC на основе блоков (“uiBlkPos”).

for( uiScanPosLast=0; uiScanPosLast<uiMaxNumCoeffM1;

uiScanPosLast++)

{

UInt uiBlkPos=scan[uiScanPosLast];

if(uiBlkPosLast==uiBlkPos)

{

break;

}

}

[0175] На фиг. 13 показана принципиальная схема блока 350 коэффициентов преобразования, демонстрирующая последний значимый коэффициент преобразования. В примере, показанном на фиг. 13, каждый кружок представляет отдельный коэффициент преобразования в блоке 350 коэффициентов преобразования. Черные кружки на фиг. 13 соответствуют значимым коэффициентам преобразования и белые кружки соответствуют незначимым коэффициентам преобразования. Коэффициент 352 преобразования является последним значимым коэффициентом преобразования блока 350 коэффициентов преобразования согласно диагональному порядку сканирования. Фиг. 13 представляет диагональный порядок сканирования в виде стрелки, проходящей через кружки. Исходя из того что верхней строкой блока 350 коэффициентов преобразования является строка 0 и самым левым столбцом является столбец 0, индикатор LSC на основе блоков для коэффициента 352 преобразования указывает координаты (2, 1). Индикатором LSC на основе сканирования для коэффициента 352 преобразования может быть число “7”.

[0176] Следует понимать, что в зависимости от варианта осуществления определенные действия или события любого из описанных здесь способов могут осуществляться в разной последовательности, могут добавляться, объединяться или вовсе упраздняться (например, не все описанные действия или события необходимы для практического осуществления способа). Кроме того, в некоторых вариантах осуществления действия или события могут осуществляться одновременно, например, посредством многопотоковой обработки, обработки прерываний или множественных процессоров, а не последовательно.

[0177] Специалистам очевидно, что различные иллюстративные логические блоки, модули, схемы и этапы алгоритма, описанные в связи с раскрытыми здесь способами, системами и устройствами, можно реализовать в виде электронного аппаратного обеспечения, компьютерного программного обеспечения, выполняемого процессором, или их комбинации. Чтобы отчетливо проиллюстрировать эту взаимозаменяемость аппаратного обеспечения и программного обеспечения, различные иллюстративные компоненты, блоки, модули, схемы и этапы были описаны выше, в целом, применительно к их функциональным возможностям. Реализовать ли такие функциональные возможности в виде аппаратного обеспечения или программного обеспечения, зависит от конкретного применения и конструкционных ограничений, налагаемых на систему в целом. Специалисты в данной области могут реализовать описанные функциональные возможности по-разному для каждого конкретного применения, но такие решения относительно реализации не следует интерпретировать как сопряженные с отходом от объема настоящего изобретения.

[0178] Кроме того, раскрытые здесь варианты осуществления можно реализовать или осуществлять посредством электронного устройства или схемы, например процессора общего назначения, цифрового сигнального процессора (DSP), специализированной интегральной схемы (ASIC), вентильной матрицы, программируемой пользователем (FPGA) или другого программируемого логического устройства, дискретной вентильной или транзисторной логики, дискретных аппаратных компонентов или любой их комбинации, предназначенных для осуществления описанных здесь функций. Процессор общего назначения может представлять собой микропроцессор, но альтернативно процессором может быть любой традиционный процессор, контроллер, микроконтроллер или конечный автомат. Процессор также можно реализовать в виде комбинации вычислительных устройств, например, комбинации DSP и микропроцессора, совокупности микропроцессоров, одного или нескольких микропроцессоров совместно с ядром DSP или любой другой подобной конфигурации.

[0179] Этапы способа или алгоритма, описанного в связи с раскрытыми здесь вариантами осуществления, можно реализовать непосредственно в виде аппаратного обеспечения, программного модуля, выполняемого процессором, или их комбинации. Программный модуль может располагаться в RAM, флэш-памяти, ROM, EPROM, EEPROM, регистрах, на жестком диске, сменном диске, CD-ROM или любой другой форме носителя данных, известной в технике. Иллюстративный носитель данных подключен к процессору, что позволяет процессору считывать информацию с носителя данных и записывать информацию на него. Альтернативно носитель данных может быть встроен в процессор. Процессор и носитель данных могут располагаться в ASIC. ASIC может располагаться в пользовательском терминале. Альтернативно процессор и носитель данных могут располагаться в пользовательском терминале в виде дискретных компонентов.

[0180] Выше были описаны различные примеры. Эти и другие примеры соответствуют объему нижеследующей формулы изобретения.

Похожие патенты RU2576590C2

название год авторы номер документа
ОПРЕДЕЛЕНИЕ КОНТЕКСТОВ ДЛЯ КОДИРОВАНИЯ ДАННЫХ КОЭФФИЦИЕНТОВ ПРЕОБРАЗОВАНИЯ ПРИ КОДИРОВАНИИ ВИДЕО 2013
  • Серегин Вадим
  • Соле Рохальс Хоэль
  • Карчевич Марта
RU2603537C2
ОПРЕДЕЛЕНИЕ КОНТЕКСТОВ ДЛЯ КОДИРОВАНИЯ ДАННЫХ КОЭФФИЦИЕНТОВ ПРЕОБРАЗОВАНИЯ ПРИ КОДИРОВАНИИ ВИДЕО 2013
  • Серегин Вадим
  • Соле Рохальс Джоэль
  • Карчевич Марта
RU2595897C2
ПОВЫШЕНИЕ ПРОПУСКНОЙ СПОСОБНОСТИ ДЛЯ КОДИРОВАНИЯ УРОВНЯ КОЭФФИЦИЕНТОВ CABAC 2012
  • Карчевич Марта
  • Чэнь Цзяньлэ
  • Чиэнь Вей-Дзунг
  • Джоши Раджан Лаксман
RU2611992C2
ОТДЕЛЬНОЕ КОДИРОВАНИЕ ПОЗИЦИИ ПОСЛЕДНЕГО ЗНАЧИМОГО КОЭФФИЦИЕНТА ВИДЕОБЛОКА ПРИ КОДИРОВАНИИ ВИДЕО 2011
  • Соле Рохальс Хоэль
  • Джоши Раджан Лаксман
  • Карчевич Марта
RU2563681C2
СКАНИРОВАНИЕ КОЭФФИЦИЕНТОВ ПРИ КОДИРОВАНИИ ВИДЕО 2012
  • Джоши Раджан Лаксман
  • Соле Рохальс Хоэль
  • Карчевич Марта
  • Чжэн Юньфэй
  • Ван Сянлинь
RU2604421C2
КОДИРОВАНИЕ ПОЗИЦИИ ПОСЛЕДНЕГО ЗНАЧИМОГО КОЭФФИЦИЕНТА В ВИДЕОБЛОКЕ НА ОСНОВЕ ПОРЯДКА СКАНИРОВАНИЯ ДЛЯ БЛОКА ПРИ КОДИРОВАНИИ ВИДЕО 2011
  • Соле Рохальс Хоэль
  • Кобан Мухаммед Зейд
  • Чжэн Юньфей
  • Джоши Раджан Лаксман
  • Карчевич Марта
RU2541226C2
КОДИРОВАНИЕ ФЛАГОВ КОДИРОВАННЫХ БЛОКОВ 2013
  • Го Ливэй
  • Ван Сянлинь
  • Карчевич Марта
RU2627119C2
КОДИРОВАНИЕ КОЭФФИЦИЕНТОВ ПРЕОБРАЗОВАНИЯ ДЛЯ ВИДЕОКОДИРОВАНИЯ 2012
  • Соле Рохальс Хоэль
  • Джоши Раджан Лаксман
  • Карчевич Марта
RU2562381C1
ЗАПОЛНЕНИЕ НЕЗНАЧАЩЕЙ ИНФОРМАЦИЕЙ СЕГМЕНТОВ В БЛОКАХ УРОВНЯ АБСТРАКЦИИ СЕТИ КОДИРОВАННОГО СЛАЙСА 2012
  • Ван Е-Куй
  • Кобан Мухаммед Зейд
  • Карчевич Марта
RU2575397C2
ПАЛИТРОВОЕ ПРОГНОЗИРОВАНИЕ ПРИ КОДИРОВАНИИ ВИДЕО НА ОСНОВЕ ПАЛИТР 2014
  • Го Ливэй
  • Карчевич Марта
  • Соле Рохальс Джоэль
  • Джоши Раджан Лаксман
  • Ким Воо-Шик
  • Пу Вэй
RU2641252C2

Иллюстрации к изобретению RU 2 576 590 C2

Реферат патента 2016 года ВЫВОД ПОЗИЦИИ В ПОРЯДКЕ СКАНИРОВАНИЯ ПОСЛЕДНЕГО ЗНАЧИМОГО КОЭФФИЦИЕНТА ПРЕОБРАЗОВАНИЯ ПРИ КОДИРОВАНИИ ВИДЕОСИГНАЛА

Изобретение относится к вычислительной технике. Технический результат заключается в получении индикатора последнего значимого коэффициента (LSC) на основе сканирования для использования при декодировании карты значимости для блока коэффициентов преобразования. Способ декодирования видеоданных, в котором получают индикатор LSC на основе сканирования из индикатора LSC на основе блоков, причем индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования подблоков, причем блок коэффициентов преобразования разделен на множество подблоков, причем индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования подблоков, причем при получении индикатора LSC на основе сканирования: определяют координаты х и y верхнего левого коэффициента преобразования подблока из множества подблоков, который содержит последний значимый коэффициент; определяют значение первой переменной посредством суммирования координаты х и y верхнего левого коэффициента преобразования подблока; и декодируют на основании индикатора LSC на основе сканирования карту значимости для блока. 3 н. и 9 з.п. ф-лы, 13 ил.

Формула изобретения RU 2 576 590 C2

1. Способ декодирования видеоданных, причем способ содержит этапы, на которых:
получают индикатор последнего значимого коэффициента (LSC) на основе сканирования из индикатора LSC на основе блоков, причем индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования подблоков, причем блок коэффициентов преобразования разделен на множество подблоков, причем индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования подблоков, причем ширина подблока равна uiWidth>>2, где uiWidth представляет собой ширину блока коэффициентов преобразования, ">>" представляет операцию сдвига вправо, первое значение переменной позиции сканирования равно 0, и получение индикатора LSC на основе сканирования содержит этапы, на которых:
определяют координату х верхнего левого коэффициента преобразования подблока из множества подблоков, который содержит последний значимый коэффициент, посредством определения uiPosLastX>>2, где uiPosLastX представляет собой координату х индикатора LSC на основе блоков;
определяют координату y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, посредством определения uiPosLastY>>2, где uiPosLastY представляет собой координату y индикатора LSC на основе блоков;
определяют значение первой переменной посредством суммирования координаты х верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, и координаты y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент;
если значение первой переменной меньше, чем ширина подблока, определяют второе значение переменной позиции сканирования как равное сумме первого значения индикатора на основе сканирования и sX+((uiDs*(uiDs+1))>>1), где sX представляет собой координату х верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, и uiDs представляет собой первую переменную;
если значение первой переменной не меньше, чем ширина подблока:
определяют значение второй переменной как равное ((sWidth-1)<<1)-uiDs, где sWidth представляет собой ширину подблока и "<<" представляет операцию сдвига влево; и
определяют второе значение переменной позиции сканирования как равное сумме первого значения переменной позиции сканирования и sWidth*(sWidth-1)-(uiDI*(uiDI+1)>>1)+sX, где uiDI представляет собой вторую переменную;
определяют значение переменной координаты х как равное координате х индикатора LSC на основе блоков минус sX<<2;
определяют значение переменной координаты y как равное координате y индикатора LSC на основе блоков минус sY<<2, где sY представляет собой координату y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент;
определяют третье значение переменной позиции сканирования как равное второму значению переменной позиции сканирования <<4;
определяют значение третьей переменной в качестве суммы переменной координаты х и переменной координаты y;
если значение третьей переменной меньше 4, определяют индикатор LSC на основе сканирования как сумму третьего значения переменной позиции сканирования и uiPosLastX+((uiD*(uiD+1))>>1), где uiPosLastX представляет собой переменную координаты х и uiD представляет собой третью переменную;
если значение третьей переменной не меньше 4:
определяют значение четвертой переменной как 6-uiD; и
определяют индикатор LSC на основе сканирования как сумму третьего значения переменной позиции сканирования и 12-(uiDI*(uiDI+1)>>1)+uiPosLastX, где uiDI представляет собой четвертую переменную; и
декодируют на основании индикатора LSC на основе сканирования карту значимости для блока.

2. Способ по п. 1, в котором порядок сканирования подблоков начинается с составляющей DC блока.

3. Способ по п. 1, в котором декодирование карты значимости содержит этап, на котором используют индикатор LSC на основе сканирования для определения, включает ли в себя карта значимости флаги значимости для коэффициентов преобразования.

4. Способ по п. 3,
причем способ дополнительно содержит этап, на котором принимают кодированную версию контекстно-адаптивного двоичного арифметического кодирования (САВАС) карты значимости;
причем использование индикатора LSC на основе сканирования для декодирования карты значимости содержит этапы, на которых:
выбирают контекстную модель на основании индикатора LSC на основе сканирования; и
используют контекстную модель при выполнении операции декодирования методом САВАС, которая декодирует карту значимости; и
при этом способ дополнительно содержит этапы, на которых:
принимают кодированную версию информации уровня для блока; и
используют карту значимости для декодирования информации уровня.

5. Способ по п. 4, дополнительно содержащий этапы, на которых:
отображают информацию уровня в блок согласно порядку сканирования подблоков;
осуществляют операцию обратного квантования на коэффициентах преобразования в блоке для генерации обратно-квантованного блока;
осуществляют операцию обратного преобразования на обратно-квантованном блоке для генерации остаточных данных;
осуществляют операцию внутреннего прогнозирования, которая генерирует прогнозируемые данные; и
осуществляют операцию реконструкции, которая использует остаточные данные и прогнозируемые данные для генерации реконструированного блока, причем реконструированный блок является участком изображения видеоданных.

6. Устройство декодирования видеосигнала, содержащее:
память, выполненную с возможностью хранения блока коэффициентов преобразования; и
один или более процессоров, осуществляющих связь с памятью, причем один или более процессоров выполнены с возможностью:
получать индикатор последнего значимого коэффициента (LSC) на основе сканирования из индикатора LSC на основе блоков, причем индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования подблоков, причем блок коэффициентов преобразования разделен на множество подблоков, причем индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования подблоков, причем ширина подблока равна uiWidth>>2, где uiWidth представляет собой ширину блока коэффициентов преобразования, ">>" представляет операцию сдвига вправо, первое значение переменной позиции сканирования равно 0, и при этом, чтобы получить индикатор LSC на основе сканирования, один или более процессоров:
определяют координату х верхнего левого коэффициента преобразования подблока из множества подблоков, который содержит последний значимый коэффициент, посредством определения uiPosLastX>>2, где uiPosLastX представляет собой координату х индикатора LSC на основе блоков;
определяют координату y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, посредством определения uiPosLastY>>2, где uiPosLastY представляет собой координату y индикатора LSC на основе блоков;
определяют значение первой переменной посредством суммирования координаты х верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, и координаты y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент;
если значение первой переменной меньше, чем ширина подблока, определяют второе значение переменной позиции сканирования как равное сумме первого значения индикатора на основе сканирования и sX+((uiDs*(uiDs+1))>>1), где sX представляет собой координату х верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, и uiDs представляет собой первую переменную;
если значение первой переменной не меньше, чем ширина подблока:
определяют значение второй переменной как равное ((sWidth-1)<<1)-uiDs, где sWidth представляет собой ширину подблока и "<<" представляет операцию сдвига влево; и
определяют второе значение переменной позиции сканирования как равное сумме первого значения переменной позиции сканирования и sWidth*(sWidth-1)-(uiDI*(uiDI+1)>>1)+sX, где uiDI представляет собой вторую переменную;
определяют значение переменной координаты х как равное координате х индикатора LSC на основе блоков минус sX<<2;
определяют значение переменной координаты y как равное координате y индикатора LSC на основе блоков минус sY<<2, где sY представляет собой координату y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент;
определяют третье значение переменной позиции сканирования как равное второму значению переменной позиции сканирования <<4;
определяют значение третьей переменной в качестве суммы переменной координаты х и переменной координаты y;
если значение третьей переменной меньше 4, определяют индикатор LSC на основе сканирования как сумму третьего значения переменной позиции сканирования и uiPosLastX+((uiD*(uiD+1))>>1), где uiPosLastX представляет собой переменную координаты х и uiD представляет собой третью переменную;
если значение третьей переменной не меньше 4:
определяют значение четвертой переменной как 6-uiD; и
определяют индикатор LSC на основе сканирования как сумму третьего значения переменной позиции сканирования и 12-(uiDI*(uiDI+1)>>1)+uiPosLastX, где uiDI представляет собой четвертую переменную; и
декодировать на основании индикатора LSC на основе сканирования карту значимости для блока.

7. Устройство декодирования видеосигнала по п. 6, в котором порядок сканирования подблоков начинается с составляющей DC блока.

8. Устройство декодирования видеосигнала по п. 6, в котором один или более процессоров выполнены с возможностью использовать индикатор LSC на основе сканирования для определения, включает ли в себя карта значимости флаги значимости для коэффициентов преобразования.

9. Устройство декодирования видеосигнала по п. 8,
в котором один или более процессоров выполнены с возможностью приема кодированной версии контекстно-адаптивного двоичного арифметического кодирования (САВАС) карты значимости и выполнены так, что в качестве части использования индикатора LSC на основе сканирования для декодирования карты значимости один или более процессоров:
выбирают контекстную модель на основании индикатора LSC на основе сканирования; и
используют контекстную модель при выполнении операции САВАС, которая декодирует карту значимости; и
при этом один или более процессоров дополнительно выполнены с возможностью:
приема кодированной версии информации уровня для блока; и
использования карты значимости для декодирования информации уровня.

10. Устройство декодирования видеосигнала по п. 9, в котором один или более процессоров дополнительно выполнены с возможностью:
отображения информации уровня в блок согласно порядку сканирования подблоков;
осуществления операции обратного квантования на коэффициентах преобразования в блоке для генерации обратно-квантованного блока;
осуществления операции обратного преобразования на обратно-квантованном блоке для генерации остаточных данных;
осуществления операции внутреннего прогнозирования, которая генерирует прогнозируемые данные; и
осуществления операции реконструкции, которая использует остаточные данные и прогнозируемые данные для генерации реконструированного блока, причем реконструированный блок является участком кадра видеоданных.

11. Компьютерно-читаемый носитель данных, имеющий сохраненные на нем инструкции, конфигурирующие один или более процессоров:
получать индикатор последнего значимого коэффициента (LSC) на основе сканирования из индикатора LSC на основе блоков, причем индикатор LSC на основе блоков указывает координаты последнего значимого коэффициента блока коэффициентов преобразования согласно порядку сканирования подблоков, причем блок коэффициентов преобразования разделен на множество подблоков, причем индикатор LSC на основе сканирования указывает порядковую позицию LSC согласно порядку сканирования подблоков, причем ширина подблока равна uiWidth>>2, где uiWidth представляет собой ширину блока коэффициентов преобразования, ">>" представляет операцию сдвига вправо, первое значение переменной позиции сканирования равно 0, и при этом, чтобы получить индикатор LSC на основе сканирования, один или более процессоров:
определяют координату х верхнего левого коэффициента преобразования подблока из множества подблоков, который содержит последний значимый коэффициент, посредством определения uiPosLastX>>2, где uiPosLastX представляет собой координату х индикатора LSC на основе блоков;
определяют координату y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, посредством определения uiPosLastY>>2, где uiPosLastY представляет собой координату y индикатора LSC на основе блоков;
определяют значение первой переменной посредством суммирования координаты х верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, и координаты y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент;
если значение первой переменной меньше, чем ширина подблока, определяют второе значение переменной позиции сканирования как равное сумме первого значения индикатора на основе сканирования и sX+((uiDs*(uiDs+1))>>1), где sX представляет собой координату х верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент, и uiDs представляет собой первую переменную;
если значение первой переменной не меньше, чем ширина подблока:
определяют значение второй переменной как равное ((sWidth-1)<<1)-uiDs, где sWidth представляет собой ширину подблока и "<<" представляет операцию сдвига влево; и
определяют второе значение переменной позиции сканирования как равное сумме первого значения переменной позиции сканирования и sWidth*(sWidth-1)-(uiDI*(uiDI+1)>>1)+sX, где uiDI представляет собой вторую переменную;
определяют значение переменной координаты х как равное координате х индикатора LSC на основе блоков минус sX<<2;
определяют значение переменной координаты y как равное координате y индикатора LSC на основе блоков минус sY<<2, где sY представляет собой координату y верхнего левого коэффициента преобразования подблока, который содержит последний значимый коэффициент;
определяют третье значение переменной позиции сканирования как равное второму значению переменной позиции сканирования <<4;
определяют значение третьей переменной в качестве суммы переменной координаты х и переменной координаты y;
если значение третьей переменной меньше 4, определяют индикатор LSC на основе сканирования как сумму третьего значения переменной позиции сканирования и uiPosLastX+((uiD*(uiD+1))>>1), где uiPosLastX представляет собой переменную координаты х и uiD представляет собой третью переменную;
если значение третьей переменной не меньше 4:
определяют значение четвертой переменной как 6-uiD; и
определяют индикатор LSC на основе сканирования как сумму третьего значения переменной позиции сканирования и 12-(uiDI*(uiDI+1)>>1)+uiPosLastX, где uiDI представляет собой четвертую переменную; и
декодировать на основании индикатора LSC на основе сканирования карту значимости для блока.

12. Компьютерно-читаемый носитель данных по п. 11, в котором инструкции конфигурируют один или более процессоров:
выбирать контекстную модель на основании индикатора LSC на основе сканирования;
использовать контекстную модель при выполнении операции декодирования методом контекстно-адаптивного двоичного арифметического кодирования (САВАС), которая декодирует карту значимости; и
использовать карту значимости для декодирования информации уровня.

Документы, цитированные в отчете о поиске Патент 2016 года RU2576590C2

US 7379608 B2, 27.05.2008
US 7813567 B2, 12.10.2010
Пломбировальные щипцы 1923
  • Громов И.С.
SU2006A1
Пломбировальные щипцы 1923
  • Громов И.С.
SU2006A1
СЖАТИЕ ВИДЕОИЗОБРАЖЕНИЙ С ПОМОЩЬЮ АДАПТИВНЫХ КОДОВ С ПЕРЕМЕННОЙ ДЛИНОЙ 2007
  • Е Янь
  • Бао Илян
RU2407219C2

RU 2 576 590 C2

Авторы

Соле Рохальс Хоэль

Джоши Раджан Лаксман

Карчевич Марта

Даты

2016-03-10Публикация

2012-06-28Подача