ИНИЦИАЛИЗАЦИЯ ПАРАМЕТРА РАЙСА ДЛЯ КОДИРОВАНИЯ НА УРОВНЕ КОЭФФИЦИЕНТОВ В ПРОЦЕССЕ КОДИРОВАНИЯ ВИДЕО
INITIALIZATION OF RICE PARAMETER FOR CODIFICATION AT COEFFICIENT LEVEL DURING VIDEO CODING PROCESS

[0001] Данная заявка притязает на приоритет предварительной заявки на патент (США) № 61/845850, поданной 12 июля 2013 года, предварительной заявки на патент (США) № 61/846512, поданной 15 июля 2013 года, предварительной заявки на патент (США) № 61/882536, поданной 25 сентября 2013 года, предварительной заявки на патент (США) № 61/898968, поданной 1 ноября 2013 года, предварительной заявки на патент (США) № 61/907693, поданной 22 ноября 2013, и предварительной заявки на патент (США) № 61/915337, поданной 12 декабря 2013 года, содержание каждой из которых полностью включено в данный документ по ссылке.
Область техники, к которой относится изобретение
[0002] Данное раскрытие сущности относится к кодированию видео, а более конкретно, к технологиям для кодирования коэффициентов преобразования.
Уровень техники
[0003] Возможности цифрового видео могут быть встроены в широкий диапазон устройств, включающих в себя цифровые телевизоры, системы цифровой прямой широковещательной передачи, беспроводные широковещательные системы, персональные цифровые устройства (PDA), переносные или настольные компьютеры, цифровые камеры, цифровые записывающие устройства, цифровые мультимедийные проигрыватели, устройства для видеоигр, консоли для видеоигр, сотовые или спутниковые радиотелефоны, устройства видеоконференц-связи и т.п. Цифровые видеоустройства реализуют такие технологии сжатия видео, как технологии, описанные в стандартах, заданных посредством разрабатываемых в настоящее время стандартов MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, часть 10, усовершенствованное кодирование видео (AVC), стандарта высокоэффективного кодирования видео (HEVC), и расширений таких стандартов, для того, чтобы более эффективно передавать, принимать и сохранять цифровую видеоинформацию.
[0004] Технологии сжатия видео включают в себя пространственное прогнозирование и/или временное прогнозирование для того, чтобы уменьшать или удалять избыточность, внутренне присутствующую в видеопоследовательностях. Для кодирования видео на основе блоков, серия последовательных видеомакроблоков (т.е. видеокадр или часть видеокадра) может быть сегментирована на блоки. Видеоблоки в серии внутренне кодированных последовательных (I-) макроблоков изображения кодируются с использованием пространственного прогнозирования относительно опорных выборок в соседних блоках в идентичном изображении. Видеоблоки в серии взаимно кодированных последовательных (P- или B-) макроблоков могут использовать пространственное прогнозирование относительно опорных выборок в соседних блоках в идентичном изображении или временное прогнозирование относительно опорных выборок в других опорных изображениях. Изображения могут упоминаться как кадры, и опорные изображения могут упоминаться как опорные кадры.
[0005] Пространственное или временное прогнозирование приводит в результате к прогнозирующему блоку для блока, который должен быть кодирован. Остаточные данные представляют пикселные разности между исходным блоком, который должен быть кодирован, и прогнозирующим блоком. Взаимно кодированный блок кодируется согласно вектору движения, который указывает на блок опорных выборок, формирующих прогнозирующий блок, и остаточным данным, указывающим разность между кодированным блоком и прогнозирующим блоком. Внутренне кодированный блок кодируется согласно режиму внутреннего кодирования и остаточным данным. Для дополнительного сжатия, остаточные данные могут быть преобразованы из пикселной области в область преобразования, что приводит к остаточным коэффициентам преобразования, которые затем могут быть квантованы. Квантованные коэффициенты преобразования, первоначально размещаемые в двумерном массиве, могут сканироваться в конкретном порядке для того, чтобы формировать одномерный вектор коэффициентов преобразования, и может применяться энтропийное кодирование с тем, чтобы достигать еще большего сжатия.
Сущность изобретения
[0006] В общем, это раскрытие сущности описывает технологии для инициализации параметра Райса, используемого для того, чтобы задавать коды для кодирования на уровне коэффициентов в процессе кодирования видео. В частности, это раскрытие сущности описывает технологии для определения начального значения параметра Райса, используемого для того, чтобы задавать коды, например, коды Голомба-Райса или экспоненциальные коды Голомба, для кодирования оставшихся абсолютных значений уровней коэффициентов для коэффициентов, причем контекстно-адаптивное двоичное арифметическое кодирование (CABAC) используется для того, чтобы кодировать индикаторы относительно значимых коэффициентов, уровней коэффициентов, больших 1, и уровней коэффициентов, больших 2. В некоторых примерах, технологии могут применяться к инициализации параметра Райса для кодирования на уровне коэффициентов в расширениях диапазона стандарта высокоэффективного кодирования видео (HEVC).
[0007] Технологии, описанные в этом раскрытии сущности, определяют начальное значение параметра Райса для текущей группы коэффициентов (CG), т.е. блока коэффициентов, в блоке преобразования видеоданных на основе статистических данных уровней коэффициентов, которые собираются для ранее кодированных коэффициентов видеоданных. CG может включать в себя коэффициенты преобразования в случае кодирования с потерями или коэффициенты, для которых не применяется преобразование, в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования. Статистические данные могут представлять собой статистические данные для абсолютных значений уровней коэффициентов или оставшихся абсолютных значений уровней коэффициентов ранее кодированных коэффициентов. Значение статистических данных может инициализироваться равным нулю в начале каждой серии последовательных макроблоков видеоданных, и статистические данные могут обновляться на основе одного или более уровней коэффициентов, кодированных в каждой CG серии последовательных макроблоков. В одном примере, статистические данные могут обновляться один раз в расчете на CG, когда первый уровень коэффициентов кодируется в CG. В некоторых случаях, статистические данные могут собираться отдельно для каждой из множества различных категорий CG, которые задаются на основе характеристик блоков преобразования, которые включают в себя CG. Согласно технологиям этого раскрытия сущности, в начале текущей CG в блоке преобразования, значение статистических данных преобразуется в начальное значение параметра Райса для текущей CG.
[0008] В одном примере, это раскрытие сущности направлено на способ декодирования коэффициентов в процессе декодирования видео, при этом способ содержит этапы определения статистических данных уровней коэффициентов для ранее декодированных коэффициентов остаточных видеоданных, определения начального значения параметра Райса для текущей группы коэффициентов в блоке преобразования остаточных видеоданных на основе статистических данных и декодирования оставшегося абсолютного значения уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей группе коэффициентов с использованием кодов, заданных посредством параметра Райса.
[0009] В другом примере, это раскрытие сущности направлено на способ кодирования коэффициентов в процессе кодирования видео, при этом способ содержит этапы определения статистических данных уровней коэффициентов для ранее кодированных коэффициентов остаточных видеоданных, определения начального значения параметра Райса для текущей группы коэффициентов в блоке преобразования остаточных видеоданных на основе статистических данных и кодирования оставшегося абсолютного значения уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей группе коэффициентов с использованием кодов, заданных посредством параметра Райса.
[0010] В дополнительном примере, это раскрытие сущности направлено на устройство кодирования видео, содержащее запоминающее устройство, выполненное с возможностью сохранять видеоданные, и один или более процессоров, выполненных с возможностью определять статистические данные уровней коэффициентов для ранее кодированных коэффициентов остаточных видеоданных, определять начальное значение параметра Райса для текущей группы коэффициентов в блоке преобразования остаточных видеоданных на основе статистических данных и кодировать оставшееся абсолютное значение уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей группе коэффициентов с использованием кодов, заданных посредством параметра Райса.
[0011] В другом примере, это раскрытие сущности направлено на устройство кодирования видео, содержащее средство для определения статистических данных уровней коэффициентов для ранее кодированных коэффициентов остаточных видеоданных, средство для определения начального значения параметра Райса для текущей группы коэффициентов в блоке преобразования остаточных видеоданных на основе статистических данных, и средство для кодирования оставшегося абсолютного значения уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей группе коэффициентов с использованием кодов, заданных посредством начального значения параметра Райса.
[0012] В дополнительном примере, это раскрытие сущности направлено на машиночитаемый носитель хранения данных, содержащий инструкции, которые при выполнении посредством одного или более процессоров устройства кодирования видео инструктируют процессорам определять статистические данные уровней коэффициентов для ранее кодированных коэффициентов остаточных видеоданных, определять начальное значение параметра Райса для текущей группы коэффициентов в блоке преобразования остаточных видеоданных на основе статистических данных и кодировать оставшееся абсолютное значение уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей группе коэффициентов с использованием кодов, заданных посредством параметра Райса.
[0013] Подробности одного или более примеров изложены на прилагаемых чертежах и в нижеприведенном описании. Другие признаки, цели и преимущества должны становиться очевидными из описания и чертежей и из формулы изобретения.
Краткое описание чертежей
[0014] Фиг. 1 является блок-схемой, иллюстрирующей примерную систему кодирования и декодирования видео, которая может использовать технологии для кодирования уровней коэффициентов, описанные в этом раскрытии сущности.
[0015] Фиг. 2 является концептуальным чертежом, показывающим примерные обратные порядки сканирования для кодирования на уровне коэффициентов.
[0016] Фиг. 3 является концептуальным чертежом, показывающим примерный порядок обратного диагонального сканирования на основе субблоков для кодирования на уровне коэффициентов групп коэффициентов (CG).
[0017] Фиг. 4 является концептуальным чертежом, показывающим примерный порядок обратного диагонального сканирования для кодирования уровней коэффициентов для CG.
[0018] Фиг. 5 является блок-схемой, иллюстрирующей примерный видеокодер, который может реализовывать технологии для кодирования уровней коэффициентов, описанные в этом раскрытии сущности.
[0019] Фиг. 6 является блок-схемой, иллюстрирующей примерный видеодекодер, который может реализовывать технологии для декодирования уровней коэффициентов, описанного в этом раскрытии сущности.
[0020] Фиг. 7 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения начального значения параметра Райса во время энтропийного кодирования уровней коэффициентов согласно технологиям, описанным в этом раскрытии сущности.
[0021] Фиг. 8 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения начального значения параметра Райса во время энтропийного декодирования уровней коэффициентов согласно технологиям, описанным в этом раскрытии сущности.
[0022] Фиг. 9 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения статистических данных уровней коэффициентов для ранее кодированных коэффициентов во время энтропийного кодирования уровней коэффициентов согласно технологиям, описанным в этом раскрытии сущности.
[0023] Фиг. 10 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения начального значения параметра Райса для текущей группы коэффициентов на основе определенных статистических данных согласно технологиям, описанным в этом раскрытии сущности
Подробное описание изобретения
[0024] Это раскрытие сущности описывает технологии для кодирования коэффициентов, ассоциированных с остаточными данными, в процессе кодирования видео. Технологии выполнены с возможностью инициализации параметра Райса, используемого для того, чтобы задавать коды для кодирования на уровне коэффициентов в процессе кодирования видео. В частности, это раскрытие сущности описывает технологии для определения начального значения параметра Райса, используемого для того, чтобы задавать коды, например, коды Голомба-Райса или экспоненциальные коды Голомба, для кодирования оставшихся абсолютных значений уровней коэффициентов для блока коэффициентов, причем контекстно-адаптивное двоичное арифметическое кодирование (CABAC) используется для того, чтобы кодировать индикаторы относительно значимых коэффициентов, уровней коэффициентов, больших 1, и уровней коэффициентов, больших 2. Уровни коэффициентов могут представлять собой уровни коэффициентов преобразования в случае кодирования с потерями или уровни коэффициентов, для которых не применяется преобразование (т.е. остаточные пикселные значения), в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования. В некоторых примерах, технологии могут применяться к инициализации параметра Райса для кодирования на уровне коэффициентов в расширениях диапазона стандарта высокоэффективного кодирования видео (HEVC).
[0025] Параметр Райса является настраиваемым значением, используемым для того, чтобы выбирать набор кодовых слов из семейства кодов Голомба, например, кодов Голомба-Райса или экспоненциальных кодов Голомба. Коды, заданные посредством параметра Райса, могут использоваться для того, чтобы кодировать оставшееся абсолютное значение уровня коэффициентов, по меньшей мере, для одного коэффициента в группе коэффициентов (CG), т.е. в блоке коэффициентов. В примере HEVC, каждая из CG может содержать блок преобразования 4x4 или субблок 4x4 блока преобразования видеоданных. CG могут включать в себя коэффициенты преобразования в случае кодирования с потерями или коэффициенты, для которых не применяется преобразование, в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования. В некоторых процессах, начальное значение параметра Райса задается равным нулю в начале каждой CG и условно обновляется после кодирования оставшихся абсолютных значений уровней коэффициентов в CG. В случае кодирования уровней коэффициентов для экранного контента или в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования, инициализация значения параметра Райса равным нулю для каждой CG не может быть оптимальной.
[0026] Технологии, описанные в этом раскрытии сущности, адаптивно задают начальное значение параметра Райса для того, чтобы кодировать (например, кодировать или декодировать) каждую CG, вместо задания начального значения параметра Райса равным нулю для всех случаев. В частности, это раскрытие сущности описывает технологии для определения начального значения параметра Райса для текущей CG на основе статистических данных уровней коэффициентов, которые собираются для ранее кодированных коэффициентов. Это раскрытие сущности также описывает технологии для определения статистических данных уровней коэффициентов для ранее кодированных коэффициентов видеоданных.
[0027] Статистические данные могут представлять собой статистические данные для абсолютных значений уровней коэффициентов или оставшихся абсолютных значений уровней коэффициентов ранее кодированных коэффициентов. Значение статистических данных может инициализироваться равным нулю в начале каждой серии последовательных макроблоков видеоданных, и статистические данные могут обновляться на основе одного или более уровней коэффициентов, кодированных в каждой CG серии последовательных макроблоков. В некоторых случаях, статистические данные могут обновляться один раз в расчете на CG, когда первое абсолютное значение уровня коэффициентов или первое оставшееся абсолютное значение уровня коэффициентов кодируется в CG. В других случаях, статистические данные могут собираться более часто или на основе различного уровня коэффициентов, например, когда последнее абсолютное значение уровня коэффициентов или последнее оставшееся абсолютное значение уровня коэффициентов кодируется в CG.
[0028] В качестве одного примера, статистические данные могут определяться посредством сравнения уровня коэффициентов для данного ранее кодированного коэффициента с предварительно заданной функцией статистических данных и затем определения того, следует увеличивать или уменьшать значение статистических данных, на основе сравнения. Предварительно заданная функция статистических данных, используемая для того, чтобы обновлять статистические данные, может быть основана на первом постоянном значении, которое сдвигается влево на значение статистических данных, деленное на второе постоянное значение. В других примерах, статистические данные могут определяться согласно другим технологиям.
[0029] В некоторых случаях, статистические данные могут собираться отдельно для каждой из множества различных категорий CG, которые задаются на основе характеристик блоков преобразования, которые включают в себя CG. В этом случае, категория текущей CG в блоке преобразования может определяться на основе характеристик блока преобразования, и параметр Райса может быть инициализирован для текущей CG на основе статистических данных для определенной категории. В одном примере, отдельные статистические данные могут собираться для каждой из четырех различных категорий на основе того, представляют собой блоки преобразования или нет блоки сигналов яркости, и того, представляют собой блоки преобразования или нет блоки пропуска преобразования. В других примерах, статистические данные могут быть сегментированы на различное число категорий, которые задаются на основе различных типов характеристик блоков преобразования.
[0030] Согласно технологиям этого раскрытия сущности, в начале текущей CG, значение статистических данных преобразуется в начальное значение параметра Райса для текущей CG. В некоторых примерах, значение статистических данных может преобразовываться в начальное значение параметра Райса согласно функции статистических данных. Функция статистических данных, используемая для того, чтобы инициализировать параметр Райса, может быть основана на выборе минимума из максимального значения параметра Райса или значения статистических данных, деленного на постоянное значение. В других примерах, значение статистических данных может преобразовываться в начальное значение параметра Райса согласно различной функции или согласно сохраненной таблице. Начальное значение параметра Райса для текущей CG используется для того, чтобы задавать коды, например, коды Голомба-Райса или экспоненциальные коды Голомба, для кодирования оставшихся абсолютных значений уровней коэффициентов, по меньшей мере, для одного коэффициента в текущей CG.
[0031] В некоторых примерах, видеокодер может кодировать уровни коэффициентов для коэффициентов, ассоциированных с остаточными видеоданными, в поток битов для передачи в видеодекодер или устройство хранения данных. При приеме кодированного потока битов, видеодекодер может декодировать уровни коэффициентов остаточных видеоданных взаимно-обратным способом по отношению к видеокодеру. В случае кодирования видео с потерями, коэффициенты могут представлять собой квантованные коэффициенты преобразования. В этом случае, квантованные коэффициенты преобразования могут формироваться, например, посредством применения преобразования, к примеру, дискретного косинусного преобразования (DCT), к остаточным видеоданным и затем применения квантования к коэффициентам преобразования. В случае кодирования видео без потерь либо кодирования видео с потерями с пропуском или обходом преобразования, коэффициенты могут быть пикселными значениями остаточных видеоданных и иметь уровни коэффициентов, т.е. пикселные значения, с большими абсолютными значениями. Когда коэффициенты представляют экранный контент, который может включать в себя графику и текстовые области, контент не может быть хорошо прогнозирован, что приводит к большим абсолютным значениям уровней коэффициентов для коэффициентов.
[0032] Схема инициализации параметра Райса, описанная в этом раскрытии сущности, дает возможность задания начального значения параметра Райса равным ненулевому значению в начале текущей CG для быстрой и эффективной адаптации параметра Райса к большим значениям коэффициентов, которые могут возникать, если текущая CG включает в себя экранный контент либо кодируется с пропуском или обходом преобразования. Согласно технологиям, начальное значение параметра Райса может определяться на основе статистических данных уровней коэффициентов для ранее кодированных коэффициентов. Таким образом, параметр Райса может инициализироваться равным ненулевому значению, чтобы приспосабливаться к серии последовательных макроблоков или единице кодирования экранного контента и/или к коэффициентам, которые не преобразованы или квантованы, но по-прежнему могут инициализироваться равными нулю в случае серии последовательных макроблоков или единицы кодирования естественного контента. Например, когда большие уровни коэффициентов для ранее кодированных коэффициентов приводят к большому значению статистических данных, начальное значение параметра Райса может задаваться равным ненулевому значению в соответствии с большим значением статистических данных, чтобы более быстро адаптироваться к большим значениям коэффициентов, которые с большой вероятностью должны возникать в текущей CG.
[0033] Фиг. 1 является блок-схемой, иллюстрирующей примерную систему 10 кодирования и декодирования видео, которая может использовать технологии для кодирования уровней коэффициентов, описанные в этом раскрытии сущности. Как показано на фиг. 1, система 10 включает в себя исходное устройство 12, которое передает кодированное видео в целевое устройство 14 через канал 16 связи. Кодированные видеоданные также могут сохраняться на носителе 34 хранения данных или файловом сервере 36, и к ним может осуществляться доступ посредством целевого устройства 14 требуемым образом. При сохранении на носителе хранения данных или на файловом сервере, видеокодер 20 может предоставлять кодированные видеоданные в другое устройство, к примеру, в сетевой интерфейс, средство записи компакт-дисков (CD), Blu-Ray-дисков или цифровых видеодисков (DVD) либо в штамповочное оборудование или другие устройства, для сохранения кодированных видеоданных на носителе хранения данных. Аналогично, устройство, отдельное от видеодекодера 30, к примеру, сетевой интерфейс, считывающее CD- или DVD-устройство и т.п., может извлекать кодированные видеоданные из носителя хранения данных и предоставлять извлеченные данные в видеодекодер 30.
[0034] Исходное устройство 12 и целевое устройство 14 могут содержать любое из широкого спектра устройств, включающих в себя настольные компьютеры, ноутбуки (т.е. переносные компьютеры), планшетные компьютеры, абонентские приставки, телефонные трубки, к примеру, так называемые смартфоны, телевизионные приемники, камеры, устройства отображения, цифровые мультимедийные проигрыватели, консоли для видеоигр и т.п. Во многих случаях, такие устройства могут быть иметь поддержку беспроводной связи. Следовательно, канал 16 связи может содержать беспроводной канал, проводной канал или комбинацию беспроводных и проводных каналов, подходящих для передачи кодированных видеоданных. Аналогично, доступ к файловому серверу 36 может осуществляться посредством целевого устройства 14 через любое стандартное соединение для передачи данных, включающее в себя Интернет-подключение. Оно может включать в себя беспроводной канал (например, Wi-Fi-подключение), проводное подключение (например, DSL, кабельный модем и т.д.) или комбинацию означенного, которая является подходящей для того, чтобы осуществлять доступ к кодированным видеоданным, сохраненным на файловом сервере.
[0035] Технологии для кодирования уровней коэффициентов, в соответствии с примерами этого раскрытия сущности, могут применяться к кодированию видео для поддержки любых из множества мультимедийных приложений, таких как телевизионные широковещательные передачи по радиоинтерфейсу, кабельные телевизионные передачи, спутниковые телевизионные передачи, потоковые передачи видео, например, через Интернет, кодирование цифрового видео для хранения на носителе хранения данных, декодирование цифрового видео, сохраненного на носителе хранения данных, или к другим вариантам применения. В некоторых примерах, система 10 может быть выполнена с возможностью поддерживать одностороннюю или двустороннюю передачу видео для того, чтобы поддерживать такие приложения, как потоковая передача видео, воспроизведение видео, широковещательная передача видео и/или видеотелефония.
[0036] В примере по фиг. 1, исходное устройство 12 включает в себя видеоисточник 18, видеокодер 20, модулятор/демодулятор 22 и передающее устройство 24. В исходном устройстве 12 видеоисточник 18 может включать в себя такой источник, как устройство видеозахвата, к примеру, видеокамера, видеоархив, содержащий ранее захваченное видео, интерфейс прямых видеотрансляций, чтобы принимать видео от поставщика видеоконтента, и/или компьютерную графическую систему для формирования компьютерных графических данных в качестве исходного видео либо комбинацию таких источников. В качестве одного примера, если видеоисточник 18 представляет собой видеокамеру, исходное устройство 12 и целевое устройство 14 могут формировать так называемые камерофоны или видеотелефоны, которые могут предоставляться, например, в смартфонах или планшетных компьютерах. Тем не менее, технологии, описанные в этом раскрытии сущности, могут быть применимыми к кодированию видео в общем и могут применяться к беспроводным и/или проводным приложениям либо к приложению, в котором кодированные видеоданные сохраняются на локальном диске.
[0037] Захваченное, предварительно захваченное или машиногенерируемое видео может быть кодировано посредством видеокодера 20. Кодированная видеоинформация может быть модулирована посредством модема 22 согласно стандарту связи, такому как протокол проводной или беспроводной связи, и передана в целевое устройство 14 через передающее устройство 24. Модем 22 может включать в себя различные микшеры, фильтры, усилители или другие компоненты, сконструированные с возможностью модуляции сигналов. Передающее устройство 24 может включать в себя схемы, сконструированные с возможностью передачи данных, включающие в себя усилители, фильтры и, в случае беспроводной связи, одну или более антенн.
[0038] Захваченное, предварительно захваченное или машиногенерируемое видео, которое кодируется посредством видеокодера 20, также может быть сохранено на носителе 34 хранения данных или на файловом сервере 36 для последующего применения. Носитель 34 хранения данных может включать в себя Blu-Ray-диски, DVD, CD-ROM, флэш-память или любые другие подходящие цифровые носители хранения данных для сохранения кодированного видео. После этого, к кодированному видео, сохраненному на носителе 34 хранения данных, может осуществляться доступ посредством целевого устройства 14 для декодирования и воспроизведения. Хотя не показано на фиг. 1, в некоторых примерах, носитель 34 хранения данных и/или файловый сервер 36 могут сохранять вывод передающего устройства 24.
[0039] Файловый сервер 36 может представлять собой любой тип сервера, допускающего сохранение кодированного видео и передачу этого кодированного видео в целевое устройство 14. Примерные файловые серверы включают в себя веб-сервер (например, для веб-узла), FTP-сервер, устройства по протоколу системы хранения данных с подключением по сети (NAS), локальный накопитель на дисках или любой другой тип устройства, допускающего сохранение кодированных видеоданных и их передачу в целевое устройство. Передача кодированных видеоданных из файлового сервера 36 может представлять собой потоковую передачу, передачу на основе загрузки или комбинацию вышеозначенного. Доступ к файловому серверу 36 может осуществляться посредством целевого устройства 14 через любое стандартное соединение для передачи данных, включающее в себя Интернет-подключение. Оно может включать в себя беспроводной канал (например, Wi-Fi-подключение), проводное подключение (например, DSL, кабельный модем, Ethernet, USB и т.д.) или комбинацию вышеозначенного, которая является подходящей для осуществления доступа к кодированным видеоданным, сохраненным на файловом сервере.
[0040] Целевое устройство 14, в примере по фиг. 1, включает в себя приемное устройство 26, модем 28, видеодекодер 30 и устройство 32 отображения. Приемное устройство 26 целевого устройства 14 принимает информацию по каналу 16, и модем 28 демодулирует информацию, чтобы формировать демодулированный поток битов для видеодекодера 30. Информация, передаваемая по каналу 16, может включать в себя множество синтаксической информации, сформированной посредством видеокодера 20 для использования посредством видеодекодера 30 при декодировании видеоданных. Такой синтаксис также может быть включен в кодированные видеоданные, сохраненные на носителе 34 хранения данных или на файловом сервере 36. Каждый из видеокодера 20 и видеодекодера 30 может составлять часть соответствующего кодера-декодера (кодека), который допускает кодирование или декодирование видеоданных.
[0041] Устройство 32 отображения может быть интегрированным или внешним для целевого устройства 14. В некоторых примерах, целевое устройство 14 может включать в себя интегрированное устройство отображения, а также выполнено с возможностью взаимодействовать с внешним устройством отображения. В других примерах, целевое устройство 14 может представлять собой устройство отображения. В общем, устройство 32 отображения отображает декодированные видеоданные пользователю и может содержать любое из множества устройств отображения, таких как жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED) или другой тип устройства отображения.
[0042] В примере по фиг. 1, канал 16 связи может содержать любую беспроводную и проводную среду связи, такую как радиочастотный (RF) спектр или одна или более физических линий передачи, либо любую комбинацию беспроводных и проводных сред. Канал 16 связи может формировать часть сети с коммутацией пакетов, такой как локальная вычислительная сеть, глобальная вычислительная сеть либо глобальная сеть, такая как Интернет. Канал 16 связи, в общем, представляет любую надлежащую среду связи или набор различных сред связи для передачи видеоданных из исходного устройства 12 в целевое устройство 14, включающих в себя любую надлежащую комбинацию проводных или беспроводных сред. Канал 16 связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть применимым для того, чтобы упрощать передачу из исходного устройства 12 в целевое устройство 14.
[0043] Видеокодер 20 и видеодекодер 30 могут работать согласно такому стандарту сжатия видео, как стандарт высокоэффективного кодирования видео (HEVC), разработанный посредством Объединенной группы для совместной работы над видеостандартами (JCT-VC) Экспертной группы в области кодирования видео (VCEG) ITU-T и Экспертной группы по киноизображению (MPEG) ISO/IEC. Проект HEVC-стандарта в документе JCTVC-L1003v34, авторов Bross и др. "High efficiency video coding (HEVC) text specification draft 10", Объединенная группа для совместной работы над видеостандартами (JCT-VC) ITU-T SG16 WP3 и ISO/IEC JTC1/SC29/WG11, 12 конференция: Женева, CH, 14-23 января 2013 года, доступен по адресу:
http://phenix.int-evry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC-L1003-v34.zip.
[0044] Хотя не показано на фиг. 1, в некоторых аспектах, видеокодер 20 и видеодекодер 30 могут быть интегрированы с аудио-кодером и декодером, соответственно, и могут включать в себя соответствующие модули мультиплексора-демультиплексора либо другие аппаратные средства и программное обеспечение для того, чтобы обрабатывать кодирование как аудио, так и видео в общем потоке данных или в отдельных потоках данных. Если применимо, в некоторых примерах модули мультиплексора-демультиплексора могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, таким как протокол пользовательских дейтаграмм (UDP).
[0045] Видеокодер 20 и видеодекодер 30 могут быть реализованы как любая из множества надлежащих схем кодера, к примеру, один или более микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретная логика, программное обеспечение, аппаратные средства, микропрограммное обеспечение либо любые комбинации вышеозначенного. Когда технологии реализуются частично в программном обеспечении, устройство может сохранять инструкции для программного обеспечения на подходящем энергонезависимом машиночитаемом носителе и выполнять инструкции в аппаратных средствах с использованием одного или более процессоров, чтобы осуществлять технологии этого раскрытия сущности. Каждый из видеокодера 20 и видеодекодера 30 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть комбинированного кодера/декодера (кодека) в соответствующем устройстве.
[0046] Видеокодер 20 может реализовывать любые из технологий этого раскрытия сущности для кодирования уровней коэффициентов в процессе кодирования видео. Аналогично, видеодекодер 30 может реализовывать любые из этих технологий для декодирования уровней коэффициентов в процессе декодирования видео. Видеокодер, как описано в этом раскрытии сущности, может означать видеокодер или видеодекодер. Аналогично, модуль кодирования видео может означать видеокодер или видеодекодер. Аналогично, кодирование видео может означать кодирование видео или декодирование видео.
[0047] Цифровые видеоустройства реализуют технологии сжатия видео для того, чтобы более эффективно кодировать и декодировать цифровую видеоинформацию. Сжатие видео может применять технологии пространственного (внутрикадрового) прогнозирования и/или временного (межкадрового) прогнозирования для того, чтобы уменьшать или удалять избыточность, внутренне присущую в видеопоследовательностях. HEVC-стандарт, описанный выше, основан на усовершенствованной модели устройства кодирования видео, называемой "тестовой моделью HEVC (HM)". HM предполагает несколько дополнительных возможностей устройств кодирования видео относительно существующих устройств, например, согласно ITU-T H.264/AVC. Например, тогда как H.264 предоставляет девять режимов внутреннего прогнозирующего кодирования, HEVC HM может предоставлять целых тридцать три режима внутреннего прогнозирующего кодирования. Следующий раздел подробнее поясняет конкретные аспекты HM.
[0048] Для кодирования видео согласно HEVC-стандарту, видеокадр может быть сегментирован на единицы кодирования. Единица кодирования (CU), в общем, означает область изображения, которая служит в качестве базовой единицы, к которой применяются различные инструментальные средства кодирования для сжатия видео. CU обычно имеет компонент сигнала яркости, обозначаемый в качестве Y, и два компонента сигнала цветности, обозначаемые в качестве U и V. В зависимости от формата дискретизации видео, размер U- и V-компонентов, с точки зрения числа выборок, может быть идентичным или отличающимся от размера Y-компонента.
[0049] CU типично является квадратной и может считаться аналогичной так называемому макроблоку, например, в других стандартах кодирования видео, таких как ITU-T H.264. В целях иллюстрации в этой заявке описывается кодирование согласно некоторым текущим предложенным аспектам HEVC-стандарта разработки. Тем не менее, технологии, описанные в этом раскрытии сущности, могут быть полезными для других процессов кодирования видео, таких как процессы кодирования видео, заданные согласно H.264 либо другим стандартным или собственным процессам кодирования видео.
[0050] Согласно HM, CU может включать в себя одну или более единиц прогнозирования (PU) и/или одну или более единиц преобразования (TU). Синтаксические данные в потоке битов могут задавать наибольшую единицу кодирования (LCU), которая является наибольшей CU с точки зрения числа пикселов. В общем, CU имеет назначение, аналогичное назначению макроблока H.264 за исключением того, что CU не имеет различия размера. Таким образом, CU может разбиваться на суб-CU. В общем, ссылки в этом раскрытии сущности на CU могут ссылаться на наибольшую единицу кодирования (LCU) изображения или суб-CU LCU. LCU может разбиваться на суб-CU, и каждая суб-CU дополнительно может разбиваться на суб-CU. Синтаксические данные для потока битов могут задавать максимальное число раз, которое может разбиваться LCU, что называется "CU-глубиной". Соответственно, поток битов также может задавать наименьшую единицу кодирования (SCU). Это раскрытие сущности также использует термин "блок" или "часть" для того, чтобы ссылаться на любую из CU, PU или TU. В общем, "часть" может означать любой поднабор видеокадра.
[0051] LCU может быть ассоциирована со структурой данных в виде дерева квадрантов. В общем, структура данных в виде дерева квадрантов включает в себя один узел в расчете на CU, при этом корневой узел соответствует LCU. Если CU разбивается на четыре суб-CU, узел, соответствующий CU, включает в себя четыре концевых узла, каждый из которых соответствует одной из суб-CU. Каждый узел структуры данных в виде дерева квадрантов может предоставлять синтаксические данные для соответствующей CU. Например, узел в дереве квадрантов может включать в себя флаг разбиения, указывающий то, разбивается или нет CU, соответствующая узлу, на суб-CU. Элементы синтаксиса для CU могут быть заданы рекурсивно и могут зависеть от того, разбивается или нет CU на суб-CU. Если CU не разбивается дополнительно, она называется "концевой CU". В этом раскрытии сущности, четыре суб-CU концевой CU также называются "концевыми CU", хотя и отсутствует явное разбиение исходной концевой CU. Например, если CU размера 16x16 не разбивается дополнительно, четыре суб-CU 8x8 также могут называться "концевыми CU", хотя CU 16x16 вообще не разбивается.
[0052] Концевая CU может включать в себя одну или более единиц прогнозирования (PU). В общем, PU представляет всю или часть соответствующей CU и может включать в себя данные для извлечения опорной выборки для PU. Например, когда PU кодируется во взаимном режиме, PU может включать в себя данные, задающие вектор движения для PU. Данные, задающие вектор движения, могут описывать, например, горизонтальный компонент вектора движения, вертикальный компонент вектора движения, разрешение для вектора движения (например, точность в одну четверть пиксела или точность в одну восьмую пиксела), опорный кадр, на который указывает вектор движения, и/или опорный список (например, список 0 или список 1) для вектора движения. Данные для концевой CU, задающей PU, также могут описывать, например, сегментирование CU на одну или более PU. Режимы секционирования могут отличаться в зависимости от того, является CU некодированной, кодированной в режиме внутреннего прогнозирования или кодированной в режиме взаимного прогнозирования. Для внутреннего кодирования, PU может обрабатываться идентично концевой единице преобразования, описанной ниже.
[0053] Новый HEVC-стандарт обеспечивает возможность преобразований согласно единицам преобразования (TU), которые могут отличаться для различных CU. Размеры NU типично задаются на основе размера PU в данной CU, заданного для сегментированной LCU, хотя это может не всегда иметь место. TU типично имеет идентичный размер или меньше по сравнению с PU. В некоторых примерах, остаточные выборки, соответствующие CU, могут подразделяться на меньшие единицы с использованием структуры в виде дерева квадрантов, известной как "остаточное дерево квадрантов" (RQT). Концевые узлы RQT могут называться "единицами преобразования (TU)". Значения пикселных разностей, ассоциированные с TU, могут быть преобразованы, чтобы формировать коэффициенты преобразования, которые могут быть квантованы. TU включает в себя блок преобразования сигналов яркости и два блока преобразования сигналов цветности. В связи с этим, любой процесс кодирования, поясненный ниже, который применяется к TU, фактически может применяться к блокам преобразования сигналов яркости и сигналов цветности.
[0054] В общем, PU означает данные, связанные с процессом прогнозирования. Например, когда PU кодируется во внутреннем режиме, PU может включать в себя данные, описывающие режим внутреннего прогнозирования для PU. В качестве другого примера, когда PU кодируется во взаимном режиме, PU может включать в себя данные, задающие вектор движения для PU.
[0055] В общем, TU используется для процессов преобразования и квантования. Данная CU, имеющая одну или более PU, также может включать в себя одну или более единиц преобразования (TU). После прогнозирования видеокодер 20 может вычислять остаточные значения из видеоблока, идентифицированного посредством узла кодирования в соответствии с PU. Узел кодирования затем обновляется таким образом, что он ссылается на остаточные значения, а не на исходный видеоблок. Остаточные значения содержат значения пикселных разностей, которые могут быть преобразованы в коэффициенты преобразования, квантованы и сканированы с использованием преобразований, и другую информацию преобразования, указываемую в TU, чтобы формировать преобразованные в последовательную форму коэффициенты преобразования для энтропийного кодирования. Узел кодирования может еще раз обновляться таким образом, что он ссылается на эти преобразованные в последовательную форму коэффициенты преобразования. Это раскрытие сущности типично использует термин "видеоблок" для того, чтобы означать узел кодирования CU. В некоторых конкретных случаях, это раскрытие сущности также может использовать термин "видеоблок" для того, чтобы означать древовидный блок, т.е. LCU или CU, которая включает в себя узел кодирования и PU и TU.
[0056] Видеопоследовательность типично включает в себя серии видеокадров или изображений. Группа изображений (GOP), в общем, содержит последовательность из одного или более видеоизображений. GOP может включать в себя в заголовке GOP, в заголовке одного или более изображений или в другом месте синтаксические данные, которые описывают число изображений, включенных в GOP. Каждая серия последовательных макроблоков изображения может включать в себя синтаксические данные серии последовательных макроблоков, которые описывают режим кодирования для соответствующей серии последовательных макроблоков. Видеокодер 20 типично управляет видеоблоками в пределах отдельных серий последовательных видеомакроблоков для того, чтобы кодировать видеоданные. Видеоблок может соответствовать узлу кодирования в CU. Видеоблоки могут иметь фиксированные или варьирующиеся размеры и могут отличаться по размеру согласно указанному стандарту кодирования.
[0057] Для того чтобы кодировать блок (например, единицу прогнозирования видеоданных), сначала извлекается предиктор для блока. Предиктор, также называемый "прогнозным блоком", может извлекаться через внутреннее (I-) прогнозирование (т.е. пространственное прогнозирование) либо взаимное (P- или B-) прогнозирование (т.е. временное прогнозирование). Следовательно, некоторые единицы прогнозирования могут быть внутренне кодированы (I-) с использованием пространственного прогнозирования относительно опорных выборок в соседних опорных блоках в идентичном кадре (или серии последовательных макроблоков), а другие единицы прогнозирования могут быть однонаправленно взаимно кодированы (P-) или двунаправленно взаимно кодированы (B-) относительно блоков опорных выборок в других ранее кодированных кадрах (или сериях последовательных макроблоков). В каждом случае, опорные выборки могут быть использованы для того, чтобы формировать прогнозный блок для блока, который должен быть кодирован.
[0058] После идентификации прогнозирующего блока, определяется разность между пикселами в исходном блоке видеоданных и пикселами в его прогнозирующем блоке. Эта разность может упоминаться в качестве данных остатков прогнозирования и указывает пикселные разности между пикселными значениями в блоке, который должен быть кодирован, и пикселными значениями в прогнозирующем блоке, выбранном для того, чтобы представлять кодированный блок. Чтобы достигать лучшего сжатия, данные остатков прогнозирования могут быть преобразованы, например, с использованием дискретного косинусного преобразования (DCT), дискретного синусного преобразования (DST), целочисленного преобразования, преобразования Карунена-Лоэва (K-L) или другого преобразования для того, чтобы формировать коэффициенты преобразования.
[0059] Остаточные данные в блоке преобразования, такие как TU, могут размещаться в двумерном массиве значений пикселных разностей, постоянно размещающихся в пространственной, пикселной области. Преобразование преобразует остаточные пикселные значения в двумерный массив коэффициентов преобразования в области преобразования, к примеру, в частотной области. Для дополнительного сжатия, коэффициенты преобразования могут квантоваться до энтропийного кодирования. В некоторых примерах, таких как кодирование без потерь либо кодирование с потерями с пропуском или обходом преобразования, процедуры преобразования и квантования могут пропускаться для коэффициентов.
[0060] Энтропийный кодер затем применяет энтропийное кодирование, к примеру, контекстно-адаптивное кодирование переменной длины (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), энтропийное кодирование с сегментированием на интервалы вероятности (PIPE) и т.п., к коэффициентам. В некоторых примерах, видеокодер 20 может использовать предварительно заданный порядок сканирования для того, чтобы сканировать коэффициенты, так чтобы формировать преобразованный в последовательную форму вектор, который может энтропийно кодироваться. В других примерах, видеокодер 20 может выполнять адаптивное сканирование. После сканирования коэффициентов для того, чтобы формировать одномерный вектор, видеокодер 20 может энтропийно кодировать одномерный вектор. Видеокодер 20 также может энтропийно кодировать элементы синтаксиса, ассоциированные с кодированными видеоданными, для использования посредством видеодекодера 30 при декодировании видеоданных.
[0061] Это раскрытие сущности относится к технологиям для обходного кодирования в сочетании с энтропийными кодерами по технологии контекстно-адаптивного двоичного арифметического кодирования (CABAC) или другими энтропийными кодерами, к примеру, по технологии энтропийного кодирования на основе сегментации на интервалы вероятности (PIPE) либо связанными кодерами. Арифметическое кодирование является формой энтропийного кодирования, используемой во многих алгоритмах сжатия, которые имеют высокую эффективность кодирования, поскольку оно допускает преобразование символов в кодовые слова нецелочисленной длины. Пример алгоритма арифметического кодирования представляет собой контекстное двоичное арифметическое кодирование (CABAC).
[0062] В общем, энтропийное кодирование символов данных с использованием CABAC заключает в себе один или более следующих этапов:
(1) Преобразование в двоичную форму: если символ, который должен быть кодирован, имеет недвоичное значение, он преобразуется в последовательность так называемых "элементов выборки". Каждый элемент выборки может иметь значение 0 или 1.
(2) Назначение контекста: Каждый элемент выборки (в регулярном режиме) назначается контексту. Контекстная модель определяет то, как вычисляется контекст для данного элемента выборки, на основе информации, доступной для элемента выборки, такой как значения ранее кодированных символов или номер элемента выборки.
(3) Кодирование элементов выборки: элементы выборки кодируются с помощью арифметического кодера. Чтобы кодировать элемент выборки, арифметический кодер требует в качестве ввода вероятности значения элемента выборки, т.е. вероятности того, что значение элемента выборки равно "0", и вероятности того, что значение элемента выборки равно "1". Оцененная вероятность каждого контекста представлена посредством целочисленного значения, называемого "состоянием контекста". Каждый контекст имеет состояние, и в силу этого состояние (т.е. оцененная вероятность) является идентичным для элементов выборки, назначаемых одному контексту, и отличается между контекстами.
(4) Обновление состояния: Вероятностное состояние для выбранного контекста обновляется на основе фактического кодированного значения элемента выборки (например, если значение элемента выборки равно "1", вероятность "1" увеличивается).
[0063] В случае энтропийного кодирования символов данных с использованием CABAC в режиме обхода, символ, который должен кодироваться, преобразуется в двоичную форму в последовательность элементов выборки и арифметически кодируется с помощью фиксированной равной вероятностной модели (например, с помощью экспоненциального кода Голомба или кода Голомба-Райса). Режим обхода не требует назначения контекста или обновления вероятностного состояния. Например, это раскрытие сущности описывают технологии для обходного кодирования оставшихся абсолютных значений уровней коэффициентов для коэффициентов с использованием кодов, заданных посредством параметра Райса. Следует отметить, что энтропийное кодирование на основе сегментации на интервалы вероятности (PIPE) использует принципы, аналогичные принципам арифметического кодирования, и в силу этого также может использовать технологии этого раскрытия сущности.
[0064] CABAC в H.264/AVC и HEVC использует состояния, и каждое состояние неявно связано с вероятностью. Предусмотрены варианты CABAC, в которых вероятность символа ("0" или "1") используется непосредственно, т.е. вероятность или целочисленная версия вероятности является состоянием. Например, такие варианты CABAC описываются в работе "Description of video coding technology proposal by France Telecom, NTT, NTT DOCOMO, Panasonic and Technicolor", JCTVC-A114, 1 конференция JCT-VC, Дрезден, DE, апрель 2010 года, далее называемой "JCTVC-A114", и в работе авторов A. Alshin и E. Alshina "Multi-parameter probability update for CABAC", JCTVC-F254, 6 конференция JCT-VC, Торино, IT, июль 2011 года, далее называемой "JCTVC-F254".
[0065] Для того, чтобы энтропийно кодировать блок коэффициентов, сканированных или преобразованных либо ни сканированных, ни преобразованных, процесс сканирования обычно выполняется таким образом, что двумерная матрица квантованных коэффициентов преобразования в блоке перекомпонуется, согласно конкретному порядку сканирования, в упорядоченную, одномерную матрицу, т.е. в вектор, коэффициентов. Энтропийное кодирование затем применяется к вектору коэффициентов. Сканирование коэффициентов в единице преобразования преобразует в последовательную форму двумерный массив коэффициентов для энтропийного кодера. Карта значимости может формироваться для того, чтобы указывать позиции значимых (т.е. ненулевых) коэффициентов. Сканирование может применяться для того, чтобы сканировать уровни значимых (т.е. ненулевых) коэффициентов и/или кодировать знаки значимых коэффициентов.
[0066] В HEVC-стандарте, информация позиции значимых коэффициентов преобразования (например, карта значимости) сначала кодируется для блока преобразования, чтобы указывать местоположение ненулевых коэффициентов и последнего ненулевого коэффициента в порядке сканирования. Карта значимости и информация уровня (т.е. абсолютные значения и знаки коэффициентов) кодируются для каждого коэффициента в обратном порядке сканирования.
[0067] Фиг. 2 является концептуальным чертежом, показывающим примерные обратные порядки сканирования для кодирования на уровне коэффициентов. Стандарт H.264 задает зигзагообразное сканирование. HEVC-стандарт задает три различных сканирования: диагональное сканирование субблоков, горизонтальное сканирование субблоков и вертикальное сканирование субблоков. Фиг. 2 иллюстрирует шаблон 29 обратного зигзагообразного сканирования, шаблон 31 обратного вертикального сканирования, шаблон 33 обратного горизонтального сканирования и шаблон 35 обратного диагонального сканирования, примененные к субблоку 8x8 блока преобразования. Следует отметить, что каждый из шаблона 35 обратного диагонального сканирования, шаблона 29 обратного зигзагообразного сканирования, шаблона 31 обратного вертикального сканирования и шаблона 33 обратного горизонтального сканирования переходит от более высоких частотных коэффициентов в нижнем правом углу блока преобразования к более низким частотным коэффициентам в верхнем левом углу блока преобразования.
[0068] Шаблон 35 диагонального сканирования субблоков, шаблон 33 горизонтального сканирования субблоков и шаблон 31 вертикального сканирования субблоков могут применяться для блоков преобразования 4x4 и 8x8 в HEVC-стандарте. Шаблон 35 диагонального сканирования субблоков также может применяться для блоков преобразования 16x16 и 32x32 в HEVC-стандарте. В некоторых примерах, шаблон 35 диагонального сканирования субблоков также может применяться к TU 8x8. При сканировании на основе субблоков, один субблок 4x4 большего блока преобразования сканируется до перехода к другому субблоку 4x4 в большем блоке преобразования. В других примерах, "субблок" может состоять из определенного числа последовательно сканированных коэффициентов согласно используемому порядку сканирования. Например, "субблок" может состоять из 16 последовательно сканированных коэффициентов вдоль диагонального порядка сканирования.
[0069] Фиг. 3 является концептуальным чертежом, показывающим примерный порядок обратного диагонального сканирования на основе субблоков для кодирования на уровне коэффициентов групп коэффициентов (CG). Фиг. 3 иллюстрирует блок 38 преобразования 8x8, который состоит из четырех субблоков 4x4 (37А, 37B, 37C, 37D). Как показано на фиг. 3, коэффициенты в субблоке 37D сканируются перед сканированием коэффициентов в субблоке 37C. Сканирование затем переходит от субблока 37C к субблоку 37B и в завершение к субблоку 37A. Фиг. 3 иллюстрирует порядок обратного диагонального сканирования в каждом субблоке. В других примерах, может использоваться любой порядок сканирования (например, горизонтальный, вертикальный, зигзагообразный и т.д.). В некоторых примерах, прямые порядки сканирования могут использоваться в каждом субблоке.
[0070] В HEVC-стандарте, коэффициенты могут группироваться в порцию или поднабор. Карта значимости и информация уровня (т.е. абсолютное значение и знак) коэффициентов кодируются для каждого поднабора. Поднабор коэффициентов может упоминаться в этом раскрытии сущности как "группа коэффициентов (CG)". CG может задаваться как n (например, n=16) последовательных коэффициентов в порядке сканирования для блока преобразования, который может соответствовать субблоку 4x4. В одном примере, поднабор состоит из 16 последовательных коэффициентов вдоль порядка сканирования (например, порядок прямого или обратного диагонального, горизонтального или вертикального сканирования) для блока преобразования 4x4 и блока преобразования 8x8. Для блоков преобразования 16x16 и 32x32, субблок 4x4 коэффициентов в большем блоке преобразования обрабатывается в качестве поднабора. В примере по фиг. 3, каждый из субблоков 37 может представлять собой CG.
[0071] Символы, описанные ниже, кодируются для того, чтобы представлять информацию уровней коэффициентов в CG. В одном примере, все символы кодируются в обратном порядке сканирования. Каждый из символов может кодироваться в отдельном сканировании CG согласно обратному порядку сканирования. Следующие символы могут упоминаться в качестве "флагов". Следует отметить, что любой из "флагов", поясненных в этом раскрытии сущности, не должен обязательно ограничиваться двоичным символом, но также может реализовываться как многобитовые элементы синтаксиса.
Significant_coeff_flag, также называемый sigMapFlag
Coeff_sign_flag, также называемый signFlag
[0072] , указывает значимость каждого коэффициента в поднаборе. Коэффициент с абсолютным значением, большим нуля, считается значимым. В качестве одного примера, значение sigMapFlag 0 указывает то, что коэффициент не является значимым, т.е. не больше нуля, тогда как значение 1 указывает то, что коэффициент является значимым, т.е. больше нуля. Этот флаг, в общем, может упоминаться в качестве флага значимости., указывает информацию знака для любых ненулевых коэффициентов (т.е. коэффициентов с sigMapFlag в качестве 1). Например, нуль для этого флага указывает знак плюс, тогда как 1 указывает знак минус.
Coeff_abs_level_greater1_flag, также называемый gr1Flag
[0073] , указывает то, больше или нет абсолютное значение коэффициента единицы для каких-либо ненулевых коэффициентов (т.е. коэффициентов с sigMapFlag в качестве 1, либо когда sigMapFlag неявно извлекается в качестве 1). В качестве одного примера, значение gr1Flag 0 указывает то, что коэффициент не имеет абсолютное значение, большее единицы, тогда как значение 1 для gr1Flag указывает то, что коэффициент имеет абсолютное значение, большее единицы. Этот флаг, в общем, может упоминаться в качестве флага greater-than-one.
Coeff_abs_level_greater2_flag, также называемый gr2Flag
[0074] , указывает то, больше или нет абсолютное значение коэффициента двух для каких-либо коэффициентов с абсолютным значением, большим единицы (т.е. коэффициентов с gr1Flag в качестве 1). В качестве одного примера, gr2Flag значение 0 указывает то, что коэффициент не имеет абсолютное значение, большее двух, тогда как значение 1 для gr2Flag указывает то, что коэффициент имеет абсолютное значение, большее двух. Этот флаг, в общем, может упоминаться в качестве флага greater-than-two. Sigmapflag, gr1Flag и gr2Flag могут кодироваться с использованием CABAC.
Элемент coeff_abs_level_remaining синтаксиса, также называемый "элементом levelRem синтаксиса"
[0075] , указывает оставшееся абсолютное значение уровня коэффициентов для всех коэффициентов с абсолютными значениями, большими значений, кодированных посредством предыдущих флагов. Обычно, для элемента levelRem синтаксиса, абсолютное значение уровня коэффициентов минус три кодируется (т.е. abs(level)-3) для каждого коэффициента, который имеет абсолютное значение, большее двух (т.е. для коэффициентов с gr2Flag в качестве 1). В некоторых примерах, когда максимальное число gr1Flag и/или gr2Flag достигнуто для текущей CG, элемент levelRem синтаксиса может использоваться для того, чтобы кодировать уровни коэффициентов с абсолютными значениями, меньшими или равными двум. Элемент levelRem синтаксиса может кодироваться с использованием кодов, заданных посредством значения параметра Райса, например, кодов Голомба-Райса или экспоненциальных кодов Голомба.
[0076] Фиг. 4 является концептуальным чертежом, показывающим примерный порядок обратного диагонального сканирования для кодирования уровней коэффициентов для CG 39. CG 39 может представлять собой блок преобразования 4x4 или может представлять собой субблок 4x4 в блоке преобразования 8x8, 16x16 или 32x32. Кодированные символы для коэффициентов, показанных на фиг. 4, сканированных в обратном порядке сканирования, обобщаются в таблице 1. В таблице 1, scan_pos означает позицию коэффициента вдоль шаблона обратного диагонального сканирования CG 39, показанной на фиг. 4. Scan_pos 15 является первым сканированным коэффициентом и расположен в нижнем правом углу CG 39. Коэффициент в scan_pos 15 имеет абсолютное значение 0. Scan_pos 0 является последним сканированным коэффициентом и расположен в верхнем левом углу CG 39. Квантованный коэффициент в scan_pos 0 имеет абсолютное значение 10. В случае блока преобразования 4x4 или последнего субблока 4x4 в большем блоке преобразования, первые четыре sigMapFlags не должны обязательно кодироваться, поскольку позиция последнего ненулевого коэффициента известна. Иными словами, кодирование sigMapFlag может начинаться в последнем ненулевом коэффициенте (в этом примере, коэффициенте в scan_pos 11).
Scan_pos
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Коэффициенты
0
0
0
0
1
-1
0
2
0
3
2
-1
0
5
-7
10
<i>sigMapFlag</i>
0
0
0
0
1
1
0
1
0
1
1
1
0
1
1
1
<i>gr1Flag</i>
0
0
1
1
1
0
1
1
1
<i>gr2Flag</i>
0
1
0
1
1
1
<i>signFlag</i>
0
1
0
0
0
1
0
1
0
<i>levelRem</i>
0
2
4
7
Таблица 1. Кодированные символы для коэффициентов группы коэффициентов
[0077] Из этих символов, элементы выборки sigMapFlag, gr1Flag и gr2Flag кодируются с помощью адаптивных контекстных моделей, например, с использованием CABAC. SignFlag и преобразованные в двоичную форму элементы выборки levelRem кодируются через режим обхода с помощью фиксированной равной вероятностной модели (например, с помощью экспоненциального кода Голомба или кода Голомба-Райса).
[0078] Как пояснено выше, элемент coeff_abs_level_remaining синтаксиса (т.е. levelRem) в HEVC-стандарте указывает оставшееся абсолютное значение уровня коэффициентов для коэффициента, если значение превышает значение, кодированное в предыдущих проходах сканирования для кодирования коэффициентов. Этот элемент синтаксиса кодируется в режиме обхода, чтобы увеличивать пропускную способность. HEVC-стандарт использует кодирование Голомба-Райса для небольших значений и переключается на экспоненциальное кодирование кодом Голомба для больших значений. Точка перехода между кодами Голомба-Райса и экспоненциальными кодами Голомба - это когда длина унарного кода равна 4. Параметр Райса является настраиваемым значением для того, чтобы выбирать набор кодовых слов из семейства кодов Голомба.
[0079] Например, коды Голомба-Райса являются поднабором кодов Голомба и представляют значение n>=0, с учетом настраиваемого параметра m Райса, в качестве частного q= floor(n/m) и остатка r=n-q*m, где m является степенью 2. Частное q является префиксом и имеет представление унарного кода. Остаток r является суффиксом и имеет представление фиксированной длины. В экспоненциальных кодах Голомба структура кода аналогично формируется посредством унарного префикса, после которого следует суффикс фиксированной длины, но число кодовых слов в суффиксной части удваивается после каждого бита в унарном коде. Экспоненциальные коды Голомба в силу этого имеют более медленный рост длины кодовых слов. В общем, большее значение параметра Райса приводит к более медленному росту кодов, что обеспечивает большую эффективность при кодировании больших значений коэффициентов. Дополнительные сведения относительно параметров Райса приведены в работе "Transform Coefficient Coding in HEVC" авторов J. J. Sole, R. Joshi, M. Karczewicz, N. Nguyen, T. Ji, G. Clare, F. Henry, A. Duenas, IEEE Transactions on Circuits and Systems for Video Transmission (special issue on HEVC), декабрь 2012 года.
[0080] В HEVC-стандарте, параметр Райса задается равным начальному значению в нуль в начале каждой группы коэффициентов (CG) и условно обновляется во время кодирования CG в зависимости от значения параметра Райса и абсолютного значения уровня коэффициентов для кодируемого текущего коэффициента следующим образом:
cRiceParam
If absCoeffLevel>3*2, then cRiceParam=min(cRiceParam +1, 4)
Otherwise, cRiceParam=cRiceParam,
где cRiceParam является параметром Райса, absCoeffLevel является абсолютным значением уровня коэффициентов для текущего коэффициента, и min является функцией, которая выбирает минимальное значение. HEVC-схема обновления параметра Райса обеспечивает возможность постепенной адаптации процесса преобразования в двоичную форму к статистическим данным по коэффициентам, когда большие абсолютные значения наблюдаются в распределении.
[0081] Как упомянуто выше, в HEVC-стандарте, параметр Райса сбрасывается до начального значения в нуль для текущей CG в блоке преобразования видеоданных после кодирования оставшихся абсолютных значений коэффициентов в предыдущей CG. В случае кодирования уровней коэффициентов для экранного контента или в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования, инициализация значения параметра Райса равным нулю не может быть оптимальной. Технологии этого раскрытия сущности адаптивно задают начальное значение параметра Райса в начале каждой CG вместо сброса всегда параметра Райса до нуля. Согласно технологиям, начальное значение параметра Райса для текущей CG может задаваться равным ненулевому значению. В некоторых примерах, начальное значение параметра Райса может определяться на основе статистических данных видеоданных, чтобы предоставлять лучшую производительность кодирования, особенно для экранного контента и кодирования без потерь.
[0082] В одном примере схемы инициализации параметра Райса, параметр Райса может не сбрасываться после кодирования предыдущей CG. Начальное значение параметра Райса для текущей CG вместо этого может задаваться равным идентичному значению, полученному для параметра Райса в конце кодирования предыдущей CG. Как указано в HEVC-схеме инициализации, начальное значение может задаваться равным 0 в начале текущей CG. Тем не менее, в отличие от HEVC-схемы, начальное значение параметра Райса не должно обязательно задаваться равным 0.
[0083] В другом примере схемы инициализации параметра Райса, начальное значение параметра Райса для текущей CG может задаваться равным значению, которое основано на значении параметра Райса после кодирования предыдущей CG. В конкретном примере, параметр Райса в начале каждой CG может быть инициализирован следующим образом:
cRiceParam=max (0, cRiceParam-1)
В вышеприведенном примере, значение параметра Райса инициализируется для текущей CG на основе выбора максимума из нуля или уменьшения значения параметра Райса после кодирования предыдущей CG. В некоторых других примерах, начальное значение параметра Райса может быть ограничено, как указано в следующем примере:
cRiceParam=min(2, max (0, cRiceParam-1))
В этом примере, начальное значение параметра Райса ограничивается таким образом, что оно не больше 2.
[0084] В некоторых примерах, значения, отличные от 1, могут использоваться для того, чтобы уменьшать предыдущее значение параметра Райса (например, значение n), включающие в себя вычитание 2 (т.е. n равен 2) вместо 1 из предыдущего значения параметра Райса. Например, значение уменьшения для инициализации параметра Райса может быть переменным на основе того, включена или нет текущая CG в блок преобразования, для которого применяется преобразование. Примерная формула может быть следующей:
if(transform_skip_flag)
cRiceParam=max(0, cRiceParam-1);
else
cRiceParam=max(0, cRiceParam-2)
В вышеприведенном примере, если блок преобразования представляет собой блок пропуска преобразования (т.е. transform_skip_flag=1), значение параметра Райса инициализируется для текущей CG на основе выбора максимума из нуля или уменьшения на 1 в значении параметра Райса после кодирования предыдущей CG. С другой стороны, если блок преобразования представляет собой блок пропуска преобразования (т.е. transform_skip_flag=0), значение параметра Райса инициализируется для текущей CG на основе выбора максимума из нуля или уменьшения на 2 в значении параметра Райса после кодирования предыдущей CG.
[0085] Примерные случаи схем инициализации параметра Райса, описанных в этом раскрытии сущности, могут применяться к CG, включенным во все блоки преобразования, или могут применяться к CG на основе того, применяется или нет преобразование к блоку преобразования. Например, в случае блока преобразования с пропуском преобразования или обходом преобразования, значение параметра Райса может не сбрасываться до 0 для текущей CG в блоке преобразования, но для блоков преобразования, для которых применено преобразование, параметр Райса может сбрасываться до 0 для текущей CG в блоке преобразования.
[0086] Например, в случае кодирования с потерями в режиме пропуска преобразования, уменьшение значения параметра Райса, инициализированного для текущей CG, может применяться только для CG в блоках пропуска преобразования. В качестве примера, формула может быть следующей:
if(transform_skip_flag)
cRiceParam=max(0, cRiceParam-1);
else
cRiceParam=0
В вышеприведенном примере, если блок преобразования представляет собой блок пропуска преобразования (т.е. transform_skip_flag=1), значение параметра Райса инициализируется для текущей CG на основе выбора максимума из нуля или уменьшения на 1 в значении параметра Райса после кодирования предыдущей CG. С другой стороны, если блок преобразования представляет собой блок пропуска преобразования (т.е. transform_skip_flag=0), значение параметра Райса инициализируется равным нулю для текущей CG, как указано в HEVC-схеме инициализации.
[0087] В дополнительном примере схемы инициализации параметра Райса, начальное значение параметра Райса для текущей CG может определяться на основе статистических данных уровней коэффициентов для ранее декодированных коэффициентов. Статистические данные уровней коэффициентов могут включать в себя статистические данные для абсолютных значений уровней коэффициентов или статистические данные для оставшихся абсолютных значений уровней коэффициентов для ранее кодированных коэффициентов. Схема инициализации может зависеть от ранее кодированных коэффициентов в CG, которые включены в блок преобразования, идентичный блоку преобразования текущей CG, и/или ранее кодированных коэффициентов в CG, которые включены в различные блоки преобразования до блока преобразования, который включает в себя текущую CG.
[0088] В некоторых случаях, схема инициализации параметра Райса на основе статистических данных может зависеть от одного или более из типа блока преобразования, размера блока преобразования, позиции CG в блоке преобразования, того, имеет блок преобразования тип серии последовательных макроблоков внутреннего прогнозирования или взаимного прогнозирования, цветового компонента блока преобразования и битовой глубины блока преобразования. Помимо этого, схема инициализации параметра Райса на основе статистических данных может зависеть от оставшегося абсолютного уровня ранее кодированных коэффициентов в предыдущих и текущих блоках преобразования. Например, схема инициализации параметра Райса может зависеть от последнего кодированного абсолютного значения уровня коэффициентов или последнего кодированного оставшегося абсолютного значения уровня коэффициентов в предыдущих CG, от суммы или других статистических данных уровней коэффициентов для ранее кодированных коэффициентов в предыдущих CG, или, если проще, от уровня коэффициентов первого коэффициента, кодированного в предыдущих CG.
[0089] Ниже описываются несколько примеров сбора статистических данных, используемого для схемы инициализации параметра Райса на основе статистических данных. В этом раскрытии сущности, член "statCoeff" и член "m_sumCoeff", используются взаимозаменяемо для того, чтобы обозначать статистические данные, и член "uiLevel" используется для того, чтобы обозначать абсолютное значение или оставшееся абсолютное значение уровня коэффициентов ранее кодированного коэффициента.
[0090] В одном примере, статистические данные могут определяться посредством вычисления среднего или скользящего среднего либо аналогичные статистических данных абсолютных значений или оставшихся абсолютных значений уровней коэффициентов для предыдущих кодированных коэффициентов для серии последовательных макроблоков или единицы кодирования (CU) видеоданных. Аналогично контекстам контекстно-адаптивного двоичного арифметического кодирования (CABAC), это среднее или скользящее среднее может быть инициализировано в начале серии последовательных макроблоков видеоданных и обновлено в каждой CG серии последовательных макроблоков на основе текущих уровней кодированных коэффициентов в CG. Следует понимать, что оставшееся абсолютное значение (т.е. значение coeff_abs_level_remaining) уровня коэффициентов подвергается обходному кодированию с использованием кодов, например, кодов Голомба-Райса или экспоненциальных кодов Голомба, заданных посредством параметра Райса. Описание CABAC и сравнение с инициализацией CABAC-контекстов предоставляется только для упрощения понимания.
[0091] В другом примере, статистические данные могут определяться посредством сравнения уровня коэффициентов для данного ранее кодированного коэффициента непосредственно со значением статистических данных и затем определения того, следует увеличивать, уменьшать или поддерживать значение статистических данных, на основе сравнения. Например, статистические данные могут определяться согласно следующему условному уравнению:
statCoeff+=(uiLevel==statCoeff)? 0:((uiLevel<statCoeff)?-1 :1);
В вышеприведенном уравнении, значение статистических данных (statCoeff) увеличивается, если текущий уровень коэффициентов (uiLevel) превышает предыдущий statCoeff, и уменьшается, если текущий уровень коэффициентов меньше statCoeff, или остается неизменным, если текущий уровень коэффициентов равен предыдущему statCoeff. Значение statCoeff может инициализироваться равным 0 в идентичный момент в процессе кодирования, когда инициализируются CABAC-контексты, т.е. в начале каждой серии последовательных макроблоков кодируемых видеоданных.
[0092] В другом примере, статистические данные могут определяться посредством сравнения уровня коэффициентов для данного ранее кодированного коэффициента с предварительно заданной функцией статистических данных и затем определения того, следует увеличивать или уменьшать значение статистических данных, на основе сравнения. С другой стороны, в этом примере, значение статистических данных (m_sumCoeff) может сбрасываться до нуля в начале каждой серии последовательных макроблоков видеоданных. Предварительно заданная функция статистических данных может быть основана на первом постоянном значении, которое сдвигается влево на значение статистических данных, деленное на второе постоянное значение. Один пример функции статистических данных (m_sumCoeff) задается следующим образом:
if (uiLevel>=a*(h<<((m_sumCoeff+b)/f+c)))
{
m_sumCoeff+=increase_stepsize;
}
else if ((d*uiLevel)<(h<<((m_sumCoeff+e)/f+g)))
{
m_sumCoeff-=decrease_stepsize;
}
В вышеприведенном псевдокоде, a, b, c, d, e, f, g и h являются параметрами, и "<<" обозначает операцию сдвига влево.
[0093] Далее приведены несколько примеров вышеприведенного уравнения с использованием примерных значений параметров a, b, c, d, e, f, g и h. В случае если a=3, d=2, первое постоянное значение (h) равно 1, и второе постоянное значение (f) равно 4, и оставшиеся параметры задаются равными 0, функция статистических данных (m_sumCoeff) задается следующим образом:
if (uiLevel>=3*(1<<(m_sumCoeff/4)))
{
m_sumCoeff++;
}
else if ((2*uiLevel)<(1<<(m_sumCoeff/4)))
{
m_sumCoeff- -;
}
[0094] В случае если a=1, d=1, первое постоянное значение (h) равно 1, и второе постоянное значение (f) равно 4, и оставшиеся параметры задаются равными 0, функция статистических данных (m_sumCoeff) задается следующим образом:
if (uiLevel>=(1<<(m_sumCoeff/4+1)))
{
m_sumCoeff++;
}
else if (uiLevel<(1<<(m_sumCoeff/4)))
{
m_sumCoeff- -;
}
[0095] В некоторых примерах, функция статистических данных уровней коэффициентов может включать в себя переменную, связанную с общим числом обновлений, применяемых к статистическим данным с момента инициализации равной нулю в начале серии последовательных макроблоков. Один пример функции статистических данных (m_sumCoeff), включающей в себя переменную итогового счетчика (m_total_counter), задается следующим образом:
if (uiLevel>=a*(h<<((m_sumCoeff+b)/f+c)))
{
m_sumCoeff+=increase_stepsize;
}
else if ((d*uiLevel)<(h<<((m_sumCoeff+e)/f+g)))
{
m_sumCoeff-=decrease_stepsize;
}
m_total_counter+=stepsize
В вышеприведенном псевдокоде, a, b, c, d, e, f, g и h являются параметрами, "<<" обозначает операцию сдвига влево, и m_total_counter увеличивается после каждого обновления статистических данных (m_sumCoeff) независимо от того, увеличиваются или уменьшаются статистические данные.
[0096] Сбор статистических данных, описанный выше, может выполняться для схемы инициализации параметра Райса на основе статистических данных согласно предварительно заданной частоте. В одном примере, статистические данные могут обновляться после кодирования каждого абсолютного значения уровня коэффициентов в CG или после кодирования каждого оставшегося абсолютного значения уровня коэффициентов в CG. В другом примере, чтобы ограничивать увеличение сложности, статистические данные могут обновляться только один раз в расчете на CG или в расчете на блок преобразования. При этом подходе, может не возникать потребности обновлять статистические данные для каждого уровня кодированных коэффициентов, а вместо этого статистические данные могут обновляться один раз в расчете на блок преобразования или в расчете на CG (что составляет один раз каждые 16 коэффициентов в HEVC).
[0097] В некоторых случаях, статистические данные могут обновляться только тогда, когда кодируется первое абсолютное значение уровня коэффициентов в CG. В других случаях, статистические данные могут обновляться только тогда, когда кодируется первое оставшееся абсолютное значение уровня коэффициентов в CG. Следующий псевдокод иллюстрирует это ограничение относительно уравнения сбора статистических данных, описанного выше, в котором значение первого уровня кодированных коэффициентов (uiLevel) сравнивается непосредственно со значением статистических данных (statCoeff):
if(firstGolombCoeffinCG)
{
statCoeff+=(uiLevel==statCoeff) ? 0 : ((uiLevel<statCoeff)? -1 : 1);
firstGolombCoeffinCG=false;
}
В вышеприведенном уравнении, член "firstGolombCoeffinCG" используется для того, чтобы обозначать то, является или нет текущий уровень кодированных коэффициентов первым оставшимся абсолютным значением в CG, член "statCoeff" используется для того, чтобы обозначать статистические данные, и член "uiLevel" используется для того, чтобы обозначать первое абсолютное значение или первое оставшееся абсолютное значение уровня коэффициентов ранее кодированного коэффициента.
[0098] Частотное ограничение аналогично может применяться к уравнению сбора статистических данных, описанному выше, в котором значение первого уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (statCoeff), как показано в нижеприведенном псевдокоде:
if(firstGolombCoeffinCG)
{
if (uiLevel>=3*(1<<(statCoeff /4))) statCoeff++;
else if ((2*uiLevel)<(1<<(statCoeff/4))) statCoeff- -;
firstGolombCoeffinCG=false;
}
[0099] В некоторых случаях, сбор статистических данных, описанный выше, может выполняться отдельно для каждой из множества различных категорий CG, которые задаются на основе характеристик блоков преобразования, которые включают в себя CG. В этом случае, категория текущей CG в блоке преобразования может определяться на основе характеристик блока преобразования, и параметр Райса может быть инициализирован для текущей CG на основе статистических данных для определенной категории. Ниже описываются несколько примеров сегментации статистических данных, используемых для схемы инициализации параметра Райса на основе статистических данных.
[0100] Характеристики блоков преобразования, используемых для того, чтобы сегментировать или классифицировать статистические данные, могут включать в себя одно или более из того, представляют собой блоки преобразования типы блоков сигналов яркости или сигналов цветности, имеют блоки преобразования типы серий последовательных макроблоков внутреннего прогнозирования или взаимного прогнозирования, а также размера блоков преобразования и позиций CG в блоках преобразования. Характеристика позиций CG в блоках преобразования может указывать то, представляет собой текущая CG или нет левый верхний субблок 4x4 в блоке преобразования. Помимо этого, характеристики могут включать в себя то, кодируется или нет блок преобразования в качестве блока пропуска преобразования, либо то, кодируется или нет блок преобразования в качестве блока обхода квантования с преобразованием. Статистические данные в силу этого могут сохраняться отдельно в зависимости от одной или более вышеуказанных характеристик. Отдельные статистические данные могут определяться для каждого типа или категории CG или блока преобразования. Отдельные статистические данные могут предоставлять более точную оценку для схемы инициализации параметра Райса на основе статистических данных, но также и требовать большего объема ресурсов хранения.
[0101] В качестве первого примера, следующая функция может использоваться для того, чтобы определять сегмент или категорию статистических данных на основе переменной TYPE, которая зависит от того, представляет собой блок преобразования или нет блок сигналов яркости, и того, представляет собой CG или нет левый верхний субблок в блоке преобразования:
TYPE=2*isLuma+(iSubSet>0);
Согласно вышеуказанной функции, переменная TYPE может иметь 4 значения в зависимости от блока преобразования, представляющего собой блок сигналов яркости (isLuma=1) или блок сигналов цветности (isLuma=0), и CG, представляющей собой левый верхний субблок (iSubSet==0) или нет (iSubSet>0).
[0102] В другом примере, сегмент или категория статистических данных зависит от того, представляет собой блок преобразования или нет блок сигналов яркости, и того, кодируется или нет блок преобразования в режиме пропуска преобразования:
TYPE=2*isLuma+(isTransformSkip? 0:1);
Согласно этой функции, переменная TYPE может иметь 4 значения в зависимости от блока преобразования, представляющего собой блок сигналов яркости (isLuma=1) или блок сигналов цветности (isLuma=0), и блока преобразования, кодируемого в режиме пропуска преобразования (isTransformSkip=1) или нет (isTransformSkip=0).
[0103] В другом примере, сегмент или категория статистических данных зависит от того, представляет собой блок преобразования или нет блок сигналов яркости, того, представляет собой CG или нет левый верхний субблок в блоке преобразования, и того, кодируется или нет блок преобразования в режиме пропуска преобразования:
TYPE=4*isLuma+2*(isTransformSkip? 0:1)+(iSubSet>0);
Согласно этой функции, переменная TYPE может иметь 8 значений в зависимости от блока преобразования, представляющего собой блок сигналов яркости (isLuma=1) или блок сигналов цветности (isLuma=0), блока преобразования, кодируемого в режиме пропуска преобразования (isTransformSkip=1) или нет, (isTransformSkip=0), и CG, представляющей собой левый верхний субблок (iSubSet==0) или нет (iSubSet>0).
[0104] В другом примере, сегмент или категория статистических данных зависит от того, кодируется или нет блок преобразования в качестве обхода квантования с преобразованием, т.е. процессы преобразования и квантования обходятся для кодирования без потерь.
[0105] При использовании переменной TYPE, заданной согласно одному из нескольких примеров, описанных выше, и ее комбинировании с уравнением сбора статистических данных, описанным выше, в котором значение первого уровня кодированных коэффициентов (uiLevel) сравнивается непосредственно со значением статистических данных (statCoeff) и частотным ограничением по сбору статистических данных, описанным выше, в котором статистические данные обновляются только тогда, когда кодируется первый уровень коэффициентов в CG (firstGolombCoeffinCG), комбинированный подход должен быть следующим:
if(firstGolombCoeffinCG)
{
statCoeff[TYPE]+=(uiLevel==statCoeff[TYPE]) ? 0:
((uiLevel<statCoeff[TYPE])? -1 : 1);
firstGolombCoeffinCG=false;
}
В вышеприведенном псевдокоде, член "statCoeff[TYPE]" обозначает статистические данные, собираемые для категории CG, указываемых посредством переменной TYPE.
[0106] Другой пример комбинированного подхода с использованием уравнения сбора статистических данных, описанного выше, в котором значение первого уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (statCoeff), должен быть следующим:
if(firstGolombCoeffinCG)
{
if (uiLevel>=3*(1<<(statCoeff[TYPE] /4))) statCoeff[TYPE]++;
else if ((2*uiLevel)<(1<<(statCoeff(TYPE]/4))) statCoeff[TYPE]- -;
firstGolombCoeffinCG=false;
}
С другой стороны, в вышеприведенном псевдокоде, член "statCoeff[TYPE]" обозначает статистические данные, собираемые для категории CG, указываемых посредством переменной TYPE.
[0107] В некоторых примерах, кодек (т.е. видеокодер/декодер) может поддерживать несколько способов для того, чтобы определять переменную TYPE для CG. Например, кодек может поддерживать две или более из примерных функций, описанных выше для переменной TYPE. В этом случае, кодек может выбирать один из способов, чтобы определять способ, которым следует сегментировать статистические данные, используемые для схемы инициализации параметра Райса на основе статистических данных, на основе кодированного или извлеченного индикатора. Примерный псевдокод для случая использования нескольких способов приведен ниже:
Способ 1:
TYPE=2*isLuma+(isTransformSkip? 0:1);
Способ 2:
TYPE=(isTransformSkip? 0:1);
[0108] В одном случае, элемент синтаксиса может передаваться в служебных сигналах в кодированном потоке битов, чтобы указывать то, какие характеристики блоков преобразования используются для того, чтобы задавать различные категории CG. Элемент синтаксиса может содержать флаг, включенный в один из набора параметров последовательности (SPS) или набора параметров изображения (PPS) для остаточных видеоданных. В качестве примера, видеокодер 20 может передавать в служебных сигналах флаг (например, method_flag) в высокоуровневом синтаксисе в кодированном потоке битов, и видеодекодер 30 может синтаксически анализировать кодированный поток битов, чтобы принимать method_flag. В этом примере, method_flag=0 указывает то, что способ 1 используется для того, чтобы определять категорию статистических данных на основе того, представляет собой блок преобразования или нет блок сигналов яркости, и того, кодируется или нет блок преобразования в режиме пропуска преобразования. Method_flag=1 указывает то, что способ 2 используется для того, чтобы определять категорию статистических данных только на основе того, кодируется или нет блок преобразования в режиме пропуска преобразования. Если имеется более двух способов, поддерживаемых посредством кодека, элемент синтаксиса может содержать значение индекса, чтобы указывать выбранный способ вместо двоичного флага.
[0109] В другом случае, кодек может выбирать один из способов, используемых для того, чтобы задавать различные категории CG на основе цветового формата видеоданных, и в этом случае дополнительные элементы синтаксиса не должны передаваться в служебных сигналах в потоке битов, чтобы указывать способ. Например, способ, используемый для того, чтобы определять переменную TYPE для CG видеоданных, может выбираться на основе того, используется цветовой YUV-формат или цветовой RGB-формат для того, чтобы кодировать видеоданные. В качестве одного примера, способ 1, который определяет категорию статистических данных на основе того, представляет собой блок преобразования или нет блок сигналов яркости, и того, кодируется или нет блок преобразования в режиме пропуска преобразования, используется, когда кодированные видеоданные находятся в цветовом YUV-формате. Способ 2, который определяет категорию статистических данных только на основе того, кодируется или нет блок преобразования в режиме пропуска преобразования, используется, когда кодированные видеоданные находятся в цветовом RGB-формате. В случае способности видеокодера 20 и видеодекодера 30 обнаруживать цветовой формат видеоданных, элемент синтаксиса (например, флаг способа или индекса способа), который указывает выбранный способ, не передается в служебных сигналах в потоке битов.
[0110] Согласно технологиям, описанным в этом раскрытии сущности, схема инициализации параметра Райса на основе статистических данных определяет начальное значение параметра Райса для текущей CG на основе статистических данных уровней коэффициентов, собираемых для ранее кодированных коэффициентов в соответствии с любой комбинацией примеров, описанных выше. Ниже описываются несколько примерных технологий преобразования значения собранных статистических данных в начальное значение параметра Райса для текущей CG. Преобразование статистических данных в начальное значение параметра Райса может выполняться для каждой CG (например, блока преобразования 4x4 или субблока 4x4 блока преобразования) либо может выполняться только один раз для каждой TU (например, в начале TU).
[0111] В одном примере, значение статистических данных может преобразовываться в начальный параметр Райса согласно сохраненной таблице. Ввод таблицы преобразования может быть значением статистических данных, а вывод таблицы может быть начальным значением параметра Райса. В некоторых случаях, отсеченная версия статистических данных может использоваться в качестве ввода в таблицу преобразования. Например, если максимальный параметр Райса равен 5, и статистические данные отсекаются между 0 и 31, то таблица преобразования может задаваться следующим образом:
g_golombTab[32]={0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5};
В начале каждой CG, вышеприведенная таблица может использоваться для того, чтобы определять начальное значение параметра Райса на основе собранных статистических данных. В других примерах, различные таблицы преобразований могут использоваться для того, чтобы определять начальное значение параметра Райса на основе собранных статистических данных.
[0112] Выше описываются три основных примерных способа сбора статистических данных, в которых обозначения "statCoeff" и "m_sumCoeff" могут использоваться взаимозаменяемо для того, чтобы указывать статистические данные: (1) сбор статистических данных, при котором значение уровня кодированных коэффициентов (uiLevel) сравнивается непосредственно со значением статистических данных (statCoeff), (2) сбор статистических данных, при котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff), и (3) сбор статистических данных, при котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff), включающей в себя переменную итогового счетчика (m_total_counter).
[0113] С использованием одного из конкретных примерных способов сбора статистических данных и таблицы преобразования, описанной выше, инициализация параметра Райса на основе статистических данных, собираемых для категории CG, указываемой посредством переменной TYPE, может выполняться следующим образом:
cRiceParam=g_golombTab[min(statCoeff[TYPE], 31)];
[0114] В других примерах, значение статистических данных может преобразовываться в начальное значение параметра Райса согласно функции, которая выполняет преобразование. В некоторых случаях, функция преобразования может быть функцией собранных статистических данных. Использование функции преобразования позволяет исключать дополнительного расхода пространства хранения таблицы преобразования.
[0115] В качестве одного примера, параметр Райса может быть инициализирован на основе собранных статистических данных, сдвинутых вправо на постоянное значение, как представлено ниже:
cRiceParam=(statCoeff[TYPE]>>R);
В вышеприведенном уравнении, ">>" обозначает операцию сдвига вправо, и R является параметром. В некоторых случаях, может быть желательным ограничивать максимальное значение параметра Райса как MAX_RICE, которое может быть целочисленным значением, большим или равным 4. В этом случае, функция может задаваться следующим образом:
cRiceParam=min(statCoeff[TYPE]>>R, MAX_RICE)
[0116] В качестве другого примера, параметр Райса может быть инициализирован на основе линейной функции собранных статистических данных, как представлено ниже:
cRiceParam=a*(statCoeff[TYPE]+b)/c+d
В вышеприведенном уравнении, a, b, c и d являются значениями параметров.
[0117] В качестве дополнительного примера, параметр Райса может быть инициализирован на основе кусочно-линейной функции собранных статистических данных. Два конкретных примера кусочно-линейной функции задаются следующим образом:
cRiceParam=statCoeff[TYPE]<16? (statCoeff[TYPE]+1)/4:
(4+(statCoeff[TYPE]+40)/64);
cRiceParam=statCoeff[TYPE]<16? (statCoeff[TYPE])/4:
(4+(statCoeff[TYPE]+40)/64);
[0118] В другом примере, параметр Райса может быть инициализирован на основе способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff). В этом случае, значение собранных статистических данных преобразуется в начальное значение параметра Райса согласно функции статистических данных. В одном примере, функция статистических данных, используемая для того, чтобы инициализировать параметр Райса, может быть основана на выборе минимума из максимального значения параметра Райса или значения статистических данных, деленного на постоянное значение.
[0119] Пример функции преобразования задается следующим образом:
uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
В вышеприведенном уравнении, DELAY является постоянным значением, и MAX_RICE_PARAM_INIT является максимальным значением параметра Райса. В некоторых случаях, максимальное значение параметра Риса может превышать или быть равно 4. Постоянное значение может быть определяемым пользователем параметром. Пример функции преобразования с DELAY=4 задается следующим образом:
cRiceParam=Min(maxRicePara, statCoeff/4).
В вышеприведенном примере, член "statCoeff" используется для того, чтобы обозначать значение статистических данных вместо "m_sumCoeff", и maxRicePara используется для того, чтобы обозначать максимальное значение параметра Райса вместо MAX_RICE_PARAM_INIT.
[0120] В дополнительном примере, параметр Райса может быть инициализирован на основе способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff), включающей в себя переменную итогового счетчика (m_total_counter). В этом случае, значение собранных статистических данных преобразуется в начальное значение параметра Райса согласно функции статистических данных. Пример функции преобразования задается следующим образом:
If m_sumCoeff/m_total_counter>thres0, cRiceParam+=k0
Elseif m_sumCoeff/m_total_counter<thres1, cRiceParam+=k1
В вышеприведенном уравнении, член "thres0" обозначает первое пороговое значение, а "thres1" обозначает второе пороговое значение, и k0 и k1 являются параметрами. Согласно функции, если значение статистических данных, деленное на общее число обновлений статистических данных, превышает thres0, то начальное значение параметра Райса задается равным предыдущему значению параметра Райса, увеличиваемому на k0. Если значение статистических данных, деленное на общее число обновлений статистических данных, меньше thres1, то начальное значение параметра Райса задается равным предыдущему значению параметра Райса, увеличиваемому на k1.
[0121] В некоторых примерах, начальный параметр Райса может отсекаться между минимальным значением и максимальным значением. В этом случае, функция дополнительного отсечения должна добавляться в функцию преобразования, используемую для того, чтобы инициализировать параметр Райса. Пример функции преобразования с отсечением задается следующим образом:
cRiceParam=Clip(MIN_RICE, cRiceParam, MAX_RICE)
В вышеприведенном уравнении, MIN_RICE является минимальным значением параметра Райса, и MAX_RICE является максимальным значением параметра Райса. В одном примере, значение MIN_RICE может быть равно 0, и значение MAX_RICE может быть целочисленным значением, большим или равным 4. Значения MIN_RICE и MAX_RICE могут зависеть от вспомогательной информации, к примеру, одного или более из битовой глубины, профиля, цветового формата, режима кодирования (т.е. кодирование без потерь или кодирование с потерями) и других типов вспомогательной информации.
[0122] Как описано выше, в HEVC, значение параметра Райса может обновляться после кодирования каждого оставшегося абсолютного значения уровней коэффициентов в CG. В некоторых примерах, аналогичное отсечение может применяться к обновленному значению параметра Райса. Диапазон (т.е. минимальное значение и максимальное значение) может отличаться для процедуры обновления относительно процедуры инициализации, либо диапазон может быть идентичным диапазону, используемому для инициализации. Аналогично, диапазон может зависеть от одного или более из битовой глубины, профиля, цветового формата, режима кодирования (т.е. кодирование без потерь или кодирование с потерями) и другой вспомогательной информации.
[0123] Ниже приведены четыре дополнительных примера преобразования статистических данных в начальное значение параметра Райса.
[0124] В первом примере, используются два вида статистических данных, называемых m_sumCoeff и m_sumCoeff2. Значение m_sumCoeff может быть получено с использованием способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff), следующим образом:
if (uiLevel>=3*(1<<(m_sumCoeff/DELAY)))
{
m_sumCoeff++;
}
else if ((2*uiLevel)<(1<<(m_sumCoeff/DELAY)))
{
m_sumCoeff- -;
}
[0125] Значение m_sumCoeff2 может быть получено с использованием способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается непосредственно со значением статистических данных (m_sumCoeff2), следующим образом:
m_sumCoeff2+=(uiLevel==m_sumCoeff2) ? 0:
(uiLevel<m_sumCoeff2? -1:1);
[0126] В этом первом примере, преобразование статистических данных в начальное значение параметра Райса может отличаться для кодированного блока преобразования по сравнению с блоком пропуска преобразования. В случае блока пропуска преобразования, функция инициализации может задаваться следующим образом:
uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
В случае кодированного блока преобразования, функция инициализации может задаваться следующим образом:
if m_sumCoeff2<Th,
uiGoRiceParam=min(m_sumCoeff/DELAY+1, MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
В вышеприведенном псевдокоде, "Th" является пороговым значением. Примерное значение Th может составлять (1<<uiGoRiceParam).
[0127] Во втором примере, статистические данные, называемые "m_sumCoeff", могут извлекаться с использованием способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff). В этом втором примере, преобразование статистических данных в начальное значение параметра Райса может отличаться для кодированного блока преобразования по сравнению с блоком пропуска преобразования. В случае блока пропуска преобразования, функция инициализации может задаваться следующим образом:
uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
В случае кодированного блока преобразования, функция инициализации может задаваться следующим образом:
if m_sumCoeff<Th,
uiGoRiceParam=min(m_sumCoeff/DELAY, MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min(m_sumCoeff/DELAY+1, MAX_RICE_PARAM_INIT);
В вышеприведенном псевдокоде, "Th" является пороговым значением. Примерное значение Th может составлять MAX_RICE_PARAM_INIT/2-2.
[0128] В третьем примере, статистические данные, называемые "m_sumCoeff", могут извлекаться с использованием способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff). В этом третьем примере, преобразование статистических данных в начальное значение параметра Райса может задаваться следующим образом:
if (m_sumCoeff<Th)
uiGoRiceParam=min((m_sumCoeff+d)/DELAY, MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min((m_sumCoeff)/DELAY, MAX_RICE_PARAM_INIT);
В вышеприведенном псевдокоде, "Th" является пороговым значением, и "d" является параметром.
[0129] В четвертом примере, статистические данные, называемые "m_sumCoeff", могут извлекаться с использованием способа сбора статистических данных, описанного выше, в котором значение уровня кодированных коэффициентов (uiLevel) сравнивается с предварительно заданной функцией статистических данных (m_sumCoeff). В этом четвертом примере, преобразование статистических данных в начальное значение параметра Райса может задаваться следующим образом:
if (m_sumCoeff<Th)
uiGoRiceParam=min((m_sumCoeff)/DELAY0, MAX_RICE_PARAM_INIT);
else
uiGoRiceParam=min(d+(m_sumCoeff)/DELAY1, MAX_RICE_PARAM_INIT);
В вышеприведенном псевдокоде, "Th" является пороговым значением, и "d", DELAY0 и DELAY1 являются параметрами. В этом четвертом примере, когда значение статистических данных равно пороговому значению (Th), начальное значение параметра Райса (uiGoRiceParam), извлекаемого с использованием любого из вышеприведенных уравнений, является идентичным.
[0130] В некоторых примерах, функция преобразования, используемая для того, чтобы определять начальное значение параметра Райса и пороговые значения, может быть фиксированной и известной как для видеокодера 20, так и для видеодекодера 30. В других примерах, функция преобразования, используемая для того, чтобы определять начальное значение параметра Райса и пороговые значения, может быть адаптивно определена на основе вспомогательной информации. Вспомогательная информация может извлекаться независимо посредством каждого из видеокодера 20 и видеодекодера 30, или вспомогательная информация может передаваться в служебных сигналах из видеокодера 20 в видеодекодер 30 с использованием высокоуровневого синтаксиса в SPS или в PPS, либо некоторая комбинация извлечения и передачи служебных сигналов может использоваться для того, чтобы определять вспомогательную информацию. Например, вспомогательная информация может включать в себя одно или более из размера кадра, типа кадра, CU-размера, TU-размера, TU-типа (например, режима пропуска преобразования или режима преобразования), цветового компонента, режима внутреннего или взаимного прогнозирования, параметра квантования (QP), битовой глубины, цветового формата (например, 444/422/420), флагов значимых коэффициентов (как число, так и распределение), больших 1 (т.е. превышающих 1) флагов (как число, так и распределение) и больших 2 (т.е. превышающих 2) флагов (как число, так и распределение). Они также могут явно передаваться в служебных сигналах.
[0131] После инициализации параметра Райса для текущей CG, начальное значение параметра Райса может обновляться после кодирования оставшегося абсолютного значения уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей CG с использованием кодов, например, кодов Голомба-Райса или экспоненциальных кодов Голомба, заданных посредством параметра Райса. Статистические данные для схемы инициализации параметра Райса на основе статистических данных может определяться на основе одного или более уровней коэффициентов в текущей CG до или после обновления значения параметра Райса.
[0132] В некоторых примерах, статистические данные могут быть основаны на сравнении или вычислении уровней кодированных коэффициентов в текущей CG и текущего значения параметра Райса для текущей CG. Один пример статистических данных, которые основаны на уровнях коэффициентов и значении параметра Райса, задается следующим образом:
if(absCoeff[idx]>3*(1<<uiGoRiceParam))
{
UndershootCnt++
}
else if (((absCoeff[idx]-baseLevel)*s)<(1<<uiGoRiceParam))
{
OvershootCnt++;
}
TotalCnt++;
В вышеприведенном псевдокоде, "UndershootCnt", "OvershootCnt" и "TotalCnt" обозначают статистические данные, которые используются для того, чтобы инициализировать параметр Райса. Помимо этого, "uiGoRiceParam" обозначает значение параметра Райса, "s" является параметром, и absCoeff[idx] является абсолютным значением уровня коэффициентов для коэффициента в индексе idx.
[0133] В некоторых примерах, статистические данные могут определяться до обновления значения параметра Райса. В этом случае, необновленное значение параметра Райса используется при сравнении или вычислении, используемом для того, чтобы определять статистические данные. Примерная комбинация определения статистических данных на основе уровней коэффициентов и необновленного значения параметра Райса и затем обновления значения параметра Райса задается следующим образом:
if(absCoeff[idx]>3*(1<<uiGoRiceParam))
{
UndershootCnt++
}
else if (((absCoeff[idx]-baseLevel)*s)<(1<<uiGoRiceParam))
{
OvershootCnt++;
}
TotalCnt++;
if(absCoeff[idx]>3*(1<<uiGoRiceParam))
{
uiGoRiceParam=min<UInt>(uiGoRiceParam+1, MAX_RICE_PARAM);
}
В вышеприведенном псевдокоде, "MAX_RICE_PARAM" обозначает максимальное значение параметра Райса, и min<UInt>() является функцией, которая выбирает минимальное значение. В некоторых примерах, максимальное значение параметра Райса может быть равно целочисленному значению, по меньшей мере, 4. В других примерах, статистические данные могут определяться после обновления значения параметра Райса. В этом случае, обновленное значение параметра Райса используется при сравнении или вычислении, используемом для того, чтобы определять статистические данные.
[0134] В некоторых примерах, обновление статистических данных для схемы инициализации параметра Райса на основе статистических данных, описанной выше, может быть интегрировано с обновлением параметра Райса. Как пояснено выше, в HEVC, начальное значение параметра Райса может условно обновляться на основе начального значения параметра Райса и абсолютного значения уровня коэффициентов для коэффициента, кодируемого в текущей CG. Значение параметра Райса может продолжать условно обновляться после кодирования каждого оставшегося абсолютного уровня для коэффициентов в текущей CG. HEVC-схема условного обновления задается следующим образом:
if(absCoeff[idx]>3*(1<<uiGoRiceParam))
{
uiGoRiceParam=min<UInt>(uiGoRiceParam+1, MAX_RICE_PARAM);
}
В вышеприведенном псевдокоде, "uiGoRiceParam" обозначает значение параметра Райса, absCoeff[idx] является абсолютным значением уровня коэффициентов для коэффициента в индексе idx, "MAX_RICE_PARAM" обозначает максимальное значение параметра Райса, и min<UInt>() является функцией, которая выбирает минимальное значение.
[0135] В некоторых примерах, обновление статистических данных, используемых для того, чтобы инициализировать значение параметра Райса в начале последующей CG, может быть интегрировано с обновлением параметра Райса на основе уровней коэффициентов текущей CG. Пример интегрированного обновления статистических данных и значения параметра Райса является следующим:
if(absCoeff[idx]>3*(1<<uiGoRiceParam))
{
UndershootCnt++
uiGoRiceParam=min<UInt>(uiGoRiceParam+1, MAX_RICE_PARAM);
}
В вышеприведенном псевдокоде, "UndershootCnt++" обозначает обновление статистических данных.
[0136] В некоторых примерах, обновленное значение параметра Райса (или дельта-значение по сравнению с предиктором, например, текущим значением параметра Райса) для следующей единицы кодирования (например, CG, TU или CU 4x4) вычисляется на основе части или всех параметров, используемых для статистических данных. Например, в одном примере, чем выше значение OvershootCnt, тем меньше значение обновленного параметра Райса. В другом примере, чем выше значение UndershootCnt, тем больше значение обновленного параметра Райса.
[0137] Ниже описываются несколько примеров инициализации параметра Райса для каждой CG на основе битовой глубины или другой характеристики видеоданных. В этих примерах, инициализация параметра Райса для каждой CG не зависит от собранных статистических данных. Как указано в схеме инициализации параметра Райса на основе статистических данных, описанной выше, инициализация параметра Райса может выполняться для каждой CG (например, блока преобразования 4x4 или субблока 4x4 блока преобразования) либо может выполняться только один раз для каждой TU (например, в начале TU).
[0138] В одном примере, начальное значение параметра Райса вместо этого может быть основано на битовой глубине видеоданных. Ниже приводится пример, в котором начальное значение параметра Райса, cRiceParam, для каждой CG является функцией битовой глубины текущего компонента (например, компонента сигнала яркости либо одного из компонентов сигнала цветности) CG:
cRiceParam=max(0, bitDepth-n)
В вышеприведенном уравнении, битовая глубина является битовой глубиной текущего компонента, и n является параметром. В одном примере, параметр n может задаваться равным 9.
[0139] В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от типа компонента CG (например, сигнал яркости или сигнал цветности). В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от того, кодируется или нет текущий блок в режиме обхода квантования с преобразованием, в котором пропускаются как преобразование, так и квантование. В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от того, кодируется или нет текущий блок в режиме пропуска преобразования, в котором пропускается преобразование, но может применяться квантование. В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от параметра квантования (QP) для TU. В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от цветового компонента и/или цветового пространства видеоданных.
[0140] В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от одного или более из CU-размера, TU-размера, кадрового разрешения, частоты кадров, режима прогнозирования (например, внутренний, взаимный, IntraBC (внутриблочное копирование)), типа кадра и режима и весового коэффициента прогнозирования кросскомпонентных остатков. Примеры режима и весового коэффициента прогнозирования кросскомпонентных остатков описываются в предварительной заявке на патент (США) № 61/846581, поданной 15 июля 2013 года, предварительной заявке на патент (США) № 61/847839, поданной 18 июля 2013 года, предварительной заявке на патент (США) № 61/826396, поданной 22 мая 2013 года, и предварительной заявке на патент (США) № 61/838152, поданной 21 июня 2013 года.
[0141] Далее представлена некоторая исходная информация относительно флага coeff_abs_level_greater1 и флага coeff_abs_level_greater2 с использованием HEVC в качестве примера. В HEVC, для CG (например, субблок 4x4), карта значимости сначала кодируется для того, чтобы указывать позиции коэффициентов с уровнями ненулевых коэффициентов. Затем для позиций, имеющих значимые коэффициенты, флаг coeff_abs_level_greater1 может кодироваться, чтобы указывать то, больше или нет абсолютное значение коэффициента 1. Для позиций с coeff_abs_level_greater1=1, флаг coeff_abs_level_greater2 может кодироваться, чтобы указывать то, больше или нет абсолютное значение коэффициента 2.
[0142] В некоторых примерах, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от числа уровней ранее кодированного коэффициента со значимыми (т.е. ненулевыми) значениями, которые могут указываться посредством кодирования флага coeff_abs_level_greater1, равного 0 или 1, и/или числа уровней ранее кодированного коэффициента со значениями, большими 1, что может указываться посредством кодирования флага coeff_abs_level_greater2, равного 0 или 1. В других примерах, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от числа уровней ранее кодированного коэффициента, которые имеют значения, большие 1, что указывается посредством кодирования coeff_abs_level_greater1=1, и/или числа уровней ранее кодированного коэффициента, которые имеют значения, большие 2, что указывается посредством кодирования coeff_abs_level_greater2=1.
[0143] В другом примере, начальное значение параметра Райса, cRiceParam, для каждой CG может зависеть от любой комбинации вышеприведенных примеров. Ниже приведены два подробных примера определения начального значения параметра Райса на основе битовой глубины видеоданных.
[0144] Пример 1
offset=(iQP+6*(BD-12)+12)/6
if (transform_skip_flag || cu_transquant_bypass_flag)
uiGoRiceParam=Max (BD-8-offset), 0)
else
uiGoRiceParam=Max ((BD-8)>>1-offset), 0)
В вышеприведенном псевдокоде, iQP является QP-значением, и BD является битовой глубиной видеоданных. В этом первом примере, начальное значение параметра Райса задается на основе первого уравнения, когда CG включена в блок преобразования, кодированный в режиме пропуска преобразования или в режиме обхода квантования с преобразованием, и задается на основе второго уравнения, когда CG включена в кодированный блок преобразования. В любом случае, начальное значение определяется на основе битовой глубины (BD) видеоданных.
[0145] Пример 2
offset=8-Gr1
if (transform_skip_flag || cu_transquant_bypass_flag)
uiGoRiceParam=Max (BD-8-offset), 0)
else
uiGoRiceParam=Max ((BD-8)>>1-offset), 0)
В вышеприведенном псевдокоде, Gr1 является числом флагов coeff_abs_level_greater1, которые кодируются, и BD является битовой глубиной видеоданных. В этом втором примере, начальное значение параметра Райса задается на основе первого уравнения, когда CG включена в блок преобразования, кодированный в режиме пропуска преобразования или в режиме обхода квантования с преобразованием, и задается на основе второго уравнения, когда CG включена в кодированный блок преобразования. В любом случае, начальное значение определяется на основе битовой глубины (BD) видеоданных.
[0146] Ниже описывается пример гибридной схемы, которая комбинирует инициализацию параметра Райса для каждой CG согласно любой комбинации примеров, описанных выше, с явной передачей в служебных сигналах значений смещения. Например, смещение, используемое для того, чтобы инициализировать параметр Райса в начале CG, может разлагаться на суммирование двух частей: (1) постоянного смещения и (2) адаптивного смещения. Адаптивное смещение может извлекаться с использованием одной или более примерных технологий, описанных в этом раскрытии сущности. Постоянное смещение может передаваться в служебных сигналах в потоке битов из видеокодера 20 в видеодекодер 30.
[0147] В качестве другого примера, чтобы комбинировать явную передачу в служебных сигналах параметра Райса с начальным процессом извлечения параметра Райса, описанным в этом раскрытии сущности, определение того, следует или нет передавать в служебных сигналах параметр Райса, может зависеть от извлеченного значения начального параметра Райса в видеокодере 20. Например, если извлеченное значение начального параметра Райса является аналогичным предварительно заданному значению (например, разность между извлеченным значением и пороговым значением меньше порогового значения), параметр Райса может не передаваться в служебных сигналах в видеодекодер 30, а вместо этого может извлекаться, как описано выше. В этом случае, извлеченное значение или предварительно заданное значение могут использоваться в качестве начального значения параметра Райса. В противном случае, начальное значение параметра Райса может передаваться в служебных сигналах, либо разность между начальным значением параметра Райса и предварительно заданным значением может передаваться в служебных сигналах. Некоторые дополнительные примеры технологий передачи служебных сигналов приведены в предварительной заявке на патент (США) № 61/870120, поданной 26 августа 2013 года, предварительной заявке на патент (США) № 61/880616, поданной 20 сентября 2013 года, и предварительной заявке на патент (США) № 61/88954, поданной 11 октября 2013 года.
[0148] Ниже описываются несколько дополнительных примеров и соображений относительно вышеописанных примеров схемы инициализации параметра Райса. Хотя технологии раскрытия сущности могут главным образом описываться по отдельности и/или в качестве части конкретных комбинаций с другими технологиями, любые две или более из технологий, описанных в этом раскрытии сущности, могут быть комбинированы друг с другом. Помимо этого, может быть возможным для любой из технологий, описанных в этом раскрытии сущности, реализовываться отдельно.
[0149] Для случая кодирования с потерями, схема инициализации параметра Райса на основе статистических данных может применяться только к блокам пропуска преобразования, как показано в нижеприведенном условном уравнении. С другой стороны, когда преобразование применяется к блоку преобразования, параметр Райса инициализируется равным нулю в соответствии с HEVC-схемой инициализации:
cRiceParam=isTransformSkip? 0 : g_golombTab[min(statCoeff[TYPE], 31)];
В других примерах, схема инициализации параметра Райса на основе статистических данных может применяться только к блокам пропуска преобразования, но может быть необязательным автоматически инициализировать параметр Райса равным нулю, когда преобразование применяется к блоку, как показано в следующем уравнении:
cRiceParam=isTransformSkip ? max(cRiceParam-1, 0) :
g_golombTab[min(statCoeff[TYPE], 31)];
[0150] В некоторых примерах, HEVC-схема обновления параметра Райса, выполняемая в CG, может деактивироваться. Вместо этого, начальное значение параметра Райса может определяться в соответствии с любой комбинацией примерных технологий, описанных выше, и начальное значение параметра Райса затем может использоваться по всему блоку. В других примерах, другая схема обновления параметра Райса может выполняться в CG. В некоторых случаях, одна или более примерных технологий, описанных выше, могут использоваться для того, чтобы выполнять обновление параметра Райса и обновление статистических данных согласно данному порядку или в качестве интегрированных способов по всему блоку. Кроме того, в некоторых случаях, одна или более примерных технологий, описанных выше, могут использоваться для того, чтобы выполнять зависимую от битовой глубины инициализацию параметра Райса по всему блоку.
[0151] Хотя примерные способы определения начального значения параметра Райса описываются отдельно выше, технологии этого раскрытия сущности не ограничены этим. В общем, могут быть возможными различные комбинации примерных технологий, описанных выше. Примерные способы, описанные выше, также могут реализовываться отдельно. Помимо этого, все способы, описанные выше, либо их комбинации могут применяться к CG во всех блоках преобразования или только в блоках преобразования, для которых пропускается или обходится преобразование.
[0152] Фиг. 5 является блок-схемой, иллюстрирующей примерный видеокодер 20, который может реализовывать технологии, описанные в этом раскрытии сущности. Видеокодер 20 описывается в контексте HEVC-кодирования в целях иллюстрации, но без ограничения этого раскрытия сущности в отношении других стандарты или способов кодирования, которые могут требовать сканирования коэффициентов преобразования. Видеокодер 20 может выполнять внутреннее и взаимное кодирование CU в видеокадрах. Внутреннее кодирование основано на пространственном прогнозировании, чтобы уменьшать или удалять пространственную избыточность видеоданных в данном видеокадре. Взаимное кодирование основывается на временном прогнозировании, чтобы уменьшать или удалять временную избыточность между текущим кадром и ранее кодированными кадрами видеопоследовательности. Внутренний режим (I-режим) может означать любой из нескольких режимов пространственного сжатия видео. Взаимные режимы, такие как однонаправленное прогнозирование (P-режим) или двунаправленное прогнозирование (B-режим), могут означать любой из нескольких режимов временного сжатия видео.
[0153] Как показано на фиг. 5, видеокодер 20 принимает текущий видеоблок в видеокадре, который должен быть кодирован. В примере по фиг. 5, видеокодер 20 включает в себя модуль 40 выбора режима, запоминающее устройство 41 видеоданных, модуль 44 компенсации движения, модуль 42 оценки движения, процессор 46 внутреннего прогнозирования, буфер 64 декодированных изображений (DPB), сумматор 50, процессор 52 преобразования, модуль 54 квантования и модуль 56 энтропийного кодирования. Процессор 52 преобразования, проиллюстрированный на фиг. 5, представляет собой модуль, который применяет фактическое преобразование или комбинации преобразования к блоку остаточных данных, и не должен путаться с блоком коэффициентов преобразования, который также может упоминаться в качестве единицы преобразования (TU) CU. Для восстановления видеоблоков, видеокодер 20 также включает в себя модуль 58 обратного квантования, процессор 60 обратного преобразования и сумматор 62. Фильтр удаления блочности (не показан на фиг. 5) также может быть включен для того, чтобы фильтровать границы блоков таким образом, чтобы удалять артефакты блочности из восстановленного видео. Если требуется, фильтр удаления блочности типично должен фильтровать вывод сумматора 62.
[0154] Запоминающее устройство 41 видеоданных может сохранять видеоданные, которые должны кодироваться посредством компонентов видеокодера 20. Видеоданные, сохраненные в запоминающем устройстве 41 видеоданных, могут получаться, например, из видеоисточника 18. Буфер 64 декодированных изображений может представлять собой запоминающее устройство опорных изображений, которое сохраняет опорные видеоданные для использования при кодировании видеоданных посредством видеокодера 20, например, в режимах внутреннего или взаимного кодирования. Запоминающее устройство 41 видеоданных и буфер 64 декодированных изображений могут формироваться посредством любого из множества запоминающих устройств, к примеру, как динамическое оперативное запоминающее устройство (DRAM), включающее в себя синхронное DRAM (SDRAM), магниторезистивное RAM (MRAM), резистивное RAM (RRAM) или другие типы запоминающих устройств. Запоминающее устройство 41 видеоданных и буфер 64 декодированных изображений могут предоставляться посредством идентичного запоминающего устройства или отдельных запоминающих устройств. В различных примерах, запоминающее устройство 41 видеоданных может быть внутрикристальным с другими компонентами видеокодера 20 или внекристальным относительно этих компонентов.
[0155] Во время процесса кодирования, видеокодер 20 принимает видеокадр или серию последовательных макроблоков, которая должна быть кодирована. Кадр или серия последовательных макроблоков может быть разделен на несколько видеоблоков, например, на наибольшие единицы кодирования (LCU). Модуль 42 оценки движения и модуль 44 компенсации движения выполняют взаимное прогнозирующее кодирование принимаемого видеоблока относительно одного или более блоков в одном или более опорных кадров, чтобы предоставлять временное сжатие. Процессор 46 внутреннего прогнозирования может выполнять внутреннее прогнозирующее кодирование принимаемого видеоблока относительно одного или более соседних блоков в идентичном кадре или серии последовательных макроблоков, что и блок, который должен быть кодирован, чтобы предоставлять пространственное сжатие.
[0156] Модуль 40 выбора режима может выбирать один из режимов кодирования, внутренних или взаимных, например, на основе результатов по ошибкам (т.е. искажению) для каждого режима, и предоставляет результирующий внутренне или взаимно прогнозированный блок (например, единицу прогнозирования (PU)) в сумматор 50, чтобы формировать остаточные блочные данные, и в сумматор 62, чтобы восстанавливать кодированный блок для использования в опорном изображении. Сумматор 62 комбинирует прогнозированный блок с обратно квантованными, обратно преобразованными данными из процессора 60 обратного преобразования для блока, чтобы восстанавливать кодированный блок, как подробнее описано ниже. Некоторые видеокадры могут обозначаться как I-кадры, при этом все блоки в I-кадре кодируются в режиме внутреннего прогнозирования. В некоторых случаях, процессор 46 внутреннего прогнозирования может выполнять внутреннее прогнозирующее кодирование блока в P- или B-кадре, например, когда поиск движения, выполняемый посредством модуля 42 оценки движения, не приводит к достаточному прогнозированию блока.
[0157] Модуль 42 оценки движения и модуль 44 компенсации движения могут иметь высокую степень интеграции, но проиллюстрированы отдельно в концептуальных целях. Оценка движения (или поиск движения) представляет собой процесс формирования векторов движения, которые оценивают движение для видеоблоков. Вектор движения, например, может указывать смещение единицы прогнозирования в текущем кадре относительно опорной выборки опорного кадра. Модуль 42 оценки движения вычисляет вектор движения для единицы прогнозирования взаимно кодированного кадра посредством сравнения единицы прогнозирования с опорными выборками опорного изображения, сохраненного в буфере 64 декодированных изображений. Опорная выборка может представлять собой блок, для которого обнаружено то, что он близко совпадает с частью CU, включающей в себя кодируемую PU, с точки зрения пикселной разности, которая может определяться посредством суммы абсолютных разностей (SAD), сумма квадратов разностей (SSD) или других разностных показателей. Опорная выборка может возникать в любом месте в опорном кадре или в опорной серии последовательных макроблоков, а не обязательно на границе блока (например, единицы кодирования) опорного кадра или серии последовательных макроблоков. В некоторых примерах, опорная выборка может возникать в дробнопикселной позиции.
[0158] Модуль 42 оценки движения отправляет вычисленный вектор движения в модуль 56 энтропийного кодирования и модуль 44 компенсации движения. Часть опорного кадра, идентифицированная посредством вектора движения, может упоминаться в качестве опорной выборки. Модуль 44 компенсации движения может вычислять прогнозное значение для единицы прогнозирования текущей CU, например, посредством извлечения опорной выборки, идентифицированной посредством вектора движения для PU.
[0159] Процессор 46 внутреннего прогнозирования может внутренне прогнозировать принимаемый блок, в качестве альтернативы взаимному прогнозированию, выполняемому посредством модуля 42 оценки движения и модуля 44 компенсации движения. Процессор 46 внутреннего прогнозирования может прогнозировать принимаемый блок относительно соседних ранее кодированных блоков, например, блоков выше, выше и справа, выше и слева или слева относительно текущего блока, при условии порядка кодирования слева направо, сверху вниз для блоков. Процессор 46 внутреннего прогнозирования может быть сконфигурирован с множеством различных режимов внутреннего прогнозирования. Например, процессор 46 внутреннего прогнозирования может быть сконфигурирован с определенным числом режимов направленного прогнозирования, например, с тридцатью тремя режимами направленного прогнозирования на основе размера кодируемой CU.
[0160] Процессор 46 внутреннего прогнозирования может выбирать режим внутреннего прогнозирования, например, посредством вычисления значений ошибки для различных режимов внутреннего прогнозирования и выбора режима, который дает в результате наименьшее значение ошибки. Режимы направленного прогнозирования могут включать в себя функции для комбинирования значений пространственно соседних пикселов и применения комбинированных значений к одной или более пикселных позиций в PU. После того, как вычислены значения для всех пикселных позиций в PU, процессор 46 внутреннего прогнозирования может вычислять значение ошибки для режима прогнозирования на основе пикселных разностей между PU и принимаемым блоком, который должен быть кодирован. Процессор 46 внутреннего прогнозирования может продолжать тестирование режимов внутреннего прогнозирования до тех пор, пока не будет обнаружен режим внутреннего прогнозирования, который дает в результате приемлемое значение ошибки. Процессор 46 внутреннего прогнозирования затем может отправлять PU в сумматор 50.
[0161] Видеокодер 20 формирует остаточный блок посредством вычитания прогнозирующих данных, вычисленных посредством модуля 44 компенсации движения или процессора 46 внутреннего прогнозирования, из кодируемого исходного видеоблока. Сумматор 50 представляет компонент или компоненты, которые выполняют эту операцию вычитания. Остаточный блок может соответствовать двумерной матрице значений пикселных разностей, при этом число значений в остаточном блоке является идентичным числу пикселов в PU, соответствующей остаточному блоку. Значения в остаточном блоке могут соответствовать разностям, т.е. ошибке, между значениями совместно размещенных пикселов в PU и в исходном блоке, который должен быть кодирован. Разности могут представлять собой разности сигнала цветности или сигнала яркости в зависимости от типа блока, который кодируется.
[0162] Процессор 52 преобразования может формировать одну или более единиц преобразования (TU) из остаточного блока. Процессор 52 преобразования выбирает преобразование из множества преобразований. Например, процессор 52 преобразования может выбирать одно из дискретного косинусного преобразования (DCT), дискретного синусного преобразования (DST), целочисленного преобразования, преобразования Карунена-Лоэва (K-L) или другого преобразования для того, чтобы формировать коэффициенты преобразования. Преобразование может выбираться на основе одной или более характеристик кодирования, таких как размер блока, режим кодирования и т.п. Процессор 52 преобразования затем применяет выбранное преобразование к TU, формируя видеоблок, содержащий двумерный массив коэффициентов преобразования. Процессор 52 преобразования может отправлять результирующие коэффициенты преобразования в модуль 54 квантования. Модуль 54 квантования затем может квантовать коэффициенты преобразования.
[0163] Модуль 56 энтропийного кодирования затем может выполнять сканирование коэффициентов в матрице согласно режиму сканирования. В случае кодирования с потерями, коэффициенты могут представлять собой квантованные коэффициенты преобразования. В случае кодирования без потерь или кодирования с потерями с пропуском или обходом преобразования, коэффициенты могут представлять собой коэффициенты, которые не преобразованы или квантованы. Это раскрытие сущности описывает модуль 56 энтропийного кодирования как выполняющий сканирование. Тем не менее, следует понимать, что в других примерах, другие процессоры, такие как модуль 54 квантования, могут выполнять сканирование.
[0164] После того, как коэффициенты преобразования сканированы в одномерный массив, модуль 56 энтропийного кодирования может применять энтропийное кодирование, такое как CABAC, синтаксическое контекстно-адаптивное двоичное арифметическое кодирование (SBAC), энтропийное кодирование на основе сегментации на интервалы вероятности (PIPE) или другая технология энтропийного кодирования, к коэффициентам. Модуль 56 энтропийного кодирования может быть выполнен с возможностью кодировать коэффициенты согласно технологиям этого раскрытия сущности. В примере CABAC, модуль 56 энтропийного кодирования может кодировать коэффициенты с использованием режима регулярного кодирования либо режима обхода. Чтобы выполнять CABAC, модуль 56 энтропийного кодирования может выбирать контекстную модель, чтобы применять определенный контекст для того, чтобы кодировать символы, которые должны быть переданы. Контекст может быть связан, например, с тем, являются соседние значения ненулевыми или нет. Модуль 56 энтропийного кодирования может выбирать контекстную модель, используемую для того, чтобы кодировать эти символы, например, на основе направления внутреннего прогнозирования для режимов внутреннего прогнозирования, позиции сканирования коэффициента, соответствующего элементам синтаксиса, типа блока и/или типа преобразования, в числе прочих факторов, используемых для выбора контекстной модели.
[0165] Модуль 56 энтропийного кодирования кодирует уровни коэффициентов остаточных видеоданных в поток битов для передачи в видеодекодер или устройство хранения данных. В случае кодирования видео без потерь либо кодирования видео с потерями с пропуском или обходом преобразования, коэффициенты, которые должны кодироваться, могут иметь уровни коэффициентов с большими абсолютными значениями. Когда коэффициенты представляют экранный контент, который может включать в себя графику и текстовые области, контент не может быть хорошо прогнозирован, что приводит к большим абсолютным значениям уровней коэффициентов для коэффициентов, которые должны кодироваться.
coeff_abs_level_remaining или levelRem
[0166] Модуль 56 энтропийного кодирования кодирует оставшееся абсолютное значение (например, ) уровня коэффициентов, по меньшей мере, для одного коэффициента в текущей группе коэффициентов (CG) в режиме обхода CABAC или другого механизма энтропийного кодирования с использованием кодов, заданных посредством параметра Райса. Согласно технологиям этого раскрытия сущности, модуль 56 энтропийного кодирования выполнен с возможностью определять начальное значение параметра Райса для текущей CG на основе статистических данных уровней коэффициентов для ранее кодированных коэффициентов. Статистические данные могут представлять собой статистические данные для абсолютных значений уровней коэффициентов или оставшихся абсолютных значений уровней коэффициентов ранее кодированных коэффициентов. Схема инициализации параметра Райса на основе статистических данных, описанная в этом раскрытии сущности, обеспечивает возможность быстрой и эффективной адаптации параметра Райса к большим значениям коэффициентов, которые могут возникать в блоках экранного контента и блоках с пропуском или обходом преобразования.
[0167] В одном примере, модуль 56 энтропийного кодирования может быть выполнен с возможностью определять статистические данные посредством сравнения уровня коэффициентов для данного ранее кодированного коэффициента с функцией статистических данных и затем определять то, следует увеличивать или уменьшать значение статистических данных, на основе сравнения. Значение статистических данных может инициализироваться равным нулю в начале каждой серии последовательных макроблоков видеоданных, и модуль 56 энтропийного кодирования может обновлять статистические данные один раз в расчете на CG серии последовательных макроблоков. В некоторых примерах, модуль 56 энтропийного кодирования может быть выполнен с возможностью определять отдельные статистические данные для каждой из множества различных категорий CG. Категории могут задаваться, например, на основе характеристик блоков преобразования, которые включают в себя CG, к примеру, того, представляют собой блоки преобразования или нет блоки сигналов яркости, и того, представляют собой блоки преобразования или нет блоки пропуска преобразования.
[0168] В начале текущей CG, модуль 56 энтропийного кодирования выполнен с возможностью преобразовывать значение статистических данных в начальное значение параметра Райса для текущей CG. В одном примере, модуль 56 энтропийного кодирования может преобразовывать значение статистических данных в начальное значение параметра Райса согласно функции статистических данных, которая основана на выборе минимума из максимального значения параметра Райса или значения статистических данных, деленного на постоянное значение. Выше подробнее описаны примерные уравнения, представляющие процедуры сбора статистических данных, сегментации статистических данных и преобразования статистических данных для схемы инициализации параметра Райса.
[0169] После энтропийного кодирования посредством модуля 56 энтропийного кодирования, результирующее кодированное видео может быть передано в другое устройство, к примеру, в видеодекодер 30 или заархивировано для последующей передачи или извлечения. В некоторых случаях, модуль 56 энтропийного кодирования или другой модуль видеокодера 20 может быть выполнен с возможностью осуществлять другие функции кодирования, в дополнение к энтропийному кодированию.
[0170] Модуль 58 обратного квантования и процессор 60 обратного преобразования применяют обратное квантование и обратное преобразование, соответственно, чтобы восстанавливать остаточный блок в пикселной области, к примеру, для последующего использования в качестве опорного блока. Модуль 44 компенсации движения может вычислять опорный блок посредством суммирования остаточного блока с прогнозным блоком одного из опорных изображений из буфера 64 опорных изображений. Модуль 44 компенсации движения также может применять один или более интерполяционных фильтров к восстановленному остаточному блоку, чтобы вычислять субцелочисленнопикселные значения для использования при оценке движения. Сумматор 62 суммирует восстановленный остаточный блок с прогнозным блоком с компенсацией движения, сформированным посредством модуля 44 компенсации движения, чтобы формировать восстановленный видеоблок для хранения в буфере 64 декодированных изображений. Восстановленный видеоблок может использоваться посредством модуля 42 оценки движения и модуля 44 компенсации движения в качестве опорного блока для того, чтобы взаимно кодировать блок в последующем видеокадре.
[0171] Фиг. 6 является блок-схемой, иллюстрирующей пример видеодекодера 30, который может реализовывать технологии для декодирования уровней коэффициентов, описанного в этом раскрытии сущности. В примере по фиг. 6, видеодекодер 30 включает в себя модуль 70 энтропийного декодирования, запоминающее устройство 71 видеоданных, модуль 72 компенсации движения, процессор 74 внутреннего прогнозирования, модуль 76 обратного квантования, процессор 78 обратного преобразования, буфер 82 декодированных изображений (DPB) и сумматор 80. Видеодекодер 30, в некоторых примерах, в общем, может выполнять проход декодирования, взаимно-обратный по отношению к проходу кодирования, описанному относительно видеокодера 20 (см. фиг. 5).
[0172] Запоминающее устройство 71 видеоданных может сохранять видеоданные, такие как кодированный поток видеобитов, которые должны декодироваться посредством компонентов видеодекодера 30. Видеоданные, сохраненные в запоминающем устройстве 71 видеоданных, могут получаться, например, из машиночитаемого носителя 16, например, из локального видеоисточника, такого как камера, через передачу по проводной или беспроводной сети видеоданных, либо посредством осуществления доступа к физическим носителям хранения данных. Запоминающее устройство 71 видеоданных может формировать буфер кодированных изображений (CPB), который сохраняет кодированные видеоданные из кодированного потока видеобитов. Буфер 82 декодированных изображений может представлять собой запоминающее устройство опорных изображений, которое сохраняет опорные видеоданные для использования при декодировании видеоданных посредством видеодекодера 30, например, в режимах внутреннего или взаимного кодирования. Запоминающее устройство 71 видеоданных и буфер 82 декодированных изображений могут формироваться посредством любого из множества запоминающих устройств, к примеру, как динамическое оперативное запоминающее устройство (DRAM), включающее в себя синхронное DRAM (SDRAM), магниторезистивное RAM (MRAM), резистивное RAM (RRAM) или другие типы запоминающих устройств. Запоминающее устройство 71 видеоданных и буфер 82 декодированных изображений могут предоставляться посредством идентичного запоминающего устройства или отдельных запоминающих устройств. В различных примерах, запоминающее устройство 71 видеоданных может быть внутрикристальным с другими компонентами видеодекодера 30 или внекристальным относительно этих компонентов.
[0173] Модуль 70 энтропийного декодирования выполняет процесс энтропийного декодирования для кодированного потока битов, чтобы извлекать одномерный массив коэффициентов остаточных видеоданных. Используемый процесс энтропийного декодирования зависит от энтропийного кодирования, используемого посредством видеокодера 20 (например, CABAC). Процесс энтропийного кодирования, используемый посредством кодера, может передаваться в служебных сигналах в кодированном потоке битов или может представлять собой предварительно определенный процесс. Модуль 70 энтропийного декодирования может быть выполнен с возможностью декодировать коэффициенты согласно технологиям этого раскрытия сущности. В примере CABAC, модуль 70 энтропийного декодирования может декодировать коэффициенты с использованием режима регулярного кодирования либо режима обхода.
[0174] В некоторых примерах, модуль 70 энтропийного декодирования может сканировать принятые значения с использованием сканирования, которое зеркально отражает режим сканирования, используемый посредством модуля 56 энтропийного кодирования видеокодера 20. Хотя сканирование коэффициентов может выполняться в модуле 76 обратного квантования, сканирование описывается в целях иллюстрации как выполняемое посредством модуля 70 энтропийного декодирования. Помимо этого, хотя показаны как отдельные функциональные модули для простоты иллюстрации, структура и функциональность модуля 70 энтропийного декодирования, модуля 76 обратного квантования и других модулей видеодекодера 30 может иметь высокую степень интеграции друг с другом.
[0175] Модуль 70 энтропийного декодирования декодирует уровни коэффициентов для коэффициентов остаточных видеоданных из потока битов взаимно-обратным способом по отношению к видеокодеру 20. В случае кодирования видео с потерями, коэффициенты, которые должны декодироваться, могут представлять собой квантованные коэффициенты преобразования. В случае кодирования видео без потерь либо кодирования видео с потерями с пропуском или обходом преобразования, коэффициенты, которые должны декодироваться, могут быть кодированными пикселными значениями и иметь уровни коэффициентов (т.е. пикселные значения) с большими абсолютными значениями. Когда коэффициенты представляют экранный контент, который может включать в себя графику и текстовые области, контент не может быть хорошо прогнозирован, что приводит к большим абсолютным значениям уровней коэффициентов для коэффициентов, которые должны декодироваться.
[0176] Модуль 70 энтропийного декодирования декодирует оставшееся абсолютное значение уровня коэффициентов, по меньшей мере, для одного коэффициента в группе коэффициентов (CG) с использованием кодов, заданных посредством параметра Райса. Согласно технологиям этого раскрытия сущности, модуль 70 энтропийного декодирования выполнен с возможностью определять начальное значение параметра Райса для текущей CG на основе статистических данных уровней коэффициентов для ранее декодированных коэффициентов. Статистические данные могут представлять собой статистические данные для абсолютных значений уровней коэффициентов или оставшихся абсолютных значений уровней коэффициентов ранее декодированных коэффициентов. Схема инициализации параметра Райса на основе статистических данных, описанная в этом раскрытии сущности, обеспечивает возможность быстрой и эффективной адаптации параметра Райса к большим значениям коэффициентов, которые могут возникать в блоках экранного контента и блоках с пропуском или обходом преобразования.
[0177] В одном примере, модуль 70 энтропийного декодирования может быть выполнен с возможностью определять статистические данные посредством сравнения уровня коэффициентов для данного ранее декодированного коэффициента с функцией статистических данных и затем определять то, следует увеличивать или уменьшать значение статистических данных, на основе сравнения. Значение статистических данных может инициализироваться равным нулю в начале каждой серии последовательных макроблоков видеоданных, и модуль 70 энтропийного декодирования может обновлять статистические данные один раз в расчете на CG серии последовательных макроблоков. В некоторых примерах, модуль 70 энтропийного декодирования может быть выполнен с возможностью определять отдельные статистические данные для каждой из множества различных категорий CG. Категории могут задаваться, например, на основе характеристик блоков преобразования, которые включают в себя CG, к примеру, того, представляют собой блоки преобразования или нет блоки сигналов яркости, и того, представляют собой блоки преобразования или нет блоки пропуска преобразования.
[0178] В начале текущей CG, модуль 70 энтропийного декодирования выполнен с возможностью преобразовывать значение статистических данных в начальное значение параметра Райса для текущей CG. В одном примере, модуль 70 энтропийного декодирования может преобразовывать значение статистических данных в начальное значение параметра Райса согласно функции статистических данных, которая основана на выборе минимума из максимального значения параметра Райса или значения статистических данных, деленного на постоянное значение. Выше подробнее описаны примерные уравнения, представляющие процедуры сбора статистических данных, сегментации статистических данных и преобразования статистических данных для схемы инициализации параметра Райса.
[0179] Модуль 76 обратного квантования обратно квантует, т.е. деквантует, квантованные коэффициенты преобразования, предоставленные в потоке битов и декодированные посредством модуля 70 энтропийного декодирования. Процесс обратного квантования может включать в себя традиционный процесс, например, аналогичный процессам, предложенным для HEVC или заданным посредством стандарта декодирования H.264. Процесс обратного квантования может включать в себя использование параметра QP квантования, вычисленного посредством видеокодера 20 для CU, чтобы определять степень квантования и, аналогично, степень обратного квантования, которое должно применяться. Модуль 76 обратного квантования может обратно квантовать коэффициенты преобразования до или после того, как коэффициенты преобразуются из одномерного массива в двумерный массив.
[0180] Процессор 78 обратного преобразования применяет обратное преобразование к обратно квантованным коэффициентам преобразования. Например, процессор 78 обратного преобразования может применять одно из дискретного косинусного преобразования (DCT), дискретного синусного преобразования (DST), целочисленного преобразования, преобразования Карунена-Лоэва (K-L) или другого преобразования для того, чтобы формировать остаточные данные. В некоторых примерах, процессор 78 обратного преобразования может определять обратное преобразование на основе передачи служебных сигналов из видеокодера 20 или посредством логического вывода преобразования из одной или более характеристик кодирования, таких как размер блока, режим кодирования и т.п. В некоторых примерах, процессор 78 обратного преобразования может определять преобразование, которое должно применяться к текущему блоку, на основе передаваемого в служебных сигналах преобразования в корневом узле дерева квадрантов для LCU, включающей в себя текущий блок. Альтернативно, преобразование может передаваться в служебных сигналах в корне дерева квадрантов TU для CU концевого узла в дереве квадрантов LCU. В некоторых примерах, процессор 78 обратного преобразования может применять каскадное обратное преобразование, при котором процессор 78 обратного преобразования применяет два или более обратных преобразований к коэффициентам преобразования декодируемого текущего блока.
[0181] Процессор 74 внутреннего прогнозирования может формировать прогнозирующие данные для текущего блока текущего кадра на основе передаваемого в служебных сигналах режима внутреннего прогнозирования и данных из ранее декодированных блоков текущего кадра.
[0182] Модуль 72 компенсации движения может извлекать вектор движения, направление прогнозирования движения и опорный индекс из кодированного потока битов. Опорное направление прогнозирования указывает то, является режим взаимного прогнозирования однонаправленным (например, P-кадр) или двунаправленным (B-кадр). Опорный индекс указывает то, на каком опорном кадре основан возможный вариант вектора движения. На основе извлеченного направления прогнозирования движения, индекса опорного кадра и вектора движения, модуль 72 компенсации движения формирует блок с компенсацией движения для текущей части. Эти блоки с компенсацией движения по существу воссоздают прогнозирующий блок, используемый для того, чтобы формировать остаточные данные.
[0183] Модуль 72 компенсации движения может формировать блоки с компенсацией движения, возможно выполняя интерполяцию на основе интерполяционных фильтров. Идентификаторы для интерполяционных фильтров, которые должны использоваться для оценки движения с субпикселной точностью, могут быть включены в элементы синтаксиса. Модуль 72 компенсации движения может использовать интерполяционные фильтры, используемые посредством видеокодера 20 в ходе кодирования видеоблока, чтобы вычислять интерполированные значения для субцелочисленных пикселов опорного блока. Модуль 72 компенсации движения может определять интерполяционные фильтры, используемые посредством видеокодера 20 согласно принимаемой синтаксической информации, и использовать интерполяционные фильтры для того, чтобы формировать прогнозные блоки.
[0184] Дополнительно, модуль 72 компенсации движения и процессор 74 внутреннего прогнозирования, в примере HEVC, могут использовать часть синтаксической информации (например, предоставленной посредством дерева квадрантов) для того, чтобы определять размеры LCU, используемых для того, чтобы кодировать кадры кодированной видеопоследовательности. Модуль 72 компенсации движения и процессор 74 внутреннего прогнозирования также могут использовать синтаксическую информацию, чтобы определять информацию разбиения, которая описывает то, как разбивается каждая CU кадра кодированной видеопоследовательности (и аналогично, то, как разбиваются под-CU). Синтаксическая информация также может включать в себя режимы, указывающие то, как кодируется каждое разбиение (например, внутреннее или взаимное прогнозирование и для режима внутреннего прогнозирующего кодирования), один или более опорных кадров (и/или опорных списков, содержащих идентификаторы для опорных кадров) для каждой взаимно кодированной PU и другую информацию для того, чтобы декодировать кодированную видеопоследовательность.
[0185] Сумматор 80 комбинирует остаточные блоки с соответствующими прогнозными блоками, сформированными посредством модуля 72 компенсации движения или процессора 74 внутреннего прогнозирования, чтобы формировать декодированные блоки. Если требуется, фильтр удаления блочности также может быть применен для того, чтобы фильтровать декодированные блоки, чтобы удалять артефакты блочности. Декодированные видеоблоки затем сохраняются в буфере 82 декодированных изображений, который предоставляет опорные блоки для последующей компенсации движения, а также формирует декодированное видео для представления на устройстве отображения (к примеру, на устройстве 32 отображения по фиг. 1).
[0186] Фиг. 7 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения начального значения параметра Райса во время энтропийного кодирования уровней коэффициентов согласно технологиям, описанным в этом раскрытии сущности. Примерный процесс описывается относительно видеокодера 20, включающего в себя модуль 56 энтропийного кодирования из фиг. 5.
[0187] Модуль 56 энтропийного кодирования принимает коэффициенты остаточных видеоданных, которые должны кодироваться в поток битов для передачи в видеодекодер 30 или для хранения на носителе 34 хранения данных или на файловом сервере 36. Коэффициенты остаточных видеоданных могут быть включены в группы коэффициентов (CG), каждая из которых представляет собой субблок блока преобразования (например, субблок 4x4, как проиллюстрировано на фиг. 4). Во время кодирования коэффициентов в CG, модуль 56 энтропийного кодирования определяет статистические данные уровней коэффициентов для ранее кодированных коэффициентов (100). В примере, подробнее описанном ниже относительно фиг. 9, определение статистических данных уровней коэффициентов для ранее кодированных коэффициентов может содержать определение того, следует увеличивать или уменьшать значение статистических данных, на основе сравнения уровня коэффициентов для одного или более ранее кодированных коэффициентов с функцией статистических данных. Значение статистических данных может инициализироваться равным нулю в начале каждой серии последовательных макроблоков остаточных видеоданных.
[0188] В некоторых примерах, определение статистических данных уровней коэффициентов для ранее кодированных коэффициентов может содержать вычисление среднего или скользящего среднего уровней коэффициентов для серии последовательных макроблоков или единицы кодирования (CU) остаточных видеоданных. В других примерах, определение статистических данных уровней коэффициентов для ранее кодированных коэффициентов может содержать определение того, следует увеличивать, уменьшать или поддерживать значение статистических данных, на основе сравнения уровня коэффициентов для одного из ранее кодированных коэффициентов со значением статистических данных.
[0189] Статистические данные уровней коэффициентов могут включать в себя статистические данные для абсолютных значений уровней коэффициентов или статистические данные для оставшихся абсолютных значений уровней коэффициентов для ранее кодированных коэффициентов. Статистические данные уровней коэффициентов могут собираться для ранее кодированных коэффициентов в CG, которые включены в идентичный блок преобразования, или для ранее кодированных коэффициентов в CG, которые включены в два или более различных блока преобразования.
[0190] В некоторых примерах, модуль 56 энтропийного кодирования может определять статистические данные уровней коэффициентов для ранее кодированных коэффициентов один раз в расчете на группу коэффициентов. Частота сбора статистических данных подробнее описана ниже относительно фиг. 9. Например, модуль 56 энтропийного кодирования может определять статистические данные, когда первое абсолютное значение уровня коэффициентов кодируется в каждой из предыдущих CG. Альтернативно, модуль 56 энтропийного кодирования может определять статистические данные, когда первое оставшееся абсолютное значение уровня коэффициентов кодируется в каждой из предыдущих CG. В других примерах, модуль 56 энтропийного кодирования может определять статистические данные уровней коэффициентов для ранее кодированных коэффициентов после кодирования каждого из коэффициентов.
[0191] Помимо этого, как подробнее описано ниже относительно фиг. 9, модуль 56 энтропийного кодирования может определять отдельные статистические данные для каждой из множества различных категорий CG. Категории могут задаваться на основе характеристик блоков преобразования, которые включают в себя CG. Например, характеристики блоков преобразования могут включать в себя то, представляют собой блоки преобразования или нет типы блоков сигналов яркости или сигналов цветности, то, кодированы блоки преобразования как блоки пропуска преобразования или блоки обхода квантования с преобразованием, то, имеют блоки преобразования типы серий последовательных макроблоков внутреннего прогнозирования или взаимного прогнозирования, а также размер блоков преобразования и/или позиции CG в блоках преобразования.
[0192] Для текущей CG в блоке преобразования остаточных видеоданных, которые должны кодироваться, модуль 56 энтропийного кодирования определяет начальное значение параметра Райса на основе собранных статистических данных уровней коэффициентов для ранее кодированных коэффициентов (102). Традиционно, значение параметра Райса инициализируется равным нулю в начале каждой CG и условно обновляется после кодирования оставшихся абсолютных значений уровней коэффициентов в CG. В случае кодирования уровней коэффициентов для экранного контента или в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования, инициализация значения параметра Райса равным нулю для каждой CG не может быть оптимальной. Технологии этого раскрытия сущности описывают задание значения параметра Райса в начале каждой CG на основе собранных статистических данных вместо автоматического сброса значения параметра Райса до нуля.
[0193] В одном примере, подробнее описанном ниже относительно фиг. 10, модуль 56 энтропийного кодирования определяет начальное значение параметра Райса для текущей CG посредством преобразования значения собранных статистических данных в начальное значение параметра Райса согласно функции статистических данных. В других примерах, модуль 56 энтропийного кодирования может преобразовывать значение собранных статистических данных в начальное значение параметра Райса согласно сохраненной таблице.
[0194] Как подробнее описано выше, модуль 56 энтропийного кодирования может выполнять одно или более сканирований текущей CG согласно обратному порядку сканирования, чтобы кодировать уровни коэффициентов для коэффициентов в текущей CG. Например, модуль 56 энтропийного кодирования может кодировать флаги или элементы синтаксиса, чтобы указывать то, имеют или нет коэффициенты уровни коэффициентов с абсолютными значениями, которые больше 1 или больше 2, с использованием контекстных моделей в режиме регулярного кодирования. Модуль 56 энтропийного кодирования затем кодирует флаг или элемент синтаксиса, чтобы указывать оставшееся абсолютное значение уровня коэффициентов, по меньшей мере, для одного из коэффициентов в текущей CG с использованием кодов, заданных посредством параметра Райса (104). Например, модуль 56 энтропийного кодирования может кодировать элемент синтаксиса, указывающий оставшееся абсолютное значение уровня коэффициентов для любого из коэффициентов с уровнями коэффициентов, большими 2, в режиме обхода. В некоторых примерах, после кодирования первого оставшегося абсолютного значения уровня коэффициентов в текущей CG, модуль 56 энтропийного кодирования может обновлять статистические данные на основе уровня коэффициентов для кодированного коэффициента.
[0195] В некоторых случаях, модуль 56 энтропийного кодирования может условно обновлять начальное значение параметра Райса на основе начального значения параметра Райса и абсолютного значения уровня коэффициентов для коэффициента, кодируемого в текущей CG. Модуль 56 энтропийного кодирования может продолжать условно обновлять значение параметра Райса после кодирования каждого оставшегося абсолютного уровня для коэффициентов в текущей CG. В конце текущей CG, модуль 56 энтропийного кодирования может определять начальное значение параметра Райса для последующей CG на основе статистических данных уровней коэффициентов для ранее кодированных коэффициентов, включающих в себя недавно кодированные коэффициенты, включенные в текущую CG.
[0196] Фиг. 8 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения начального значения параметра Райса во время энтропийного декодирования уровней коэффициентов согласно технологиям, описанным в этом раскрытии сущности. Примерный процесс описывается относительно видеодекодера 30, включающего в себя модуль 70 энтропийного декодирования из фиг. 6.
[0197] Видеодекодер 30 принимает кодированный поток видеобитов из видеокодера 20 или из устройства хранения данных, к примеру, носителя 34 хранения данных или файлового сервера 36. Принимаемый поток видеобитов представляет коэффициенты остаточных видеоданных, которые должны декодироваться. Коэффициенты остаточных видеоданных могут быть включены в группы коэффициентов (CG), каждая из которых представляет собой субблок блока преобразования (например, субблок 4x4, как проиллюстрировано на фиг. 4). Во время декодирования коэффициентов в CG, модуль 70 энтропийного декодирования определяет статистические данные уровней коэффициентов для ранее декодированных коэффициентов (110). В примере, подробнее описанном ниже относительно фиг. 9, определение статистических данных уровней коэффициентов для ранее декодированных коэффициентов может содержать определение того, следует увеличивать или уменьшать значение статистических данных, на основе сравнения уровня коэффициентов для одного или более ранее декодированных коэффициентов с функцией статистических данных. Значение статистических данных может инициализироваться равным нулю в начале каждой серии последовательных макроблоков остаточных видеоданных.
[0198] В некоторых примерах, определение статистических данных уровней коэффициентов для ранее декодированных коэффициентов может содержать вычисление среднего или скользящего среднего уровней коэффициентов для серии последовательных макроблоков, единицы кодирования (CU) или единицы преобразования (TU) остаточных видеоданных. В других примерах, определение статистических данных уровней коэффициентов для ранее декодированных коэффициентов может содержать определение того, следует увеличивать, уменьшать или поддерживать значение статистических данных, на основе сравнения уровня коэффициентов для одного из ранее кодированных коэффициентов со значением статистических данных.
[0199] Статистические данные уровней коэффициентов могут включать в себя статистические данные для абсолютных значений уровней коэффициентов или статистические данные для оставшихся абсолютных значений уровней коэффициентов для ранее декодированных коэффициентов. Статистические данные уровней коэффициентов могут собираться для ранее декодированных коэффициентов в CG, которые включены в идентичный блок преобразования, или для ранее декодированных коэффициентов в CG, которые включены в два или более различных блока преобразования.
[0200] В некоторых примерах, модуль 70 энтропийного декодирования может определять статистические данные уровней коэффициентов для ранее декодированных коэффициентов один раз в расчете на группу коэффициентов. Частота сбора статистических данных подробнее описана ниже относительно фиг. 9. Например, модуль 70 энтропийного декодирования может определять статистические данные, когда первое абсолютное значение уровня коэффициентов декодируется в каждой из предыдущих CG. Альтернативно, модуль 70 энтропийного декодирования может определять статистические данные, когда первое оставшееся абсолютное значение уровня коэффициентов декодируется в каждой из предыдущих CG. В других примерах, модуль 70 энтропийного декодирования может определять статистические данные уровней коэффициентов для ранее декодированных коэффициентов после декодирования каждого из коэффициентов.
[0201] Помимо этого, как подробнее описано ниже относительно фиг. 9, модуль 70 энтропийного декодирования может определять отдельные статистические данные для каждой из множества различных категорий CG. Категории могут задаваться на основе характеристик блоков преобразования, которые включают в себя CG. Например, характеристики блоков преобразования могут включать в себя то, представляют собой блоки преобразования или нет типы блоков сигналов яркости или сигналов цветности, то, декодируются блоки преобразования в качестве блоков пропуска преобразования или блоков обхода квантования с преобразованием, то, имеют блоки преобразования типы серий последовательных макроблоков внутреннего прогнозирования или взаимного прогнозирования, а также размер блоков преобразования и/или позиции CG в блоках преобразования.
[0202] Для текущей CG в блоке преобразования остаточных видеоданных, которые должны декодироваться, модуль 70 энтропийного декодирования определяет начальное значение параметра Райса на основе собранных статистических данных уровней коэффициентов для ранее декодированных коэффициентов (112). В некоторых процессах, значение параметра Райса инициализируется равным нулю в начале каждой CG и условно обновляется после декодирования оставшихся абсолютных значений уровней коэффициентов в CG. В случае кодирования уровней коэффициентов для экранного контента или в случае кодирования без потерь или кодирования с потерями в режиме пропуска преобразования, инициализация значения параметра Райса равным нулю для каждой CG не может быть оптимальной. Технологии этого раскрытия сущности описывают задание значения параметра Райса в начале каждой CG на основе собранных статистических данных вместо автоматического сброса значения параметра Райса равным нулю.
[0203] В одном примере, подробнее описанном ниже относительно фиг. 10, модуль 70 энтропийного декодирования определяет начальное значение параметра Райса для текущей CG посредством преобразования значения собранных статистических данных в начальное значение параметра Райса согласно функции статистических данных. В других примерах, модуль 70 энтропийного декодирования может преобразовывать значение собранных статистических данных в начальное значение параметра Райса согласно сохраненной таблице.
[0204] Как подробнее описано выше, модуль 70 энтропийного декодирования может выполнять одно или более сканирований текущей CG согласно обратному порядку сканирования, чтобы декодировать уровни коэффициентов для коэффициентов в текущей CG. Например, модуль 70 энтропийного декодирования может декодировать флаги или элементы синтаксиса, чтобы указывать то, имеют или нет коэффициенты уровни коэффициентов с абсолютными значениями, которые больше 1 или больше 2, с использованием контекстных моделей в режиме регулярного кодирования. Модуль 70 энтропийного декодирования затем декодирует флаг или элемент синтаксиса, чтобы указывать оставшееся абсолютное значение уровня коэффициентов, по меньшей мере, для одного из коэффициентов в текущей CG с использованием кодов, заданных посредством параметра Райса (114). Например, модуль 70 энтропийного декодирования может декодировать элемент синтаксиса, указывающий оставшееся абсолютное значение уровня коэффициентов для любого из коэффициентов с уровнями коэффициентов, большими 2, в режиме обхода. В некоторых примерах, после декодирования первого оставшегося абсолютного значения уровня коэффициентов в текущей CG, модуль 70 энтропийного декодирования может обновлять статистические данные на основе уровня коэффициентов для декодированного коэффициента.
[0205] В некоторых случаях, модуль 70 энтропийного декодирования может условно обновлять начальное значение параметра Райса на основе начального значения параметра Райса и абсолютного значения уровня коэффициентов для коэффициента, декодируемого в текущей CG. Модуль 70 энтропийного декодирования может продолжать условно обновлять значение параметра Райса после декодирования каждого оставшегося абсолютного уровня для коэффициентов в текущей CG. В конце текущей CG, модуль 70 энтропийного декодирования может определять начальное значение параметра Райса для последующей CG на основе статистических данных уровней коэффициентов для ранее декодированных коэффициентов, включающих в себя недавно декодированные коэффициенты, включенные в текущую CG.
[0206] Фиг. 9 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения статистических данных уровней коэффициентов для ранее кодированных коэффициентов во время энтропийного кодирования уровней коэффициентов согласно технологиям, описанным в этом раскрытии сущности. Проиллюстрированный процесс может быть одним примером этапа 100 из фиг. 7 или этапа 110 из фиг. 8. Примерный процесс описывается относительно видеодекодера 30, включающего в себя модуль 70 энтропийного декодирования из фиг. 6. В других примерах, процесс может выполняться посредством модуля 56 энтропийного кодирования видеокодера 20 из фиг. 5.
[0207] Модуль 70 энтропийного декодирования декодирует уровень коэффициентов для коэффициента в CG, включенной в блок преобразования (120). Уровень коэффициентов может содержать либо абсолютное значение уровня коэффициентов, либо оставшееся абсолютное значение уровня коэффициентов. Если уровень декодированных коэффициентов не является первым уровнем коэффициентов в CG (ветвь "Нет" 122), то модуль 70 энтропийного декодирования не обновляет статистические данные на основе уровня декодированных коэффициентов (124). В этом примере, статистические данные обновляются только один раз в расчете на CG, когда первое абсолютное значение уровня коэффициентов или первое оставшееся абсолютное значение уровня коэффициентов кодируется в каждой из CG. В другом примере, статистические данные могут обновляться более часто или на основе кодирования различного уровня коэффициентов.
[0208] Если уровень декодированных коэффициентов является первым уровнем коэффициентов в CG (ветвь "Да" 122), то модуль 70 энтропийного декодирования определяет категорию CG на основе характеристик блока преобразования (126). В одном примере, характеристики блока преобразования, используемого для того, чтобы определять категорию CG, включают в себя то, представляет собой блок преобразования или нет блок сигналов яркости, и то, представляет собой блок преобразования или нет блок пропуска преобразования. В других примерах, характеристики, используемые для того, чтобы определять категорию CG, могут быть другими, например, то, представляет собой блок преобразования или нет блок обхода квантования с преобразованием, то, имеет блок преобразования тип серии последовательных макроблоков внутреннего прогнозирования или взаимного прогнозирования, а также размер блока преобразования и/или позиция текущей CG в блоке преобразования. В некоторых примерах, видеодекодер 30 может принимать элемент синтаксиса, указывающий то, какие характеристики блока преобразования используются для того, чтобы задавать различные категории CG.
[0209] Модуль 70 энтропийного декодирования затем сравнивает первый уровень коэффициентов в CG с функцией статистических данных для определенной категории (128). В одном примере, функция статистических данных, используемая для того, чтобы обновлять статистические данные, основана на первом постоянном значении, которое сдвигается влево на значение статистических данных, деленное на второе постоянное значение. В других примерах, статистические данные могут определяться согласно другим технологиям, таким как вычисление среднего или скользящего среднего уровней коэффициентов для серии последовательных макроблоков или единицы кодирования (CU) видеоданных либо сравнение уровня коэффициентов в CG непосредственно со значением статистических данных.
[0210] Если первый уровень коэффициентов в CG превышает или равен результату функции статистических данных (ветвь "Да" 130), модуль 70 энтропийного декодирования увеличивает значение статистических данных для определенной категории (132). Если первый уровень коэффициентов в CG меньше результата функции статистических данных (ветвь "Нет" 130), модуль 70 энтропийного декодирования уменьшает значение статистических данных для определенной категории (134). В любом случае, модуль 70 энтропийного декодирования может использовать обновленные статистические данные для того, чтобы определять начальное значение параметра Райса для последующей CG определенной категории, как подробнее описано ниже относительно фиг. 10.
[0211] В примере по фиг. 9, процесс для определения статистических данных обновляет статистические данные только один раз в расчете на CG и собирает отдельные статистические данные для множества различных категорий CG. В других примерах, процесс для определения статистических данных может обновлять статистические данные после кодирования оставшихся абсолютных значений для уровней коэффициентов в CG. В дополнительных примерах, процесс для определения статистических данных может собирать только одну категорию статистических данных.
[0212] Фиг. 10 является блок-схемой последовательности операций способа, иллюстрирующей примерный процесс определения начального значения параметра Райса для текущей группы коэффициентов на основе определенных статистических данных согласно технологиям, описанным в этом раскрытии сущности. Проиллюстрированный процесс может быть одним примером этапа 102 из фиг. 7 или этапа 112 из фиг. 8. Примерный процесс описывается относительно видеодекодера 30, включающего в себя модуль 70 энтропийного декодирования из фиг. 6. В других примерах, процесс может выполняться посредством модуля 56 энтропийного кодирования видеокодера 20 из фиг. 5.
[0213] В начале текущей CG в блоке преобразования (140), модуль 70 энтропийного декодирования определяет категорию текущей CG на основе характеристик блока преобразования, который включает в себя текущую CG (142). В одном примере, характеристики блока преобразования, используемого для того, чтобы определять категорию текущей CG, включают в себя то, представляет собой блок преобразования или нет блок сигналов яркости, и то, представляет собой блок преобразования или нет блок пропуска преобразования. В других примерах, характеристики, используемые для того, чтобы определять категорию текущей CG, могут быть другими, например, то, представляет собой блок преобразования или нет блок обхода квантования с преобразованием, то, имеет блок преобразования тип серии последовательных макроблоков внутреннего прогнозирования или взаимного прогнозирования, а также размер блока преобразования и/или позиция текущей CG в блоке преобразования. В некоторых примерах, видеодекодер 30 может принимать элемент синтаксиса, указывающий то, какие характеристики блока преобразования используются для того, чтобы задавать различные категории CG.
[0214] Модуль 70 энтропийного декодирования затем преобразует значение статистических данных для определенной категории в начальное значение параметра Райса для текущей CG согласно функции статистических данных (144). В одном примере, функция статистических данных, используемая для того, чтобы инициализировать параметр Райса, основана на выборе минимума из максимального значения параметра Райса или значения статистических данных, деленного на постоянное значение. В другом примере, начальное значение параметра Райса может определяться из статистических данных согласно различным технологиям, таким как сдвиг вправо значения статистических данных на постоянное значение либо применение линейной или кусочно-линейной функции статистических данных. В еще одних других примерах, модуль 70 энтропийного декодирования может преобразовывать значение статистических данных в начальное значение параметра Райса согласно сохраненной таблице, в которой каждое значение статистических данных в предварительно заданном диапазоне преобразуется в значение параметра Райса вплоть до максимального значения параметра Райса.
[0215] В одном или более примеров, описанные функции могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или любой комбинации вышеозначенного. При реализации в программном обеспечении, функции могут быть сохранены или переданы, в качестве одной или более инструкций или кода, по машиночитаемому носителю и выполнены посредством аппаратного процессора. Машиночитаемые носители могут включать в себя машиночитаемые носители хранения данных, которые соответствуют материальному носителю, такие как носители хранения данных, или среды связи, включающие в себя любой носитель, который упрощает перенос компьютерной программы из одного места в другое, например, согласно протоколу связи. Таким образом, машиночитаемые носители, в общем, могут соответствовать (1) материальному машиночитаемому носителю хранения данных, который является энергонезависимым, или (2) среде связи, такой как сигнал или несущая. Носители хранения данных могут представлять собой любые доступные носители, к которым может осуществляться доступ посредством одного или более компьютеров или одного или более процессоров, с тем чтобы извлекать инструкции, код и/или структуры данных для реализации технологий, описанных в этом раскрытии сущности. Компьютерный программный продукт может включать в себя машиночитаемый носитель.
[0216] В качестве примера, а не ограничения, эти машиночитаемые носители хранения данных могут содержать RAM, ROM, EEPROM, CD-ROM или другое устройство хранения на оптических дисках, устройство хранения на магнитных дисках или другие магнитные устройства хранения, флэш-память либо любой другой носитель, который может быть использован для того, чтобы сохранять требуемый программный код в форме инструкций или структур данных, и к которому можно осуществлять доступ посредством компьютера. Так же, любое подключение корректно называть машиночитаемым носителем. Например, если инструкции передаются из веб-узла, сервера или другого удаленного источника с помощью коаксиального кабеля, оптоволоконного кабеля, "витой пары", цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасные, радиопередающие и микроволновые среды, то коаксиальный кабель, оптоволоконный кабель, "витая пара", DSL или беспроводные технологии, такие как инфракрасные, радиопередающие и микроволновые среды, включаются в определение носителя. Тем не менее, следует понимать, что машиночитаемые носители хранения данных и носители хранения данных не включают в себя соединения, несущие, сигналы или другие энергозависимые носители, а вместо этого направлены на энергонезависимые материальные носители хранения данных. Диск (disk) и диск (disc) при использовании в данном документе включают в себя компакт-диск (CD), лазерный диск, оптический диск, универсальный цифровой диск (DVD), гибкий диск и диск Blu-Ray, при этом диски (disk) обычно воспроизводят данные магнитно, тогда как диски (disc) обычно воспроизводят данные оптически с помощью лазеров. Комбинации вышеперечисленного также следует включать в число машиночитаемых носителей.
[0217] Инструкции могут выполняться посредством одного или более процессоров, например, одного или более процессоров цифровых сигналов (DSP), микропроцессоров общего назначения, специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA) либо других эквивалентных интегральных или дискретных логических схем. Соответственно, термин "процессор" при использовании в данном документе может означать любую вышеуказанную структуру или другую структуру, подходящую для реализации технологий, описанных в данном документе. Помимо этого, в некоторых аспектах функциональность, описанная в данном документе, может быть предоставлена в рамках специализированных программных и/или аппаратных модулей, выполненных с возможностью кодирования или декодирования либо встроенных в комбинированный кодек. Кроме того, технологии могут быть полностью реализованы в одной или более схем или логических элементов.
[0218] Технологии этого раскрытия сущности могут быть реализованы в широком спектре устройств или приборов, в том числе в беспроводном переносном телефоне, в интегральной схеме (IC) или в наборе IC (к примеру, в наборе микросхем). Различные компоненты, модули или блоки описываются в этом раскрытии сущности для того, чтобы подчеркивать функциональные аспекты устройств, выполненных с возможностью осуществлять раскрытые технологии, но необязательно требуют реализации посредством различных аппаратных модулей. Наоборот, как описано выше, различные блоки могут быть комбинированы в аппаратный модуль кодека или предоставлены посредством набора взаимодействующих аппаратных модулей, включающих в себя один или более процессоров, как описано выше, в сочетании с надлежащим программным обеспечением и/или микропрограммным обеспечением.
[0219] Описаны различные примеры. Эти и другие примеры находятся в пределах объема прилагаемой формулы изобретения.