АДАПТИВНОЕ КОДИРОВАНИЕ РЕЖИМА ПРОГНОЗИРОВАНИЯ ВИДЕОБЛОКОВ
ADAPTIVE CODING OF VIDEO BLOCK PREDICTION MODE

По настоящей заявке испрашивается приоритет на основании предварительной заявки на патент США № 60/944,470, поданной 15 июля 2007 года, и предварительной заявки на патент США № 60/979,762, поданной 12 октября 2007 года, содержимое каждой из которых в полном объеме включено в настоящий документ путем ссылки.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Настоящее описание относится к кодированию цифрового видео, а более конкретно к энтропийному кодированию видеоблоков.
Уровень техники
Возможности цифрового видео могут быть встроены в широкий диапазон устройств, включая цифровые телевизоры, системы цифрового прямого широковещания, устройства беспроводной связи, такие как переносные радиотелефоны, беспроводные широковещательные системы, персональные цифровые устройства (PDA), дорожные или настольные компьютеры, цифровые камеры, цифровые записывающие устройства, устройства видеоигр, консоли видеоигр и т.п. Цифровые видеоустройства реализуют такие технологии сжатия видеоизображения, как MPEG-2, MPEG-4 или H.264/MPEG-4, часть 10, усовершенствованное кодирование видео (AVC), чтобы более эффективно передавать и принимать цифровое видео. Технологии сжатия видеоизображений выполняют графическое и временное прогнозирование для того, чтобы уменьшать или удалять избыточность, присутствующую в видеопоследовательностях.
Сжатие видео в общем включает в себя пространственное и/или временное прогнозирование. В частности, внутреннее кодирование базируется на пространственном прогнозировании, чтобы уменьшать или удалять пространственную избыточность между видеоблоками в данной кодированной единице, которая может содержать видеокадр, серию последовательных макроблоков видеокадра и т.п. В отличие от этого взаимное кодирование базируется на временном прогнозировании, чтобы уменьшать или удалять временную избыточность между видеоблоками последовательных кодированных единиц видеопоследовательности. Для внутреннего кодирования видеокодер выполняет пространственное прогнозирование, чтобы сжимать данные на основе других данных в той же кодированной единице. Для взаимного кодирования видеокодер выполняет оценку движения для того, чтобы отслеживать перемещение совпадающих видеоблоков между двумя или более смежными кадрами.
После пространственного или временного прогнозирования остаточный блок формируется посредством вычитания видеоблока прогнозирования, сформированного во время процесса прогнозирования, из исходного видеоблока, который кодируется. Таким образом, остаточный блок указывает различия между блоком прогнозирования и кодируемым текущим блоком. Видеокодер может применять процессы преобразования, квантования и кодирования по энтропии для того, чтобы дополнительно уменьшать скорость передачи битов, ассоциированную с передачей остаточного блока. Технологии преобразования могут изменять набор пикселных значений на коэффициенты преобразования, которые представляют энергию пикселных значений в частотной области. Квантование применяется к коэффициентам преобразования и, в общем, заключает в себе процесс, который ограничивает число битов, ассоциированных с любым данным коэффициентом. До энтропийного кодирования видеокодер сканирует блок квантованных коэффициентов в одномерный вектор коэффициентов. Видеокодер энтропийно кодирует вектор квантованных коэффициентов преобразования, чтобы дополнительно сжимать остаточные данные.
Видеодекодер может выполнять операции обратного энтропийного кодирования, чтобы извлекать коэффициенты. Обратное сканирование также может выполняться в декодере, чтобы формировать двумерные блоки из принимаемых одномерных векторов коэффициентов. Видеодекодер затем обратно квантует и обратно преобразует коэффициенты, чтобы получать восстановленный остаточный блок. Видеодекодер далее декодирует видеоблок прогнозирования на основе информации прогнозирования и информации движения. Видеодекодер затем прибавляет видеоблок прогнозирования к соответствующему остаточному блоку, чтобы формировать восстановленный видеоблок и формировать декодированную последовательность видеоинформации.
Раскрытие изобретения
Настоящее описание раскрывает технологии для кодирования информации заголовка видеоблоков. В частности, технологии согласно настоящему описанию выбирают один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока единицы кодирования, причем множество режимов прогнозирования включает в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования. Видеокодер может быть выполнен с возможностью кодировать режим прогнозирования текущего видеоблока на основе режимов прогнозирования одного или более ранее кодированных видеоблоков единицы кодирования. Видеодекодер также может быть выполнен с возможностью осуществлять функцию взаимно-обратного декодирования для кодирования, выполняемого посредством видеокодера. Таким образом, видеодекодер использует аналогичные технологии для того, чтобы декодировать режим прогнозирования для использования при формировании блока прогнозирования для видеоблока.
Видеокодер может, в некоторых случаях, выбирать различные контексты кодирования для использования при кодировании выбранного режима прогнозирования на основе типов, к примеру, однонаправленных или многонаправленных, режимов прогнозирования ранее кодированных видеоблоков. Кроме того, технологии согласно настоящему описанию дополнительно могут выборочно применять преобразования к остаточной информации видеоблока на основе выбранного режима прогнозирования. В одном примере видеокодер может сохранять множество направленных преобразований, каждое из которых соответствует различному одному из режимов прогнозирования, и применять соответствующее направленное преобразование к видеоблоку на основе выбранного режима прогнозирования видеоблока. В других случаях видеокодер может сохранять по меньшей мере одно дискретное косинусное преобразование (DCT) или целочисленное преобразование, а также множество направленных преобразований и применять DCT или целочисленное преобразование к остаточным данным видеоблока, когда выбранный режим прогнозирования демонстрирует ограниченную направленность, и применять одно из направленных преобразований к остаточным данным видеоблока, когда выбранный режим прогнозирования демонстрирует направленность.
В одном аспекте способ кодирования видеоданных содержит выбор одного из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока единицы кодирования и кодирования режима прогнозирования текущего видеоблока на основе режимов прогнозирования одного или более ранее кодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
В другом аспекте устройство, которое кодирует видеоданные, содержит модуль прогнозирования, который выбирает один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока единицы кодирования, и модуль энтропийного кодирования, который кодирует режим прогнозирования текущего видеоблока на основе режимов прогнозирования одного или более ранее кодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
В другом аспекте машиночитаемый носитель содержит инструкции, которые при выполнении в устройстве кодирования видео инструктируют устройство кодировать видеоданные, при этом инструкции инструктируют устройство выбирать один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока единицы кодирования и кодировать режим прогнозирования текущего видеоблока на основе режимов прогнозирования одного или более ранее кодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
В другом аспекте устройство, которое кодирует видеоданные, содержит средство для выбора одного из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока единицы кодирования и средство для кодирования режима прогнозирования текущего видеоблока на основе режимов прогнозирования одного или более ранее кодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
В другом аспекте способ декодирования видеоданных содержит прием кодированных видеоданных видеоблока единицы кодирования и декодирование кодированных видеоданных, чтобы идентифицировать один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока на основе режимов прогнозирования одного или более ранее декодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
В другом аспекте устройство для декодирования видеоданных содержит модуль энтропийного декодирования, который декодирует кодированные видеоданные видеоблока единицы кодирования, чтобы идентифицировать один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока на основе режимов прогнозирования одного или более ранее декодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования. Устройство также включает в себя модуль прогнозирования, который формирует блок прогнозирования с использованием декодированного режима прогнозирования.
В другом аспекте машиночитаемый носитель содержит инструкции, которые при выполнении в устройстве кодирования видео инструктируют устройство кодировать видеоблоки. Инструкции инструктируют устройство принимать кодированные видеоданные видеоблока единицы кодирования и декодировать кодированные видеоданные, чтобы идентифицировать один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока на основе режимов прогнозирования одного или более ранее декодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
В другом аспекте устройство для декодирования видеоданных содержит средство для приема кодированных видеоданных видеоблока единицы кодирования и средство для декодирования кодированных видеоданных, чтобы идентифицировать один из множества режимов прогнозирования для использования при формировании блока прогнозирования видеоблока на основе режимов прогнозирования одного или более ранее декодированных видеоблоков единицы кодирования. Режимы прогнозирования включают в себя режимы однонаправленного прогнозирования и режимы многонаправленного прогнозирования, которые сочетают по меньшей мере два режима однонаправленного прогнозирования.
Технологии, описанные в настоящем описании, могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или в любой комбинации вышеозначенного. Если реализованы в программном обеспечении, программное обеспечение может приводиться в исполнение в процессоре, который может означать один или более процессоров, таких как микропроцессор, специализированная интегральная схема (ASIC), программируемая пользователем вентильная матрица (FPGA) или процессор цифровых сигналов (DSP), либо в другой эквивалентной интегральной или дискретной логической схеме. Программное обеспечение, содержащее инструкции, чтобы приводить в исполнение технологии, может быть первоначально сохранено в машиночитаемом носителе и загружено и приведено в исполнение посредством процессора.
Соответственно, настоящее описание также предполагает машиночитаемые носители, содержащие инструкции, чтобы инструктировать процессору выполнять любую из множества технологий, описанных в настоящем описании. В некоторых случаях машиночитаемый носитель может формировать часть компьютерного программного продукта, который может продаваться производителям и/или использоваться в устройстве. Компьютерный программный продукт может включать в себя машиночитаемый носитель, а в некоторых случаях также может включать в себя упаковку.
Подробности одного или более вариантов осуществления настоящего описания изложены на прилагаемых чертежах и в нижеприведенном описании. Другие признаки, цели и преимущества технологий, описанных в настоящем описании, должны стать очевидными из описания и чертежей, а также из формулы изобретения.
Краткое описание чертежей
Фиг.1 является блок-схемой, иллюстрирующей систему кодирования и декодирования видео, которая выполняет технологии кодирования, описанные в настоящем описании.
Фиг.2 является блок-схемой, подробнее иллюстрирующей пример видеокодера по фиг.1.
Фиг.3 является блок-схемой, подробнее иллюстрирующей пример видеодекодера по фиг.1.
Фиг.4 является концептуальной схемой, иллюстрирующей гипотетический пример регулирования порядка сканирования коэффициентов в соответствии с настоящим описанием.
Фиг.5 является блок-схемой последовательности операций, иллюстрирующей примерную работу устройства кодирования, выполненного с возможностью адаптивно регулировать порядок сканирования коэффициентов.
Фиг.6 является блок-схемой последовательности операций, иллюстрирующей примерную работу модуля кодирования, выполненного с возможностью кодировать информацию заголовка для видеоблока.
Фиг.7 является блок-схемой последовательности операций, иллюстрирующей выбор примерного контекста кодирования для кодирования.
Фиг.8 является блок-схемой последовательности операций, иллюстрирующей примерную работу модуля декодирования, выполненного с возможностью декодировать информацию заголовка видеоблока.
Осуществление изобретения
Фиг.1 является блок-схемой, иллюстрирующей систему кодирования и декодирования видео 10, которая выполняет технологии кодирования, описанные в настоящем описании. Как показано на фиг.1, система 10 включает в себя исходное устройство 12, которое передает кодированные видеоданные в целевое устройство 14 через канал 16 связи. Исходное устройство 12 формирует кодируемые видеоданные для передачи в целевое устройство 14. Исходное устройство 12 может включать в себя видеоисточник 18, видеокодер 20 и передающее устройство 22. Видеоисточник 18 исходного устройства 12 может включать в себя устройство видеозахвата, такое как видеокамера, видеоархив, содержащий ранее захваченное видео, или видеопередачу от поставщика видеосодержимого. В качестве дополнительной альтернативы, видеоисточник 18 может формировать основанные на компьютерной графике данные в качестве исходного видео или комбинацию живого видео и машиногенерируемого видео. В некоторых случаях исходное устройство 12 может быть так называемым камерофоном или видеотелефоном, и при этом видеоисточник 18 может быть видеокамерой. В каждом случае захваченное, предварительно захваченное или машиногенерируемое видео может быть кодировано посредством видеокодера 20 для передачи из исходного устройства 12 в целевое устройство 14 через передающее устройство 22 и канал 16 связи.
Видеокодер 20 принимает видеоданные от видеоисточника 18. Видеоданные, принимаемые от видеоисточника 18, могут быть последовательностью видеокадров. Видеокодер 20 делит последовательность кадров на единицы кодирования и обрабатывает единицы кодирования, чтобы кодировать последовательность видеокадров. Единицами кодирования, например, могут быть полные кадры или части кадров (т.е. серии последовательных макроблоков). Таким образом, в некоторых случаях кадры могут быть разделены на серии последовательных макроблоков. Видеокодер 20 делит каждую единицу кодирования на блоки пикселов (упоминаемые в данном документе как видеоблоки или блоки) и оперирует с видеоблоками в отдельных единицах кодирования, для того чтобы кодировать видеоданные. По сути, единица кодирования (к примеру, кадр или серия последовательных макроблоков) может содержать несколько видеоблоков. Другими словами, видеопоследовательность может включать в себя несколько кадров, кадр может включать в себя несколько серий последовательных макроблоков, а серия последовательных макроблоков может включать в себя несколько видеоблоков.
Видеоблоки могут иметь фиксированный или изменяющийся размер и могут отличаться по размеру согласно заданному стандарту кодирования. В качестве примера Сектор стандартизации Международного Союза по телекоммуникациям (ITU-T) H.264/MPEG-4, Часть 10, Усовершенствованное кодирование видео (AVC) (в дальнейшем стандарт "H.264/MPEG-4 Часть 10 AVC") поддерживает внутреннее прогнозирование с различными размерами блока, такими как 16×16, 8×8 или 4×4 для компонентов сигнала яркости и 8×8 для компонентов сигнала цветности, а также взаимное прогнозирование с различными размерами блока, такими как 16×16, 16×8, 8×16, 8×8, 8×4, 4×8 и 4×4 для компонентов сигнала яркости и соответствующие масштабированные размеры для компонентов сигнала цветности. В H.264, например, каждый видеоблок в 16×16 пикселов, зачастую называемый макроблоком (MB), может быть подразделен на субблоки меньшего размера и прогнозирован в субблоках. В общем, MB и различные субблоки могут считаться видеоблоками. Таким образом, MB могут считаться видеоблоками, и если разбиты на сегменты или на подсегменты, MB могут сами рассматриваться как задающие наборы видеоблоков.
Для каждого из видеоблоков видеокодер 20 выбирает тип блока для блока. Тип блока может указывать то, прогнозируется блок с использованием взаимного прогнозирования или внутреннего прогнозирования, а также размер сегмента блока. Например, стандарт H.264/MPEG-4 часть 10 AVC поддерживает число типов блока взаимного и внутреннего прогнозирования, в том числе взаимный 16×16, взаимный 16×8, взаимный 8×16, взаимный 8×8, взаимный 8×4, взаимный 4×8, взаимный 4×4, внутренний 16×16, внутренний 8×8 и внутренний 4×4. Как подробно поясняется ниже, видеокодер 20 может выбирать один из типов блоков для каждого из видеоблоков.
Видеокодер 20 также выбирает режим прогнозирования для каждого из видеоблоков. В случае внутренне кодированного видеоблока режим прогнозирования может определять способ, чтобы прогнозировать текущий видеоблок, с использованием одного или более ранее кодированных видеоблоков. В стандарте H.264/MPEG-4 часть 10 AVC, например, видеокодер 20 может выбирать один из девяти возможных режимов однонаправленного прогнозирования для каждого внутреннего блока 4×4: режим вертикального прогнозирования, режим горизонтального прогнозирования, режим DC-прогнозирования, режим прогнозирования вниз и влево по диагонали, режим прогнозирования вниз и вправо по диагонали, режим прогнозирования вправо по вертикали, режим прогнозирования вниз по горизонтали, режим прогнозирования влево по вертикали и режим прогнозирования вверх по горизонтали. Аналогичные режимы прогнозирования используются для того, чтобы прогнозировать каждый внутренний блок 8×8. Для внутреннего блока 16×16 видеокодер 20 может выбирать один из четырех возможных однонаправленных режимов: режим вертикального прогнозирования, режим горизонтального прогнозирования, режим DC-прогнозирования и режим прогнозирования на плоскости. В некоторых случаях видеокодер 20 может выбирать режим прогнозирования из набора режимов прогнозирования, который включает в себя не только режимы однонаправленного прогнозирования, но также и один или более режимов многонаправленного прогнозирования, которые задают комбинации однонаправленных режимов. Например, один или более режимов многонаправленного прогнозирования могут быть режимами двунаправленного прогнозирования, которые сочетают два режима однонаправленного прогнозирования, как описывается подробнее ниже.
После выбора режима прогнозирования для видеоблока видеокодер 20 формирует видеоблок прогнозирования с использованием выбранного режима прогнозирования. Прогнозный видеоблок вычитается из исходного видеоблока, чтобы формировать остаточный блок. Остаточный блок включает в себя набор разностных пикселных значений, которые количественно оценивают различия между пикселными значениями исходного видеоблока и пикселными значениями формируемого блока прогнозирования. Остаточный блок может представляться в формате двумерного блока (к примеру, двумерной матрицы или массива разностных пикселных значений).
После формирования остаточного блока видеокодер 20 может выполнять определенное число других операций для остаточного блока перед кодированием блока. Видеокодер 20 может применять преобразование, такое как целочисленное преобразование, DCT-преобразование, направленное преобразование или вейвлет-преобразование, к остаточному блоку пикселных значений, чтобы формировать блок коэффициентов преобразования. Таким образом, видеокодер 20 преобразует остаточные пикселные значения в коэффициенты преобразования (также называемые остаточными коэффициентами преобразования). Остаточные коэффициенты преобразования могут упоминаться как блок преобразования или блок коэффициентов. Блок преобразования или коэффициентов может быть одномерным представлением коэффициентов, когда неразделимые преобразования применяются, или двумерным представлением коэффициентов, когда разделимые преобразования применяются. Неразделимые преобразования могут включать в себя неразделимые направленные преобразования. Разделимые преобразования могут включать в себя разделимые направленные преобразования, DCT-преобразования, целочисленные преобразования и вейвлет-преобразования.
После преобразования видеокодер 20 выполняет квантование, чтобы формировать квантованные коэффициенты преобразования (также называемые квантованными коэффициентами или квантованными остаточными коэффициентами). С другой стороны, квантованные коэффициенты могут представляться в формате одномерного вектора или формате двумерного блока. Квантование, в общем, упоминается как процесс, в котором коэффициенты квантуются так, чтобы возможно уменьшать объем данных, используемый для того, чтобы представлять коэффициенты. Процесс квантования может уменьшать битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. При использовании в данном документе термин "коэффициенты" может представлять коэффициенты преобразования, квантованные коэффициенты или другой тип коэффициентов. Технологии согласно настоящему описанию могут в некоторых случаях применяться к остаточным пикселным значениям, а также к коэффициентам преобразования и квантованным коэффициентам преобразования. Тем не менее, в целях иллюстрации, технологии согласно настоящему описанию должны быть описаны в контексте квантованных коэффициентов преобразования.
Когда используются разделимые преобразования и блоки коэффициентов представляются в формате двумерного блока, видеокодер 20 сканирует коэффициенты из двумерного формата в одномерный формат. Другими словами, видеокодер 20 может сканировать коэффициенты из двумерного блока, чтобы преобразовывать коэффициенты в одномерный вектор коэффициентов. В соответствии с одним из аспектов настоящего описания видеокодер 20 может регулировать порядок сканирования, используемый для того, чтобы преобразовывать блок коэффициентов в одну размерность, на основе собранных статистических данных. Статистика может содержать индикатор относительно вероятности, что данное значение коэффициента в каждой позиции двумерного блока является нулевым или ненулевым, и может содержать, например, счетчик, вероятность или другой статистический показатель, ассоциированный с каждой из позиций коэффициентов двумерного блока. В некоторых случаях статистические данные могут собираться только для поднабора позиций коэффициентов блока. Когда порядок сканирования оценивается, к примеру, после конкретного числа блоков, порядок сканирования может изменяться так, что позиции коэффициентов в блоке, определенные как имеющие большую вероятность наличия ненулевых коэффициентов, сканируются до позиций коэффициентов в блоке, определенных как имеющие меньшую вероятность наличия ненулевых коэффициентов. Таким образом, начальный порядок сканирования может быть выполнен с возможностью более эффективно группировать ненулевые коэффициенты в начале одномерного вектора коэффициентов и коэффициенты с нулевым значением в конце одномерного вектора коэффициентов. Это, в свою очередь, может уменьшать число битов, расходуемое на энтропийное кодирование, поскольку имеются более короткие серии нулей между ненулевыми коэффициентами в начале одномерного вектора коэффициентов и одна более длинная серия нулей в конце одномерного вектора коэффициентов.
После сканирования коэффициентов видеокодер 20 кодирует каждый из видеоблоков единицы кодирования с использованием любой из множества технологий энтропийного кодирования, таких как контекстно-адаптивное кодирование переменной длины (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), кодирование по длинам серий и т.п. Исходное устройство 12 передает кодированные видеоданные в целевое устройство 14 через передающее устройство 22 и канал 16. Канал 16 связи может содержать любую передающую среду беспроводной или проводной связи, такую как радиочастотный (RF) спектр или одна или более физических линий передачи, либо любую комбинацию беспроводных и проводных передающих сред. Канал 16 связи может формировать часть сети с коммутацией пакетов, такой как локальная вычислительная сеть, глобальная вычислительная сеть либо глобальная сеть, такая как Интернет. Канал 16 связи, в общем, представляет любую надлежащую среду связи или набор различных сред связи для передачи кодированных видеоданных из исходного устройства 12 в целевое устройство 14.
Целевое устройство 14 может включать в себя приемное устройство 24, видеодекодер 26 и дисплейное устройство 28. Приемное устройство 24 принимает кодированный поток видеобитов из исходного устройства 12 через канал 16. Видеодекодер 26 применяет энтропийное декодирование, чтобы декодировать кодированный поток видеобитов, чтобы получать информацию заголовка и квантованные остаточные коэффициенты кодированных видеоблоков кодированной единицы. Как описано выше, квантованные остаточные коэффициенты, кодируемые посредством исходного устройства 12, кодируются как одномерный вектор. Следовательно, видеодекодер 26 сканирует квантованные остаточные коэффициенты кодированных видеоблоков, чтобы преобразовывать одномерный вектор коэффициентов в двумерный блок квантованных остаточных коэффициентов. Аналогично видеокодеру 20 видеодекодер 26 может собирать статистические данные, которые указывают вероятность того, что данная позиция коэффициента в видеоблоке является нулевой или ненулевой, и тем самым регулировать порядок сканирования тем же способом, который использовался в процессе кодирования. Соответственно, взаимнообратные порядки адаптивного сканирования могут применяться посредством видеодекодера 26 для того, чтобы изменять представление одномерного вектора преобразованных в последовательную форму квантованных коэффициентов преобразования обратно в двумерные блоки квантованных коэффициентов преобразования.
Видеодекодер 26 восстанавливает каждый из блоков единицы кодирования с использованием декодированной информации заголовка и декодированной остаточной информации. В частности, видеодекодер 26 может формировать видеоблок прогнозирования для текущего видеоблока и комбинировать блок прогнозирования с соответствующим остаточным видеоблоком, чтобы восстанавливать каждый из видеоблоков. Целевое устройство 14 может отображать восстановленные видеоблоки пользователю через дисплейное устройство 28. Дисплейное устройство 28 может содержать любое из множества дисплейных устройств, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на светоизлучающих диодах (светодиодах), дисплей на органических светодиодах или другой тип дисплея.
В некоторых случаях исходное устройство 12 и целевое устройство 14 могут работать практически симметрично. Например, исходное устройство 12 и целевое устройство 14 могут включать в себя компоненты кодирования и декодирования видео. Следовательно, система 10 может поддерживать одностороннюю и двухстороннюю передачу видео между видеоустройствами 12, 14, к примеру, для потоковой передачи видео, широковещательной передачи видео или видеотелефонии. Устройство, которое включает в себя компоненты кодирования и декодирования видео, также может являться частью общего устройства кодирования, архивации и воспроизведения, такого как цифровое записывающее видеоустройство (DVR).
Видеокодер 20 и видеодекодер 26 могут работать согласно любому из множества стандартов сжатия видео, таких как заданные посредством Экспертной группы по киноизображению (MPEG) в стандарте MPEG-1, MPEG-2 и MPEG-4, ITU-T H.263, стандарт видеокодека Общества инженеров кино и телевидения (SMPTE) 421M (обычно называемый "VC-1"), стандарт, заданный посредством Рабочей группы по стандартам кодирования аудио-видео (Китай) (обычно называемой "AVS"), а также любой другой стандарт кодирования видео, заданный посредством органа стандартизации или разработанный посредством организации как собственный стандарт. Хотя не показано на фиг.1, в некоторых аспектах видеокодер 20 и видеодекодер 26 могут быть интегрированы с аудиокодером и декодером соответственно и могут включать в себя соответствующие модули MUX-DEMUX либо другие аппаратные средства и программное обеспечение, чтобы обрабатывать кодирование аудио и видео в общем потоке данных или в отдельных потоках данных. Таким образом, исходное устройство 12 и целевое устройство 14 могут оперировать с мультимедийными данными. Если применимо, модули MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, таким как протокол пользовательских дейтаграмм (UDP).
В некоторых аспектах для широковещательной передачи видео технологии, описанные в настоящем описании, могут быть применены к улучшенному кодированию видео H.264 для доставки видеоуслуг реального времени в системах наземной многоадресной передачи мобильного мультимедиа (TM3), использующих спецификацию радиоинтерфейса только прямой линии связи (FLO), "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast", опубликованную в июле 2007 года как Технический стандарт TIA-1099 ("FLO Specification"). Другими словами, канал 16 связи может содержать беспроводной информационный канал, используемый для того, чтобы выполнять широковещательную передачу беспроводной видеоинформации согласно спецификации FLO, и т.п. Спецификация технологии FLO включает в себя примеры, задающие синтаксис и семантику потока битов, а также процессы декодирования, подходящие для радиоинтерфейса по технологии FLO.
Альтернативно, видео может передаваться в широковещательном режиме согласно другим стандартам, таким как DVB-H (цифровая широковещательная передача видео для карманных устройств), ISDB-T (комплексные службы цифровой наземной широковещательной передачи) или DMB (цифровая широковещательная передача мультимедиа). Следовательно, исходным устройством 12 может быть мобильный беспроводной терминал, сервер потоковой передачи видео и сервер широковещательной передачи видео. Тем не менее, технологии, описанные в данном документе, не ограничены каким-либо конкретным типом системы широковещательной передачи, многоадресной передачи или передачи "точка-точка". В случае широковещательной передачи исходное устройство 12 может передавать в широковещательном режиме несколько каналов видеоданных в несколько целевых устройств, каждое из которых может быть аналогичным целевому устройству 14 по фиг.1. Таким образом, хотя одно целевое устройство 14 показано на фиг.1, для приложений передачи видео в широковещательном режиме исходное устройство 12 типично должно передавать в широковещательном режиме видеосодержимое одновременно во множество целевых устройств.
TM
В других примерах передающее устройство 22, канал 16 связи и приемное устройство 24 могут быть выполнены с возможностью связи согласно любой системе проводной или беспроводной связи, включающей в себя одно или более из Ethernet, телефона (к примеру, POTS), кабеля, линии питания и оптоволоконных систем, и/или беспроводной системы, содержащей одно или более из системы связи с множественным доступом с кодовым разделением (CDMA или CDMA2000), системы с множественным доступом с частотным разделением (FDMA), системы с множественным доступом c ортогональным частотным разделением (OFDM), системы с множественным доступом с временным разделением (TDMA), такой как GSM (глобальная система мобильной связи), GPRS (общая служба пакетной радиопередачи) или EDGE (развитие стандарта GSM с увеличенной скоростью передачи данных), мобильной телефонной системы TETRA (наземная транковая система связи), системы с широкополосным множественным доступом с кодовым разделением (WCDMA), системы по стандарту высокоскоростной передачи данных 1xEV-DO (высокоскоростная система обмена пакетными данными первого поколения) или системы Gold Multicast по 1xEV-DO, системы IEEE 802.18, системы MediaFLO, DMB-системы, DVB-H-системы или другой схемы обмена данных между двумя или больше устройствами.
Видеокодер 20 и видеодекодер 26 могут быть реализованы как один или более микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретная логика, программное обеспечение, аппаратные средства, микропрограммное обеспечение или любые комбинации вышеозначенного. Каждый из видеокодера 20 и видеодекодера 26 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть комбинированного кодера/декодера (кодека) в соответствующем мобильном устройстве, абонентском устройстве, широковещательном устройстве, сервере и т.п. Помимо этого, исходное устройство 12 и целевое устройство 14 могут включать в себя соответствующие компоненты модуляции, демодуляции, частотного преобразования, фильтрации и усилителя для передачи и приема кодированного видео, в зависимости от необходимости, включая радиочастотные (RF) беспроводные компоненты и антенны, достаточные для того, чтобы поддерживать беспроводную связь. Для простоты иллюстрации, тем не менее, эти компоненты обобщаются как передающее устройство 22 исходного устройства 12 и приемное устройство 24 из целевого устройства 14 на фиг.1.
Фиг.2 является блок-схемой, подробнее иллюстрирующей примерный видеокодер 20 по фиг.1. Видеокодер 20 может выполнять внутреннее и взаимное кодирование блоков в видеокадрах. Внутреннее кодирование базируется на пространственном прогнозировании, чтобы уменьшать или удалять пространственную избыточность в видеоданных в данной единице кодирования видео, к примеру, кадре или серии последовательных макроблоков. Для внутреннего кодирования видеокодер 20 формирует блок пространственного прогнозирования на основе одного или более ранее кодированных блоков в той же единице кодирования, что и кодируемый блок. Взаимное кодирование основывается на временном прогнозировании, чтобы уменьшать или удалять временную избыточность видео в смежных кадрах видеопоследовательности. Для взаимного кодирования видеокодер 5 выполняет оценку движения, чтобы отслеживать перемещение близко совпадающих видеоблоков между двумя или более смежными кадрами.
В примере по фиг.2 видеокодер 20 включает в себя модуль 30 блочной сегментации, модуль 32 прогнозирования, хранилище 34 кадров, модуль 38 преобразования, модуль 40 квантования, модуль 41 сканирования коэффициентов, модуль 42 обратного квантования, модуль 44 обратного преобразования и модуль 46 энтропийного кодирования. Видеокодер 20 также включает в себя сумматоры 48A и 48B ("сумматоры 48"). Контурный фильтр удаления блочности (не показан) может применяться к восстановленным видеоблокам, чтобы уменьшать или удалять артефакты блочности. Описание различных признаков на фиг.2 как модулей имеет намерение выделять различные функциональные аспекты проиллюстрированных устройств и не обязательно подразумевает, что эти модули должны быть реализованы посредством отдельных аппаратных или программных компонентов. Наоборот, функциональность, ассоциированная с одним или более модулей, может быть интегрирована в общих или отдельных аппаратных или программных компонентах.
Модуль 30 блочной сегментации принимает видеоинформацию (помеченную как "Входное видео" на фиг.2), к примеру, в форме последовательности видеокадров, от видеоисточника 18 (фиг.1). Модуль 30 блочной сегментации делит каждый из видеокадров на единицы кодирования, которые включают в себя множество видеоблоков. Как описано выше, единицей кодирования может быть весь кадр или часть кадра (к примеру, серия последовательных макроблоков кадра). В одном случае модуль 30 блочной сегментации первоначально может разделять каждую из единиц кодирования на множество видеоблоков с размером сегмента 16×16 (т.е. на макроблоки). Модуль 30 блочной сегментации дополнительно может подразделять каждый из видеоблоков 16×16 на меньшие блоки, такие как видеоблоки 8×8 или видеоблоки 4×4.
Видеокодер 20 выполняет внутреннее или взаимное кодирование для каждого из видеоблоков единицы кодирования на поблочной основе на основе типа блока. Модуль 32 прогнозирования назначает тип блока каждому из видеоблоков, который может указывать выбранный размер сегмента блока, а также то, должен блок прогнозироваться с использованием взаимного прогнозирования или внутреннего прогнозирования. В случае взаимного прогнозирования модуль 32 прогнозирования также определяет векторы движения. В случае внутреннего прогнозирования модуль 32 прогнозирования также определяет режим прогнозирования, чтобы использовать для того, чтобы формировать блок прогнозирования.
Модуль 32 прогнозирования затем формирует блок прогнозирования. Блок прогнозирования может быть прогнозируемой версией текущего видеоблока. Текущий видеоблок упоминается как в настоящий момент кодируемый видеоблок. В случае взаимного прогнозирования, к примеру, когда блоку назначается тип взаимного блока, модуль 32 прогнозирования может выполнять временное прогнозирование для взаимного кодирования текущего видеоблока. Модуль 32 прогнозирования, например, может сравнивать текущий видеоблок с блоками в одном или более смежных видеокадров, чтобы идентифицировать блок в смежном кадре, который наиболее близко совпадает с текущим видеоблоком, к примеру, блок в смежном кадре, который имеет наименьший MSE, SSD, SAD или другой разностный показатель. Модуль 32 прогнозирования выбирает идентифицированный блок в смежном кадре в качестве блока прогнозирования.
В случае внутреннего прогнозирования, т.е. когда блоку назначается тип внутреннего блока, модуль 32 прогнозирования может формировать блок прогнозирования на основе одного или более ранее кодированных соседних блоков в общей единице кодирования (к примеру, в кадре или серии последовательных макроблоков). Модуль 32 прогнозирования, например, может выполнять пространственное прогнозирование, чтобы формировать блок прогнозирования посредством выполнения интерполяции с использованием одного или более ранее кодированных соседних блоков в текущем кадре. Один или более смежных блоков в текущем кадре, например, могут извлекаться из хранилища 34 кадров, которое может содержать любой тип запоминающего устройства или устройства хранения данных, чтобы сохранять один или более ранее кодированных кадров или блоков.
Модуль 32 прогнозирования может выполнять интерполяцию в соответствии с одним из набора режимов прогнозирования. Как описано выше, набор режимов прогнозирования может включать в себя режимы однонаправленного прогнозирования и/или режимы многонаправленного прогнозирования. Режимы многонаправленного прогнозирования задают комбинации режимов однонаправленного прогнозирования. В одном примере набор режимов прогнозирования может включать в себя режимы однонаправленного прогнозирования, заданные в стандарте H.264/MPEG-4 часть 10 AVC, и режимы двунаправленного прогнозирования, которые задают различные комбинации двух режимов однонаправленного прогнозирования.
Для типа внутреннего блока 4×4, например, набор режимов прогнозирования может включать в себя девять режимов однонаправленного прогнозирования, заданных в стандарте H.264/MPEG-4 часть 10 AVC, и поднабор из возможных комбинаций режимов однонаправленного прогнозирования. Таким образом, вместо поддержки всех 36 возможных комбинаций режимов однонаправленного прогнозирования видеокодер 20 может поддерживать только часть возможных комбинаций режимов однонаправленного прогнозирования. Это может не приводить к значительному ухудшению качества кодирования. Один примерный набор режимов внутреннего прогнозирования, который включает в себя всего 18 режимов внутреннего прогнозирования, предоставлен ниже.
Режим 0: вертикальный
Режим 1: горизонтальный
Режим 2: DC
Режим 3: вниз и влево по диагонали
Режим 4: вниз и вправо по диагонали
Режим 5: вправо по вертикали
Режим 6: вниз по горизонтали
Режим 7: влево по вертикали
Режим 8: вверх по горизонтали
Режим 9: вертикальный + горизонтальный (режим 0 + режим 1)
Режим 10: DC + вертикальный (режим 2 + режим 0)
Режим 11: DC + горизонтальный (режим 2 + режим 1)
Режим 12: вниз и влево по диагонали + горизонтальный (режим 3 + режим 1)
Режим 13: вниз и вправо по диагонали + вертикальный (режим 4 + режим 0)
Режим 14: вправо по вертикали + горизонтальный (режим 5 + режим 1)
Режим 15: вниз по горизонтали + вертикальный (режим 6 + режим 0)
Режим 16: влево по вертикали + горизонтальный (режим 7 + режим 1)
Режим 17: горизонтальный + вертикальный (режим 8 + режим 0)
В примерном наборе, проиллюстрированном выше, режимы 0-8 являются режимами однонаправленного прогнозирования, а режимы 9-17 являются режимами двунаправленного прогнозирования. В частности, режимы 0-8 являются внутренними режимами прогнозирования 4×4, заданными в стандарте H.264/MPEG-4 часть 10 AVC. Режимы 9-17 являются поднабором возможных режимов двунаправленного прогнозирования. Поднабор возможных режимов двунаправленного прогнозирования в предоставленном примере включает в себя по меньшей мере одну комбинацию, которая включает режимы однонаправленного прогнозирования. Каждый режим двунаправленного прогнозирования, помимо режимов двунаправленного прогнозирования, которые включают в себя режим DC-прогнозирования (к примеру, режим 10 и 11), сочетает режимы однонаправленного прогнозирования, имеющие направления интерполяции, которые являются непараллельными, а в некоторых случаях по существу ортогональными друг к другу. Другими словами, поднабор режимов двунаправленного прогнозирования включает в себя режимы двунаправленного прогнозирования, которые в общем сочетают режимы прогнозирования из "вертикальной" категории с режимами прогнозирования из "горизонтальной" категории. Такие режимы двунаправленного прогнозирования дают возможность процессу внутреннего прогнозирования комбинировать доступные пикселы прогнозирования из местоположений, которые разнесены в большей степени, тем самым повышая качество прогнозирования для большего числа позиций пикселов в текущем видеоблоке.
Набор режимов прогнозирования, описанный выше, описывается в целях иллюстрации. Набор режимов прогнозирования может включать в себя большее или меньшее число режимов прогнозирования. Например, набор режимов прогнозирования может включать в себя большее или меньшее число режимов двунаправленного прогнозирования или не включать в себя режимы двунаправленного прогнозирования. В других случаях набор режимов прогнозирования может включать в себя только поднабор режимов однонаправленного прогнозирования. Дополнительно, набор режимов прогнозирования может включать в себя режимы многонаправленного прогнозирования, которые сочетают более двух режимов однонаправленного прогнозирования в дополнение или вместо режимов двунаправленного прогнозирования. Кроме того, хотя описано выше со ссылкой на типы внутреннего блока 4×4, технологии согласно настоящему описанию могут применяться к другим типам внутреннего блока (к примеру, типам внутреннего блока 8×8 или типам внутреннего блока 16×16) или типам взаимного блока.
Чтобы определить, какое множество режимов прогнозирования выбирать для конкретного блока, модуль 32 прогнозирования может оценивать затраты на кодирование, к примеру затраты Лагранжа, для каждого из режимов прогнозирования набора и выбирать режим прогнозирования с наименьшими затратами на кодирование. В других случаях модуль 32 прогнозирования может оценивать затраты на кодирование только для части набора возможных режимов прогнозирования. Например, режим 32 прогнозирования может выбирать часть режимов прогнозирования набора на основе режима прогнозирования, выбираемого для одного или более соседних видеоблоков. Модуль 32 прогнозирования формирует блок прогнозирования с использованием выбранного режима прогнозирования.
После формирования блока прогнозирования видеокодер 20 формирует остаточный блок посредством вычитания блока прогнозирования, сформированного посредством модуля 32 прогнозирования, из текущего видеоблока в сумматоре 48A. Остаточный блок включает в себя набор разностных пикселных значений, которые количественно оценивают различия между пикселными значениями текущего видеоблока и пикселными значениями блока прогнозирования. Остаточный блок может представляться в формате двумерного блока (к примеру, двумерной матрицы или массива пикселных значений). Другими словами, остаточный блок является двумерным представлением пикселных значений.
Модуль 38 преобразования применяет преобразование к остаточному блоку, чтобы формировать остаточные коэффициенты преобразования. Модуль 38 преобразования может применять, например, DCT, целочисленное преобразование, направленное преобразование, вейвлет-преобразование или комбинацию вышеозначенного. Модуль 38 преобразования может выборочно применять преобразования к остаточному блоку на основе режима прогнозирования, выбираемого посредством модуля 32 прогнозирования, чтобы формировать блок прогнозирования. Другими словами, преобразование, применяемое к остаточной информации, может зависеть от режима прогнозирования, выбираемого для блока посредством модуля 32 прогнозирования.
Модуль 38 преобразования может сохранять множество различных преобразований и выборочно применять преобразования к остаточному блоку на основе режима прогнозирования блока. Множество различных преобразований может включать в себя DCT, целочисленные преобразования, направленные преобразования, вейвлет-преобразования или комбинации вышеозначенного. В некоторых случаях модуль 38 преобразования может сохранять DCT или целочисленное преобразование и множество направленных преобразований и выборочно применять преобразования на основе режима прогнозирования, выбираемого для текущего видеоблока. Модуль 38 преобразования, например, может применять DCT или целочисленное преобразование к остаточным блокам с режимами прогнозирования, которые демонстрируют ограниченную направленность, и применять одно из направленных преобразований к остаточным блокам с режимами прогнозирования, которые демонстрируют значительную направленность.
Используя примерный набор режимов прогнозирования, описанный выше, модуль 38 преобразования может применять DCT или целочисленное преобразование к режимам 2, 9 и 12-17. Эти режимы могут демонстрировать ограниченную направленность, поскольку они являются либо DC-прогнозированием, либо комбинацией двух режимов прогнозирования приблизительно в ортогональных направлениях. Наоборот, режимы 1, 3-8, 10 и 11 являются режимами, которые могут демонстрировать направленность, и поэтому модуль 38 преобразования может применять различные направленные преобразования для каждого из этих режимов, чтобы достигать лучшего энергетического уплотнения остаточных видеоблоков. Другими словами, когда выбираются режимы прогнозирования, которые имеют более сильную направленность, направленность также может проявляться в остаточных блоках таких режимов прогнозирования. Также остаточные блоки различных режимов прогнозирования демонстрируют различные характеристики направленности. По сути, по сравнению с такими преобразованиями, как DCT- или DCT-подобное целочисленное преобразование, направленные преобразования, специально подготовленные для каждого режима прогнозирования, могут предоставлять лучшее энергетическое уплотнение для остаточных блоков данного режима прогнозирования. С другой стороны, для режимов прогнозирования, которые не переносят сильную направленность, такие преобразования, как DCT- или DCT-подобное целочисленное преобразование, предоставляют достаточное энергетическое уплотнение. Таким образом, модуль 38 преобразования не должен сохранять отдельные преобразования для каждого из возможных режимов прогнозирования, тем самым снижая требования по хранению для преобразования. Кроме того, применение DCT и/или целочисленных преобразований является менее комплексным с точки зрения вычислительной сложности.
В других случаях модуль 38 преобразования может сохранять различное направленное преобразование для каждого из возможных режимов прогнозирования и применять соответствующие направленные преобразования на основе выбранного режима прогнозирования блока. Для примерного набора режимов прогнозирования, описанного выше, модуль 38 преобразования может сохранять восемнадцать различных направленных преобразований, каждое из которых соответствует одному из восемнадцати возможных режимов внутреннего прогнозирования 4×4. Дополнительно, модуль 38 преобразования может сохранять восемнадцать различных направленных преобразований для восемнадцати возможных режимов внутреннего прогнозирования 8×8 и четыре различных направленных преобразования для четырех возможных режимов внутреннего прогнозирования 16×16 и преобразования для любых других режимов прогнозирования других размеров сегмента. Применение отдельных направленных преобразований на основе выбранного режима прогнозирования блока повышает эффективность, с которой остаточная энергия захватывается, в частности, для блоков, для которых выбираются режимы прогнозирования, которые демонстрируют значительную направленность. Направленные преобразования могут быть неразделимыми направленными преобразованиями, к примеру, извлекаемыми из неразделимых преобразований Карунена-Лоэва (KLT), или разделимыми направленными преобразованиями. В некоторых случаях направленные преобразования могут предварительно вычисляться с использованием обучающих наборов данных.
KLT - это линейное преобразование, в котором базисные функции извлекаются из статистики сигнала и, таким образом, могут быть адаптивными. KLT спроектировано с возможностью передавать максимально возможную величину энергии в минимально возможном числе коэффициентов. KLT, в общем, является неразделимым, и тем самым модуль 38 преобразования выполняет полноматричное умножение, как подробно поясняется ниже. Применение неразделимого направленного преобразования к остаточному блоку 4x4 описывается в примерных целях. Аналогичные технологии используются для блоков других размеров, к примеру, блока 8×8 или блоков 16×16.
Остаточный блок 4×4 X представляется в формате двумерного блока с четырьмя строками и четырьмя столбцами пикселных значений, т.е. всего с шестнадцатью пикселными значениями. Чтобы применять неразделимое направленное преобразование, остаточный блок 4×4 перекомпоновывается в одномерный вектор из x пикселных значений, т.е. длины шестнадцать. Остаточный блок 4×4 X перекомпоновывается в вектор x посредством компоновки пикселов в X в порядке растрового сканирования. Таким образом, если остаточный блок 4×4 X записывается как:
X=,
то остаточный вектор x длины 16 записывается как:
X=,
Вектор коэффициентов преобразования y получается посредством выполнения матричного умножения в соответствии со следующим уравнением (1):
y=Tx, (1)
где T - это матрица преобразования размера 16×16, которая соответствует режиму прогнозирования, выбираемому для блока. Вектор коэффициентов преобразования y является также одномерным вектором, имеющим длину в шестнадцать коэффициентов.
2
2
2
2
2
2
Использование неразделимых направленных преобразований может влечь за собой повышение вычислительных затрат и требований по хранению. В общем, для остаточного блока размера N×N неразделимое направленное преобразование требует базисных функций размера N×N. Таким образом, для остаточных блоков 4×4 неразделимое направленное преобразование имеет размер 16×16; для остаточных блоков 8×8 неразделимое направленное преобразование имеет размер 64×64; и для остаточных блоков 16x16 неразделимое направленное преобразование имеет размер 256×256. Поскольку различное неразделимое направленное преобразование может использоваться для каждого из режимов прогнозирования набора, модуль 32 преобразования может сохранять восемнадцать направленных преобразований 16×16 для блоков 4×4 и восемнадцать преобразований 64×64 для блоков 8×8 (в случае примерного набора режимов прогнозирования, описанного выше), и возможно больше, если набор режимов прогнозирования больше. Это может приводить к использованию значительных ресурсов памяти для того, чтобы сохранять матрицы преобразования, требуемые для того, чтобы выполнять процесс преобразования. Вычислительные затраты неразделимых направленных преобразований также являются высокими. В общем, применение неразделимого направленного преобразования для блока N×N требует N×N умножений и N×(N-1) сложений.
Вместо неразделимых направленных преобразований модуль 32 преобразования может сохранять разделимые направленные преобразования для каждого из режимов прогнозирования. Разделимые направленные преобразования имеют меньшие затраты на хранение и вычисления по сравнению с неразделимыми направленными преобразованиями. Для остаточного блока 4×4 X, например, разделимое преобразование применяется так, как указано посредством следующего уравнения (2):
Y=CXR, (2)
где Y - это результирующая матрица коэффициентов преобразования, C - это матрица постолбцового преобразования и R - это матрица построчного преобразования, всех из которых имеют размер, равный размеру блока (к примеру, 4×4 в этом примере). Таким образом, результирующая матрица коэффициентов преобразования Y является также двумерной матрицей размера 4×4.
2
2
2
2
Для каждого режима прогнозирования модуль 32 преобразования может сохранять две матрицы преобразования N×N (к примеру, пары матриц C и R), где N×N соответствует размеру блока (к примеру, N=4, 8 или 16). В примерном наборе из восемнадцати режимов прогнозирования для блока 4×4, описанного выше, модуль 32 преобразования сохраняет тридцать шесть матриц преобразования 4x4, что требует меньшего объема памяти, чем восемнадцать матриц преобразования 16×16, сохраняемых, когда используются неразделимые преобразования. Дополнительно, модуль 32 преобразования может выполнять разделимое направленное преобразование с помощью 2×N×N×N умножений и 2×N×N× (n-1) сложений, что является значительно меньшим числом операций, чем N×N умножений и N×(N-1) сложений, используемых для выполнения неразделимых направленных преобразований. Таблица 1 сравнивает требования по хранениям и вычислениям между использованием разделимых и неразделимых направленных преобразований для размеров блоков в 4×4 и 8×8. Сравнение между разделимыми направленными преобразованиями и неразделимыми направленными преобразованиями для блоков 16×16 может осуществляться аналогичным образом. Как проиллюстрировано в таблице 1, использование разделимых направленных преобразований предоставляет снижение как сложности вычисления, так и требований по хранению по сравнению с неразделимыми направленными преобразованиями, и снижение становится более значительным для больших размеров блока, к примеру, снижение для блоков 8×8 больше, чем снижение для блоков 4×4.
Таблица 1Сложность неразделимых по сравнению с разделимыми направленными преобразованиями
Размер блока
Неразделимое преобразование
Разделимое преобразование
Хранение для всех режимов(в байтах)
4×4
18×16×16=4608
18×2×4×4=576
8×8
18×64×64=73728
18×2×8×8=2304
Вычисление в расчете на блок
4×4
256 операций умножения240 операций сложения
128 операций умножения,96 операций сложения
8×8
4096 операций умножения4032 операции сложения
1024 операции умножения896 операций сложения
Матрицы разделимого преобразования для каждого режима прогнозирования могут получаться с использованием остатков прогнозирования из набора обучающих видеопоследовательностей. Аналогично извлечению неразделимого KLT-преобразования, процесс разложения по сингулярным значениям (VSD) может применяться к остаткам прогнозирования в обучающем наборе сначала в направлении строк, а затем в направлении столбцов, чтобы получать матрицу построчного преобразования и матрицу постолбцового преобразования соответственно. Альтернативно, матрицы неразделимого направленного преобразования, т.е. матрицы неразделимого KLT-преобразования, могут обучаться сначала с помощью остатков прогнозирования из обучающего набора; затем матрицы разделимого преобразования для каждого режима прогнозирования могут получаться посредством дополнительного разложения матриц неразделимого преобразования на матрицы разделимого преобразования.
В любом случае результирующие матрицы преобразования обычно имеют точность с плавающей запятой. Числа с точностью с фиксированной запятой используются для того, чтобы аппроксимировать коэффициенты в матрицах преобразования, чтобы предоставлять возможность использования арифметики с фиксированной запятой в процессе преобразования и снижать вычислительные затраты. Точность приближений с фиксированной запятой коэффициентов в матрицах преобразования определяется посредством нахождения баланса между сложностью вычисления и максимальной точностью, необходимой во время процесса преобразования с использованием арифметики с фиксированной запятой. Другими словами, более высокая точность приближений с фиксированной запятой матриц преобразования может приводить к меньшим ошибкам вследствие использования приближения с фиксированной запятой, что является желательным, но слишком высокая точность в приближениях с фиксированной запятой матриц преобразования также может заставлять арифметику с фиксированной запятой переполняться во время процесса преобразования, что не является желательным.
После применения преобразования к остаточному блоку пикселных значений модуль 40 квантования квантует коэффициенты преобразования, чтобы дополнительно уменьшать скорость передачи битов. После квантования модуль 42 обратного квантования и модуль 44 обратного преобразования могут применять обратное квантование и обратное преобразование соответственно, чтобы восстанавливать остаточный блок (помеченный как "Восстановленный остаточный блок" на фиг.2). Сумматор 48B прибавляет восстановленный остаточный блок к блоку прогнозирования, сформированному посредством модуля 32 прогнозирования, чтобы формировать восстановленный видеоблок для хранения в хранилище 34 кадров. Восстановленный видеоблок может быть использован посредством модуля 32 прогнозирования для того, чтобы внутренне или взаимно кодировать последующий видеоблок.
Как описано выше, когда используются разделимые преобразования, которые включают в себя DCT, целочисленные преобразования, используемые в H.264/AVC, и разделимые направленные преобразования, результирующие коэффициенты преобразования представляются как двумерные матрицы коэффициентов. Следовательно, после квантования модуль 41 сканирования коэффициентов сканирует коэффициенты из формата двумерного блока в формат одномерного вектора; процесс зачастую упоминается как сканирование коэффициентов. В частности, модуль 41 сканирования коэффициентов сканирует коэффициенты в соответствии с порядком сканирования. В соответствии с одним аспектом настоящего описания модуль 41 сканирования коэффициентов может адаптивно регулировать порядок сканирования, используемый для сканирования коэффициентов, на основе статистики по одному или более коэффициентам. В некоторых случаях модуль 41 сканирования коэффициентов может адаптивно регулировать порядок сканирования отдельно для каждого из режимов прогнозирования, поскольку каждый из режимов прогнозирования может иметь различную статистику по коэффициентам.
Модуль 41 сканирования коэффициентов может первоначально сканировать коэффициенты квантованного остаточного блока с использованием остатков первого порядка сканирования. В одном аспекте первый порядок сканирования может быть зигзагообразным порядком сканирования, который типично используется в приложениях H.264/MPEG-4 часть 10 AVC. Хотя модуль 41 сканирования коэффициентов описывается как начальное сканирование с использованием зигзагообразного порядка сканирования, технологии согласно настоящему описанию не ограничены каким-либо конкретным начальным порядком или технологией сканирования. Кроме того, каждый из режимов прогнозирования может иметь различный начальный порядок сканирования, к примеру, порядок сканирования, специально подготовленный для этого режима прогнозирования. Зигзагообразный порядок сканирования, тем не менее, описывается в целях иллюстрации. Зигзагообразный порядок сканирования размещает квантованные коэффициенты в одномерном векторе так, что коэффициенты в верхнем левом углу двумерного блока уплотняются к началу вектора коэффициентов. Зигзагообразный порядок сканирования может предоставлять достаточную компактность для блоков коэффициентов, которые имеют ограниченную направленность.
Когда остаточные блоки имеют некоторую или значительную направленность и преобразуются с использованием разделимых направленных преобразований, результирующий двумерный блок коэффициентов преобразования по-прежнему может переносить некоторую величину направленности. Это происходит вследствие того, что хотя использование разделимых направленных преобразований предлагает преимущества меньшей вычислительной сложности и требований по хранению, оно не позволяет фиксировать направленность в остаточных блоках, а также использовать неразделимые направленные преобразования. В качестве примера после применения направленного преобразования к вертикальному прогнозированию (режим 0 примера, описанного выше) ненулевые коэффициенты имеют тенденцию располагаться вдоль горизонтального направления. Таким образом, зигзагообразный порядок сканирования может не приводить к уплотнению всех ненулевых коэффициентов к началу вектора коэффициентов. Посредством адаптации порядка сканирования коэффициентов так, чтобы ориентировать порядок сканирования в горизонтальном направлении вместо фиксированного зигзагообразного порядка сканирования, ненулевые коэффициенты блока коэффициентов могут более уплотняться к началу одномерного вектора коэффициентов, чем имеет место в случае, если сканирование осуществляется в зигзагообразном порядке сканирования. Это позволяет, в свою очередь, уменьшать число битов, расходуемое на энтропийное кодирование, поскольку имеются более короткие серии нулей между ненулевыми коэффициентами в начале одномерного вектора коэффициентов и одна более длинная серия нулей в конце одномерного вектора коэффициентов. Принцип адаптации порядка сканирования, используемого для того, чтобы формировать одномерный вектор коэффициентов, также применяется к другим режимам прогнозирования. Например, модуль 41 сканирования коэффициентов может адаптивно регулировать порядок сканирования отдельно для каждого из режимов прогнозирования, поскольку каждый из режимов прогнозирования может иметь различную направленность в блоках коэффициентов и, следовательно, различную статистику по коэффициентам. Таким образом, порядок сканирования может быть различным для каждого из режимов прогнозирования.
Как описано выше, начальный порядок сканирования может не быть зигзагообразным порядком сканирования, в частности, для случаев, в которых направленные преобразования применяются к остаточному блоку. В этих случаях начальный порядок сканирования может быть заранее определен с помощью одной из технологий, описанных ниже. В качестве одного примера начальный порядок сканирования может быть определен с использованием набора обучающих видеопоследовательностей. Статистические данные ненулевых коэффициентов, такие как статистика, описанная ниже, собираются для каждого режима прогнозирования и используются для того, чтобы инициализировать порядок сканирования коэффициентов. В частности, позиция с наибольшей вероятностью ненулевых коэффициентов является первой позицией коэффициента начального порядка сканирования, далее позиция со следующей наибольшей вероятностью ненулевых коэффициентов является второй позицией коэффициента начального порядка сканирования и т.д. вплоть до позиции с наименьшей ненулевой вероятностью, которая является последней позицией коэффициента начального порядка сканирования. Альтернативно, начальный порядок сканирования может быть определен на основе величин собственных значений матриц разделимого преобразования. Например, собственные значения могут сортироваться в порядке по убыванию, и коэффициенты сканируются согласно соответствующему порядку собственных значений.
Даже если начальный порядок сканирования определяется с использованием одной из технологий, описанных выше, различные типы видеоисточников могут приводить к нахождению квантованных остаточных коэффициентов в различных позициях коэффициентов в блоке. Например, видеоисточники различных разрешений, к примеру, видеоисточники согласно общему промежуточному формату (CIF), стандарту четверть-CIF (QCIF) и стандарту высокой четкости (к примеру, 720p/i или 1080p/i) могут приводить к нахождению ненулевых коэффициентов в различных позициях коэффициентов в блоке. Таким образом, даже если начальный порядок сканирования выбирается на основе режима прогнозирования блока, модуль 41 сканирования коэффициентов по-прежнему может адаптировать порядок сканирования так, чтобы улучшать компактность ненулевых коэффициентов к началу одномерного вектора коэффициентов.
Чтобы адаптировать порядок сканирования, модуль 41 сканирования коэффициентов или другой модуль видеокодера 20, может собирать статистику по одному или более коэффициентам для одного или более блоков. Другими словами, поскольку сканирование коэффициентов выполняется поблочно, модуль 41 сканирования коэффициентов может собирать статистические данные, которые указывают число раз, когда каждая из позиций в блоке имеет ненулевой коэффициент. Например, модуль 41 сканирования коэффициентов может сохранять множество счетчиков, каждый из которых соответствует позиции коэффициента в двумерном блоке, и увеличивать счетчик, соответствующий позиции, когда ненулевой коэффициент находится в этой соответствующей позиции. Таким образом, высокие значения счетчика соответствуют позициям в блоке, в которых ненулевые коэффициенты появляются с большей частотой, а низкие значения счетчика соответствуют позициям в блоке, в которых ненулевые коэффициенты появляются с меньшей частотой. В некоторых случаях модуль 41 сканирования коэффициентов может собирать отдельные наборы статистики по коэффициентам для каждого из режимов прогнозирования.
Как описано выше, модуль 41 сканирования коэффициентов может адаптировать порядок сканирования на основе собранных статистических данных. Модуль 41 сканирования коэффициентов может, на основе собранных статистических данных, адаптировать порядок сканирования так, чтобы сканировать позиции коэффициентов, которые определяются как имеющие большую вероятность наличия ненулевых коэффициентов, до местоположений коэффициентов, которые определяются как имеющие меньшую вероятность наличия ненулевых коэффициентов. Например, модуль 41 сканирования коэффициентов может адаптировать порядок сканирования так, чтобы сканировать позиции коэффициентов двумерного блока в порядке убывания на основе значений счетчика, когда значения счетчика представляют число раз, когда соответствующие местоположения коэффициентов имеют ненулевое значение. Альтернативно, счетчики могут отслеживать число раз, когда каждая из позиций в блоке являлась местоположением для коэффициента с нулевым значением, и адаптируют порядок сканирования так, чтобы сканировать позиции коэффициентов в порядке возрастания на основе их значений счетчика. В некоторых случаях статистические данные могут собираться только для поднабора позиций коэффициентов блока вместо всех позиций коэффициентов блока. В этом случае модуль 41 сканирования коэффициентов может адаптировать только часть порядка сканирования.
Модуль 41 сканирования коэффициентов может адаптировать порядок сканирования с фиксированными или нефиксированными интервалами. Например, модуль 41 сканирования коэффициентов может адаптировать порядок сканирования с фиксированными интервалами, такими как границы блоков. В некоторых случаях модуль 41 сканирования коэффициентов может адаптировать порядок сканирования на границах блоков 4x4 или 8x8 или на границах макроблоков. Таким образом, порядок сканирования может адаптироваться к каждому блоку или макроблоку. Тем не менее, чтобы снижать сложность, модуль 41 сканирования коэффициентов может адаптировать порядок сканирования менее часто, к примеру, после каждых n блоков или макроблоков. Альтернативно, модуль 41 сканирования коэффициентов может адаптировать порядок сканирования с нефиксированными интервалами. Модуль 41 сканирования коэффициентов, например, может адаптировать порядок сканирования, когда одно из значений счетчика позиции в блоке превышает пороговое значение. После адаптации порядка сканирования модуль 41 сканирования коэффициентов может сканировать последующие квантованные остаточные блоки по меньшей мере одного последующего видеоблока с использованием адаптированного порядка сканирования. В некоторых случаях модуль 41 сканирования коэффициентов может сканировать последующие квантованные остаточные блоки по меньшей мере одного последующего видеоблока с использованием адаптированного порядка сканирования, когда по меньшей мере один последующий видеоблок существует в единице кодирования первого видеоблока. Модуль 41 сканирования коэффициентов может продолжать сканировать последующие видеоблоки до тех пор, пока порядок сканирования не адаптирован снова в соответствии с собранными статистическими данными или порядок сканирования не инициализирован повторно. Таким образом, модуль 41 сканирования коэффициентов адаптирует порядок сканирования так, чтобы формировать одномерный вектор коэффициентов таким образом, что квантованные остаточные коэффициенты могут быть более эффективно кодированы посредством модуля 46 энтропийного кодирования.
Модуль 41 сканирования коэффициентов может, в некоторых случаях, нормализовать собранные статистические данные. Нормализация собранных статистических данных может быть желательной, когда счетчики коэффициентов достигают порогового значения. Позиция коэффициента, в данном документе упоминаемая как позиция коэффициента A, в блоке, который имеет значение счетчика, которое достигло порога, например, может оставаться местоположением коэффициента с наибольшим значением счетчика, даже когда местоположение коэффициента не имело ненулевой коэффициент в течение периода времени. Это обусловлено тем, что счетчик коэффициентов в позиции A является настолько большим, что другие счетчики коэффициентов могут принимать несколько блоков (к примеру, десятки или сотни блоков) до тех пор, пока счетчик коэффициентов другой позиции, в данном документе упоминаемой как позиция коэффициента B, в блоке не превышает счетчик коэффициентов в позиции A и приводит к изменению (т.е. смене) порядка сканирования между позициями коэффициентов A и B. Таким образом, чтобы давать возможность видеокодеру 20 быстрее адаптироваться к локальной статистике по коэффициентам, модуль 41 сканирования коэффициентов может нормализовать коэффициенты, когда один из счетчиков достигает порогового значения. Например, модуль 41 сканирования коэффициентов может нормализовать коэффициенты посредством уменьшения каждого из значений счетчика на заранее определенный коэффициент, к примеру уменьшения каждого из значений счетчика на коэффициент два, или посредством сброса значений счетчика к набору начальных значений счетчика. Модуль 41 сканирования коэффициентов может использовать другие технологии нормализации. Например, модуль 41 сканирования коэффициентов может обновлять статистику после кодирования конкретного числа блоков.
Модуль 46 энтропийного кодирования принимает одномерный вектор коэффициентов, который представляет остаточные коэффициенты блока, а также информацию заголовка блока для блока в форме одного или более элементов синтаксиса заголовка. Элементы синтаксиса заголовка могут идентифицировать конкретные характеристики текущего видеоблока, такие как тип блока, режим прогнозирования, конфигурация кодированного блока (CBP) для сигнала яркости и сигнала цветности, блочный сегмент и один или более векторов движения. Эти элементы синтаксиса заголовка могут приниматься от других компонентов, например, от модуля 32 прогнозирования в видеокодере 20.
Модуль 46 энтропийного кодирования кодирует информацию заголовка и остаточную информацию для текущего видеоблока, чтобы формировать кодированный поток битов (помеченный как "Поток видеобитов" на фиг.2). Модуль 46 энтропийного кодирования кодирует один или более из элементов синтаксиса каждого из блоков в соответствии с технологиями, описанными в настоящем описании. В частности, модуль 46 энтропийного кодирования может кодировать элементы синтаксиса текущего блока на основе элементов синтаксиса одного или более ранее кодированных видеоблоков. По сути, модуль 46 энтропийного кодирования может включать в себя один или более буферов, чтобы сохранять элементы синтаксиса одного или более ранее кодированных видеоблоков. Модуль 46 энтропийного кодирования может анализировать любое число соседних блоков в любом местоположении, чтобы помогать в кодировании элементов синтаксиса текущего видеоблока. В целях иллюстрации модуль 46 энтропийного кодирования описывается как кодирующий режим прогнозирования на основе ранее кодированного блока, находящегося сразу выше текущего блока (т.е. верхнего соседнего блока), и ранее кодированного блока, находящегося сразу слева от текущего блока (т.е. левого соседнего блока). Тем не менее, аналогичные технологии могут использоваться для кодирования других элементов синтаксиса заголовка, таких как типы блоков, блочные сегменты, CBP и т.п. Кроме того, могут использоваться аналогичные технологии, которые заключают в себе больше соседних блоков, чем только верхние соседние блоки и левые соседние блоки, при кодировании текущего видеоблока.
Работа модуля 46 энтропийного кодирования описывается в отношении набора из восемнадцати режимов прогнозирования, описанного выше, и согласно нижеприведенному примерному псевдокоду.
Пусть upMode является режимом прогнозирования верхнего блока
Пусть leftMode является режимом прогнозирования левого блока
Пусть currMode является режимом прогнозирования текущего блока
Если currMode == upMode || currMode == leftMode
Отправить "1"
Если upMode! = leftMode
Отправить "1" если currMode == upMode, или "0" иначе
Иначе
Отправить "0"
Регулировать currMode так, чтобы находился в диапазоне [0, 15]
Отправить currMode с помощью 4 битов
Модуль 46 энтропийного кодирования инициализирует переменные upMode, leftMode и currMode как равные режиму прогнозирования верхнего соседнего блока, режиму прогнозирования левого соседнего блока и режиму прогнозирования текущего блока соответственно. Как описано выше, режимы прогнозирования верхнего соседнего блока, левого соседнего блока и текущего блока могут быть определены на основе анализа затрат Лагранжа. Модуль 46 энтропийного кодирования сравнивает режим прогнозирования текущего блока (currMode) с режимом прогнозирования соседних блоков (upMode и leftMode). Если режим прогнозирования текущего блока является идентичным режиму прогнозирования любого из соседних блоков, модуль 46 энтропийного кодирования кодирует "1". Таким образом, первый бит, кодируемый посредством модуля 46 энтропийного кодирования так, чтобы представлять режим прогнозирования текущего блока, указывает то, является или нет текущий режим прогнозирования идентичным либо режиму прогнозирования верхнего соседнего блока, либо режиму прогнозирования левого соседнего блока.
Если режим прогнозирования текущего блока является идентичным режиму прогнозирования любого из соседних блоков, т.е. первый кодированный бит равен "1", модуль 46 энтропийного кодирования сравнивает режим прогнозирования верхнего соседнего блока с режимом прогнозирования левого соседнего блока. Если режим прогнозирования верхнего соседнего блока является идентичным режиму прогнозирования левого соседнего блока, модуль 46 энтропийного кодирования больше не кодирует биты для режима прогнозирования. В этом случае режим прогнозирования может быть кодирован с использованием одного бита.
Тем не менее, если режим прогнозирования верхнего соседнего блока не является идентичным режиму прогнозирования левого соседнего блока, модуль 46 энтропийного кодирования кодирует по меньшей мере один дополнительный бит, представляющий режим прогнозирования, чтобы указывать, какой из соседних блоков имеет такой же режим прогнозирования, как текущий блок. Например, когда модуль 46 энтропийного кодирования анализирует режим прогнозирования верхнего и левого соседних блоков, модуль 46 энтропийного кодирования может кодировать "1", если режим прогнозирования текущего блока является идентичным режиму прогнозирования верхнего соседнего блока, и кодирует "0", если режим прогнозирования текущего блока является идентичным режиму прогнозирования левого соседнего блока. Модуль 46 энтропийного кодирования, альтернативно, может кодировать "1", если режим прогнозирования текущего блока является идентичным режиму прогнозирования левого соседнего блока, и кодировать "0", если режим прогнозирования текущего блока является идентичным режиму прогнозирования верхнего соседнего блока. В любом случае второй бит кодированного режима прогнозирования указывает, какой из верхнего соседнего блока или левого соседнего блока имеет такой же режим прогнозирования, как режим прогнозирования текущего блока. Таким образом, модуль 46 энтропийного кодирования может кодировать режим прогнозирования текущего блока с использованием минимум одного бита, а максимум двух битов, когда режим прогнозирования текущего блока является идентичным режиму прогнозирования одного из соседних блоков. Если модуль 46 энтропийного кодирования анализирует более двух соседних блоков, модуль 46 энтропийного кодирования может кодировать более одного дополнительного бита, чтобы указывать, какой из ранее кодированных блоков имеет такой же самый режим прогнозирования, как текущий блок.
Если режим прогнозирования текущего видеоблока не является идентичным ни режиму прогнозирования верхнего соседнего блока, ни режиму прогнозирования левого соседнего блока, модуль 46 энтропийного кодирования отправляет "0", что указывает то, что режим прогнозирования текущего видеоблока не является идентичным режимам прогнозирования любого из соседних блоков. Модуль 46 энтропийного кодирования кодирует кодовое слово, которое представляет режим прогнозирования текущего блока. Используя набор из восемнадцати режимов прогнозирования, описанный выше, в качестве примера модуль 46 энтропийного кодирования может кодировать режим прогнозирования текущего видеоблока с использованием четырехбитового кодового слова. Хотя предусмотрено восемнадцать возможных режимов прогнозирования, которые типично требуют пятибитовых кодовых слов, два из возможных режимов прогнозирования уже могут быть исключены из набора для текущего блока, т.е. режимы прогнозирования верхнего соседнего блока и левого соседнего блока, поскольку режимы прогнозирования верхнего соседнего блока и левого соседнего блока уже сравнивались с режимом прогнозирования текущего блока и определены как неравные режиму прогнозирования текущего блока. Когда верхний соседний блок и левый соседний блок имеют одинаковый режим прогнозирования, тем не менее, остаются возможными семнадцать режимов прогнозирования вместо шестнадцати режимов прогнозирования, также требуя пятибитового кодового слова, а не четырехбитового кодового слова для того, чтобы представлять режимы. В этом случае во время процесса прогнозирования модуль 32 прогнозирования может выборочно удалять один из оставшихся семнадцати режимов кодирования из набора, чтобы давать возможность представления режима прогнозирования текущего с использованием четырехбитового кодового слова. В одном случае модуль 32 прогнозирования может удалять последний режим прогнозирования, к примеру, режим 17 прогнозирования в этом примере. Тем не менее, модуль 32 прогнозирования может выбирать любой из режимов прогнозирования набора, которые должны быть удалены, с использованием любой другой из множества технологий. Например, модуль 32 прогнозирования может отслеживать вероятность выбора каждого режима прогнозирования и удалять режим прогнозирования с наименьшей вероятностью выбора.
После удаления выбранного режима прогнозирования модуль 46 энтропийного кодирования регулирует диапазон этих шестнадцати оставшихся режимов прогнозирования так, что номера режимов прогнозирования варьируются в диапазоне [0, 15]. В одном примере модуль 46 энтропийного кодирования может временно перенумеровывать оставшиеся режимы прогнозирования от 0 до 15, начиная с назначения 0 оставшемуся режиму прогнозирования с наименьшим номером режима и завершая назначением 15 оставшемуся режиму прогнозирования с наибольшим номером режима прогнозирования. Например, если режим прогнозирования верхнего соседнего блока является режимом 12, а режим прогнозирования левого соседнего блока является режимом 14, модуль 46 энтропийного кодирования может перенумеровывать режим прогнозирования 13, режим прогнозирования 15, режим прогнозирования 16 и режим прогнозирования 17 как режим прогнозирования 12, режим прогнозирования 13, режим прогнозирования 14 и режим прогнозирования 15 соответственно. Модуль 46 энтропийного кодирования затем кодирует режим прогнозирования с использованием четырех битов. В других примерах с наборами режимов прогнозирования с большим или меньшим числом возможных режимов прогнозирования, модуль 46 энтропийного кодирования может кодировать режим прогнозирования с помощью большего или меньшего числа битов с использованием аналогичных технологий.
Модуль 46 энтропийного кодирования может кодировать режим прогнозирования текущего видеоблока с использованием CAVLC или CABAC. Может существовать сильная корреляция между режимом прогнозирования текущего блока и режимами прогнозирования верхнего и левого соседних блоков. В частности, когда режим прогнозирования верхнего соседнего блока и режим прогнозирования левого соседнего блока является режимом однонаправленного прогнозирования, вероятность, что режим прогнозирования текущего блока также является одним из режимов однонаправленного прогнозирования, является высокой. Аналогично, когда режим прогнозирования верхнего соседнего блока и режим прогнозирования левого соседнего блока является режимом двунаправленного прогнозирования, вероятность, что режим прогнозирования текущего блока также является одним из режимов двунаправленного прогнозирования, является высокой. Таким образом, распределения вероятностей режима прогнозирования текущего блока изменяются, когда категории (к примеру, однонаправленный по сравнению с двунаправленным) режимов прогнозирования верхнего и левого соседних блоков изменяются.
По сути, модуль 46 энтропийного кодирования может выбирать, в некоторых аспектах, различные контексты кодирования в зависимости от того, являются режимы прогнозирования одного или более ранее кодированных видеоблоков (к примеру, верхний и левый соседние видеоблоки) однонаправленными или двунаправленными. В случае CABAC различные контексты кодирования отражают различные вероятности набора режимов прогнозирования в пределах данного контекста. Возьмем, например, контекст кодирования, в данном документе называемый "первый контекст кодирования", который соответствует случаю, когда как верхний, так и левый соседние блоки кодирования имеют режимы однонаправленного прогнозирования. Вследствие соседней корреляции первый контекст кодирования может назначать большие вероятности режимам однонаправленного прогнозирования, чем режимам двунаправленного прогнозирования. Таким образом, когда для CABAC-кодирования выбирается первый контекст кодирования (т.е. и верхний и левый соседние режимы прогнозирования являются однонаправленными), меньшее число битов может быть расходовано на кодирование текущего режима прогнозирования, если текущий режим прогнозирования является одним из режимов однонаправленного прогнозирования, по сравнению с тем, если текущий режим прогнозирования является одним из режимов двунаправленного прогнозирования. В случае CAVLC различные таблицы VLC-кодирования могут быть заданы для различных контекстов кодирования. Например, когда выбран первый контекст кодирования (т.е. как верхний, так и левый соседние блоки имеют режимы однонаправленного прогнозирования), может использоваться таблица VLC-кодирования, которая назначает более короткие кодовые слова режимам однонаправленного прогнозирования, чем режимам двунаправленного прогнозирования.
Таким образом, модуль 46 энтропийного кодирования может выбирать первый контекст кодирования, когда режим прогнозирования верхнего видеоблока и режим прогнозирования левого видеоблока являются режимами однонаправленного прогнозирования. Модуль 46 энтропийного кодирования может выбирать другой контекст кодирования, когда режим прогнозирования верхнего видеоблока и режим прогнозирования левого видеоблока оба не являются режимами однонаправленного прогнозирования. Например, модуль 46 энтропийного кодирования может выбирать второй контекст кодирования, когда режим прогнозирования верхнего соседнего видеоблока и режим прогнозирования левого соседнего видеоблока являются режимами двунаправленного прогнозирования. Второй контекст кодирования моделирует распределение вероятностей для режима прогнозирования текущего видеоблока, когда режим прогнозирования обоих из верхнего и левого соседних блоков является двунаправленным. Распределение вероятностей второго контекста кодирования может назначать большие вероятности режимам двунаправленного прогнозирования, чем режимам однонаправленного прогнозирования, в случае CABAC-кодирования, и назначать более короткие кодовые слова режимам двунаправленного прогнозирования, чем режимам однонаправленного прогнозирования, в случае CAVLC-кодирования.
Модуль 46 энтропийного кодирования может выбирать еще и третий контекст кодирования, когда режим прогнозирования одного из соседних блоков является режимом однонаправленного прогнозирования, а режим прогнозирования другого из соседних блоков является режимом двунаправленного прогнозирования. Третий контекст кодирования более равномерно распределяет вероятность текущего режима прогнозирования между режимами однонаправленного прогнозирования и режимами двунаправленного прогнозирования набора. Выбор различных контекстов кодирования для использования при кодировании на основе того, являются режимы прогнозирования одного или более ранее кодированных видеоблоков (к примеру, верхнего и левого видеоблоки) однонаправленными или двунаправленными, может приводить к лучшему сжатию информации о режиме прогнозирования.
Фиг.3 является блок-схемой, подробнее иллюстрирующей пример видеодекодера 26 по фиг.1. Видеодекодер 26 может выполнять взаимное и внутреннее декодирование блоков в пределах кодированных единиц, таких как видеокадры или серии последовательных макроблоков. В примере по фиг.3 видеодекодер 26 включает в себя модуль 60 энтропийного декодирования, модуль 62 прогнозирования, модуль 63 сканирования коэффициентов, модуль 64 обратного квантования, модуль 66 обратного преобразования и хранилище 68 кадров. Видеодекодер 26 также включает в себя сумматор 69, который сочетает выводы модуля 66 обратного преобразования и модуля 62 прогнозирования.
Модуль 60 энтропийного декодирования принимает кодированный поток видеобитов (помеченный как "Поток видеобитов" на фиг.3) и декодирует кодированный поток битов, чтобы получать остаточную информацию (к примеру, в форме одномерного вектора квантованных остаточных коэффициентов) и информацию заголовка (к примеру, в форме одного или более элементов синтаксиса заголовка). Модуль 60 энтропийного декодирования выполняет функцию взаимно-обратного декодирования для кодирования, выполняемого посредством модуля кодирования 46 по фиг.2. Описание модуля 60 энтропийного декодирования, выполняющего декодирование элемента синтаксиса режима прогнозирования, приводится в целях примера. Технологии могут распространяться на декодирование других элементов синтаксиса, таких как тип блока, блочный сегмент, CBP и т.п.
В частности, модуль 60 энтропийного декодирования анализирует первый бит, представляющий режим прогнозирования, чтобы определять то, является ли идентичным режим прогнозирования текущего блока режиму прогнозирования любого из ранее декодированных анализируемых блоков, к примеру верхнего соседнего блока или левого соседнего блока. Модуль 60 энтропийного декодирования может определять, что режим прогнозирования текущего блока является идентичным режиму прогнозирования одного из соседних блоков, когда первый бит равен "1" и что режим прогнозирования текущего блока не является идентичным режиму прогнозирования любого из соседних блоков, когда первый бит равен "0".
Если первый бит равен "1" и если режим прогнозирования верхнего соседнего блока является идентичным режиму прогнозирования левого соседнего блока, модуль 60 энтропийного декодирования больше не должен принимать биты. Модуль 60 энтропийного декодирования выбирает режим прогнозирования любого из соседних блоков в качестве режима прогнозирования текущего блока. Модуль 60 энтропийного декодирования, например, может включать в себя один или более буферов (или другое запоминающее устройство), которые сохраняют предыдущие режимы прогнозирования одного или более ранее декодированных блоков.
Если первый бит равен "1" и если режим прогнозирования верхнего соседнего блока не является идентичным режиму прогнозирования левого соседнего блока, модуль 60 энтропийного декодирования принимает второй бит, который представляет режим прогнозирования, модуль 60 энтропийного декодирования определяет, какой из соседних блоков имеет такой же режим прогнозирования, как текущий блок, на основе второго бита. Модуль 60 энтропийного декодирования, например, может определять, что режим прогнозирования текущего блока является идентичным режиму прогнозирования верхнего соседнего блока, когда второй бит равен "1", и определять, что режим прогнозирования текущего блока является идентичным режиму прогнозирования левого соседнего блока, когда второй бит равен "0". Модуль 60 энтропийного декодирования выбирает режим прогнозирования корректного соседнего блока в качестве режима прогнозирования текущего блока.
Когда первый бит равен "0", тем не менее, модуль 60 энтропийного декодирования определяет, что режим прогнозирования текущего блока не является идентичным режиму прогнозирования любого из соседних блоков. Следовательно, модуль 60 энтропийного декодирования может удалять режимы прогнозирования верхнего и левого соседних блоков из набора возможных режимов прогнозирования. Набор возможных режимов прогнозирования может включать в себя один или более режимов однонаправленного прогнозирования и/или один или более режимов многонаправленного прогнозирования. Один примерный набор режимов прогнозирования, который включает в себя всего восемнадцать режимов прогнозирования, предоставлен выше в описании по фиг.2. Если верхний и левый соседние блоки имеют идентичный режим прогнозирования, модуль 60 энтропийного декодирования может удалять режим прогнозирования соседних блоков и по меньшей мере один другой режим прогнозирования. В качестве примера модуль 60 энтропийного декодирования может удалять режим прогнозирования с наибольшим номером режима (к примеру, режим 17 в наборе из восемнадцати режимов прогнозирования, описанном выше). Тем не менее, модуль 60 энтропийного декодирования может выбирать любой из режимов прогнозирования набора, который должен быть удален, с использованием любой другой из множества технологий, до тех пор пока модуль декодирования 60 удаляет такой же режим прогнозирования, как удаляется посредством модуля 32 прогнозирования. Например, модуль 60 энтропийного декодирования может удалять режим прогнозирования, который имеет наименьшую вероятность выбора.
Модуль 60 энтропийного декодирования может регулировать номера режимов прогнозирования для оставшихся режимов прогнозирования так, что номера режимов прогнозирования варьируются в диапазоне 0-15. В одном примере модуль 46 энтропийного кодирования может временно перенумеровывать оставшиеся режимы прогнозирования от 0 до 15, начиная с оставшегося режима прогнозирования с наименьшим номером режима и завершая оставшимся режимом прогнозирования с наибольшим номером режима прогнозирования, как описано выше относительно фиг.2. Модуль 60 энтропийного декодирования декодирует оставшиеся биты, к примеру четыре бита в описанном примере, чтобы получать номер режима прогнозирования для оставшихся режимов прогнозирования, который соответствует режиму прогнозирования текущего блока.
В некоторых случаях модуль 60 энтропийного декодирования может декодировать режим прогнозирования текущего видеоблока с использованием CAVLC или CABAC. Поскольку сильная корреляция может существовать между режимом прогнозирования текущего блока и одного или более ранее декодированных блоков (к примеру, режимами прогнозирования верхнего и левого соседних блоков), модуль 60 энтропийного декодирования может выбирать различные контексты кодирования для режима прогнозирования блока на основе типа режима прогнозирования одного или более ранее декодированных видеоблоков. Другими словами, модуль 60 энтропийного декодирования может выбирать различные контексты кодирования на основе того, являются режимы прогнозирования ранее декодированных блоков однонаправленными или двунаправленными.
В качестве одного примера модуль 60 энтропийного декодирования может выбирать первый контекст кодирования, когда режимы прогнозирования обоих ранее декодированных блоков являются режимами однонаправленного прогнозирования, выбирать второй контекст кодирования, когда режимы прогнозирования обоих ранее декодированные блоки являются режимами двунаправленного прогнозирования, и выбирать третий контекст кодирования, когда режим прогнозирования одного из ранее декодированных блоков является режимом однонаправленного прогнозирования, а режим прогнозирования другого из ранее декодированных блоков является режимом двунаправленного прогнозирования.
Модуль 62 прогнозирования формирует блок прогнозирования с использованием по меньшей мере части информации заголовка. Например, в случае внутренне кодированного блока модуль 60 энтропийного декодирования может предоставлять по меньшей мере часть информации заголовка (такую как тип блока и режим прогнозирования для этого блока) в модуль 62 прогнозирования для формирования блока прогнозирования. Модуль 62 прогнозирования формирует блок прогнозирования с использованием одного или более смежных блоков (или частей смежных блоков) в общей единице кодирования в соответствии с типом блока и режимом прогнозирования. В качестве примера модуль 62 прогнозирования, например, может формировать блок прогнозирования с размером сегмента, указываемым посредством элемента синтаксиса типа блока, с использованием режима прогнозирования, указываемого посредством элемента синтаксиса режима прогнозирования. Один или более смежных блоков (или частей смежных блоков) в текущей единице кодирования, например, могут извлекаться из хранилища 68 кадров.
Модуль 60 энтропийного декодирования также декодирует кодированные видеоданные, чтобы получать остаточную информацию в форме одномерного вектора коэффициентов. Если разделимые преобразования (к примеру, DCT, целочисленные преобразования H.264/AVC, разделимые направленные преобразования) используются, модуль 63 сканирования коэффициентов сканирует одномерный вектор коэффициентов, чтобы формировать двумерный блок. Модуль 63 сканирования коэффициентов выполняет функцию взаимно-обратного сканирования для сканирования, выполняемого посредством модуля 41 сканирования коэффициентов по фиг.2. В частности, модуль 63 сканирования коэффициентов сканирует коэффициенты в соответствии с начальным порядком сканирования, чтобы переводить коэффициенты одномерного вектора в двумерный формат. Другими словами, модуль 63 сканирования коэффициентов сканирует одномерный вектор, чтобы формировать двумерный блок квантованных коэффициентов.
Модуль 63 сканирования коэффициентов может адаптивно регулировать порядок сканирования, используемый для сканирования коэффициентов, на основе статистики по одному или более коэффициентов, чтобы синхронизировать порядок сканирования с порядком сканирования, используемым посредством видеокодера 20. Для этого модуль 63 сканирования коэффициентов может собирать статистику по одному или более коэффициентам для одного или более блоков и адаптировать порядок сканирования на основе собранных статистических данных. Другими словами, когда двумерный блок квантованных коэффициентов восстановлен, модуль 63 сканирования коэффициентов может собирать статистические данные, которые указывают число раз, когда каждая из позиций в пределах двумерного блока являлась местоположением для ненулевого коэффициента. Модуль 63 сканирования коэффициентов может сохранять множество счетчиков, каждый из которых соответствует позиции коэффициента в двумерном блоке, и увеличивать счетчик, соответствующий позиции, когда ненулевой коэффициент находится в этой соответствующей позиции.
Модуль 63 сканирования коэффициентов может адаптировать порядок сканирования на основе собранных статистических данных. Модуль 63 сканирования коэффициентов может, на основе собранных статистических данных, адаптировать порядок сканирования так, чтобы сканировать позиции, которые имеют большую вероятность наличия ненулевых коэффициентов, перед местоположениями коэффициентов, которые определяются как имеющие меньшую вероятность наличия ненулевых коэффициентов. Модуль 63 сканирования коэффициентов адаптирует порядок сканирования с такими же фиксированными или нефиксированными интервалами, что используются посредством видеокодера 20. Модуль 63 сканирования коэффициентов нормализует собранные статистические данные таким же образом, как описано выше относительно видеокодера 20.
Как описано выше, модуль 63 сканирования коэффициентов может, в некоторых случаях, собирать отдельную статистику по коэффициентам и адаптивно регулировать порядок сканирования отдельно для каждого из режимов прогнозирования. Модуль 63 сканирования коэффициентов может делать это, например, поскольку каждый из режимов прогнозирования может иметь различную статистику по коэффициентам.
После формирования двумерного блока квантованных остаточных коэффициентов модуль 64 обратного квантования обратно квантует, т.е. деквантует, квантованные остаточные коэффициенты. Модуль 66 обратного преобразования применяет обратное преобразование, к примеру, обратное DCT, обратное целочисленное преобразование или обратное направленное преобразование, к деквантованным остаточным коэффициентам, чтобы формировать остаточный блок пикселных значений. Сумматор 69 суммирует блок прогнозирования, сформированный посредством модуля 62 прогнозирования, с остаточным блоком от модуля 66 обратного преобразования, чтобы формировать восстановленный видеоблок. Таким образом, видеодекодер 26 восстанавливает кадры видеопоследовательности поблочно с использованием информации заголовка и остаточной информации.
Блочное кодирование видео иногда может приводить к визуально воспринимаемой блочности на границах блоков кодированного видеокадра. В таких случаях фильтрация с удалением блочности может сглаживать границы блоков, чтобы уменьшать или исключать визуально воспринимаемую блочность. По сути, фильтр удаления блочности (не показан) также может применяться, чтобы фильтровать декодированные блоки с тем, чтобы уменьшать или удалять блочность. После любой необязательной фильтрации с удалением блочности восстановленные блоки затем помещаются в хранилище 68 кадров, которое предоставляет опорные блоки для пространственного и временного прогнозирования последующих видеоблоков, а также формирует декодированное видео, чтобы возбуждать дисплейное устройство (такое как дисплейное устройство 28 по фиг.1).
Фиг.4 является концептуальной схемой, иллюстрирующей гипотетический пример адаптивного сканирования в соответствии с настоящим описанием. В этом примере позиции коэффициентов помечаются в элементе 71 как c1-c16. Фактические значения коэффициентов показываются в блоке 1 (72), блоке 2 (73), блоке 3 (74) и блоке 4 (75) для четырех последовательных блоков. Фактические значения коэффициентов блоков 1-4 могут представлять квантованные остаточные коэффициенты, коэффициенты преобразования без квантования или другой тип коэффициентов. В других случаях позиции могут представлять позиции пикселных значений остаточного блока. Блоки 1-4 могут содержать блоки, ассоциированные с идентичным режимом прогнозирования. В примере, проиллюстрированном на фиг.4, блоки 1-4 являются блоками 4×4. Тем не менее, как описано выше, технологии согласно настоящему описанию могут распространяться так, чтобы применяться к блокам любого размера. Кроме того, хотя описано ниже относительно модуля 41 сканирования коэффициентов видеокодера 20, модуль 63 сканирования коэффициентов видеодекодера 26 может собирать статистические данные и адаптировать порядок сканирования аналогичным образом.
Первоначально модуль 41 сканирования коэффициентов может сканировать коэффициенты блока 1 с помощью зигзагообразного порядка сканирования. В этом случае модуль 41 сканирования коэффициентов сканирует позиции коэффициентов блока 1 в следующем порядке: c1, c2, c5, c9, c6, c3, c4, c7, c10, c13, c14, c11, c8, c12, c15, c16. Таким образом, после сканирования коэффициентов блока 1 модуль 41 сканирования коэффициентов выводит одномерный вектор v коэффициентов, где v 0=[9, 4, 6, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0]. Хотя в примере, проиллюстрированном на фиг.4, модуль 41 сканирования коэффициентов первоначально сканирует коэффициенты блока 1 с помощью зигзагообразного порядка сканирования, это зигзагообразное сканирование не является единственной возможной начальной точкой для адаптивного сканирования. Горизонтальное сканирование, вертикальное сканирование или любая другая начальная последовательность сканирования могут использоваться в качестве начального порядка сканирования. Использование зигзагообразного сканирования приводит к одномерному вектору v коэффициентов, имеющему серию из четырех нулей между двумя ненулевыми коэффициентами.
Статистика 1 (76) представляет статистику блока 1. Статистика 1 (76) может быть значениями счетчика для каждой из позиций коэффициентов, чтобы отслеживать число раз, когда каждая позиция коэффициента есть ненулевое значение. В примере по фиг.4 статистика по всем коэффициентам инициализируется как нуль. Тем не менее, могут использоваться другие схемы инициализации. Например, типичная или средняя статистика по коэффициентам каждого из режимов прогнозирования может использоваться для того, чтобы инициализировать статистику соответствующего режима прогнозирования. После блока кодирования 1 статистика 1 (76) имеет значения в единицу для всех позиций коэффициента блока 1, которые являются ненулевыми, и значения в нуль для всех позиций коэффициента блока 1, которые имеют значение в нуль. Статистика 2 (77) представляет комбинированную статистику блоков 1 и 2. Модуль 41 сканирования коэффициентов приращает счетчики статистики 1 (76), когда позиции коэффициентов имеют ненулевые значения в блоке 2, и сохраняет счетчики неизменными, когда позиции коэффициентов имеют значения в нуль. Таким образом, как показано на фиг.4, модуль 41 сканирования коэффициентов приращает статистику позиций коэффициентов c1, c2, c5, c9 и c13 до значения два и сохраняет статистику остальной части позиций коэффициентов идентичной статистике 1 (76). Статистика 3 (78) представляет комбинированную статистику блоков 1-3, а статистика 4 (79) представляет комбинированную статистику блоков 1-4. Как описано выше, в некоторых аспектах модуль 41 сканирования коэффициентов может собирать статистические данные для блоков с использованием множества счетчиков.
Модуль 41 сканирования коэффициентов может адаптировать порядок сканирования на основе собранных статистических данных. В проиллюстрированном примере модуль 41 сканирования коэффициентов может быть выполнен с возможностью адаптировать порядок сканирования после четырех видеоблоков на основе статистики 4 (79). В этом случае модуль 41 сканирования коэффициентов анализирует собранные статистические данные и адаптирует порядок сканирования так, что позиции коэффициентов сканируются в порядке убывания посредством своих соответствующих значений счетчика. По сути, модуль 41 сканирования коэффициентов может сканировать блоки 1-4 согласно начальному порядку сканирования и адаптировать порядок сканирования так, чтобы сканировать позиции последующего блока, к примеру блока 5 (не показан) в следующем порядке: c1, c5, c9, c2, c13, c6, c3, c4, c7, c10, c14, c11, c8, c12, c15, c16. Модуль 41 сканирования коэффициентов продолжает сканировать последующие блоки в соответствии с новым порядком сканирования до тех пор, пока порядок сканирования не адаптирован снова на основе собранных статистических данных для блоков или не инициализирован повторно, к примеру, в начале следующей единицы кодирования.
Адаптация порядка сканирования так, чтобы он изменялся от начального порядка сканирования (к примеру, зигзагообразного порядка сканирования) к новому порядку сканирования, способствует расположению ненулевых коэффициентов в начале одномерного вектора коэффициентов и нулевых коэффициентов в конце. В примере по фиг.4, новый порядок сканирования сканирует коэффициенты в измерении по вертикали раньше, чем коэффициенты в измерении по горизонтали, отражая тот факт, что для данного режима прогнозирования коэффициенты в измерении по вертикали имеют большую вероятность того, чтобы быть ненулевыми, чем коэффициенты в измерении по горизонтали. Блоки 1-4 все могут иметь идентичный режим прогнозирования, и предшествующая статистика может представлять вероятные будущие местоположения ненулевых коэффициентов. Таким образом, посредством использования предшествующей статистики для того, чтобы задавать порядок сканирования, технологии согласно настоящему описанию могут способствовать группировке ненулевых коэффициентов около начала сканируемого одномерного вектора и нулевых коэффициентов значения около конца сканируемого одномерного вектора, тем самым исключая или сокращая число серий нулей между двумя ненулевыми коэффициентами. Это, в свою очередь, может улучшать уровень сжатия, которое может достигаться во время энтропийного кодирования.
Фиг.5 является блок-схемой последовательности операций, иллюстрирующей технологию кодирования в соответствии с настоящим описанием. Технология кодирования, проиллюстрированная на фиг.56, может использоваться как для кодирования, так и для декодирования видеоблоков. Как показано на фиг.5, модуль 41, 63 сканирования коэффициентов сканирует коэффициенты блока в соответствии с начальным порядком сканирования, заданным для соответствующего режима прогнозирования текущего блока (этап 80). С точки зрения видеокодера 20, сканирование преобразует двумерный блок коэффициентов в одномерный вектор коэффициентов. С точки зрения видеодекодера 26, тем не менее, сканирование должно преобразовывать одномерный вектор коэффициентов в двумерный блок коэффициентов. В качестве одного примера начальный порядок сканирования соответствующего режима прогнозирования может быть зигзагообразным порядком сканирования. Зигзагообразное сканирование не является единственным возможным начальным порядком сканирования. Горизонтальное сканирование, вертикальное сканирование или любой другой начальный порядок сканирования могут использоваться в качестве начального порядка сканирования.
Модуль 41, 63 сканирования коэффициентов собирает статистические данные для одного или более блоков (этап 82). В частности, для каждого из блоков, которые сканируются, модуль 41, 63 сканирования коэффициентов может собирать статистические данные, которые отслеживают с помощью счетчиков частоту, с которой каждая из позиций коэффициентов в пределах двумерного блока является ненулевым коэффициентом. Модуль 41, 63 сканирования коэффициентов определяет то, следует ли оценивать порядок сканирования (этап 83). Модуль 41, 63 сканирования коэффициентов может оценивать порядок сканирования с фиксированными (к примеру, на каждой границе блока или после n границ блоков) или нефиксированными интервалами (к примеру, когда одно из значений счетчика позиции в блоке превышает пороговое значение).
Если модуль 41, 63 сканирования коэффициентов определяет не оценивать порядок сканирования, модуль 41, 63 сканирования коэффициентов сканирует следующий блок согласно начальному порядку сканирования (этап 80). Если модуль 41, 63 сканирования коэффициентов определяет оценивать порядок сканирования, к примеру, после того, как n блоков кодированы/декодированы, модуль сканирования коэффициентов может адаптировать порядок сканирования на основе собранных статистических данных (этап 84). Например, модуль 41, 63 сканирования коэффициентов может адаптировать порядок сканирования так, чтобы сканировать позиции коэффициентов блока в порядке убывания на основе их значений счетчика, где значения счетчика отражают вероятность наличия в данной позиции ненулевого коэффициента. После адаптации порядка сканирования модуль 41, 63 сканирования коэффициентов может, в некоторых случаях, определять то, превышают ли какие-либо значения счетчика статистики пороговое значение (этап 86). Если одна из позиций коэффициентов имеет соответствующее значение счетчика, которое превышает порог, модуль 41, 63 сканирования коэффициентов может нормализовать собранные статистические данные, к примеру значения счетчика коэффициентов (этап 87). Например, модуль 41, 63 сканирования коэффициентов может нормализовать значения счетчика коэффициентов посредством уменьшения каждого из значений счетчика на заранее определенный коэффициент, к примеру на коэффициент два, чтобы уменьшать каждое из значений счетчика наполовину, или сброса значений счетчика к набору начальных значений счетчика. Нормализация значений счетчика коэффициентов может давать возможность видеокодеру 20 быстрее адаптироваться к локальной статистике по коэффициентам.
После нормализации собранных статистических данных или когда нормализация не выполнена, модуль 41, 63 сканирования коэффициентов сканирует последующие блоки с использованием адаптированного порядка сканирования (этап 88). Модуль 41, 63 сканирования коэффициентов может сканировать по меньшей мере один последующий блок с использованием адаптированного порядка сканирования, когда по меньшей мере один последующий блок находится в единице кодирования ранее сканируемого видеоблока. Модуль 41, 63 сканирования коэффициентов может продолжать сканировать последующие видеоблоки до тех, пока порядок сканирования не отрегулирован снова или не инициализирован повторно, к примеру, на границе единицы кодирования. Таким образом, модуль 41, 63 сканирования коэффициентов адаптирует порядок сканирования на основе собранных статистических данных, чтобы сканировать позиции коэффициентов блока, которые определяются как имеющие большую вероятность того, чтобы быть ненулевыми, перед позициями коэффициентов блока, которые определяются как имеющие меньшую вероятность того, чтобы быть ненулевыми. Таким образом, одномерный вектор коэффициентов выполнен с возможностью способствовать группировке ненулевых коэффициентов около начала сканируемого одномерного вектора и нулевых коэффициентов значения около конца сканируемого одномерного вектора. Это, в свою очередь, может улучшать уровень сжатия, которое может достигаться во время энтропийного кодирования.
В некоторых случаях модуль 41, 63 сканирования коэффициентов может адаптивно регулировать порядок сканирования отдельно для каждого из режимов прогнозирования, поскольку каждый из режимов прогнозирования может иметь различную статистику по коэффициентам. Другими словами, модуль 41, 63 сканирования коэффициентов может сохранять отдельную статистику для каждого из режимов прогнозирования и регулировать порядки сканирования для каждого из режимов прогнозирования по-разному на основе соответствующей статистики. Таким образом, примерная блок-схема последовательности операций способа, описанная выше, может выполняться посредством модуля 41, 63 сканирования коэффициентов для каждого режима прогнозирования.
Фиг.6 является блок-схемой последовательности операций, иллюстрирующей примерную работу модуля кодирования, такого как модуль 46 энтропийного кодирования видеокодера 20, кодирующего информацию заголовка для видеоблока в соответствии с одной из технологий согласно настоящему описанию. Модуль 46 энтропийного кодирования принимает информацию заголовка для блока в форме одного или более элементов синтаксиса заголовка (этап 90). Элементы синтаксиса заголовка могут идентифицировать конкретные характеристики текущего видеоблока, такие как тип блока, режим прогнозирования, конфигурация кодированного блока (CBP) для сигнала яркости и/или сигнала цветности, блочный сегмент и один или более векторов движения. Фиг.6 описывается относительно кодирования режима прогнозирования текущего блока. Тем не менее, аналогичные технологии могут использоваться для кодирования других элементов синтаксиса заголовка.
Модуль 46 энтропийного кодирования сравнивает режим прогнозирования текущего блока с режимом прогнозирования одного или более ранее кодированных блоков (этап 92). Один или более ранее кодированных блоков, например, могут содержать один или более смежных блоков. В примере по фиг.6 два ранее кодированных блока анализируются, к примеру верхний соседний блок и левый соседний блок. Если режим прогнозирования текущего блока является идентичным режиму прогнозирования любого из ранее кодированных блоков, модуль 46 энтропийного кодирования кодирует первый бит, чтобы указывать это (этап 94). В качестве одного примера модуль 46 энтропийного кодирования может кодировать первый бит как "1", чтобы указывать, что режим прогнозирования текущего блока является идентичным режиму прогнозирования любого из ранее кодированных блоков.
Модуль 46 энтропийного кодирования сравнивает режим прогнозирования верхнего соседнего блока с режимом прогнозирования левого соседнего блока (этап 98). Если режим прогнозирования верхнего соседнего блока является идентичным режиму прогнозирования левого соседнего блока, модуль 46 энтропийного кодирования больше не кодирует биты для режима прогнозирования (этап 100). В этом случае режим прогнозирования может быть кодирован с использованием одного бита.
Тем не менее, если режим прогнозирования верхнего соседнего блока не является идентичным режиму прогнозирования левого соседнего блока, модуль 46 энтропийного кодирования кодирует второй бит, представляющий режим прогнозирования, чтобы указывать, какой из соседних блоков имеет такой же режим прогнозирования, как текущий блок (этап 102). Например, модуль 46 энтропийного кодирования может кодировать "1", если режим прогнозирования текущего блока является идентичным режиму прогнозирования верхнего соседнего блока, и кодировать "0", если режим прогнозирования текущего блока является идентичным режиму прогнозирования левого соседнего блока. По сути, модуль 46 энтропийного кодирования может кодировать режим прогнозирования текущего блока с использованием минимум одного бита, а максимум двух битов, когда режим прогнозирования текущего блока является идентичным режиму прогнозирования одного из соседних блоков.
Если режим прогнозирования текущего блока не является идентичным режиму прогнозирования любого из ранее кодированных блоков, модуль 46 энтропийного кодирования кодирует первый бит, чтобы указывать это (этап 96). Продолжая пример выше, модуль 46 энтропийного кодирования может кодировать первый бит как "0", чтобы указывать, что режим прогнозирования текущего блока не является идентичным режиму прогнозирования любого из ранее кодированных блоков. Модуль 46 энтропийного кодирования может перекомпоновывать набор возможных режимов прогнозирования (этап 104). Модуль 46 энтропийного кодирования может перекомпоновывать набор возможных режимов прогнозирования посредством удаления режима или режимов прогнозирования соседних блоков из набора возможных режимов прогнозирования. Когда верхний и левый соседние блоки имеют отличные друг от друга режимы прогнозирования, модуль 46 энтропийного кодирования может удалять два режима прогнозирования из набора. Когда верхний и левый соседние блоки имеют идентичный друг с другом режим прогнозирования, модуль 46 энтропийного кодирования может удалять один режим прогнозирования (т.е. режим прогнозирования верхнего и левого соседних блоков) из набора. Кроме того, в некоторых случаях модуль 46 энтропийного кодирования может выборочно удалять один или более дополнительных режимов кодирования из набора. Когда модуль 46 энтропийного кодирования удаляет один или более дополнительных режимов кодирования, модуль 32 прогнозирования по фиг.2 также удаляет эти же дополнительные режимы кодирования из набора возможных режимов прогнозирования так, что эти дополнительные режимы кодирования не будут выбираться. После удаления одного или более режимов прогнозирования модуль 46 энтропийного кодирования регулирует номера режимов оставшихся режимов прогнозирования набора.
Модуль 46 энтропийного кодирования кодирует кодовое слово, которое представляет режим прогнозирования текущего блока (этап 106). Модуль 46 энтропийного кодирования может кодировать режим прогнозирования текущего видеоблока с использованием CAVLC, CABAC или другой технологии энтропийного кодирования. Как описано подробнее относительно фиг.7, модуль кодирования 46 может, в некоторых случаях, адаптивно выбирать контекст кодирования для использования при кодировании режима прогнозирования текущего блока на основе режимов прогнозирования одного или более ранее кодированных блоков.
Фиг.7 является блок-схемой последовательности операций, иллюстрирующей выбор контекста кодирования в соответствии с одним аспектом настоящего описания. Как описано выше, корреляция может существовать между типом режима прогнозирования текущего блока и типом режима прогнозирования одного или более ранее кодированных блоков, таких как верхний и левый соседний блок. Например, когда режимы прогнозирования верхнего и левого соседних блоков являются режимами однонаправленного прогнозирования, есть большая вероятность, что режим прогнозирования текущего блока также является режимом однонаправленного прогнозирования. Аналогично, когда режимы прогнозирования верхнего и левого соседних блоков являются режимами двунаправленного прогнозирования, есть большая вероятность, что режим прогнозирования текущего блока также является режимом двунаправленного прогнозирования.
По сути, модуль 46 энтропийного кодирования может определять, являются ли режимы прогнозирования верхнего и левого соседних блоков режимами однонаправленного прогнозирования (этап 112), и выбирать первый контекст кодирования, когда режимы прогнозирования как верхнего, так и левого соседних блоков являются режимами однонаправленного прогнозирования (этап 114). Первый контекст кодирования моделирует распределение вероятностей для режима прогнозирования текущего видеоблока, когда режим прогнозирования обоих из верхнего и левого соседних блоков является однонаправленным. Распределение вероятностей первого контекста кодирования может предоставлять большие вероятности для режимов однонаправленного прогнозирования набора, чем для режимов двунаправленного прогнозирования набора. В случае CAVLC, например, первый контекст кодирования может использовать таблицу кодирования, которая ассоциирует более короткие кодовые слова с режимами однонаправленного прогнозирования, чем кодовые слова, ассоциированные с режимами двунаправленного прогнозирования.
Когда режимы прогнозирования каждого из верхнего и левого соседних блоков не являются режимами однонаправленного прогнозирования, модуль 46 энтропийного кодирования может определять то, являются ли режимы прогнозирования каждого из верхнего и левого соседних блоков режимами двунаправленного прогнозирования (этап 116). Модуль 46 энтропийного кодирования может выбирать второй контекст кодирования, когда режимы прогнозирования каждого из верхнего и левого соседних блоков являются режимами двунаправленного прогнозирования (этап 117). Второй контекст кодирования моделирует распределение вероятностей для режима прогнозирования текущего видеоблока при условии, что существует большая вероятность того, что текущий режим является режимом двунаправленного прогнозирования, чем режимом однонаправленного прогнозирования. С другой стороны, в случае CAVLC, например, второй контекст кодирования может использовать таблицу кодирования, которая ассоциирует более короткие кодовые слова с режимами двунаправленного прогнозирования, чем кодовые слова, ассоциированные с режимами однонаправленного прогнозирования.
Когда режимы прогнозирования верхнего и левого соседних блоков не являются режимами двунаправленного прогнозирования, т.е. режимы прогнозирования ранее кодированных блоков - это комбинация режимов двунаправленного и однонаправленного прогнозирования, модуль 46 энтропийного кодирования может выбирать третий контекст кодирования (этап 118). Третий контекст кодирования формируется при условии, что вероятность текущего режима прогнозирования более равномерно распределена между режимами однонаправленного прогнозирования и режимами двунаправленного прогнозирования набора. В случае CAVLC, например, третий контекст кодирования может использовать таблицу кодирования, которая ассоциирует кодовые слова с аналогичной длиной кода с режимами двунаправленного прогнозирования и режимами однонаправленного прогнозирования.
Модуль 46 энтропийного кодирования кодирует режим прогнозирования текущего видеоблока в соответствии с выбранным контекстом кодирования (этап 119). Выбор различных контекстов кодирования для использования при кодировании режима прогнозирования текущего видеоблока на основе режимов прогнозирования одного или более ранее кодированных видеоблоков может приводить к лучшему сжатию информации о режиме прогнозирования. Эта же технология выбора контекста кодирования выполняется посредством модуля декодирования 60 так, что модуль декодирования 60 может точно декодировать режимы прогнозирования видеоблоков.
Фиг.8 является блок-схемой последовательности операций, иллюстрирующей примерную работу модуля декодирования, такой как модуль 60 энтропийного декодирования видеодекодера 26, декодирующего информацию заголовка видеоблока в соответствии с технологиями согласно настоящему описанию. Модуль 60 энтропийного декодирования декодирует кодированный поток видеобитов, чтобы получать информацию заголовка, к примеру, в форме одного или более элементов синтаксиса заголовка. Описание модуля 60 энтропийного декодирования, выполняющего декодирование режима прогнозирования, приводится в целях примера. Технологии могут распространяться на декодирование других элементов синтаксиса заголовка, таких как тип блока, блочный сегмент, CBP и т.п.
В частности, модуль 60 энтропийного декодирования принимает первый бит, представляющий режим прогнозирования текущего блока (этап 120). Модуль 60 энтропийного декодирования определяет, указывает ли первый бит, представляющий режим прогнозирования, то что режим прогнозирования текущего блока является идентичным режиму прогнозирования ранее декодированного блока, к примеру верхнего соседнего блока или левого соседнего блока (этап 122). Модуль 60 энтропийного декодирования, например, может определять, что режим прогнозирования текущего блока является идентичным режиму прогнозирования одного из верхнего и левого соседних блоков, когда первый бит равен "1", и что режим прогнозирования текущего блока не является идентичным режимам прогнозирования верхнего и левого соседних блоков, когда первый бит равен "0".
Когда модуль 60 энтропийного декодирования определяет, что режим прогнозирования текущего блока является идентичным режиму прогнозирования одного из верхнего и левого соседних блоков, модуль 60 энтропийного декодирования определяет, являются ли режим прогнозирования верхнего соседнего блока и режим прогнозирования левого соседнего блока идентичными (этап 124). Когда режим прогнозирования верхнего соседнего блока и режим прогнозирования левого соседнего блока являются идентичными, биты, представляющие режим прогнозирования текущего видеоблока, более не принимаются, и модуль 60 энтропийного декодирования выбирает режим прогнозирования любого из соседних блоков в качестве режима прогнозирования текущего блока (этап 126). Когда режим прогнозирования верхнего соседнего блока и режим прогнозирования левого соседнего блока являются различными, один дополнительный бит, представляющий режим прогнозирования, принимается, и модуль 60 энтропийного декодирования выбирает режим прогнозирования корректного соседнего блока в качестве режима прогнозирования текущего блока на основе следующего принимаемого бита, представляющего режим прогнозирования (этап 128). Например, модуль 60 энтропийного декодирования может выбирать режим прогнозирования верхнего соседнего блока в качестве режима прогнозирования текущего блока, когда следующий принимаемый бит равен "1", и выбирать режим прогнозирования левого соседнего блока в качестве режима прогнозирования текущего блока, когда следующий принимаемый бит равен "0".
Когда модуль 60 энтропийного декодирования определяет, что режим прогнозирования текущего блока не является идентичным режиму прогнозирования любого из верхнего и левого соседних блоков, т.е. когда первый бит, представляющий режим прогнозирования, равен "0", модуль 60 энтропийного декодирования может удалять один или более режимов прогнозирования из набора возможных режимов прогнозирования (этап 130). Модуль 60 энтропийного декодирования может удалять режимы прогнозирования верхнего и левого соседних блоков из набора возможных режимов прогнозирования. Если верхний и левый соседние блоки имеют идентичный режим прогнозирования, модуль 60 энтропийного декодирования может удалять режим прогнозирования соседних блоков и по меньшей мере один другой режим прогнозирования, как подробно описано выше.
Модуль 60 энтропийного декодирования декодирует оставшиеся биты, к примеру четыре бита в описанном примере, чтобы получать номер режима прогнозирования для режима прогнозирования текущего блока (этап 132). Модуль 60 энтропийного декодирования может регулировать нумерацию режимов прогнозирования для оставшихся режимов прогнозирования (этап 134) способом, взаимно-обратным процессу регулирования нумерации режимов прогнозирования, выполняемому посредством модуля 46 энтропийного кодирования. В одном примере модуль 60 энтропийного декодирования может перенумеровывать декодированные номера режимов прогнозирования (в пределах от 0 до 15) к исходным номерам режимов прогнозирования (в пределах от 0 до 17) посредством обратной вставки режимов прогнозирования, которые удалялись. В некоторых случаях модуль 60 энтропийного декодирования может выбирать различные контексты кодирования для режима прогнозирования блока на основе режимов прогнозирования одного или более ранее декодированных видеоблоков, к примеру, на основе того, являются режимы прогнозирования ранее декодированных блоков оба однонаправленными, оба двунаправленными или один однонаправленным, а другой двунаправленным, как подробно описано выше. Модуль 60 энтропийного декодирования предоставляет режим прогнозирования в модуль 62 прогнозирования, чтобы формировать блок прогнозирования согласно выбранному режиму прогнозирования (этап 136). Как описано относительно фиг.3, блок прогнозирования комбинируется с остаточными пикселными значениями, чтобы формировать восстановленный блок для представления пользователю.
Технологии, раскрытые в настоящем описании, могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или в любой комбинации вышеозначенного. Любые признаки, описанные как модули или компоненты, могут быть реализованы совместно в интегральном логическом устройстве или отдельно как дискретные, но имеющие возможность взаимодействовать логические устройства. При реализации в программном обеспечении технологии могут быть осуществлены по меньшей мере частично посредством машиночитаемого носителя, содержащего инструкции, которые при приведении в исполнение выполняют один или более способов, описанных выше, Машиночитаемый носитель может формировать часть компьютерного программного продукта, который может включать в себя упаковку. Машиночитаемые носители могут содержать оперативное запоминающее устройство (RAM), такое как синхронное динамическое оперативное запоминающее устройство (SDRAM), постоянное запоминающее устройство (ROM), энергонезависимое оперативное запоминающее устройство (NVRAM), электрически стираемое программируемое постоянное запоминающее устройство (EEPROM), флэш-память, магнитные или оптические носители хранения данных и т.п. Дополнительно или альтернативно, технологии могут быть реализованы по меньшей мере частично посредством машиночитаемой среды связи, которая переносит или передает код в форме инструкций или структур данных и которая может быть доступна, считываема и/или приводима в исполнение посредством компьютера.
Коды могут приводиться в исполнение посредством одного или более процессоров, например, одного или более процессоров цифровых сигналов (DSP), микропроцессоров общего назначения, специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA) или других эквивалентных интегральных или дискретных логических схем. Соответственно, термин "процессор" при использовании в данном документе может означать любую вышеуказанную структуру или другую структуру, подходящую для реализации технологий, описанных в данном документе. Помимо этого, в некоторых аспектах функциональность, описанная в данном документе, может быть предоставлена в рамках специализированных программных модулей или аппаратных модулей, выполненных с возможностью кодирования или декодирования либо встроенных в комбинированный видеокодер-декодер (кодек). Описание различных признаков как модулей имеет намерение выделять различные функциональные аспекты проиллюстрированных устройств и необязательно подразумевает, что эти модули должны быть реализованы посредством отдельных аппаратных или программных компонентов. Наоборот, функциональность, ассоциированная с одним или более модулей, может быть интегрирована в общих или отдельных аппаратных или программных компонентах.
Описаны различные варианты осуществления настоящего описания. Эти и другие варианты осуществления находятся в рамках объема прилагаемой формулы изобретения.