КОДИРОВАНИЕ ВИДЕО, ИСПОЛЬЗУЯ АДАПТИВНОЕ РАЗРЕШЕНИЕ ВЕКТОРА ДВИЖЕНИЯ
VIDEO CODING USING ADAPTIVE MOTION VECTOR RESOLUTION

[0001] Настоящая заявка испрашивает приоритет предварительной заявки на патент США № 61/504,150, поданной 1 июля 2011 года, и предварительной заявки на патент США № 61/554,398, поданной 1 ноября 2011 года, все содержимое каждой из которых тем самым включено по ссылке.
ОБЛАСТЬ ТЕХНИКИ
[0002] Настоящее раскрытие относится к кодированию видео, и более подробно, к кодированию видео данных для компенсации движения при кодировании видео.
УРОВЕНЬ ТЕХНИКИ
[0003] Цифровые способности видео могут быть включены в широкий диапазон устройств, включая цифровые телевизоры, цифровые системы прямого вещания, беспроводные системы вещания, персональные цифровые помощники (PDA), ноутбуки или настольные компьютеры, цифровые камеры, цифровые устройства записи, цифровые медиаплееры, видео игровые устройства, пульты видеоигр, сотовые или спутниковые радиотелефоны, устройства организации видео телеконференций, и т.п. Цифровые видео устройства реализуют способы сжатия видео, такие как описанные в стандартах, определенных MPEG-2, MPEG-4, ITU-T H.263 или ITU-T H.264/MPEG-4, Часть 10, Усовершенствованное видео кодирование (AVC), и расширения таких стандартов, чтобы передавать и принимать цифровую видео информацию более эффективно.
[0004] Способы сжатия видео выполняют пространственное предсказание и/или временное предсказание, чтобы уменьшить или удалить избыточность, присущую видео последовательностям. Для основанного на блоке кодирования видео кадр или вырезка видео могут быть сегментированы на макроблоки. Каждый макроблок может быть далее сегментирован. Макроблоки во внутренне кодированном (I) кадре или вырезке кодируют, используя пространственное предсказание относительно соседних макроблоков. Макроблоки во внешне кодированном (P или B) кадре или вырезке могут использовать пространственное предсказание относительно соседних макроблоков в тех же самых кадре или вырезке или временное предсказание относительно других опорных кадров.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0005] В целом, настоящее раскрытие обеспечивает способы для совместного кодирования значений разности векторов движения для x- и y- компонент вектора движения. Совместное кодирование значений разности векторов движения могут относиться к процессу, в котором информация, представляющая x- и y- компоненты значения разности векторов движения кодируют или декодируют вместе во время процесса кодирования, например, посредством перемежения значений для x- и y- компонент или посредством кодирования единственного значения, представляющего и x- и y- компоненты значения разности векторов движения. В некоторых примерах информация, представляющая x- и y- компоненты разности векторов движения могут включать в себя информацию, представляющую то, больше ли x- и/или y- компоненты разности векторов движения, чем нуль, и информацию, представляющую знак x- и/или y- компоненты значения разности векторов движения. Некоторая информация, такая как знак и величина x- и/или y- компонент, может быть сигнализирована условно на основании того, больше ли величина x- или y- компоненты значения разности векторов движения, чем нуль. Настоящее раскрытие также обеспечивает способы для сигнализации точности векторов движения. Вектора движения могут иметь суб-пиксельную точность, например, суб-пиксельную точность в одну четверть или пиксельную точность в одну восьмую.
[0006] В одном примере способ кодирования видео данных включает в себя кодирование информации, представляющей то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных чем нуль, кодирование информации, представляющей то, больше ли абсолютное значение y- компоненты значения разности векторов движения, чем нуль, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодирование информации, представляющей абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодирование информации, представляющей абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодирование знака x- компоненты значения разности векторов движения, и когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодирование знака y- компоненты значения разности векторов движения.
[0007] В другом примере устройство включает в себя видео кодировщик, сконфигурированный, чтобы кодировать информацию, представляющую то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных чем нуль, кодировать информацию, представляющую то, больше ли абсолютное значение y- компоненты значения разности векторов движения чем нуль, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодировать информацию, представляющую абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодировать информацию, представляющую абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодировать знак x- компоненты значения разности векторов движения, и когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодировать знак y- компоненты значения разности векторов движения.
[0008] В другом примере компьютерный программный продукт включает в себя считываемый компьютером носитель, имеющий сохраненные на нем инструкции, которые, когда выполняются, вынуждают один или более процессоров устройства кодировать видео данные, чтобы кодировать информацию, представляющую то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных чем нуль, кодировать информацию, представляющую то, больше ли абсолютное значение y- компоненты значения разности векторов движения чем нуль, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодировать информацию, представляющую абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодировать информацию, представляющую абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодировать знак x- компоненты значения разности векторов движения, и когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодировать знак y- компоненты значения разности векторов движения.
[0009] В другом примере устройство включает в себя средство для кодирования значения, представляющего то, имеет ли вектор движения текущего блока видео данных первую суб-пиксельную точность или вторую суб-пиксельную точность, в котором вторая суб-пиксельная точность больше чем первая суб-пиксельная точность, и когда вектор движения имеет вторую суб-пиксельную точность, когда x- компонент значения разности векторов движения не равен нулю, и когда y- компонент значения разности векторов движения не равен нулю, в котором кодирование информации, представляющей абсолютное значение x- компоненты значения разности векторов движения и кодирование информации, представляющей абсолютное значение y- компоненты значения разности векторов движения содержит кодирование совместно кодированного значения, представляющего и x- компоненте значения разности векторов движения и y- компоненту значения разности векторов движения.
[0010] Подробности одного или более примеров сформулированы в сопровождающих чертежах и описании ниже. Другие признаки, задачи и преимущества будут очевидны из описания и чертежей и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0011] Фиг.1 является блок-схемой, иллюстрирующей один пример системы кодирования и декодирования видео, совместимая с способами настоящего раскрытия.
[0012] Фиг.2 является блок-схемой, иллюстрирующей один пример видео кодера, совместимого с способами настоящего раскрытия.
[0013] Фиг.3 является блок-схемой, иллюстрирующей один пример видео декодера, совместимого с способами настоящего раскрытия.
[0014] Фиг.4 является последовательностью операций, иллюстрирующей примерный способ для совместного кодирования x- и y- компонент значения разности векторов движения и энтропийного кодирования текущего блока.
[0015] Фиг.5 является последовательностью операций, иллюстрирующей примерный способ отдельной сигнализации значения разности векторов движения в соответствии с тестовой моделью 3.0 HEVC (HM 3.0).
[0016] Фиг.6 является последовательностью операций, иллюстрирующей примерный способ для совместного кодирования x- и y- компонент значения разности векторов движения.
[0017] Фиг.7 является последовательностью операций, иллюстрирующей примерный способ для совместного кодирования x- и y- компонент значения разности векторов движения и кодировать разрешение x- и y- компонент значения разности векторов движения.
[0018] Фиг.8 является последовательностью операций, иллюстрирующей примерный способ для того, чтобы совместно декодировать x- и y- компоненты значения разности векторов движения и энтропийно декодировать кодированные данные, чтобы сформировать текущий блок.
[0019] Фиг.9 является последовательностью операций, иллюстрирующей примерный способ для того, чтобы совместно декодировать x- и y- компоненты значения разности векторов движения.
ПОДРОБНОЕ ОПИСАНИЕ
[0020] В целом настоящее раскрытие описывает способы для кодирования данных для значений разности векторов движения во время кодирования видео. Видео данные включают в себя последовательность кадров (или картинки), воспроизводимые в быстрой последовательности, чтобы моделировать движение. Каждый кадр видео данных может быть сегментирован на блоки. Во время кодирования видео, и более конкретно - внешнего предсказания, устройство, такое как видео кодер или видео декодер, может предсказать пиксельные значения блока. Видео кодер или декодер могут основывать предсказания для блока на пиксельных значениях блока из другого кадра или из пиксельных значений соседнего блока.
[0021] Для внутреннего предсказания видео кодер может указать смещение опорного блока, используя вектор движения. Вектор движения может иметь x- компоненту и y- компоненту. x- и y- компоненты вектора движения могут указывать смещение с суб-пиксельной точностью, такой как половинная пиксельная точность, одно-четвертная пиксельная точность, или пиксельная точность в одну восьмую. Чтобы достигнуть суб-пиксельной точности, видео кодер или декодер могут использовать метод, такой как интерполяция, чтобы определить суб-пиксельные значения в местоположениях, указанных вектором движения. После определения x- и y- компонент вектора движения, видео кодер может вычислить значения разности векторов движения (MVD) для компонентов вектора движения относительно предсказателя вектора движения.
[0022] Настоящее раскрытие в целом обеспечивает способы для совместного кодирования значений MVD движения. В настоящем раскрытии совместное кодирование может относиться к способам кодирования, в которых информация, относящаяся к x- и y- компонентам значения разности векторов движения, перемежается, в противоположность кодированию всей информации, относящейся к одной из x- или y- компонент прежде, чем кодировать какую-либо информацию, относящуюся ко второму компоненту значения разности векторов движения. Объединенное кодирование может также относиться к использованию одного значения, чтобы представить значения для обеих из x- и y- компонент. Кроме того, настоящее раскрытие также описывает способы для кодирования разности векторов движения, которые могут иметь различные суб-пиксельные точности, например, четверть-пиксельную точность или пиксельную точность в одну восьмую, и указания точности разностей векторов движения и векторов движения, ассоциированных с этими векторами движения.
[0023] Видео последовательность включает в себя один или более кадров или картинок. Каждая из картинок может быть разделена на один или более блоков, каждый из которых может быть индивидуально кодирован. Усилия предпринимаются, чтобы сформировать новый стандарт кодирования, в настоящее время называемый кодирование видео высокой эффективности (HEVC), и иногда называемый ITU H.265. Этот появляющийся стандарт относится к единице кодирования (CU) в качестве конкретного блока пикселей, включающего в себя данные яркости и данные цветности, где данные яркости имеют разрешение 2Nx2N, и данные цветности имеют разрешение NxN. Единица кодирования может быть разделена на четыре одинакового размера, квадратных, ненакладывающихся суб-единиц кодирования.
[0024] Каждая из суб-единиц кодирования может также быть разделена таким образом в другие суб-единицы кодирования. Единица кодирования, которая не разделена на суб-единицы кодирования, упоминается как единица кодирования листового (концевого) узла. Единицы кодирования листового узла могут включать в себя единицы предсказания (PU) и единицы преобразования (TU), где PU представляет данные предсказания, а TU представляют остаточные данные, то есть, кодированные пиксель-за-пикселем разности между данными предсказания и первоначальными некодированными данными для пикселей, соответствующих этой TU. В качестве примера, PU могут быть кодированы, используя режим внешнего предсказания, в котором видео кодер может вычислить вектор движения для PU, используя процесс оценки движения. Видео кодер может далее сигнализировать режим кодирования для PU и значения разности векторов движения для вычисленного вектора движения, как описано в настоящем раскрытии.
[0025] Аналогично, видео декодер может использовать информацию, указывающую режим предсказания, включенный в кодированный поток битов, чтобы сформировать данные предсказания для кодированных блоков. Данные могут далее включать в себя точность вектора движения, так же как индикацию дробной пиксельной позиции, на которую вектор движения указывает (например, пиксельная позиция в одну восьмую для опорного кадра или опорной вырезки).
[0026] Устройство кодирования видео, такое как видео кодер или видео декодер, может определить предсказывающий вектор движения для единицы кодирования (такой как кадр, вырезка или блок). Устройство кодирования видео может использовать x- и y- компоненты предсказывающего вектора движения (также называемого предсказателем вектора движения), чтобы вычислить значения разности векторов движения вектора движения для текущего блока. Устройство кодирования видео может реализовать способы настоящего раскрытия, чтобы совместно кодировать значения разности векторов движения для векторов движения, которые могут иметь суб-пиксельную точность.
[0027] Как описано выше, данные предсказания PU для того, чтобы формировать предсказывающий блок, могут быть основаны на ранее кодированных данных пространственно соседних CU или CU, соседних во времени кадров, которые были ранее закодированы. Видео кодер может вычислить вектор движения PU, который указывает местоположение предсказывающего блока для соответствующей CU во временно отдельном ранее кодированном кадре. Видео кодер может далее вычислить значение разности векторов движения для этого вектора движения, чтобы закодировать вектор движения. Значение разности векторов движения может обычно соответствовать разности между вычисленным вектором движения и предсказателем вектора движения. Вектор движения для текущего блока может иметь x- компоненту (MV_x) для горизонтального смещения, и y- компоненту (MV_y) для вертикального смещения. Предсказатель вектора движения может иметь x- компоненту p_x и y- компоненту p_y. Затем предсказатель вектора движения может быть определен как <MV_x-p_x, MV_y-p_y>.
[0028] Настоящее раскрытие обеспечивает способы для совместного кодирования x- компоненты и y- компоненты значения разности векторов движения. В настоящем раскрытии совместное кодирование может относиться к способам кодирования, в которых информация, относящаяся к x- и y- компонентам значения разности векторов движения, перемежается. Информация, относящаяся к разности векторов движения, может включать в себя значение, которое представляет, является ли компонент разности векторов движения нулем, одним или более значениями, которые представляют значение знака x- и/или y- компонент, и одним или более значениями, представляющими абсолютное значение x- и y- компонент значения разности векторов движения, в качестве некоторых примеров.
[0029] В соответствии со способами настоящего раскрытия, информация, относящаяся к одному или обеим компонентам значения разности векторов движения, могут быть закодированы переменным способом таким образом, что вся информация, относящаяся к одной компоненте разности векторов движения, не должна быть закодирована прежде кодирования информации, относящейся к другой компоненте разности векторов движения. Другими словами, элемент x- компоненты, такой как, имеет ли x- компонента величину больше чем нуль, может перемежаться с соответствующим элементом y- компоненты. Совместное кодирование x- и y- компонент разности векторов движения контрастирует с отдельным кодированием всей информации, относящейся к одной из x- или y- компонент значения разности векторов движения, например, согласно соглашению в ITU-T H.264. Совместное кодирование x- и y- компонент значений разности векторов движения может уменьшить сложность потока битов кодирования видео, что может привести к более низкой частоте следования битов для закодированного видео, так же как и другим потенциальным преимуществам, описанным здесь.
[0030] При кодировании видео согласно обычному стандарту ITU-T H.264, вектора движения могут иметь четверть-пиксельную (то есть в одну четверть пикселя) точность. В некоторых случаях точность в одну восьмую пикселя (то есть, одну-восьмую пикселя) может обеспечить некоторые преимущества. Тестовая модель кодирования видео высокой эффективности (HM) имеет возможность сформировать блоки предсказания, используя вектора движения, имеющие пиксельную точность в одну восьмую. В частности, HM обеспечивает способность адаптивно выбрать или четверть-пиксельную точность или пиксельную точность в одну восьмую. Таким образом, вектора движения могут иметь адаптивную точность, также называемую разрешением вектора движения. Это дробная, или суб-целочисленная, пиксельная точность может быть использована для определения вектора движения относительно блока интерполированных пиксельных значений в ранее закодированном кадре.
[0031] Настоящее раскрытие также обеспечивает способы для выбора конкретных случаев, в которых вектора движения в одну четверть или одну восьмую пиксельной точности могут использоваться, и как точность вектора движения может быть сигнализирована для конкретного вектора движения. В частности, способы настоящего раскрытия направлены на выбор разрешения вектора движения, и сигнализации этого разрешения, используя флаг разрешения движения в некоторых случаях. Настоящее раскрытие также обеспечивает способы для совместной сигнализации x- и y- компонент конкретного вектора движения.
[0032] Настоящее раскрытие описывает несколько способов, относящихся к кодированию вектора движения, таких как объединенное кодирование значений разности векторов движения и сигнализация точности, амплитуды и знака одного или более значений разности векторов движения. Способы настоящего раскрытия могут быть выполнены во время процесса кодирования, выполненного устройством кодирования видео, таким как видео кодер или видео декодер. В настоящем раскрытии термин ″кодирование″ относится к кодированию, которое происходит в кодере, или декодированию, которое происходит в декодере. Точно так же, термин ″кодер″ относится к кодеру, декодеру, или объединенному кодеру/декодеру (кодеку). Термины ″кодер″, ″кодировщик″, ″декодер″ и ″кодек″ все относятся к конкретным машинам, разработанным для кодирования (кодирования и/или декодирования) видео данных, совместимых с этим раскрытием.
[0033] Фиг.1 является блок-схемой, иллюстрирующей примерную систему 10 кодирования и декодирования видео, которая может использовать способы для совместной сигнализации векторов движения. Вектора движения могут иметь суб-пиксельную точность. Как показано на Фиг.1, система 10 включает в себя устройство-источник 12, которое передает закодированное видео на устройство 14 назначения через коммуникационный канал 16. Устройство-источник 12 и устройство 14 назначения могут охватывать любое из широкого диапазона устройств. В некоторых случаях устройство-источник 12 и устройство 14 назначения могут содержать устройства беспроводной связи, такие как беспроводные телефонные трубки, так называемые сотовые или спутниковые радиотелефоны, или любые беспроводные устройства, которые могут передавать видео информацию по коммуникационному каналу 16, когда коммуникационный канал 16 является беспроводным. Способы настоящего раскрытия, однако, которые касаются совместного кодирования, например, совместной сигнализации и/или интерпретации совместно сигнализированного значения, значений разности векторов движения, которые могут иметь суб-пиксельную точность, не обязательно ограничены беспроводными приложениями или параметрами настройки. Например, эти способы могут относиться к передачам телевизионного вещания, передачам кабельного телевидения, передачам спутникового телевидения, интернет- передачам видео, кодированному цифровому видео, которое закодировано на запоминающем носителе или другим сценариям. Соответственно, коммуникационный канал 16 может содержать любую комбинацию беспроводного, проводного или запоминающего носителя, подходящую для передачи или хранения кодированных видео данных.
[0034] В примере согласно Фиг.1 устройство-источник 12 включает в себя видео источник 18, видео кодер 20, модулятор/демодулятор (модем) 22 и передатчик 24. Устройство 14 назначения включает в себя приемник 26, модем 28, видео декодер 30 и устройство 32 отображения. В соответствии с этим раскрытием, видео кодер 20 из устройства-источника 12 может быть сконфигурирован, чтобы применять эти способы для сигнализации разностей векторов движения, которые могут иметь суб-пиксельную точность. В других примерах устройство-источник и устройство назначения могут включать в себя другие компоненты или компоновки. Например, устройство-источник 12 может принимать видео данные из внешнего видео источника 18, такого как внешняя камера. Аналогично, устройство 14 назначения может взаимодействовать с внешним устройством отображения вместо включения интегрированного устройства отображения.
[0035] Иллюстрированная система 10 согласно Фиг.1 является просто одним примером. Способы для совместной сигнализации точности разностей векторов движения могут быть выполнены любым устройство цифрового кодирования и/или декодирования видео. Хотя в целом способы настоящего раскрытия выполняются устройством кодирования видео, эти способы могут также быть выполнены видео кодером/декодером, типично называемым как ″кодек″. Кроме того, способы настоящего раскрытия могут также быть выполнены препроцессором видео. Устройство-источник 12 и устройство 14 назначения являются просто примерами таких устройств кодирования, в которых устройство-источник 12 генерирует кодированные видео данные для передачи на устройство 14 назначения. В некоторых примерах устройства 12, 14 могут работать по существу симметричным образом таким образом, что каждое из устройств 12, 14 включают в себя компоненты кодирования и декодирования видео. Следовательно, система 10 может поддерживать одностороннюю или двухстороннюю передачу видео между видео устройствами 12, 14, например, для потоковой передачи видео, воспроизведения видео, вещания видео или видео телефонии.
[0036] Видео источник 18 из устройства-источника 12 может включать в себя устройство захвата видео, такое как видео камера, видео архив, содержащее ранее захваченное видео, и/или подачу видео от поставщика видео контента. В качестве дальнейшей альтернативы, видео источник 18 может генерировать основанные на компьютерной графике данные в качестве исходного видео или комбинацию «живого» видео, архивированного видео и генерируемого компьютером видео. В некоторых случаях, если видео источник 18 является видео камерой, устройство-источник 12 и устройство 14 назначения могут сформировать так называемые камерофоны или видео телефоны. Как упомянуто выше, однако, способы, описанные в настоящем раскрытии, могут быть применимыми к кодированию видео вообще, и могут быть применены к беспроводным и/или проводным приложениям. В каждом случае захваченное, предварительно захваченное или генерируемое компьютером видео может быть кодировано видео кодером 20. Кодированная видео информация может затем модулироваться модемом 22 согласно стандарту связи и передаваться на устройство 14 назначения через передатчик 24. Модем 22 может включать в себя различные смесители, фильтры, усилители или другие компоненты, разработанные для модуляции сигнала. Передатчик 24 может включать в себя схемы, разработанные для того, чтобы передавать данные, включая усилители, фильтры и одну или более антенн.
[0037] Приемник 26 из устройства 14 назначения принимают информацию по каналу 16, и модем 28 демодулирует эту информацию. Снова, процесс кодирования видео может реализовать один или более способов, описанных здесь, для сигнализации разностей векторов движения, которые могут иметь суб-пиксельную точность. Информация, переданная по каналу 16, может включать в себя информацию синтаксиса, определенную видео кодером 20, которая также используется видео декодером 30, которая включает в себя элементы синтаксиса, которые описывают характеристики и/или обработку макроблоков и других единиц кодирования, например, GOP. Устройство 32 отображения отображает декодированные видео данные пользователю, и может содержать любое из множества устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED), или другой тип устройства отображения.
[0038] В примере согласно Фиг.1 коммуникационный канал 16 может содержать любой беспроводной или проводной коммуникационный носитель, такой как радиочастотного (РЧ) спектра или одну или более физических линий передачи, или любую комбинацию беспроводного и проводного носителей. Коммуникационный канал 16 может являться частью основанной на передаче пакетов сети, такой как локальная сеть, региональная сеть или глобальная сеть, такая как Интернет. Коммуникационный канал 16 обычно представляет любой подходящий коммуникационный носитель или коллекцию различных коммуникационных носителей для того, чтобы передавать видео данные от устройства-источника 12 на устройство 14 назначения, включая любую подходящую комбинацию проводного или беспроводного носителей. Коммуникационный канал 16 может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезным, чтобы облегчить связь от устройства-источника 12 к устройству 14 назначения. В других примерах устройство-источник 12 может сохранять кодированные данные на носитель данных, вместо того, чтобы передавать эти данные. Аналогично, устройство 14 назначения может быть сконфигурировано, чтобы извлечь закодированные данные из носителя данных.
[0039] Видео кодер 20 и видео декодер 30 могут работать согласно стандарту сжатия видео, такому как предстоящий стандарт Кодирования видео высокой эффективности ITU-T (HEVC), также называемый ″H.265″. HEVC не был сделан заключительным, таким образом, видео кодер 20 и декодер 30 могут работать согласно последнему проекту HEVC, называемого Тестовой Моделью кодирования видео высокой эффективности (HM). Способы настоящего раскрытия, однако, не ограничены никаким конкретным стандартом кодирования. Другие примеры включают в себя MPEG-2 и ITU-T H.263, и ITU-T H.264. Хотя не показано на Фиг.1, в некоторых аспектах видео кодер 20 и видео декодер 30 могут каждый интегрироваться с аудио кодером и декодером, и могут включать в себя соответствующие блоки MUX-DEMUX (мультиплексоров - демультиплексоров), или другое аппаратное обеспечение и программное обеспечение, чтобы выполнять кодирование как аудио так и видео в общем потоке данных или отдельных потоках данных. Если применимо, блоки MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223, или другим протоколам, таким как протокол дейтаграмм пользователя (UDP).
[0040] Стандарт HEVC в настоящее время формулируется группой экспертов по кодированию видео ITU-T (VCEG) вместе с группой экспертов по движущимся изображениям ISO/IEC (MPEG) как продукт коллективного товарищества, известного как объединенная совместная команда по кодированию видео (JCT-VC). HM предполагает несколько возможностей устройств кодирования видео по сравнению с устройствами согласно предыдущим стандартом кодирования, таким как ITU-T H.264/AVC. Например, тогда как H.264 обеспечивает девять режимов кодирования с внутренним предсказанием, HM обеспечивает целых тридцать четыре режима кодирования с внутренним предсказанием.
[0041] Видео кодер 20 и видео декодер 30 каждый может быть реализован как любая из множества подходящих схем кодера, таких как один или более микропроцессоров, цифровых сигнальных процессоров (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретной логики, программного обеспечения, аппаратного обеспечения, программно-аппаратных средств или любых их комбинаций. Каждый из видео кодера 20 и видео декодера 30 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрированным как часть объединенного кодера/декодера (кодека) в соответствующих камере, компьютере, мобильном устройстве, устройстве абонента, устройстве вещания, телевизионной приставке, сервере или подобном.
[0042] Видео последовательность типично включает в себя ряд видео кадров. Группа картинок (GOP) обычно содержит последовательность из одного или более видео кадров. GOP может включать данные синтаксиса в заголовке GOP, заголовке одного или более кадров GOP, или в другом месте, которые описывают множество кадров, включенных в GOP. Каждый кадр может включать в себя данные синтаксиса кадра, которые описывают режим кодирования для соответствующего кадра. Видео кодер 20 типично оперирует над видео блоками, также называемыми единицами CU, в пределах индивидуальных видео кадров, чтобы закодировать видео данные. Видео блок может соответствовать LCU или сегменту для LCU. Видео блоки могут иметь фиксированные или переменные размеры, и могут отличаться по размеру согласно указанному стандарту кодирования. Каждый видео кадр может включать в себя множество вырезок. Каждая вырезка может включать в себя множество единиц LCU, которые могут быть скомпонованы в сегменты, также называемые суб-CU.
[0043] В качестве примера, стандарт ITU-T H.264 поддерживает внутреннее предсказание в различных размерах блока, таких как 16 на 16, 8 на 8, или 4 на 4 для компонент яркости, и 8x8 для компонент насыщенности цвета, так же как внешнее предсказание в различных размерах блока, таких как 16×16, 16×8, 8×16, 8×8, 8×4, 4×8 и 4×4 для компонент яркости и соответствующих масштабированных размеров для компонент насыщенности цвета. В настоящем раскрытии ″N×N″ и ″N на N″ могут использоваться взаимозаменяемо, чтобы относиться к измерениям в пикселях блока в терминах вертикальных и горизонтальных измерений, например, 16×16 пикселей или 16 на 16 пикселей. Обычно блок 16×16 будет иметь 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Аналогично, блок N×N обычно имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целочисленное значение. Пиксели в блоке могут быть скомпонованы в рядах и колонках. Кроме того, блоки не обязательно должны иметь то же количество пикселей в горизонтальном направлении, как в вертикальном направлении. Например, блоки могут содержать N×M пикселей, где М не обязательно равно N.
[0044] HEVC именует блок видео данных как единицу кодирования (CU), которая может включать в себя одну или более единиц предсказания (PU) и/или одну или более единиц преобразования (TU). Данные синтаксиса в пределах потока битов могут определить наибольшую единицу кодирования (LCU), которая является наибольшей единицей кодирования в терминах количества пикселей. Вообще, CU имеет цель, аналогичную макроблоку в H.264, за исключением того, что CU не имеет различий в размере. Таким образом, CU может быть разделена на суб-CU. Вообще, ссылки в настоящем раскрытии на CU могут относиться к наибольшей единице кодирования картинки или суб-CU в LCU. LCU может быть разделена в единицы суб-CU, и каждая суб-CU может быть далее разделена в единицы суб-CU. Данные синтаксиса для потока битов могут определить максимальное количество раз, сколько LCU может быть разделена, называемое глубиной CU. Соответственно, поток битов может также определить наименьшую единицу кодирования (SCU). Настоящее раскрытие также использует термин ″блок″, чтобы относиться к любой из CU, PU, или TU.
[0045] LCU может быть ассоциирована со структурой данных квадродерева. Вообще, структура данных квадродерева включает в себя один узел в CU, где корневой узел соответствует LCU. Если CU разделена на четыре единицы суб-CU, узел, соответствующий CU, включает в себя четыре листовых узла, каждый из которых соответствует одной из единиц суб-CU. Каждый узел структуры данных квадродерева может обеспечить данные синтаксиса для соответствующей CU. Например, узел в квадродереве может включать в себя флаг разделения, указывая, разделена ли CU, соответствующая узлу, на единицы суб-CU. Элементы синтаксиса для CU могут быть определены рекурсивно, и могут зависеть от того, разделена ли CU на единицы суб-CU. Если CU не разделяется далее, на нее ссылаются как листовую CU. В настоящем раскрытии 4 единицы суб-CU листовой CU будут также упоминаться как листовые единицы CU, хотя нет явного разделения первоначальной листовой CU. Например, если CU с размером 16×16 не будет разделена далее, то четыре единицы 8×8 суб-CU будут также упоминаться как листовые CU, хотя 16×16 CU никогда не была разделена.
[0046] Кроме того, единицы TU листовых CU также могут быть ассоциированы с соответствующими структурами данных квадродерева. Таким образом, листовая CU может включать в себя квадродерево, указывающее, как листовая CU разделена на единицы TU. Настоящее раскрытие относится к квадродереву, указывающему, как LCU разделена как квадродерево CU и квадродерево, указывающее, как листовая CU разделена на единицы TU в качестве квадродерева TU. Корневой узел квадродерева TU обычно соответствует листовой CU, в то время как корневой узел квадродерева CU обычно соответствует LCU. Единицы TU квадродерева TU, которые не разделены, упоминается как листовые TU.
[0047] Листовая CU может включать в себя одну или более единиц предсказания (PU). Обычно PU представляет всю или часть соответствующей CU, и может включать в себя данные для того, чтобы извлечь опорную выборку для этой PU. Например, когда PU является кодированной во внешнем режиме, PU может включать в себя данные, определяющие вектор движения для этой PU. Данные, определяющие вектор движения, могут описывать, например, горизонтальную компоненту вектора движения, вертикальную компоненту вектора движения, разрешение для вектора движения (например, пиксельную точность в одну четверть или пиксельную точность в одну восьмую), опорный кадр, на который указывает вектор движения, и/или опорный список (например, список 0 или список 1) для вектора движения. Данные для листовой CU, определяющие единицы(единицу) PU, могут также описать, например, сегментирование CU в одну или более единиц PU. Режимы сегментирования могут отличаться в зависимости от того, не кодирована ли CU, кодирована в режиме внутреннего предсказания, или кодирована в режиме внешнего предсказания. Для внутреннего кодирования PU может быть обработана также как листовая единица преобразования, описанная ниже.
[0048] Листовая CU может включать в себя одну или более единиц преобразования (единицы TU). Единицы преобразования могут быть определены, используя структуру квадродерева TU, как описано выше. Таким образом, флаг разделения может указывать, разделена ли листовая CU на четыре единицы преобразования. Затем, каждая единица преобразования может быть разделена далее на 4 единицы суб-TU. Когда TU далее не разделяется, она может упоминаться как листовая TU. Обычно для внутреннего кодирования все листовые TU, принадлежащие листовой CU, совместно используют один и тот же режим внутреннего предсказания. То есть один и тот же режим внутреннего предсказания обычно применяется, чтобы вычислить предсказанные значения для всех единиц TU листовой CU. Для внутреннего кодирования видео кодер может вычислить остаточное значение для каждой листовой TU, используя режим внутреннего предсказания, в качестве разности между частью предсказывающих значений, соответствующих этой TU, и первоначальным блоком. Остаточное значение может быть преобразовано, квантовано и сканировано. Для внешнего кодирования видео кодер может выполнять предсказание на уровне PU и может вычислить остаток для каждой PU. Остаточные значения, соответствующие листовой CU, могут быть преобразованы, квантованы и сканированы. Для внешнего кодирования листовая TU может быть больше или меньше, чем PU. Для внутреннего кодирования PU может быть совместно расположена с соответствующей листовой TU. В некоторых примерах максимальный размер листовой TU может быть размером соответствующей листовой CU.
[0049] В целом настоящее раскрытие использует термины CU и TU, чтобы ссылаться на листовую CU и листовую TU, соответственно, если не указано иначе. В целом способы настоящего раскрытия касаются преобразования, квантования, сканирования и энтропийного кодирования данных в CU. В качестве примера, способы настоящего раскрытия включают в себя выбор преобразования для использования, чтобы преобразовать остаточное значение внутренне предсказанного блока на основании режима внутреннего предсказания, использованного для предсказания блока. Настоящее раскрытие также использует термин ″направленное преобразование″, или ″задуманное преобразование″, чтобы ссылаться на такое преобразование, которое зависит от направления режима внутреннего предсказания. То есть, видео кодер может выбрать направленное преобразование, чтобы относиться к единице преобразования (TU). Как отмечено выше, внутреннее предсказание включает в себя предсказание TU текущей CU в картинке из ранее кодированных единиц CU и единиц TU той же картинки. Более конкретно, видео кодер может внутренне предсказать текущую TU картинки, используя конкретный режим внутреннего предсказания.
[0050] Во время режимов внешнего предсказания видео кодер 20 может определить разрешение, такое как пиксельное разрешение в 1/4 (одну четверть) или в 1/8 (одну восьмую), для конкретного вектора движения единицы PU. Это разрешение может быть определено, используя способ, который пытается минимизировать величину ошибки между предсказателем вектора движения и вычисленным вектором движения для PU в CU, который может быть вектором движения, используемым для предсказания смещения ранее закодированного кадра.
[0051] Видео кодер 20 может определить точность для предсказателя вектора движения, а также смещение вектора, который может включать в себя x- компоненту, p_x, и y- компоненту, p_y. Видео кодер 20 может вычислить разность векторов движения, соответствующую разности между предсказателем вектора движения и вычисленным вектором движения. Разность векторов движения (называемая "MVD"), может иметь x- компоненту, mvd_x и y- компоненту, mvd_y. На основании величины mvd_x, и mvd_y, точности векторов (то есть пиксельной точности в одну четверть или одну восьмую), и порогового значения, видео кодер 20 может быть сконфигурирован, чтобы совместно кодировать одно или более значений, относящихся к x- и y- компонентами значения разности векторов движения.
[0052] В соответствии со способами настоящего раскрытия, видео кодер 20 и/или видео декодер 30 может быть сконфигурирован, чтобы совместно кодировать информацию, относящуюся к разностям векторов движения для блока. Совместное кодирование может относиться к способам кодирования, в которых информация, относящаяся к x- и y- компонентам значения разности векторов движения перемежается. Информация может включать в себя информацию, указывающую, больше ли величина, например, абсолютное значение, этих компонент, чем нуль, знак для компонент, когда абсолютное значение соответствующей компоненты больше чем нуль, и информацию, указывающую абсолютное значение компоненты, когда абсолютное значение больше, чем нуль. Совместное кодирование одного или более значений разности векторов движения может уменьшить сложность потока битов кодирования видео, что может обеспечить преимущества, описанные здесь. Подобно видео кодеру 20, видео декодер 30 может принять закодированный видео поток битов и может работать по существу обратным способом видео кодеру 20. Например, видео декодер 30 может принять закодированные значения для MVD, декодировать совместно закодированные значения, и вычислить вектор движения для блока как сумму MVD и предсказателя вектора движения для блока.
[0053] В целом x- компонента значения разности векторов движения может упоминаться как "MVD_x,", в то время как y- компонента значения разности векторов движения может упоминаться как "MVD_y." Значение разности векторов движения для блока видео данных, например, PU, может быть описано как <MVD_x, MVD_y>. Вообще, MVD_x соответствует разности между x- компонентой вектора движения для блока и x- компонентой предсказателя вектора движения, выбранного для этого блока. Аналогично, MVD_y соответствует разности между y- компонентой вектора движения для блока и y- компонентой предсказателя вектора движения, выбранного для блока. Таким образом, видео кодер 20 может вычислить MVD_x, вычисляя разность между x- компонентой вектора движения для блока и x- компонентой предсказателя вектора движения для блока, и MVD_y, вычисляя разность между y- компонентой вектора движения для блока и y- компонентой предсказателя вектора движения для этого блока. Аналогично, видео декодер 30 может восстановить вектор движения для блока, суммируя MVD_x с x- компонентой предсказателя вектора движения, и суммируя MVD_y с x- компонентой предсказателя вектора движения. Другими словами, предполагая, что MV_x и MV_y представляют x- компоненту и y- компоненту вектора движения, соответственно:
<mrow><mtable><mtr><mtd><mrow /></mtd><mtd><mrow /></mtd><mtd><mrow /></mtd></mtr></mtable></mrow>
MVD_x=MV_x-p_x; и
(1)
<mrow><mtable><mtr><mtd><mrow /></mtd><mtd><mrow /></mtd><mtd><mrow /></mtd></mtr></mtable></mrow>
MVD_y=MV_x-p_y.
(2)
[0054] В некоторых примерах видео кодер 20 может кодировать, например, сигнал, информацию для значения разности векторов движения для блока совместно. Например, видео кодер 20 может кодировать информацию, указывающую то, больше ли абсолютное значение MVD_x, то есть, |MVD_x|, чем нуль, с последующей информацией, указывающей то, больше ли абсолютное значение MVD_y, то есть, |MVD_y|, чем нуль. Такая информация может включать в себя, например, флаги, представляющие то, больше ли x- и y- компоненты значения MVD чем нуль, соответственно. Видео кодер 20 может также сигнализировать значение, представляющее знак, для MVD_x после сигнализации флага, представляющего то, больше ли MVD_y чем нуль, предполагая, что флаг, представляющий, больше ли MVD_x чем нуль, указывает, что MVD_x, фактически, больше чем нуль. Видео кодер 20 не должен сигнализировать знак для MVD_x, когда |MVD_x| равно нулю.
[0055] После любого из значения, указывающего знак для MVD_x (когда сигнализировано), или информации, указывающей, больше ли |MVD_y|, чем нуль (когда знак MVD_x не сигнализирован), видео кодер 20 может сигнализировать знак для MVD_y, снова предполагая, что |MVD_y| больше чем нуль. Кроме того, видео кодер 20 может затем сигнализировать информацию, представляющую абсолютные значения MVD_x и/или MVD_y, в зависимости от того, или любой или оба из MVD_x и MVD_у имеют абсолютные значения, больше чем нуль. Снова, информация, представляющая абсолютные значения MVD_x и MVD_y, не должна быть сигнализирована, когда ранее сигнализированные значения указывают, что абсолютные значения любого или обоих из MVD_x и MVD_y равны нулю.
[0056] Аналогичным образом видео декодер 30 может кодировать (например, декодировать и интерпретировать), данные, представляющие то, имеет ли MVD_x абсолютное значение, больше чем нуль, с последующими данными, представляющими то, имеет ли MVD_y абсолютное значение, больше чем нуль. Когда данные указывают, что абсолютное значение MVD_x больше чем нуль, видео декодер 30 может быть сконфигурирован, чтобы затем синтаксически разобрать информацию, представляющую знак для MVD_x. После синтаксического разбора информации, представляющей знак для MVD_x, или после определения, что |MVD_x| равно нулю, видео декодер 30 может быть сконфигурирован, чтобы синтаксически разобрать информацию, представляющую знак для MVD_y, когда данные указывают, что абсолютное значение MVD_y больше чем нуль. Аналогично, видео декодер 30 может затем синтаксически разобрать информацию, представляющую абсолютные значения для MVD_x и MVD_y, соответственно, снова предполагая, что абсолютные значения MVD_x и MVD_y больше чем нуль.
[0057] Видео декодер 30 может быть сконфигурирован, чтобы не ожидать информацию, касающуюся знака и абсолютного значения любого компонента, для которого данные указывают, что компонента имеет абсолютное значение, не большее чем нуль (то есть, равный нулю). То есть видео декодер 30 может быть сконфигурирован, чтобы синтаксически разобрать другие видео данные, например, другие данные для этого блока, без приема или кодирования данных для знаков и абсолютных значений компонент MVD, которые имеют абсолютные значения, равные нулю, как указано ранее сигнализированной информацией.
[0058] Совместное кодирование x- и y- компонент таким образом может достичь некоторых преимуществ перед кодированием данных для x- и y- компонент по отдельности. Например, совместное кодирование x- и y- компонент может увеличить производительность во время энтропийного кодирования. В качестве конкретного примера, совместное кодирование значения разности векторов движения может увеличить производительность энтропийного кодирования, когда видео кодер 20 или декодер 30 использует CABAC, чтобы выполнить энтропийное кодирование. Когда информация, представляющая абсолютное значение x- и y- компонент значений разности векторов движения, совместно кодирована, видео кодер 20 или декодер 30 может быть в состоянии энтропийно кодировать x- и y- компоненты значения разности векторов движения, совместно используя режим обхода CABAC. Режим обхода CABAC может улучшить производительность энтропийного кодирования. Энтропийное кодирование совместно кодированной информации, представляющей x- и y- компоненты, может позволить видео кодеру 20 или декодеру 30 энтропийно кодировать оба элемента синтаксиса, по очереди используя режим обхода CABAC, что может улучшить эффективность энтропийного кодирования относительно отдельного энтропийного кодирования x- и y- компонент. Хотя описано в предыдущем примере относительно CABAC, совместное кодирование x- и y- компонент значений разности векторов движения может также повысить эффективность энтропийного кодирования и/или производительность при использовании других способов энтропийного кодирования, таких как VLC, и CAVLC.
[0059] После внутренне предсказывающего или внешне предсказывающего кодирования, чтобы сформировать предсказывающие данные и остаточные данные, и после любого преобразования (такого как 4×4 или 8×8 целочисленное преобразование, используемое в H.264/AVC или дискретное косинусное преобразование DCT), чтобы сформировать коэффициенты преобразования, может быть выполнено квантование коэффициентов преобразования. Квантование в целом относится к процессу, в котором коэффициенты преобразования квантуются, чтобы возможно уменьшить объем данных, использованных для представления коэффициентов. Процесс квантования может уменьшить глубину в битах, ассоциированную с некоторыми или всеми коэффициентами. Например, n-битное значение может быть округлено в меньшую сторону до m-битового значения во время квантования, где n больше чем m.
[0060] После квантования может быть выполнено энтропийное кодирование квантованных данных, например, согласно адаптивному к контенту кодированию с переменной длиной кода (CAVLC), контекстно-адаптивному двоичному арифметическому кодированию (CABAC), или другой методологии энтропийного кодирования. Блок обработки, сконфигурированный для энтропийного кодирования, или другой блок обработки, может выполнять другие функции обработки, такие как кодирование длин серий нулей квантованных коэффициентов и/или генерирование информации синтаксиса, такой как значения шаблона кодированных блоков (CBP), тип макроблока, режим кодирования, максимальный размер макроблока для кодированного блока (такого как кадр, вырезка, макроблок или последовательность), или подобное.
[0061] Видео кодер 20 может также послать данные синтаксиса, такие как основанные на блоке данные синтаксиса, основанные на кадре данные синтаксиса, и основанные на GOP данные синтаксиса, к видео декодеру 30, например, в заголовке кадра, заголовке блока, заголовке вырезки или заголовке GOP. Данные синтаксиса GOP могут описывать ряд кадров в соответствующей GOP, и данные синтаксиса кадра могут указывать режим кодирования/предсказания, использованный для кодирования соответствующего кадра.
[0062] Видео кодер 20 и видео декодер 30 каждый может быть реализован как любая из множества подходящих схем кодера или декодера, когда применимо, таких как один или более микропроцессоров, цифровые сигнальные процессоры (DSP), специализированные интегральные схемы (ASIC), программируемые пользователем вентильные матрицы (FPGA), дискретные логические схемы, программное обеспечение, аппаратное обеспечение, программно-аппаратные средства или любые их комбинации. Каждый из видео кодера 20 и видео декодера 30 может быть включен в один или более кодеров или декодеров, любой из которых может интегрироваться как часть объединенного видео кодера/декодера (кодек). Устройство, включающее в себя видео кодер 20 и/или видео декодер 30, может содержать интегральную схему, микропроцессор и/или устройство беспроводной связи, такое как сотовый телефон.
[0063] Фиг.2 является блок-схемой, иллюстрирующей пример видео кодера 20, который может реализовать способы для совместной сигнализации векторов движения, которые могут иметь суб-пиксельную точность. Видео кодер 20 может выполнять внутреннее и внешнее кодирование блоков в пределах видео кадров, включая единицы CU или единицы суб-CU в единицах CU. Внутреннее кодирование полагается на пространственное предсказание, чтобы уменьшить или удалить пространственную избыточность в видео в пределах заданного видео кадра. Внешнее кодирование полагается на временное предсказание, чтобы уменьшить или удалить временную избыточность в видео в пределах смежных кадров видео последовательности. Внутренний режим (I-режим) может относиться к любому из нескольких пространственно основанных режимов сжатия, и внешние режимы, такие как однонаправленное предсказание (режим P-) или двунаправленное предсказание (B-режим), могут относиться к любому из нескольких временно основанных режимов сжатия. Хотя компоненты для кодирования во внешнем режиме изображены на Фиг.2, нужно подразумевать, что видео кодер 20 может также включать в себя компоненты для кодирования во внутреннем режиме. Однако такие компоненты не иллюстрированы ради краткости и ясности.
[0064] Как показано на Фиг.2, видео кодер 20 принимает текущий видео блок в пределах видео кадра, который должен быть закодирован. В примере согласно Фиг.2 видео кодер 20 включает в себя блок 44 компенсации движения, блок 42 оценки движения, память 64 опорных кадров, сумматор 50, блок 52 обработки преобразования, блок 54 квантования и блок 56 энтропийного кодирования. Для реконструкции блока видео, видео кодер 20 также включает в себя блок 58 обратного квантования, блок 60 обратного преобразования и сумматор 62. Фильтр удаления блочности (не показан на Фиг.2) может также быть включен, чтобы фильтровать границы блока, чтобы удалить артефакты блочности из восстановленного видео. Если желательно, фильтр удаления блочности типично может фильтровать выходной сигнал сумматора 62.
[0065] Во время процесса кодирования видео кодер 20 принимает видео кадр, вырезку или CU, которые должны быть кодированы. Кадр или вырезка могут быть разделены на множественные видео блоки. Блок 42 оценки движения и блок 44 компенсации движения выполняют внешнее предсказывающее кодирование принятого видео блока относительно одного или более блоков в одном или более опорных кадрах, чтобы обеспечить временное сжатие. Блок 46 внутреннего предсказания может выполнять внутреннее предсказывающее кодирование принятого видео блока относительно одного или более соседних блоков в том же самом кадре или вырезке, что и блок, который должен быть закодирован, чтобы обеспечить пространственное сжатие. В соответствии со способами, описанными ниже, блок 42 оценки движения может определить точность для предсказателя вектора движения, который может быть определен на основании режима внутреннего или внешнего предсказания, который ранее определил блок 40 выбора режима. Блок 42 оценки движения или другой блок видео кодера 20, такой как блок 56 энтропийного кодирования, может далее определить разность векторов движения, соответствующую разности между предсказателем вектора движения и вычисленным вектором движения для PU принятого кадра, вырезки, или CU. Блок 56 энтропийного кодирования может далее кодировать информацию, относящуюся к разрешению, знаку и амплитуде разности векторов движения, а также другую информацию, относящуюся к объединенному кодированию вектора движения, как описано ниже.
[0066] Блок 40 выбора режима может выбрать один из режимов кодирования, внутренний или внешний, например, на основании результатов ошибки, и выдать результирующий внутренне- или внешне- кодированный блок к сумматору 50, чтобы генерировать остаточные данные блока, и к сумматору 62, чтобы восстановить закодированный блок для использования в качестве опорного кадра. Кроме того, блок 40 выбора режима может выбрать точность вектора движения для вектора движения. Например, блок 40 выбора режима может выбрать точность вектора движения для вектора движения на основании оптимизации ″искажение - скорость передачи″ (RDO), ассоциированной с векторами движения с суб-пиксельной точностью в одну четверть и суб-пиксельной точностью в одну восьмую. Вектора движения с пиксельной точностью в одну четверть могут требовать меньше битов для кодирования относительно векторов движения с пиксельной точностью в одну восьмую. Однако предсказывающий блок, указанный с вектором движения, закодированным с пиксельной точностью в одну четверть, может привести к большему объему остаточной информации по сравнению с предсказывающим блоком, закодированным с суб-пиксельной точностью в одну восьмую. Видео кодер 20 может выполнять RDO, чтобы оптимизировать количество битов (то есть скорость передачи в битах), использованную для кодирования конкретного вектора движения, в зависимости от остаточной информации (искажение), ассоциированной с разностью между предсказывающим блоком, указанным вектором движения, и блоком, в настоящее время кодируемым. На основании результата RDO блок 40 выбора режима может выбрать точность вектора движения, например, суб-пиксельную точность в одну четверть или одну восьмую, которая оптимизирует компромисс ″искажение - скорость передачи″.
[0067] Блок 44 компенсации движения может быть необходим, чтобы вычислить суб-пиксели, такие как суб-пиксели опорных кадров, при различной точности, например, одна восьмая и одна четверть суб-пикселя. Чтобы интерполировать суб-пиксели, блок 44 компенсации движения может использовать множество способов. В качестве примеров, блок 44 компенсации движения может использовать билинейную интерполяцию или использовать N-отводные фильтры с конечной импульсной характеристикой (FIR), чтобы интерполировать суб-пиксель. Когда устройство, такое как блок 44 компенсации движения, вычисляет значение для дробного пикселя посредством усреднения двух пикселей или суб-пикселей, он может округлить и/или масштабировать результирующее значение. В некоторых случаях блок 44 компенсации движения может усреднить значения для двух суб-пикселей, которые являются результатом усреднения до суб-целочисленного пикселя.
[0068] Блок 44 компенсации движения может вычислить значения для большего количества суб-целочисленных пиксельных позиций, таких как пиксельная позиция в одну восьмую, применяя фильтры интерполяции к наборам поддержки. Поддержка в целом относится к значениям для одного или более опорных пикселей, например, пикселей на общей линии или области. Эти пиксели могут соответствовать полным пиксельным позициям или суб-целочисленным пиксельным позициям, которые были ранее вычислены. В некоторых примерах блок 44 компенсации движения может вычислить значения для суб-целочисленных пикселей, используя билинейную интерполяцию, и может использовать аналогичные фильтры билинейной интерполяции, чтобы вычислить значения для двух или более различных суб-целочисленных пиксельных позиций, применяя один или более фильтров билинейной интерполяции к различным наборам поддержки, соответствующим суб-целочисленным пиксельным позициям.
[0069] В некоторых других случаях блок 44 компенсации движения может использовать N-отводный фильтр с конечной импульсной характеристикой (FIR), чтобы интерполировать суб-пиксельные значения. FIR, такой как фильтр Винера (Wiener) с 12 отводами или с 6 отводами, может использовать соседние пиксельные значения поддержки, чтобы интерполировать суб-целочисленное пиксельное значение. Пиксель поддержки является пиксельным или суб-пиксельным значением, используемое в качестве ввода в FIR. FIR может иметь одну или более размерностей. В одномерной FIR устройство, такое как блок 44 компенсации движения, может применить фильтр ко многим пикселям или суб-пикселям поддержки в линии, например, горизонтально, вертикально или под углом. В отличие от одномерной FIR, которая может использовать пиксели поддержки на прямой линии, двумерная FIR может использовать соседние пиксели или суб-пиксели поддержки, которые формируют квадрат или прямоугольник, чтобы вычислить интерполированное пиксельное значение.
[0070] Блок 42 оценки движения и блок 44 компенсации движения могут быть высоко интегрированными, но иллюстрированы отдельно в концептуальных целях. Оценка движения является процессом генерирования векторов движения, которые оценивают движение для видео блоков. Вектор движения, например, может указывать смещение блока предсказания в пределах предсказывающего опорного кадра (или другого кодированного блока) относительно текущего блока, кодируемого в пределах текущего кадра (или другого кодированного блока). Предсказывающий блок является блоком, который, как находят, близко соответствует блоку, который должен быть кодирован, в терминах пиксельной разности, которая может быть определена суммой абсолютных разностей (SAD), суммой разностей квадратов (SSD), или другими метриками разности. Вектор движения может также указывать смещение сегмента макроблока. Компенсация движения может вовлекать процесс выборки или генерирование предсказывающего блока на основании вектора движения, определенного посредством оценки движения. Снова, блок 42 оценки движения и блок 44 компенсации движения могут быть функционально интегрированными, в некоторых примерах.
[0071] Блок 42 оценки движения вычисляет вектор движения для видео блока внешне кодированного кадра, сравнивая видео блок с видео блоками опорного кадра в памяти 64 опорных кадров. Блок 44 компенсации движения может также интерполировать суб-целочисленные пиксели опорного кадра, например, I-кадра или P-кадра. В качестве примера, вектора движения могут быть предсказаны из двух списков опорных кадров: списка 0, который включает в себя опорные кадры, имеющие порядок отображения ранее, чем текущий кодируемый кадр, и списка 1, который включает в себя опорные кадры, имеющие порядок отображения позже, чем текущий кодируемый кадр. Поэтому, данные, хранящиеся в памяти 64 опорных кадров, могут быть организованы согласно этим спискам.
[0072] Блок 42 оценки движения сравнивает блоки одного или более опорных кадров из памяти 64 опорных кадров с блоком, который должен быть закодирован, текущего кадра, например, P-кадра или B-кадра. Когда опорные кадры в памяти 64 опорных кадров включают в себя значения для суб-целочисленных пикселей, вектор движения, вычисленный блоком 42 оценки движения, может относиться к местоположению суб-целочисленного пикселя одного из опорных кадров, сохраненных в памяти 64 опорных кадров. Блок 42 оценки движения и/или блок 44 компенсации движения могут также конфигурироваться, чтобы вычислить значения для суб-целочисленных пиксельных позиций опорных кадров, сохраненных в памяти 64 опорных кадров, если никакие значения для суб-целочисленных пиксельных позиций не сохранены в памяти 64 опорных кадров. Блок 42 оценки движения посылает вычисленный вектор движения в блок 56 энтропийного кодирования и блок 44 компенсации движения. Блок опорного кадра, идентифицированный вектором движения, может упоминаться как предсказывающий блок. Вектор движения, который указывает смещение предсказывающего блока относительно текущего блока, кодируемого в текущем кадре, может иметь x- компоненту mvd_x и y- компоненту mvd_y.
[0073] Блок 44 компенсации движения может вычислить данные предсказания на основании предсказывающего блока. Видео кодер 20 формирует остаточный видео блок, вычитая данные предсказания из блока 44 компенсации движения из первоначального кодируемого блока видео. Сумматор 50 представляет компонент или компоненты, которые выполняют эту операцию вычитания. Блок 52 обработки преобразования применяет преобразование, такое как дискретное косинусное преобразование (DCT) или концептуально подобное преобразование, к остаточному блоку, формируя видео блок, содержащий остаточные значения коэффициента преобразования. Блок 52 обработки преобразования может выполнять другое преобразование, такое как определенное по стандарту H.264, которые концептуально подобны DCT. Вейвлет преобразования, целочисленные преобразования, преобразование поддиапазонов, или другие типы преобразования также могут использоваться. В любом случае блок 52 обработки преобразования применяет преобразование к остаточному блоку, формируя блок остаточных коэффициентов преобразования. Преобразование может преобразовать остаточную информацию из области пиксельных значений в область преобразования, такую как частотная область. Блок 54 квантования квантует остаточные коэффициенты преобразования, чтобы далее уменьшить частоту следования в битах. Процесс квантования может уменьшить глубину в битах, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования может быть изменена посредством настройки параметра квантования.
[0074] После квантования блок 56 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования. Например, блок 56 энтропийного кодирования может выполнять адаптивное к контенту кодирование с переменной длиной кода (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), или другой способ энтропийного кодирования. Совместное кодирование x- и y- компонент значений разности векторов движения может позволить блоку 56 энтропийного кодирования достигать более высокой производительности энтропийного кодирования, используя CABAC. Блок 56 энтропийного кодирования может использовать режим обхода CABAC, чтобы увеличить производительность энтропийного кодирования совместно кодированных x- и y- компонент значений разности векторов движения относительно энтропийного кодирования отдельно кодированных x- и y- компонент значений разности векторов движения. После энтропийного кодирования блоком 56 энтропийного кодирования кодированное видео может быть передано на другое устройство или заархивировано для более поздней передачи или извлечения. В случае контекстно-адаптивного двоичного арифметического кодирования контекст может быть основан на соседних макроблоках.
[0075] В некоторых случаях блок 56 энтропийного кодирования или другой блок видео кодера 20 может быть сконфигурирован, чтобы выполнить другие функции кодирования, в дополнение к энтропийному кодированию. Например, блок 56 энтропийного кодирования может быть сконфигурирован, чтобы определить значения CBP для макроблоков и сегментов. Кроме того, в некоторых случаях блок 56 энтропийного кодирования может выполнять кодирование длин серий для коэффициентов в макроблоке или его сегменте. В частности, блок 56 энтропийного кодирования может применить зигзагообразное сканирование или другой шаблон сканирования, чтобы сканировать коэффициенты преобразования в макроблоке или сегменте и кодировать серии нулей для дальнейшего сжатия. Блок 56 энтропийного кодирования также может конструировать информацию заголовка с соответствующими элементами синтаксиса для передачи в закодированном видео потоке битов.
[0076] В соответствии с способами настоящего раскрытия, блок 54 квантования и блок 56 энтропийного кодирования могут совместно кодировать вектора движения, которые могут иметь суб-пиксельную точность, как описано ниже. В некоторых примерах блок квантования 45 и блок 56 энтропийного кодирования могут сигнализировать одно или более значений флага, которые представляют, являются ли x- и/или y- компоненты значения разности векторов движения нулем, одним или более значениями, которые представляют знак x- и/или y- компонент, когда эти компоненты имеют абсолютные значения, не равные нулю, и информацией, которая представляет абсолютное значение величины x- и y- компонент значения разности векторов движения, когда эти компоненты имеют абсолютные значения, не равные нулю. Блок квантования 45 и блок 56 энтропийного кодирования могут также сигнализировать флаг разрешения движения, который может представить суб-пиксельное разрешение вектора движения, а также пороговое значение, относящееся и к величине и к точности вектора движения.
[0077] Блок 58 обратного квантования и блок 60 обратного преобразования применяют обратное квантование и обратное преобразование, соответственно, чтобы восстановить остаточный блок в пиксельной области, например, для более позднего использования в качестве опорного блока. Блок 44 компенсации движения может вычислить опорный блок, суммируя остаточный блок с предсказывающим блоком одного из кадров из памяти 64 опорных кадров. Блок 44 компенсации движения может также применить один или более фильтров интерполяции к восстановленному остаточному блоку, чтобы вычислить суб-целочисленные пиксельные значения для использования в оценке движения. Сумматор 62 суммирует восстановленный остаточный блок с блоком предсказания со скомпенсированным движением, сформированным блоком 44 компенсации движения, чтобы сформировать восстановленный видео блок для хранения в памяти 64 опорных кадров. Восстановленный видео блок может использоваться блоком 42 оценки движения и блоком 44 компенсации движения в качестве опорного блока, чтобы внешне кодировать блок в последующем видео кадре.
[0078] Видео кодер 20 представляет пример видео кодера, конфигурируемого, чтобы кодировать видео данные, представляющие то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных, чем нуль, и закодировать видео данные, представляющие то, больше ли абсолютное значение y- компоненты значения разности векторов движения, чем нуль. Видео кодер 20 может быть сконфигурирован, чтобы кодировать видео данные, представляющие абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше, чем нуль, и кодировать видео данные, представляющие абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше, чем нуль. Видео кодер 20 может также конфигурироваться, чтобы кодировать видео данные, представляющие знак x- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, и кодировать знак y- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль.
[0079] Фиг.3 является блок-схемой, иллюстрирующей пример видео декодера 30, который декодирует кодированную видео последовательность. В примере согласно Фиг.3 видео декодер 30 включает в себя блок 70 энтропийного декодирования, блок 72 компенсации движения, блок 74 внутреннего предсказания, блок 76 обратного квантования, блок 78 обратного преобразования память 82 опорных кадров и сумматор 80. Видео декодер 30 в некоторых примерах может выполнять проход декодирования, в целом обратный к проходу кодирования, описанному относительно видео кодера 20 (Фиг.2). Блок 72 компенсации движения может генерировать данные предсказания, на основании векторов движения, принятых от блока 70 энтропийного декодирования.
Y
[0080] Блок 72 компенсации движения может использовать векторы движения, принятые в потоке битов, включая векторы движения, сигнализированные в соответствии с способами, описанными здесь, чтобы идентифицировать блок предсказания в одном из опорных кадров, сохраненных в памяти 82 опорных кадров. Блок 74 внутреннего предсказания может использовать режимы внутреннего предсказания, принятые в потоке битов, чтобы сформировать блок предсказания из пространственно смежных блоков. Блок 76 обратного квантования обратно квантует, то есть, деквантует, квантованные коэффициенты блоков, предоставленные в потоке битов и декодированные блоком 70 энтропийного декодирования. Процесс обратного квантования может включать в себя обычный процесс, например как определено стандартом декодирования H.264. Процесс обратного квантования может также включать в себя использование параметра квантования QP, вычисленного кодером 50 для каждого макроблока, чтобы определить степень квантования и, аналогично, степень обратного квантования, которое должно быть применено.
[0081] Блок 70 энтропийного декодирования и блок 76 обратного квантования могут также восстановить совместно кодированные значения разности векторов движения, интерпретируя различные элементы синтаксиса, включая флаги и другие значения, в закодированном потоке битов. В качестве примера, блок 70 энтропийного декодирования и блок 76 обратного квантования могут принять одно или более значений, которые представляют, больше ли x- и/или y- компоненты разности векторов движения чем нуль, флаг разрешения движения, который может указывать суб-пиксельное разрешение вектора движения, и пороговое значение, которое может указывать максимальную величину и/или разрешение значения разности векторов движения. В одном примере блок 70 энтропийного декодирования может декодировать совместно закодированные x- и y- компоненты значения разности векторов движения, используя CABAC в режиме обхода. Использование режима обхода CABAC может позволить блоку энтропийного кодирования 70 декодировать совместно закодированные значения разности векторов движения с увеличенной производительностью относительно энтропийного декодирования x- и y- компонент значений разности векторов движения отдельно. Блок 70 энтропийного декодирования и блок 76 обратного квантования могут также принять одно или более значений, которые представляют знак x- и/или y- компонент значения разности векторов движения, и значения, которые представляют абсолютное значение величины каждого компонента значения разности векторов движения. Блок 70 энтропийного декодирования и блок 76 обратного квантования могут использовать значения, которые представляют, больше ли x- и y- компоненты значений разности векторов движения чем нуль, а также значения, которые представляют абсолютное значение величины каждого компонента значения разности векторов движения, чтобы восстановить амплитуду, знак, точность, x- и y- компоненты значений разности векторов движения.
[0082] Блок 58 обратного преобразования применяет обратное преобразование, например, обратное DCT, обратное целочисленное преобразование, или концептуально подобный процесс обратного преобразования, к коэффициентам преобразования, чтобы сформировать остаточные блоки в пиксельной области. Блок 72 компенсации движения формирует данные блоки со скомпенсированным движением, возможно выполняя интерполяцию, основанную на фильтрах интерполяции. Идентификаторы для фильтров интерполяции, которые должны использоваться для оценки движения с суб-пиксельной точностью, могут быть включены в элементы синтаксиса. Блок 72 компенсации движения может использовать фильтры интерполяции, которые используются видео кодером 20 во время кодирования блока видео, чтобы вычислить интерполированные значения для суб-целочисленных пикселей опорного блока. Блок 72 компенсации движения может определить фильтры интерполяции, используемые видео кодером 20, согласно принятой информации синтаксиса, и использовать эти фильтры интерполяции, чтобы сформировать предсказывающие блоки.
[0083] Блок 72 компенсации движения использует часть информации синтаксиса, чтобы определить размеры макроблоков, использованных для кодирования кадра(ов) кодированной видео последовательности, информацию сегментов, которая описывает, как каждый макроблок кадра кодированной видео последовательности сегментирован, режимы, указывающие, как каждый сегмент кодирован, один или более опорных кадров (и списки опорных кадров) для каждого внешне кодированного макроблока или сегмента, и другую информацию, чтобы декодировать кодированную видео последовательность. В качестве примера, блок 72 компенсации движения может принять значение MVD и предсказатель вектора движения. Блок 72 компенсации движения может далее определить вычисленный вектор для текущего блока как сумму значения MVD и предсказателя вектора движения текущего блока. Вычисленный вектор движения для текущего блока может далее указывать местоположение блока предсказания. В некоторых примерах блок 72 компенсации движения может вычислить пиксельные значения для блока предсказания, например, когда вектор движения имеет суб-пиксельную точность, такую как пиксельную точность в одну четверть или одну восьмую.
[0084] Сумматор 80 суммирует остаточные блоки с соответствующими блоками предсказания, генерируемыми блоком 72 компенсации движения или блоком внутреннего предсказания, чтобы сформировать декодированные блоки. Если желательно, фильтр удаления блочности может также быть применен, чтобы фильтровать декодированные блоки, чтобы удалить артефакты блочности. Декодированные видео блоки затем сохраняются в памяти 82 опорных кадров, которая выдает опорные блоки для последующей компенсации движения и также формирует декодированное видео для представления на устройстве отображения (таком как устройство 32 отображения согласно Фиг.1).
[0085] На основании вектора движения для текущего блока блок компенсации движения может определить предсказывающий блок из одного или более кадров, сохраненных в памяти 82 опорных кадров. Блок 72 компенсации движения может быть необходим, чтобы вычислить суб-пиксели предсказывающего блока, который генерирует блок 72 компенсации движения. Блоки предсказания, такие как суб-пиксели опорных кадров, с различными точностями, например, в одну восьмую и одну четверть суб-пикселя. Чтобы интерполировать суб-пиксели, блок 72 компенсации движения может использовать множество способов. В качестве примеров, блок 72 компенсации движения может использовать билинейную интерполяцию или использовать N-отводные фильтры с конечной импульсной характеристикой (FIR), чтобы интерполировать суб-пиксель. Когда устройство, такое как блок 72 компенсации движения, вычисляет значение для дробного пикселя, усредняя два пикселя или суб-пикселя, он может округлить и/или масштабировать результирующее значение. В некоторых случаях блок 72 компенсации движения может усреднить значения для двух суб-пикселей, которые являются результатом усреднения до суб-целочисленного пикселя.
[0086] Блок 72 компенсации движения может вычислить значения для суб-целочисленных пиксельных позиций, таких как пиксельные позиции в одну восьмую, применяя фильтры интерполяции к наборам поддержки. Поддержка в целом относится к значениям для одного или более опорных пикселей, например, пикселей на общей линии или области. Пиксели могут соответствовать полным пиксельным позициям или суб-целочисленным пиксельным позициям, которые были ранее вычислены. В некоторых примерах блок 72 компенсации движения может вычислить значения для суб-целочисленных пикселей, используя билинейную интерполяцию, и может использовать аналогичные фильтры билинейной интерполяции, чтобы вычислить значения для двух или более различных суб-целочисленных пиксельных позиций, применяя один или более фильтров билинейной интерполяции к различным наборам поддержки, соответствующим суб-целочисленным пиксельным позициям.
[0087] В некоторых других случаях блок 42 компенсации движения может использовать N-отводный фильтр с конечной импульсной характеристикой (FIR), чтобы интерполировать суб-пиксельные значения. FIR, такой как фильтр Винера (Wiener) с 6 отводами или с 12 отводами, может использовать соседние пиксельные значения поддержки, чтобы интерполировать суб-целочисленное пиксельное значение. Пиксель поддержки является пиксельным или суб-пиксельным значением, используемое в качестве ввода в FIR. FIR может иметь одну или более размерностей. В одномерной FIR устройство, такое как блок 72 компенсации движения, может применить фильтр ко многим пикселям или суб-пикселям поддержки в линии, например, горизонтально, вертикально или под углом. В отличие от одномерной FIR, которая может использовать пиксели поддержки на прямой линии, двумерная FIR может использовать соседние пиксели или суб-пиксели поддержки, которые формируют квадрат или прямоугольник, чтобы вычислить интерполированное пиксельное значение.
[0088] Видео декодер 30 представляет пример видео кодера, конфигурируемого, чтобы декодировать видео данные, представляющие то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных чем нуль, и декодировать видео данные, представляющие то, больше ли абсолютное значение y- компоненты значения разности векторов движения чем нуль. Видео декодер 30 может быть сконфигурирован, чтобы декодировать видео данные, представляющие абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, и декодировать видео данные, представляющие абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль. Видео декодер 30 может также конфигурироваться, чтобы декодировать видео данные, представляющие знак x- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, и декодировать знак y- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль.
[0089] Фиг.4 является последовательностью операций, иллюстрирующей примерный способ для совместного кодирования x- и y- компонент значения разности векторов движения и энтропийного кодирования текущего блока. В способе 150 блок 42 оценки движения из видео кодера 20 может предсказать текущий блок (152). Как часть предсказания текущего блока, блок 42 оценки движения может вычислить вектор движения. Вектор движения может указывать смещение предсказывающего блока относительно текущего блока. Смещение вектора движения может иметь x- и y- компоненты, MV_x, и MV_y. Предсказывающий блок может близко соответствовать текущему блоку в терминах пиксельной разности, которая может быть определена суммой абсолютных разностей (SAD), суммой разностей квадратов (SSD), или другими метриками разности. В случае, когда текущий кадр является внешне предсказанным, предсказывающий блок может содержать блок другого кадра, такого как один из одного или более опорных кадров в памяти 64 опорных кадров согласно Фиг.2.
[0090] Блок 44 компенсации движения или другой блок видео кодера 20 могут затем определить предсказатель вектора движения для вектора движения текущего блока (154). Предсказатель вектора движения является вектором движения, который блок 44 компенсации движения использует, чтобы вычислить значения разности векторов движения для текущего блока. В некоторых примерах предсказатель вектора движения может быть вектором движения одного из множества блоков, которые граничат с PU текущего блока. Блок 44 компенсации движения может также определить предсказатель вектора движения из совместно расположенного блока одного из опорных кадров, сохраненных в памяти 64 опорных кадров. Предсказатель вектора движения может иметь x- компоненту p_x и y-компоненту p_y. Видео кодер 20 может определить предсказатель вектора движения таким образом, что предсказатель вектора движения минимизирует разность векторов движения для текущего блока и предсказателя вектора движения.
[0091] На основании предсказателя вектора движения блок 44 компенсации движения из видео кодера 20, или другой блок видео кодера 20, такой как блок 56 энтропийного кодирования, может вычислить значение разности векторов движения для текущего блока (156). Блок 44 компенсации движения может вычислить разность векторов движения для текущего блока как разность векторов движения для текущего блока и предсказателя вектора движения для текущего блока. Таким образом, блок 44 компенсации движения может вычислить предсказатель вектора движения для текущего блока как <p_x-MV_x, p_y-MV_y>, где p_x и p_y-x- и y- компоненты предсказателя вектора движения, и MV_x и MV_y являются x- и y- компонентами вектора движения для текущего блока.
[0092] Блок 56 энтропийного кодирования может затем совместно кодировать элементы значения разности векторов движения для текущего блока (158). Например, блок 56 энтропийного кодирования может совместно кодировать элементы значения разности векторов движения, которые включают в себя x- и y- компоненты разности векторов движения, как описано со ссылками на Фиг.6 и 7 более подробно ниже. Элементы разности векторов движения могут также включать в себя одно или более значений, представляющих то, являются ли x- и y- компоненты разности векторов движения нулем, значение, представляющее значения знака x- и/или y- компоненты значения разности векторов движения, и значение, представляющее абсолютное значение компоненты значения разности векторов движения, в качестве некоторых неограничивающих примеров.
[0093] Блок 52 обработки преобразования или блок 44 компенсации движения может вычислить остаточный блок для текущего блока (160). Остаточный блок может содержать пиксельные разности между предсказывающим видео блоком, который указан вектором движения для текущего блока, и текущим видео блоком. Блок 52 обработки преобразования может затем применить преобразование, такое как дискретное косинусное преобразование (DCT), к остаточному блоку для текущего блока, в то время как блок 54 квантования может квантовать коэффициенты преобразования из блока 52 обработки преобразования(162).
[0094] Блок 56 энтропийного кодирования может сканировать преобразованные коэффициенты, полученные из преобразования 162. В некоторых случаях блок 56 энтропийного кодирования может применить зигзагообразное сканирование или другой шаблон сканирования, чтобы сканировать коэффициенты преобразования преобразованного остаточного блока (164). Блок 56 энтропийного кодирования может энтропийно кодировать коэффициенты, содержащие серии нулей, полученные из сканирования 164, например, используя кодирование длин серий, для дальнейшего сжатия (166). Блок 56 энтропийного кодирования может затем вывести энтропийно кодированные коэффициенты и совместно закодированное значение MVD (168). Таким образом, блок 56 энтропийного кодирования может вывести совместно кодированные данные для x- и y- компонент значения MVD в дополнение к энтропийно кодированным квантованным коэффициентам преобразования.
[0095] Способы согласно Фиг.4 могут быть обычно выполнены любым блоком обработки или процессором, реализованы ли они в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах, или их комбинации, и когда реализовано в программном обеспечении или программно-аппаратных средствах, соответствующее аппаратное обеспечение может быть предоставлено, чтобы выполнить инструкции для программного обеспечения или программно-аппаратных средств. В целях примера способы согласно Фиг.4 описаны относительно устройства кодирования видео, которое может включать в себя компоненты, по существу аналогичные таковым из видео кодера 20 (Фиг.1 и 2), хотя нужно подразумевать, что другие устройства могут быть сконфигурированы, чтобы выполнить аналогичные способы. Кроме того, этапы, иллюстрированные на Фиг.4, могут быть выполнены в отличном порядке или параллельно, и дополнительные этапы могут быть добавлены, и некоторые этапы опущены, не отступая от способов настоящего раскрытия.
[0096] Фиг.5 является последовательностью операций, иллюстрирующей способ отдельной сигнализации вектора движения значения разности векторов движения в соответствии с способами, описанными в тестовой модели 3.0 HEVC (HM3.0, также названный HM3). Способы HEVC также описаны в документе HCTVC-11003, Brass et al, ″High Efficiency Video Coding (HEVC) Text Specification Draft 7,″ Joint Collaborative Team on Video Coding (JCT- VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, 9th Meeting: Geneva, Switzerland, April 27, 2012 to May 7, 2012, which, as of June 7, 2102, может быть загружено из http://phenix.it-sudparis.eu/jct/doc_end_user/documents/9_Geneva/wg11/ JCTVC-11003-v3.zip. Согласно способу, предложенному в HM3, и иллюстрированному на Фиг.5, значения mvd_x и mvd_y, соответствующие x- и y- компоненты значения разности векторов движения, сигнализируются отдельно. Способ 180 иллюстрирует, как один или более элементов синтаксиса, относящиеся к mvd_x, могут быть сигнализированы, и способ 192 иллюстрирует, как один или более элементов синтаксиса, относящиеся к mvd_y, могут быть сигнализированы.
[0097] В способе 180 блок видео кодера 20, такой как блок 44 компенсации движения или блок 56 энтропийного кодирования, может сигнализировать флаг mvd_x==0 (182). Флаг mvd_x==0 представляет, равны ли разность между x- компонентами вычисленного вектора движения для PU в CU и предсказатель вектора движения для вектора движения, и соответственно, равна ли соответствующая разность между этими двумя x- компонентами нулю.
[0098] Если флаг mvd_x==0 установлен, то mvd_x, x- компонента MVD, равна нулю (″Да″ ветвь на этапе 184), и способ заканчивается (190). Однако, если mvd_x является отличным от нуля (ветвь "Нет" на этапе 184), видео кодер 20 может сигнализировать abs_mvd_x-1 (186). Abs_mvd_x-1 может представлять абсолютное значение значения mvd_x минус один. Видео кодер 20 может далее сигнализировать значение, которое представляет знак mvd_x (188). Знак может быть например, положительным или отрицательным.
[0099] Аналогично, в способе 192 видео кодер, такой как видео кодер 20 согласно Фиг.1, может сигнализировать флаг mvd_y==0 (194). Флаг mvd_y==0 представляет, равны ли разность между y- компонентами вычисленного вектора движения для PU в CU и предсказателем вектора движения для вектора движения, и соответственно, равна ли соответствующая разность между этими двумя y- компонентами нулю.
[0100] Если флаг mvd_y==0 установлен, то mvd_y, y- компонента MVD, равна нулю (″Да″ ветвь на этапе 196), и способ завершается (202). Однако, если mvd_y является отличным от нуля (ветвь "Нет" на этапе 196), видео кодер 20 может сигнализировать abs_mvd_y-1 (198). Abs_mvd_y-1 может быть значением, которое представляет абсолютное значение значения mvd_y минус один. Видео кодер 20 может далее сигнализировать значение, которое представляет знак mvd_y (200). Знак может быть например, положительным или отрицательным.
[0101] Фиг.6 является последовательностью операций, иллюстрирующей примерный способ 220 объединенного кодирования значений разности векторов движения для совместного кодирования x- и y- компонент значения разности векторов движения. В целом, способ 220 согласно Фиг.6 соответствует этапу 158 согласно Фиг.4. Таким образом, способ 220 согласно Фиг.6 представляет примерный способ для совместного кодирования данных x- и y- компонент значения разности векторов движения. Кроме того, предполагается, что до выполнения примерного способа согласно Фиг.6 блок 44 компенсации движения из видео кодера 20, или другой блок видео кодера 20, такой как блок 56 энтропийного кодирования из видео кодера 20, могут вычислить вектор движения для текущего блока видео данных и вычислить значение разности векторов движения как разность между вектором движения для текущего блока видео данных и предсказателем вектора движения, определенным для текущего блока видео данных, например, как описано относительно этапа 156 согласно Фиг.4. Чтобы совместно кодировать данные для x- и y- компонентов значения разности векторов движения, блок 56 энтропийного кодирования может кодировать информацию, представляющую то, больше ли абсолютное значение mvd_x, x- компоненты значения разности векторов движения, чем нуль (222). Блок 56 энтропийного кодирования может затем кодировать информацию, представляющую то, больше ли абсолютное значение y- компоненты (mvd_y) значения разности векторов движения чем нуль (224).
[0102] Когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, блок 56 энтропийного кодирования может кодировать информацию, представляющую абсолютное значение x- компоненты значения разности векторов движения (226). И когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, блок 56 энтропийного кодирования может кодировать информацию, представляющую абсолютное значение y- компоненты значения разности векторов движения (228). В некоторых примерах блок 56 энтропийного кодирования может кодировать информацию, представляющую абсолютное значение x- и y- компонент значений разности векторов движения, как абсолютные значения mvd_x/2-1, и mvd_y/2-1, соответственно.
[0103] Когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, блок 56 энтропийного кодирования может кодировать знак x- компоненты значения разности векторов движения (230). Когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, блок 56 энтропийного кодирования может кодировать знак y- компоненты значения разности векторов движения.
[0104] Способы согласно Фиг.6 могут быть обычно выполнены любым блоком обработки или процессором, реализованы ли они в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах или их комбинации, и когда реализовано в программном обеспечении или программно-аппаратных средствах, соответствующее аппаратное обеспечение быть предоставлено, чтобы выполнить инструкции для программного обеспечения или программно-аппаратных средств. В целях примера способы согласно Фиг.6 описаны относительно устройства кодирования видео, которое может включать в себя компоненты, по существу аналогичные таковым из видео кодера 20 (Фиг.1 и 2), хотя нужно подразумевать, что другие устройства могут быть сконфигурированы, чтобы выполнить аналогичные способы. Кроме того, этапы, иллюстрированные на Фиг.6, могут быть выполнены в другом порядке или параллельно, и дополнительные этапы могут быть добавлены, и некоторые этапы опущены, не отступая от способов настоящего раскрытия.
[0105] Таким образом, способ согласно Фиг.6 представляет пример способа, включающего в себя кодирование информации, представляющей то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных чем нуль, кодирование информации, представляющей то, больше ли абсолютное значение y- компоненты значения разности векторов движения чем нуль, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодирование информации, представляющей абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодирование информации, представляющей абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодирование знака x- компоненты значения разности векторов движения, и когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодирование знака y- компоненты значения разности векторов движения. Таким образом, способ согласно Фиг.6 представляет пример объединенного кодирования элементов x- и y- компонент значения разности векторов движения, вычисленного для вектора движения текущего блока видео данных.
[0106] Фиг.7 является последовательностью операций, иллюстрирующей способ для того, чтобы сигнализировать значения для значений mvd_x и mvd_y. В отличие от способов 180 и 192 согласно Фиг.5, которые иллюстрируют кодирование x- и y- компонентов MVD отдельно, и аналогично способу Фиг.6, способ согласно Фиг.7 может также разрешить кодеру совместно кодировать x- и y- компоненты значения разности векторов движения, то есть, mvd_x и mvd_y. В этом примере один элемент синтаксиса, сигнализированный в потоке битов кодером, таким как видео кодер 20 согласно Фиг.1 и 2, может содержать величину, знак и/или другую информацию, относящуюся к x- и y- компонентам значения разности векторов движения.
[0107] В примере согласно Фиг.7, как объяснено ниже, видео кодер 20 может кодировать флаг разрешения движения, который является значением, представляющим то, имеет ли вектор движения текущего блока видео данных первую суб-пиксельную точность, например, пиксельную точность в одну четверть, или вторую суб-пиксельную точность, например, пиксельную точность в одну восьмую. В этом примере флаг разрешения движения имеет значение единица, чтобы указывать, что вектор движения текущего блока имеет пиксельную точность в одну четверть, и имеет значение нуль, чтобы указывать, что флаг разрешения движения имеет пиксельную точность в одну восьмую. Видео кодер 20 может также кодировать значение, ″abs_mvd_equal_2″, которое представляет, имеет ли величины одной или обеих из компонент разности векторов движения абсолютное значение два. Видео кодер 20 может назначить значение на abs_mvd_equal_2 на основании примера из Таблицы 1 ниже.
[0108] В примере способа 240 согласно Фиг.7, блок 44 компенсации движения или другой блок видео кодера 20 могут сигнализировать флаг mvd_x==0, (242) и флаг mvd_y==0 (244). Эти флаги могут быть установлены, когда соответствующие значения mvd_x или mvd_y равна нулю. Если и mvd_y и mvd_x являются нулем (″Да″ ветвь на этапе 246), никакие дополнительные данные не должны быть сигнализированы, и способ 240 завершается (266).
[0109] Если или mvd_x или mvd_y являются отличными от нуля (ветвь ″Нет″ на этапе 246), блок 44 компенсации движения может сигнализировать или закодировать флаг разрешения движения (246). Флаг разрешения движения (mvres_flag) является примером элемента синтаксиса, который может указывать разрешение вектора движения (также называемого точность вектора движения) для вектора движения, соответствующего значениям разности векторов движения. Флаг разрешения движения может указывать, имеет ли вектор движения текущего блока видео данных первую суб-пиксельную точность или вторую суб-пиксельную точность, например, пиксельную точность в одну четверть или пиксельную точность в одну восьмую.
[0110] Видео кодер 20 может также определить порог для текущего кадра, который также ассоциирован с вектором движения для текущего блока, и который может быть сигнализирован в заголовке вырезки или другой структуре данных, например, наборе параметров вырезки (SPS) или наборе параметров картинки (PPS). Видео кодер 20 может использовать этот порог, чтобы ограничить амплитуду значений разности векторов движения одной восьмой пикселя и может указывать, что вектор движения имеет первую суб-пиксельную точность, когда оба - x- компонента значения разности векторов движения (mvd_x) и y- компонента значения разности векторов движения (mvd_y) больше чем порог. Например, как показано ниже со ссылкой на Таблицу 1 ниже, видео кодер (например, видео кодер 20) может ограничить величину x- и y- компонент значения разности векторов движения одной восьмой пиксельной точности значениями один или два. Видео кодер может сигнализировать значение порога, используя флаг порога.
[0111] Если MVD, вычисленная для x- или y- компоненты вектора движения для PU, больше чем определенный порог, флаг разрешения движения может быть установлен в «истина». Если флаг разрешения движения установлен в ″истина″, этот флаг представляет, что вектор движения имеет пиксельную точность в одну четверть. Если значение MVD меньше чем или равно выбранному порогу, видео кодер может установить значение для флага разрешения движения, чтобы указывать, имеет ли соответствующий вектор движения пиксельную точность в одну восьмую или одну четверть.
[0112] Способ 240 может дополнительно содержать определение посредством видео кодера 20, равен ли флаг разрешения движения единице (250). Флаг разрешения движения может быть равным единице, например, если точность вектора движения равна точности в одну четверть. Если флаг разрешения движения установлен в единицу, видео кодер 20 может сигнализировать или закодировать значение, представляющее значение abs_mvd_x/2-1, если mvd_x является отличным от нуля, где abs_mvd_x - значение, которое представляет абсолютное значение x- компоненты MVD (252). Видео кодер 20 может аналогично кодировать значение, представляющее abs_mvd_y/2-1, если mvd_x является отличным от нуля, где abs_mvd_y является абсолютным значением y- компоненты MVD (254). В некоторых примерах видео кодер 20 может сигнализировать abs_mvd_y/2-1, если mvd_y является отличным от нуля, вместо того, если mvd_x является ненулевым.
[0113] Если флаг разрешения движения не равен единице (ветвь ″Нет″ на этапе 250), видео кодер 20 может определить, равен ли порог единице. Порог может иметь значение или один или два в этом примере. В некотором примере порог может иметь значение два. Поскольку вектор движения может иметь только пиксельную точность в одну восьмую, когда mvd_x и mvd_y значения не превышают порог, значения mvd_x и mvd_y ограничены один или двумя в этом примере. Кроме того, если порог равен единице (″Да″ ветвь на этапе 256), и вектор движения имеет пиксельную точность в одну четверть (как указано флагом разрешения движения, который в этом примере должен быть ″истинным″ после этапа 250), видео кодер не должен сигнализировать дополнительную информацию для значений mvd. Таким образом, значения mvd_x и mvd_y могут быть настроены быть или нулем или единицей, используя другую информацию. В частности, являются ли mvd_x и mvd_y нулем, может быть указано на основании того, сигнализированы ли значения знака в этапах 248 и 264. Если порог равен двум (ветвь «Нет» на этапе 256), видео кодер 20 может определить, равно ли любое из значений mvd_x или mvd_y нулю. Если mvd_x или mvd_y равны нулю (″Да″ ветвь на этапе 260), видео кодер 20 может продолжить сигнализировать знаки ненулевого одного из mvd_x и mvd_y (258, 264). В некоторых примерах видео кодер 20 может дополнительно сигнализировать значение для ненулевого одного из mvd_x и mvd_y, и таким образом, вместо этого может перейти на этап 252, а не 258.
[0114] Однако, если и mvd_x и mvd_y являются отличными от нуля, то есть, ни mvd_x, ни mvd у не имеют значения нуль (ветвь ″Нет″ на этапе 260), то видео кодер 20 может сигнализировать флаг abs_mvd_equal_2. Флаг abs_mvd_equal_2 является примером совместно кодированного значения для mvd_x и mvd_y. Видео кодер может назначить значение на abs_mvd_equal_2 на основании Таблицы 1 ниже.
Таблица 1
abs_mvd_equal_2
abs_mvd_x
abs_mvd_y
0
1
1
1
1
2
2
2
1
[0115] На основании значений abs mvd_x и abs mvd_y видео кодер 20 может сигнализировать значение abs_mvd_equal_2 (262), например, согласно Таблице 1. Видео кодер 20 может сигнализировать значение abs_mvd_equal_2, используя унарную бинаризацию. Видео кодер 20 может далее сигнализировать знак mvd_x, если mvd_x отличен от нуля (258), и аналогично сигнализировать знак mvd_y, если mvd_x отличен от нуля (264). В некоторых примерах видео кодер 20 может сигнализировать знак mvd_y, если mvd_y является отличным от нуля.
[0116] В некоторых примерах флаг разрешения движения, флаг mvd_x==0 и флаг mvd_y==0 кодируются совместно. Необязательно, и как один пример, коды VLC могут использоваться согласно Таблице 2 ниже:
Таблица 2
mvd_x==0
mvd_y==0
флаг разрешения движения
Кодовое слово VLC
истина
истина
x
00
истина
ложь
1
101
истина
ложь
0
1110
mvd_x==0
mvd_y==0
флаг разрешения движения
Кодовое слово VLC
ложь
истина
1
100
ложь
истина
0
110
ложь
ложь
0
1111
ложь
ложь
1
01
[0117] Видео кодер 20 может сигнализировать флаг разрешения движения, чтобы указывать одно из разрешения вектора движения в одну четверть пикселя и в одну восьмую. Например, видео кодер 20 может сигнализировать разрешение разности векторов движения между 1/4 пикселя или 1/8 пикселя. Видео кодер 20 может сигнализировать флаг разрешения движения, чтобы указывать разность между точностью вектора движения в одну четверть и одну восьмую пикселя, когда MVD меньше чем пороговое значение. Видео кодер 20 может также сигнализировать флаг разрешения движения, чтобы указывать разность между точностью вектора движения в одну четверть и одну восьмую пикселя, когда один или оба из компонентов MVD больше, чем пороговое значение.
[0118] Устройство декодирования видео, такое как видео декодер 30, может работать по существу обратном способом к видео кодеру 20, чтобы выполнить способы, иллюстрированные на Фиг.7. Таким образом видео декодер 30 может адаптивно выбрать точность вектора движения для каждого вектора движения на основании приема и декодирования значения, которое представляет вектор движения, такого как флаг разрешения движения. Видео декодер 30 может также принять и декодировать пороговое значение из (256). Видео декодер 30 может принять и декодировать пороговое значение для каждого опорного кадра, чтобы ограничить амплитуду значения разности векторов движения в одну восьмую суб-пикселя для кадра. Порог может быть принят в заголовке вырезки. Порог может иметь значения нуль, один или два. Порог не ограничен, и может быть расширен на другие значения. Кодируя информацию о x- и y- компонентах значений разности векторов движения, сложность кодированного потока битов видео может быть уменьшена, что может привести к более низкой полной частоте следования битов (скорости передачи в битах) для кодированных видео данных.
[0119] В примере устройство кодирования видео, такое как видео кодер 20 или видео декодер 30, может кодировать значение, такое как флаг разрешения движения согласно Фиг.7, который является представляющим то, имеет ли вектор движения текущего блока видео данных первую суб-пиксельную точность или вторую суб-пиксельную точность, такую как суб-пиксельная точность в одну восьмую или одну четверть. Вторая суб-пиксельная точность может быть больше чем первая суб-пиксельная точность. Когда вектор движения имеет вторую суб-пиксельную точность, например, пиксельную точность в одну восьмую, когда x- компонента значения разности векторов движения не равна нулю, и когда y- компонента значения разности векторов движения не равна нулю, видео кодер 20 или видео декодер 30 может кодировать информацию, представляющую абсолютное значение x- компоненты значения разности векторов движения, и кодировать информацию, представляющую абсолютное значение y- компоненты значения разности векторов движения. Видео кодер 20 или видео декодер 30 могут кодировать совместно кодированное значение, представляющее как x- компоненту значения разности векторов движения так и y- компоненту значения разности векторов движения.
[0120] Способы согласно Фиг.7 могут обычно быть выполнены любым блоком обработки или процессором, реализованы ли они в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах, или их комбинации, и когда реализовано в программном обеспечении или программно-аппаратных средствах, соответствующее аппаратное обеспечение может быть предоставлено, чтобы выполнить инструкции для программного обеспечения или программно-аппаратных средств. В целях примера способы согласно Фиг.7 описаны относительно устройства кодирования видео, которое может включать в себя компоненты, по существу аналогичные таковым из видео кодера 20 (Фиг.1 и 2). Видео декодер 30 согласно Фиг.1 и 3 может выполнять обычно обратные операции тем, что проиллюстрированы и описаны на Фиг.7, чтобы декодировать поток битов, кодированный согласно способам, иллюстрированным на Фиг.7. Нужно также подразумевать, что другие устройства могут быть сконфигурированы, чтобы выполнить аналогичные способы. Кроме того, этапы, иллюстрированные на Фиг.7, могут быть выполнены в отличном порядке или параллельно, и дополнительные этапы могут быть добавлены, и некоторые этапы опущены, не отступая от способов настоящего раскрытия.
[0121] Способ согласно Фиг.7 представляет пример способа, включающего в себя определение, использовать ли вектор движения, имеющий первую суб-пиксельную точность или вторую суб-пиксельную точность, чтобы кодировать единицу предсказания единицы кодирования видео данных, в котором вторая суб-пиксельная точность больше чем первая суб-пиксельная точность, вычисление x- компоненты и y- компоненты вектора движения, имеющего или первую суб-пиксельную точность или вторую суб-пиксельную точность, на основании определения, когда x- компонента и y- компонента имеют вторую суб-пиксельную точность, определение значения разности векторов движения, на основании значений x- компоненты и y- компоненты вектора движения и значениях предсказанной x- компоненты и предсказанной y- компоненты для вектора движения, и кодирование совместно закодированного значения, представляющего значения разности векторов движения для x- компоненты и y- компоненты для вектора движения.
[0122] Обратный способ может быть выполнен видео декодером. Обратный способ может, например, включать в себя определение, имеет ли вектор движения единицы предсказания единицы кодирования видео данных первую суб-пиксельную точность или вторую суб-пиксельную точность, используя значение флага разрешения движения для вектора движения, в котором вторая суб-пиксельная точность больше чем первая суб-пиксельная точность, когда вектор движения имеет вторую суб-пиксельную точность, декодирование совместно закодированного значения, представляющего значения разности векторов движения для x- компоненты и y- компоненты вектора движения, и декодирование вектора движения, на основании значений разности векторов движения и значений предсказанной x- компоненты и предсказанной y- компоненты для вектора движения, и формирование данные предсказания для единицы кодирования, используя декодированный вектор движения.
[0123] Видео кодер 20 или видео декодер 30 могут определить разрешение вектора движения для текущего блока на основании порогового значения, иллюстрированного на Фиг.7. Более конкретно, видео кодер 20 или видео декодер 30 могут определить, имеет ли вектор движения для текущего блока первую суб-пиксельную точность или вторую суб-пиксельную точность, посредством определения порогового значения, ассоциированного с вектором движения. Видео кодер 20 или видео декодер 30 могут определить, что вектор движения имеет первую суб-пиксельную точность, когда как x- компонента значения разности векторов движения текущего блока так и y- компонента значения разности векторов движения больше чем порог.
[0124] Когда по меньшей мере одна из x- компоненты значения разности векторов движения и y- компоненты значения разности векторов движения меньше чем или равна порогу, видео кодер 20 или видео декодер 30 могут определить, имеет ли вектор движения первую суб-пиксельную точность или вторую суб-пиксельную точность, на основании значения флага разрешения вектора движения.
[0125] Должно быть признано, что в зависимости от примера, некоторые действия или события любого из способов, описанных здесь, могут быть выполнены в отличной последовательности, могут быть добавлены, слиты, или не учтены в целом (например, не все описанные действия или события необходимы для практической реализации способов). Кроме того, в некоторых примерах действия или события могут быть выполнены одновременно, например, с помощью мультипотоковой обработки, обработки прерываний или множественных процессоров, а не последовательно.
[0126] Фиг.8 является последовательностью операций, иллюстрирующей примерный способ для того, чтобы совместно декодировать x- и y- компоненты значения разности векторов движения и энтропийно декодировать кодированные данные, чтобы сформировать текущий блок. Этапы способа 280 согласно Фиг.8 являются обычно обратными способу 150 согласно Фиг.4. В способе 280 блок 72 компенсации движения или другой блок видео декодера 30 могут предсказать текущий блок (282). Как часть предсказания текущего блока, блок 72 компенсации движения может декодировать совместно закодированные компоненты значения разности векторов движения (284). Видео декодер может декодировать совместно закодированные компоненты разности векторов движения в соответствии с способами способа 320, иллюстрированного на Фиг.9. Значение разности векторов движения для текущего блока может иметь x- компоненту mvd_x и y- компоненту mvd_y. Совместно закодированные компоненты значения разности векторов движения могут включать в себя x- и y- компоненты значения разности векторов движения для текущего блока, а также другую информацию, относящуюся к значению разности векторов движения, такую как одно или более значений, представляющих то, являются ли x- и y- компоненты разности векторов движения нулем, значением, представляющим значение знака x- и/или y- компоненты значения разности векторов движения, и значением, представляющим абсолютное значение компонента значения разности векторов движения, в качестве некоторых неограничивающих примеров.
[0127] Блок 44 компенсации движения из видео кодера 20 может также принять предсказатель вектора движения для вектора движения текущего блока (286). Предсказатель вектора движения является вектором движения, который блок 72 компенсации движения использует, чтобы вычислить значения разности векторов движения для текущего блока. В некоторых примерах предсказатель вектора движения может быть вектором движения одного из множества блоков, граничащих с PU текущего блока. Блок 72 компенсации движения может также определить предсказатель вектора движения от совместно расположенного блока одного из опорных кадров, сохраненных в памяти 82 опорных кадров. Предсказатель вектора движения может иметь x- компоненту p_x и y- компоненту p_y. Предсказатель вектора движения может быть определен видео кодером 20 во время фазы кодирования таким образом, что предсказатель вектора движения минимизирует разность векторов движения для текущего блока и предсказателя вектора движения. На основании предсказателя вектора движения блок 72 компенсации движения из видео кодера 20 может вычислить вектор движения для текущего блока (286). Видео декодер 30 может вычислить вектор движения как сумму компонент разности векторов движения и предсказателя вектора движения, <p_x+mvd_x, p_y+mvd_y> (288).
[0128] Блок 70 энтропийного декодирования может принять энтропийно кодированные данные для текущего блока (290), и декодировать данные, такие как преобразованные кодированные длиной серий коэффициенты блока, чтобы воспроизвести эти преобразованные коэффициенты блока (292). Блок 70 энтропийного декодирования может обратно сканировать воспроизведенные коэффициенты, чтобы перекомпоновать коэффициенты из одного или более одномерных векторов коэффициентов в двумерный блок преобразованных коэффициентов (294).
[0129] Блок 76 обратного квантования может обратно квантовать двумерный блок коэффициентов преобразования, и блок 78 обратного преобразования может обратно преобразовать коэффициенты, обратно квантованные коэффициенты, чтобы сформировать блок непреобразованных пикселей (296). Остаточный блок может содержать пиксельные разности между предсказывающим блоком видео, который указан вектором движения для текущего блока, и текущим блоком видео. Видео декодер 30 может затем объединить остаточный блок с предсказывающим блоком, чтобы сформировать текущий блок текущего кадра (298).
[0130] Способы согласно Фиг.8 могут обычно быть выполнены любым блоком обработки или процессором, реализованы ли они в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах, или их комбинации, и когда реализовано в программном обеспечении или программно-аппаратных средствах, соответствующее аппаратное обеспечение может быть предоставлено, чтобы выполнить инструкции для программного обеспечения или программно-аппаратных средств. В целях примера способы согласно Фиг.8 описаны относительно устройства декодирования видео, которое может включать в себя компоненты, по существу аналогичные таковым из видео декодера 30 (Фиг.1 и 3), хотя нужно подразумевать, что другие устройства могут быть сконфигурированы, чтобы выполнить аналогичные способы. Кроме того, этапы, иллюстрированные на Фиг.8, могут быть выполнены в отличном порядке или параллельно, и дополнительные этапы могут быть добавлены, и некоторые этапы опущены, не отступая от способов настоящего раскрытия.
[0131] Фиг.9 является последовательностью операций, иллюстрирующей примерный способ для того, чтобы совместно декодировать x- и y- компоненты значения разности векторов движения. Этапы способа 320 согласно Фиг.9 являются в целом обратными к этапам способа 220 согласно Фиг.6. Аналогично, способ 320 может в целом соответствовать этапу 284 согласно Фиг.8. В способе 320 согласно Фиг.9, блок 72 компенсации движения из видео декодера 30 или другой блок видео декодера 30 может принять совместно кодированное представление вектора движения для текущего блока видео данных. Видео декодер 30 может также определить предсказатель вектора движения, который видео декодер, такой как видео кодер 20, может ранее определить и закодировать. Видео декодер 30 может вычислить вектор движения для текущего блока как разность суммы предсказателя вектора движения для текущего блока видео данных и предсказателя вектора движения, определенного для текущего блока видео данных.
[0132] Чтобы определить компоненты значения разности векторов движения, блок 72 компенсации движения из видео декодера 30 может декодировать информацию, представляющую то, больше ли абсолютное значение mvd_x, x- компоненты значения разности векторов движения, чем нуль (322). Блок 72 компенсации движения может затем декодировать информацию, представляющую то, больше ли абсолютное значение y- компоненты (mvd_y) значения разности векторов движения чем нуль (324).
[0133] Когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, блок 72 компенсации движения может декодировать информацию, представляющую абсолютное значение x- компоненты значения разности векторов движения (326). И когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, блок 72 компенсации движения может декодировать информацию, представляющую абсолютное значение y- компоненты значения разности векторов движения (328). В некоторых примерах видео декодер 30 может декодировать информацию, представляющую абсолютное значение x- и y- компонент значений разности векторов движения, как абсолютные значения mvd_x/2-1, и mvd_y/2-1, соответственно.
[0134] Когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, блок 72 компенсации движения может декодировать знак x- компоненты значения разности векторов движения (330). Когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, блок 72 компенсации движения может декодировать знак y- компоненты значения разности векторов движения (332).
[0135] Способы согласно Фиг.9 могут быть обычно выполнены любым блоком обработки или процессором, реализованы ли они в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах, или их комбинации, и когда реализовано в программном обеспечении или программно-аппаратных средствах, соответствующее аппаратное обеспечение может быть предоставлено, чтобы выполнить инструкции для программного обеспечения или программно-аппаратных средств. В целях примера способы согласно Фиг.9 описаны относительно устройства кодирования видео, которое может включать в себя компоненты, по существу аналогичные таковым из видео декодера 30 (Фиг.1 и 3), хотя нужно подразумевать, что другие устройства могут быть сконфигурированы, чтобы выполнить аналогичные способы. Кроме того, этапы, иллюстрированные на Фиг.9, могут быть выполнены в отличном порядке или параллельно, и дополнительные этапы могут быть добавлены, и некоторые этапы опущены, не отступая от способов настоящего раскрытия.
[0136] Таким образом, способ согласно Фиг.9 представляет пример способа, включающего в себя кодирование информации, представляющей то, больше ли абсолютное значение x- компоненты значения разности векторов движения для текущего блока видео данных чем нуль, кодирование информации, представляющей то, больше ли абсолютное значение y- компоненты значения разности векторов движения чем нуль, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодирование информации, представляющей абсолютное значение x- компоненты значения разности векторов движения, когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодирование информации, представляющей абсолютное значение y- компоненты значения разности векторов движения, когда абсолютное значение x- компоненты значения разности векторов движения больше чем нуль, кодирование знака x- компоненты значения разности векторов движения, и когда абсолютное значение y- компоненты значения разности векторов движения больше чем нуль, кодирование знака y- компоненты значения разности векторов движения. Таким образом, способ согласно Фиг.9 представляет другой пример способа для совместного кодирования данных значения разности векторов движения. Кроме того, видео декодер 30 может также конфигурироваться, чтобы выполнить способ декодирования видео, по существу подобный способу согласно Фиг.7. Некоторые способы настоящего раскрытия были экспериментально оценены. В частности, способы настоящего раскрытия, относящиеся к адаптивной сигнализации суб-пиксельной точности, были реализованы для HM3.0 и моделированы при обычных тестовых условиях. Производительность была сравнена с базовым HM3.0 в терминах скорости передачи по Delta Bjontegaard (BD). Результаты моделирования показали в среднем экономию BD-скорости передачи в 0.4%, на высокоэффективных конфигурациях и в среднем экономию BD-скорости передачи в 0.6 % на конфигурациях низкой сложности. Таблица 3 ниже суммирует экспериментальные результаты:
Таблица 3
<img file="00000002.tif" he="63" wi="157" img-content="undefined" img-format="tif" />
<img file="00000003.tif" he="68" wi="158" img-content="undefined" img-format="tif" />
[0137] Должно быть признано, что в зависимости от примера, некоторые действия или события любого из способов, описанных здесь, могут быть выполнены в отличной последовательности, могут быть добавлены, слиты, или не учтены в целом (например, не все описанные действия или события необходимы для практической реализации способов). Кроме того, в некоторых примерах действия или события могут быть выполнены одновременно, например, с помощью мультипотоковой обработки, обработки прерываний или множественных процессоров, а не последовательно.
[0138] В одном или более примерах описанные функции могут быть реализованы в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах или любой их комбинации. Если реализованы в программном обеспечении, функции могут быть сохранены на или переданы по как одна или более инструкций или код на считываемом компьютером носителе и выполнены основанным на аппаратном обеспечении блоком обработки. Считываемый компьютером носитель может включать в себя считываемые компьютером запоминающие носители, которые соответствуют материальному носителю, такому как запоминающие носители данных, или коммуникационные носители, включая любой носитель, который облегчает передачу компьютерной программы от одного места к другому, например, согласно протоколу связи. Таким образом считываемый компьютером носитель обычно может соответствовать (1) материальным считываемым компьютером запоминающим носителям, которые являются невременными, или (2) коммуникационному носителю, такому как сигнал или несущая. Запоминающие носители данных могут быть любыми доступными носителями, к которым могут получить доступ один или более компьютеров или один или более процессоров, чтобы извлечь инструкции, код и/или структуры данных для реализации способов, описанных в настоящем раскрытии. Компьютерный программный продукт может включать в себя считываемый компьютером носитель.
[0139] Посредством примера, а не ограничения, такие считываемые компьютером носители данных могут содержать RAM, ROM, EEPROM, CD-ROM или другое оптическое дисковое запоминающее устройство, магнитное дисковое запоминающее устройство, или другие магнитные устройства хранения, флэш-память, или любой другой носитель, который может использоваться, чтобы сохранить желательный программный код в форме инструкций или структур данных, и к которому может получить доступ компьютер. Также, любое соединение должным образом называют считываемым компьютером носителем. Например, если инструкции переданы от вебсайта, сервера, или другого удаленного источника, используя коаксиальный кабель, волокно-оптический кабель, витую пару, цифровую абонентскую линию (DSL), или беспроводные технологии, такие как инфракрасная, радио- и микроволновая, то эти коаксиальный кабель, волокно-оптический кабель, витая пара, DSL, или эти беспроводные технологии, такие как инфракрасная, радио- и микроволновая, включены в определение носителя. Нужно подразумевать, однако, что считываемые компьютером носители данных и запоминающие носители данных не включают в себя соединения, несущие, сигналы, или другие временные носители, но вместо этого направлены на невременные материальные носители данных. Диск и диск, как используется здесь, включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискету и диск blu-ray, где диски (disks) обычно воспроизводят данные магнитным образом, в то время как диски (discs) воспроизводят данные оптически с помощью лазеров. Комбинации вышеупомянутого должны также быть включены в понятие считываемого компьютером носителя.
[0140] Инструкции могут быть выполнены одним или более процессорами, такими как один или более цифровых сигнальных процессоров (DSP), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые пользователем логические матрицы (FPGA), или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин "процессор", как используется здесь, может относиться к любой известной структуре или любой другой структуре, подходящей для реализации способов, описанных здесь. Также, в некоторых аспектах функциональные возможности, описанные здесь, могут быть предоставлены в пределах специализированного аппаратного обеспечения и/или программных модулей, сконфигурированных для кодирования и декодирования, или встроенных в объединенный кодек. Также, способы могли быть полностью реализованы в одной или более схемах или логических элементах.
[0141] Способы настоящего раскрытия могут быть реализованы в широком разнообразии устройств или аппаратов, включая беспроводную телефонную трубку, интегральную схему (IC, ИС) или набор IC (например, микропроцессорный набор). Различные компоненты, модули или блоки описаны в настоящем описании, чтобы подчеркнуть функциональные аспекты устройств, конфигурируемых, чтобы выполнять раскрытые способы, но не обязательно требовать реализации различными блоками аппаратного обеспечения. Вместо этого, как описано выше, различные блоки могут быть объединены в блоке аппаратного обеспечения кодека или предоставлены коллекцией взаимодействующих блоков аппаратного обеспечения, включая один или более процессоров, как описано выше, в соединении с подходящим программным обеспечением и/или программно-аппаратными средствами.
[0142] Были описаны различные примеры. Эти и другие примеры находятся в рамках нижеследующей формулы изобретения.