УРОВЕНЬ ТЕХНИКИ
[001] Инженеры используют сжатие (также называемое кодирование источника), чтобы уменьшать битрейт цифрового видео. Сжатие уменьшает стоимость хранения и передачи видеоинформации посредством преобразования информации в форму более низкого битрейта. Распаковка (также называемая декодирование) восстанавливает версию исходной информации из сжатой формы. "Кодек" является системой кодера/декодера.
[002] За последние два десятилетия, были приняты различные стандарты видеокодеков, включая сюда стандарты ITU-T H.261, H.262 (MPEG-2 или ISO/IEC 13818-2), H.263 и H.264 (MPEG-4 AVC или ISO/IEC 14496-10), стандарты MPEG-1 (ISO/IEC 11172-2) и MPEG-4 Visual (ISO/IEC 14496-2), и стандарт SMPTE 421M (VC-1). В более позднее время, был одобрен стандарт HEVC (ITU-T H.265 или ISO/IEC 23008-2). Расширения стандарта HEVC (например, для кодирования/декодирования масштабируемого видео, для кодирования/декодирования видео с более высокой точностью исходя из глубины битов отсчетов или частоты дискретизации цветности, или для многовидового кодирования/декодирования) в текущее время находятся в разработке. Стандарт видеокодека обычно определяет варианты выбора для синтаксиса кодированного битового видеопотока, параметров детализации в битовом потоке, когда конкретные признаки используются в кодировании и декодировании. Во многих случаях, стандарт видеокодека также обеспечивает подробности об операциях декодирования, которые декодер должен выполнять, чтобы достигать согласовывающихся результатов в декодировании. Помимо стандартов кодеков, различные коммерческие форматы кодеков определяют другие варианты выбора для синтаксиса кодированного битового видеопотока и соответствующих операций декодирования.
[003] В общем, способы сжатия видео включают в себя "интра-картиночное сжатие" и "интер-картиночное сжатие". Способы интра-картиночного сжатия сжимают индивидуальные картинки, и способы интер-картиночного сжатия сжимают картинки со ссылкой на предшествующую и/или последующую картинку (часто называемую опорная или анкерная картинка) или картинки.
[004] Способы интер-картиночного сжатия часто используют оценку движения и компенсацию движения, чтобы уменьшать битрейт посредством использования временной избыточности в видеопоследовательности. Оценка движения является обработкой для оценки движения между картинками. В одном общем способе, кодер с использованием оценки движения пытается сопоставить текущий блок значений отсчетов в текущей картинке с блоком-кандидатом такого же размера в области поиска в другой картинке, опорной картинке. Когда кодер находит точное или "достаточно близкое" соответствие в области поиска в опорной картинке, кодер параметризует изменение в положении между текущим блоком и блоком-кандидатом в качестве данных движения (как, например, вектора движения ("MV")). MV стандартным образом является двумерным значением, имеющим горизонтальную компоненту MV, которая указывает пространственное смещение влево или вправо, и вертикальную компоненту MV, которая указывает пространственное смещение вверх или вниз. В общем, компенсация движения является обработкой восстановления картинок из опорной картинки (картинок) с использованием данных движения.
[005] MV может указывать пространственное смещение исходя из целого числа положений сетки отсчетов, начиная с совместно расположенного положения в опорной картинке для текущего блока. Например, для текущего блока в положении (32, 16) в текущей картинке, MV (-3, 1) указывает положение (29, 17) в опорной картинке. Или, MV может указывать пространственное смещение исходя из дробного числа положений сетки отсчетов от совместно расположенного положения в опорной картинке для текущего блока. Например, для текущего блока в положении (32, 16) в текущей картинке, MV (-3.5, 1.25) указывает положение (28.5, 17.25) в опорной картинке. Чтобы определять значения отсчетов в дробных смещениях в опорной картинке, кодер обычно осуществляет интерполяцию между значениями отсчетов в положениях целочисленных отсчетов. Такая интерполяция может быть вычислительно интенсивной. Во время компенсации движения, декодер также выполняет интерполяцию, как необходимо, чтобы вычислять значения отсчетов в дробных смещениях в опорных картинках.
[006] Разные стандарты и форматы видеокодеков используют векторы MV с разными точностями MV. Для точности MV целочисленного отсчета, компонента MV указывает целое число положений сетки отсчетов для пространственного смещения. Для точности MV дробного отсчета, как, например, точности MV 1/2-отсчета или точности MV 1/4-отсчета, компонента MV может указывать целое число положений сетки отсчетов или дробное число положений сетки отсчетов для пространственного смещения. Например, если точность MV является точностью MV 1/4-отсчета, компонента MV может указывать пространственное смещение, равное 0 отсчетов, 0.25 отсчетов, 0.5 отсчетов, 0.75 отсчетов, 1.0 отсчетов, 1.25 отсчетов, и так далее. Некоторые стандарты и форматы видеокодеков поддерживают переключение точности MV во время кодирования. Решения стороны кодера в отношении того, какую точность MV использовать, не осуществляются эффективно, однако, в некоторых сценариях кодирования.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[007] В итого, подробное описание представляет новаторское решение в операциях стороны кодера для выбора точности вектора движения ("MV"). Например, когда видеокодер кодирует видео, видеокодер определяет точность MV для единицы видео.
[008] Согласно одному аспекту новаторских решений, здесь описанных, когда он определяет точность MV для единицы, видеокодер может идентифицировать набор значений MV, имеющих точность MV дробного отсчета. Видеокодер может выбирать точность MV для единицы на основе, по меньшей мере, частично преобладания, внутри набора значений MV, значений MV, имеющих дробную часть, равную нулю.
[009] Согласно другому аспекту новаторских решений, здесь описанных, когда он определяет точность MV для единицы, видеокодер может выполнять анализ отношения искажения к скорости передачи, чтобы выбирать между множеством точностей MV, которые включают в себя одну или более точностей MV дробного отсчета и точность MV целочисленного отсчета. Анализ отношения искажения к скорости передачи склоняется к точности MV целочисленного отсчета посредством: (a) масштабирования стоимости искажения, (b) добавления штрафа к стоимости искажения, (c) масштабирования стоимости битрейта, (d) добавления штрафа к стоимости битрейта, и/или (e) регулировки коэффициента множителя Лагранжа.
[010] Согласно другому аспекту новаторских решений, здесь описанных, когда он определяет точность MV для единицы, видеокодер может собирать информацию о видео и выбирать точность MV для единицы, из множества точностей MV, на основе, по меньшей мере, частично собранной информации. Множество точностей MV включает в себя одну или более точностей MV дробного отсчета и точность MV целочисленного отсчета.
[011] Новаторские решения для вариантов выбора стороны кодера для выбора точности MV могут осуществляться как часть способа, как часть вычислительного устройства, выполненного с возможностью выполнять способ, или как часть материальных считываемых компьютером носителей, хранящих исполняемые компьютером инструкции для предписания вычислительному устройству выполнять способ. Различные новаторские решения могут использоваться в комбинации или раздельно.
[012] Предшествующие и другие задачи, признаки, и преимущества изобретения станут более ясными из последующего подробного описания, которое продолжается со ссылкой на сопровождающие фигуры.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[013] Фиг. 1 является диаграммой иллюстративной вычислительной системы, в которой могут осуществляться некоторые описанные варианты осуществления.
[014] Фиг. 2a и 2b являются диаграммами иллюстративных сетевых сред, в которых могут осуществляться некоторые описанные варианты осуществления.
[015] Фиг. 3 является диаграммой иллюстративной системы кодера, совместно с которой могут осуществляться некоторые описанные варианты осуществления.
[016] Фиг. 4a и 4b являются диаграммами, иллюстрирующими иллюстративный видеокодер, совместно с которым могут осуществляться некоторые описанные варианты осуществления.
[017] Фиг. 5 является диаграммой, иллюстрирующей среду рабочего стола компьютера с контентом, который может обеспечивать ввод для захвата экрана.
[018] Фиг. 6 является диаграммой, иллюстрирующей видео со смешанным контентом с естественным видеоконтентом и искусственным видеоконтентом.
[019] Фиг. 7a и 7b являются диаграммами, иллюстрирующими компенсацию движения со значениями MV, имеющими пространственное смещение целочисленных отсчетов и пространственное смещение дробных отсчетов, соответственно.
[020] Фиг. 8 является блок-схемой последовательности операций, иллюстрирующей обобщенный способ для адаптации точности MV во время кодирования.
[021] Фиг. 9 является блок-схемой последовательности операций, иллюстрирующей иллюстративный способ для адаптации точности MV во время кодирования с использованием подхода низкой сложности.
[022] Фиг. 10 является диаграммой, иллюстрирующей разные области картинки согласно некоторым вариантам подхода низкой сложности.
ПОДРОБНОЕ ОПИСАНИЕ
[023] Подробное описание представляет новаторские решения в выборе точности вектора движения ("MV") во время кодирования. Эти подходы могут обеспечивать сжатие, которое является эффективным исходя из производительности отношения искажения к скорости передачи и/или вычислительной эффективности. Например, видеокодер определяет точность MV для единицы видео из множества точностей MV, которые включают в себя одну или более точностей MV дробного отсчета и точность MV целочисленного отсчета. Видеокодер может идентифицировать набор значений MV, имеющих точность MV дробного отсчета, затем выбирать точность MV для единицы на основе, по меньшей мере, частично преобладания значений MV (внутри набора), имеющих дробную часть, равную нулю. Или, видеокодер может выполнять анализ отношения искажения к скорости передачи, где анализ отношения искажения к скорости передачи склоняется к точности MV целочисленного отсчета. Или, видеокодер может собирать информацию о видео и выбирать точность MV для единицы на основе, по меньшей мере, частично собранной информации. Или, видеокодер может определять точность MV для единицы видео некоторым другим способом.
[024] Хотя операции, здесь описанные, находятся в местах, описанных как выполняющиеся посредством видеокодера, во многих случаях операции могут выполняться посредством другого типа инструмента обработки мультимедиа.
[025] Некоторые из новаторских решений, здесь описанных, проиллюстрированы со ссылкой на синтаксические элементы и операции, характерные для стандарта HEVC. Новаторские решения, здесь описанные, также могут осуществляться для других стандартов или форматов.
[026] Более широко, являются возможными различные альтернативы для примеров, здесь описанных. Например, некоторые из способов, здесь описанных, могут изменяться посредством изменения порядка описанных действий способа, посредством разделения, повторения, или пропуска некоторых действий способа, и т.д. Различные аспекты раскрытой технологии может использоваться в комбинации или раздельно. Разные варианты осуществления используют одно или более из описанных новаторских решений. Некоторые из новаторских решений, здесь описанных, направлены на одну или более из проблем, отмеченных в уровне техники. Обычно, заданный способ/инструмент не решает все такие проблемы.
I. ИЛЛЮСТРАТИВНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ.
[027] Фиг. 1 иллюстрирует обобщенный пример подходящей вычислительной системы (100), в которой могут осуществляться несколько из описанных новаторских решений. Вычислительная система (100) не предназначена, чтобы предлагать какое-либо ограничение в отношении объема использования или функциональных возможностей, так как новаторские решения могут осуществляться в различных вычислительных системах, включающих в себя вычислительные системы специального назначения, выполненные с возможностью для кодирования видео.
[028] Со ссылкой на фиг. 1, вычислительная система (100) включает в себя один или более блоков (110, 115) обработки и память (120, 125). Блоки (110, 115) обработки исполняют исполняемые компьютером инструкции. Блок обработки может быть центральным блоком обработки ("CPU"), процессором в специализированной интегральной схеме ("ASIC") или любым другим типом процессора. В многопроцессорной системе, множество блоков обработки исполняют исполняемые компьютером инструкции, чтобы увеличивать мощность обработки. Например, фиг. 1 показывает центральный блок (110) обработки также как блок обработки графики или блок (115) совместной обработки. Материальная память (120, 125) может быть энергозависимой памятью (например, регистрами, кэшем, RAM), энергонезависимой памятью (например, ROM, EEPROM, флэш-памятью, и т.д.), или некоторой комбинацией упомянутых двух, доступной для блока (блоков) обработки. Память (120, 125) хранит программное обеспечение (180), осуществляющее одно или более новаторских решений для выбора точности MV во время кодирования, в форме исполняемых компьютером инструкций, подходящих для исполнения посредством блока (блоков) обработки.
[029] Вычислительная система может иметь дополнительные признаки. Например, вычислительная система (100) включает в себя хранилище (140), одно или более устройств (150) ввода, одно или более устройств (160) вывода, и одно или более соединений (170) передачи данных. Механизм взаимного соединения (не показан), такой как шина, контроллер, или сеть взаимно соединяет компоненты вычислительной системы (100). Обычно, программное обеспечение операционной системы (не показано) обеспечивает операционную среду для другого программного обеспечения, исполняющегося в вычислительной системе (100), и координирует действия компонентов вычислительной системы (100).
[030] Материальное хранилище (140) может быть съемным или несъемным, и включает в себя магнитные диски, магнитные ленты или кассеты, CD-ROM, DVD, или любой другой носитель, который может использоваться, чтобы хранить информацию и к которому может осуществляться доступ внутри вычислительной системы (100). Хранилище (140) хранит инструкции для программного обеспечения (180), осуществляющего одно или более новаторских решений для выбора точности MV во время кодирования.
[031] Устройство (устройства) (150) ввода может быть сенсорным устройством ввода, таким как клавиатура, мышь, перо, или шаровой указатель, речевым устройством ввода, сканирующим устройством, или другим устройством, которое обеспечивает ввод в вычислительную систему (100). Для видео, устройство (устройства) (150) ввода может быть камерой, видеокартой, картой TV-тюнера, модулем захвата экрана, или аналогичным устройством, которое принимает видеовход в аналоговой или цифровой форме, или CD-ROM или CD-RW, которое считывает видеовход в вычислительную систему (100). Устройство (устройства) (160) вывода может быть устройством отображения, принтером, громкоговорителем, устройством записи CD, или другим устройством, которое обеспечивает вывод из вычислительной системы (100).
[032] Соединение (соединения) (170) передачи данных обеспечивает возможность связи по носителю передачи данных с другой вычислительной сущностью. Носитель передачи данных передает информацию, такую как исполняемые компьютером инструкции, аудио или видео ввод или вывод, или другие данные в модулированном сигнале данных. Модулированный сигнал данных является сигналом, который имеет одну или более из его характеристик, установленными или измененными, таким образом, чтобы кодировать информацию в сигнале. В качестве примера, и не ограничения, носители передачи данных могут использовать электрическую, оптическую, RF, или другую несущую.
[033] Новаторские решения могут быть описаны в общем контексте считываемых компьютером носителей. Считываемые компьютером носители являются любыми доступными материальными носителями, к которым может осуществляться доступ внутри вычислительной среды. В качестве примера, и не ограничения, с вычислительной системой (100), считываемые компьютером носители включают в себя память (120, 125), хранилище (140), и комбинации любых из вышеупомянутых.
[034] Новаторские решения могут быть описаны в общем контексте исполняемых компьютером инструкций, как, например, инструкций, включенных в программные модули, которые исполняются в вычислительной системе на целевом реальном или виртуальном процессоре. В общем, программные модули включают в себя процедуры, программы, библиотеки, объекты, классы, компоненты, структуры данных, и т.д., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Функциональные возможности программных модулей могут комбинироваться или разделяться между программными модулями, как требуется в различных вариантах осуществления. Исполняемые компьютером инструкции для программных модулей могут выполняться внутри локальной или распределенной вычислительной системы.
[035] Признаки "система" и "устройство" используются здесь взаимозаменяемо. Если контекст явно не указывает иное, никакой признак не имеет следствием какое-либо ограничение на тип вычислительной системы или вычислительного устройства. В общем, вычислительная система или вычислительное устройство может быть локальным или распределенным, и может включать в себя любую комбинацию аппаратного обеспечения специального назначения и/или аппаратного обеспечения с программным обеспечением, осуществляющим функциональные возможности, здесь описанные.
[036] Раскрытые способы также может осуществляться с использованием специализированного вычислительного аппаратного обеспечения, сконфигурированного с возможностью выполнять любой из раскрытых способов. Например, раскрытые способы могут осуществляться посредством интегральной схемы (например, ASIC, такой как цифровой сигнальный процессор ("DSP") ASIC, блоком обработки графики ("GPU"), или программируемым логическим устройством ("PLD"), таким как программируемая пользователем вентильная матрица ("FPGA")), специально сконструированной или сконфигурированной, чтобы осуществлять любой из раскрытых способов.
[037] Для представления, подробное описание использует признаки, такие как "определять" и "использовать", чтобы описывать компьютерные операции в вычислительной системе. Эти признаки являются высокоуровневыми абстракциями для операций, выполняемых посредством компьютера, и не должны смешиваться с действиями, выполняемыми человеком. Фактические компьютерные операции, соответствующие этим признакам, изменяются в зависимости от варианта осуществления. Как здесь используется, признак "оптимизировать" (включая сюда вариации, такие как оптимизация и оптимизирующий) указывает на выбор среди вариантов выбора при заданном объеме принятия решения, и не имеет следствием, что оптимизированный выбор является "наилучшим" или "оптимальным" выбором для расширенного объема выборов.
II. ИЛЛЮСТРАТИВНЫЕ СЕТЕВЫЕ СРЕДЫ.
[038] Фиг. 2a и 2b показывают иллюстративные сетевые среды (201, 202), которые включают в себя видеокодеры (220) и декодеры (270) видео. Кодеры (220) и декодеры (270) соединены по сети (250) с использованием соответствующего протокола связи. Сеть (250) может включать в себя сеть Интернет или другую компьютерную сеть.
[039] В сетевой среде (201), показанной на фиг. 2a, каждый инструмент (210) связи реального времени ("RTC") включает в себя как кодер (220), так и декодер (270) для двунаправленной передачи данных. Заданный кодер (220) может формировать вывод, согласующийся с вариантом или расширением стандарта HEVC (также известного как H.265), стандарта SMPTE 421M, стандарта ISO/IEC 14496-10 (также известного как H.264 или AVC), другого стандарта, или коммерческого формата, с соответствующим декодером (270), принимающим кодированные данные от кодера (220). Двунаправленная передача данных может быть частью видео конференц-связи, телефонного видеовызова, или другим сценарием связи двух сторон или множества сторон. Хотя сетевая среда (201) на фиг. 2a включает в себя два инструмента (210) связи реального времени, сетевая среда (201) может вместо этого включать в себя три или более инструментов (210) связи реального времени, которые участвуют в связи множества сторон.
[040] Инструмент (210) связи реального времени управляет кодированием посредством кодера (220). Фиг. 3 показывает иллюстративную систему (300) кодера, которая может быть включена в инструмент (210) связи реального времени. Альтернативно, инструмент (210) связи реального времени использует другую систему кодера. Инструмент (210) связи реального времени также управляет декодированием посредством декодера (270).
[041] В сетевой среде (202), показанной на фиг. 2b, инструмент (212) кодирования включает в себя кодер (220), который кодирует видео для доставки в множество инструментов (214) проигрывания, которые включают в себя декодеры (270). Однонаправленная передача данных может обеспечиваться для системы видеонаблюдения, системы наблюдения веб-камерами, модуля захвата экрана, представления конференц-связи удаленного рабочего стола или другого сценария, в котором видео кодируется и посылается из одного местоположения в одно или более другие местоположения. Хотя сетевая среда (202) на фиг. 2b включает в себя два инструмента (214) проигрывания, сетевая среда (202) может включать в себя больше или меньше инструментов (214) проигрывания. В общем, инструмент (214) проигрывания осуществляет связь с инструментом (212) кодирования, чтобы определять поток видео для приема инструментом (214) проигрывания. Инструмент (214) проигрывания принимает поток, буферизует принятые кодированные данные для соответствующего периода, и начинает декодирование и проигрывание.
[042] Фиг. 3 показывает иллюстративную систему (300) кодера, которая может быть включена в инструмент (212) кодирования. Альтернативно, инструмент (212) кодирования использует другую систему кодера. Инструмент (212) кодирования также может включать в себя логику контроллера стороны сервера для управления соединениями с одним или более инструментами (214) проигрывания. Инструмент (214) проигрывания также может включать в себя логику контроллера клиентской стороны для управления соединениями с инструментом (212) кодирования.
III. ИЛЛЮСТРАТИВНЫЕ СИСТЕМЫ КОДЕРА.
[043] Фиг. 3 является блок-схемой иллюстративной системы (300) кодера, совместно с которой могут осуществляться некоторые описанные варианты осуществления. Система (300) кодера может быть инструментом кодирования общего назначения, выполненным с возможностью работы в любом из множества режимов кодирования, как, например, режиме кодирования с низкой задержкой для связи реального времени, режиме транскодирования, и режиме кодирования с более высокой задержкой для формирования мультимедиа для проигрывания из файла или потока, или она может быть инструментом кодирования специального назначения, выполненным с возможностью для одного такого режима кодирования. Система (300) кодера может осуществляться как модуль операционной системы, как часть прикладной библиотеки или как изолированное приложение. В целом, система (300) кодера принимает последовательность видеокадров (311) источника от источника (310) видео и формирует кодированные данные в качестве вывода в канал (390). Вывод кодированных данных в канал может включать в себя контент, кодированный с использованием выбранной точности MV.
[044] Источник (310) видео может быть камерой, картой тюнера, запоминающими носителями, модулем захвата экрана, или другим источником цифрового видео. Источник (310) видео формирует последовательность видеокадров со скоростью кадров, равной, например, 30 кадрам в секунду. Как здесь используется, признак "кадр", в общем, указывает на исходные, кодированные или восстановленные данные изображения. Для видео с прогрессивным сканированием, кадр является кадром видео с прогрессивным сканированием. Для чередующегося видео, в иллюстративных вариантах осуществления, для кадра чередующегося видео чередование может устраняться до кодирования. Альтернативно, два поля дополнительно чередующегося видео кодируются вместе как одиночный видеокадр или кодируются как два отдельно кодированных поля. Помимо указания кадра видео с прогрессивным сканированием или кадра видео с чередующимся сканированием, признак "кадр" или "картинка" может указывать одиночное не-спаренное видеополе, комплементарную пару видеополей, плоскость видеообъекта, которая представляет видеообъект в заданный момент времени, или область интереса в более большом изображении. Плоскость видеообъекта или область может быть частью более большого изображения, которое включает в себя множество объектов или областей сцены.
[045] Прибывающий исходный кадр (311) сохраняется в области (320) памяти временного хранения исходных кадров, которая включает в себя множество областей (321, 322,..., 32n) хранения буферов кадров. Буфер (321, 322, и т.д.) кадров хранит один исходный кадр в области (320) хранения исходных кадров. После того, как один или более из исходных кадров (311) были сохранены в буферах (321, 322, и т.д.) кадров, модуль (330) выбора кадров выбирает индивидуальный исходный кадр из области (320) хранения исходных кадров. Порядок, в котором кадры выбираются модулем (330) выбора кадров для ввода в кодер (340), может отличаться от порядка, в котором кадры формируются источником (310) видео, например, кодирование некоторых кадров может задерживаться в порядке, чтобы обеспечивать возможность сначала кодировать некоторые более поздние кадры и, таким образом, обеспечивать временное обратное предсказание. Перед кодером (340), система (300) кодера может включать в себя процессор предварительной обработки (не показан), который выполняет предварительную обработку (например, фильтрацию) выбранного кадра (331) до кодирования. Предварительная обработка может включать в себя преобразование цветового пространства в первичные (например, яркости) и вторичные (например, разности цветности в направлении к красному и в направлении к синему) компоненты и обработку повторной дискретизации (например, чтобы уменьшать пространственное разрешение компонентов цветности) для кодирования. Обычно, до кодирования, видео преобразуется в цветовое пространство, такое как YUV, в котором значения отсчетов компоненты яркости (Y) представляют значения яркости или интенсивности, и значения отсчетов компонент цветности (U, V) представляют значения цветовой разности. Значения отсчетов цветности могут дополнительно дискретизироваться на более низкую частоту дискретизации цветности (например, для формата YUV 4:2:0 или YUV 4:2:2), или значения отсчетов цветности могут иметь такое же разрешение, что и значения отсчетов яркости (например, для формата YUV 4:4:4). В формате YUV 4:2:0, компоненты цветности дискретизируются с понижением с коэффициентом, равным двум, по горизонтали и с коэффициентом, равным двум, по вертикали. В формате YUV 4:2:2, компоненты цветности дискретизируются с понижением с коэффициентом, равным двум, по горизонтали. Или, видео может кодироваться в другом формате (например, формате RGB 4:4:4).
[046] Кодер (340) кодирует выбранный кадр (331), чтобы формировать кодированный кадр (341) и также формирует сигналы (342) операций управления памятью ("MMCO") или информацию набора опорных картинок ("RPS"). Если текущий кадр не является первым кадром, который кодируется, при выполнении его обработки кодирования, кодер (340) может использовать один или более ранее кодированные/декодированные кадры (369), которые были сохранены в области (360) памяти временного хранения декодированных кадров. Такие сохраненные декодированные кадры (369) используются в качестве опорных кадров для интер-кадрового предсказания контента текущего исходного кадра (331). Информация (342) MMCO/RPS указывает декодеру, какие восстановленные кадры могут использоваться в качестве опорных кадров, и, следовательно, должна сохраняться в области хранения кадров.
[047] В общем, кодер (340) включает в себя множество модулей кодирования, которые выполняют задачи кодирования, как, например, разделение на мозаичные элементы, оценка интра-предсказания и предсказание, оценка движения и компенсация, частотные преобразования, квантование и энтропийное кодирование. Точные операции, выполняемые кодером (340), могут изменяться в зависимости от формата сжатия. Формат выходных кодированных данных может быть вариантом или расширением формата HEVC (H.265), формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[048] Кодер (340) может разделять кадр на множество мозаичных элементов одного и того же размера или разных размеров. Например, кодер (340) разделяет кадр вдоль рядов мозаичных элементов и столбцов мозаичных элементов, которые, с границами кадра, определяют горизонтальные и вертикальные границы мозаичных элементов внутри кадра, где каждый мозаичный элемент является прямоугольной областью. Мозаичные элементы часто используются, чтобы обеспечивать варианты выбора для параллельной обработки. Кадр также может быть организован как один или более слайсов, где слайс может быть целым кадром или областью кадра. Слайс может декодироваться независимо от других слайсов в кадре, что улучшает устойчивость к ошибкам. Контент слайса или мозаичного элемента дополнительно разделяется на блоки или другие наборы отсчетов в целях кодирования и декодирования.
[049] Для синтаксиса согласно стандарту HEVC, кодер разделяет контент кадра (или слайса или мозаичного элемента) на единицы дерева кодирования. Единица дерева кодирования ("CTU") включает в себя значения отсчетов яркости, организованные как блок дерева кодирования ("CTB") яркости, и соответствующие значения отсчетов цветности, организованные как два блока CTB цветности. Размер единицы CTU (и ее блоков CTB) выбирается кодером. CTB яркости может содержать, например, 64×64, 32×32 или 16×16 значений отсчетов яркости. CTU включает в себя одну или более единиц кодирования. Единица кодирования ("CU") имеет блок кодирования ("CB") яркости и два соответствующие блока CB цветности. Например, CTU с CTB яркости 64×64 и двумя блоками CTB цветности 64×64 (формат YUV 4:4:4) может разделяться на четыре единицы CU, при этом каждая CU включает в себя CB яркости 32×32 и два блока CB цветности 32×32, и при этом каждая CU возможно разделяется дополнительно на более малые единицы CU. Или, в качестве другого примера, CTU с CTB яркости 64×64 и двумя блоками CTB цветности 32×32 (формат YUV 4:2:0) может разделяться на четыре единицы CU, при этом каждая CU включает в себя CB яркости 32×32 и два блока CB цветности 16×16, и при этом каждая CU возможно разделяется дополнительно на более малые единицы CU. Наименьший допустимый размер единицы CU (например, 8×8, 16×16) может сигнализироваться в битовом потоке.
[050] В общем, CU имеет режим предсказания, такой как интер или интра. CU включает в себя одну или более единиц предсказания в целях сигнализации информации предсказания (такой как подробности режима предсказания, значения смещения, и т.д.) и/или обработки предсказания. Единица предсказания ("PU") имеет блок предсказания ("PB") яркости и два блока PB цветности. Для интра-предсказанной CU, PU имеет такой же размер, что и CU, если CU не имеет наименьший размер (например, 8×8). В этом случае, CU может разделяться на четыре более малых единицы PU (например, каждая 4×4, если наименьший размер CU равняется 8×8) или PU может иметь наименьший размер CU, как указано посредством синтаксического элемента для CU. CU также имеет одну или более единиц преобразования для целей кодирования/декодирования остатка, где единица преобразования ("TU") имеет блок преобразования ("TB") яркости и два блока TB цветности. PU в интра-предсказанной CU может содержать одиночную TU (равную в размере единице PU) или множество единиц TU. Кодер принимает решение в отношении того, как разделять видео на единицы CTU, единицы CU, единицы PU, единицы TU, и т.д. В контексте стандарта H.264/AVC, признак "макроблок" указывает область в форме блока, аналогичную области единицы CTU для стандарта H.265/HEVC, и признак "подраздел макроблока" указывает область в форме блока, аналогичную области единицы CU или единицы PU. Как здесь используется, признак "блок" может указывать CB, PB, TB, CTU, CU, PU, TU, макроблок, подраздел макроблока или другой набор значений отсчетов, в зависимости от контекста.
[051] Возвращаясь к фиг. 3, кодер представляет интра-кодированный блок исходного кадра (331) исходя из предсказания из других, ранее восстановленных значений отсчетов в кадре (331). Для интра-предсказания на основе копии блока ("BC"), модуль интра-картиночной оценки оценивает смещение блока по отношению к другим, ранее восстановленным значениям отсчетов. Опорная область интра-кадрового предсказания (или область интра-предсказания, для краткости) является областью отсчетов в кадре, которые используются, чтобы генерировать значения предсказания BC для блока. Область интра-кадрового предсказания может указываться с помощью значения вектора блока ("BV") (определенного в оценке BV). Для интра-пространственного предсказания для блока, модуль интра-картиночной оценки оценивает экстраполяцию соседних восстановленных значений отсчетов в блок. Модуль интра-картиночной оценки может выводить информацию предсказания (такую как значения BV для интра-BC предсказания или режим предсказания (направление) для интра-пространственного предсказания), которая энтропийно кодируется. Модуль интра-кадрового предсказания применяет информацию предсказания, чтобы определять значения интра-предсказания.
[052] Кодер (340) представляет интер-кадрово кодированный, предсказанный блок исходного кадра (331) исходя из предсказания из опорных кадров. Модуль оценки движения оценивает движение блока по отношению к одному или более опорным кадрам (369). Модуль оценки движения может выбирать точность вектора движения ("MV") (например, точность MV целочисленного отсчета, точность MV 1/2-отсчета, или точность MV 1/4-отсчета), как здесь описано, затем использовать выбранную точность MV во время оценки движения. Когда используются множество опорных кадров, множество опорных кадров могут быть из разных временных направлений или одного и того же временного направления. Опорная область предсказания с компенсацией движения является областью отсчетов в опорном кадре (кадрах), которые используются, чтобы генерировать значения предсказания с компенсацией движения для блока отсчетов текущего кадра. Модуль оценки движения выводит информацию движения, такую как информация MV, которая энтропийно кодируется. Модуль компенсации движения применяет значения MV, имеющие выбранную точность MV, к опорным кадрам (369), чтобы определять значения предсказания с компенсацией движения для интер-кадрового предсказания.
[053] Кодер может определять различия (если есть какие-либо) между значениями предсказания блока (интра или интер) и соответствующие исходные значения. Эти значения остатка предсказания дополнительно кодируются с использованием частотного преобразования (если частотное преобразование не пропускается), квантования и энтропийного кодирования. Например, кодер (340) устанавливает значения для параметра квантования ("QP") для картинки, мозаичного элемента, слайса и/или другой части видео, и квантует коэффициенты преобразования соответствующим образом. Энтропийный кодер кодера (340) сжимает значения квантованных коэффициентов преобразования также как некоторую стороннюю информацию (например, информацию MV, выбранную точность MV, значения BV, значения QP, решения в отношении режима, выборы параметров). Обычные способы энтропийного кодирования включают в себя экспоненциальное кодирование Голомба, кодирование Голомба-Райса, арифметическое кодирование, дифференциальное кодирование, кодирование Хаффмана, кодирование длин серий, кодирование последовательностей переменной длины с использованием кодов переменной длины ("V2V"), кодирование последовательностей переменной длины с использованием кодов фиксированной длины ("V2F"), кодирование Лемпеля-Зива ("LZ"), кодирование со словарем, энтропийное кодирование с разделением на вероятностные интервалы ("PIPE"), и комбинации вышеупомянутого. Энтропийный кодер может использовать разные способы кодирования для разных типов информации, может применять множество способов в комбинации (например, посредством применения кодирования Голомба-Райса, за которым следует арифметическое кодирование), и может выбирать из множества кодовых таблиц в пределах конкретного способа кодирования. В некоторых вариантах реализации, частотное преобразование может пропускаться. В этом случае, значения остатка предсказания могут квантоваться и энтропийно кодироваться.
[054] Адаптивный фильтр устранения блочности включается в контур компенсации движения (то есть, "внутриконтурную" фильтрацию) в кодере (340), чтобы сглаживать разрывы между рядами и/или столбцами границ блоков в декодированном кадре. Другая фильтрация (такая как фильтрация устранения окантовочных помех, адаптивная контурная фильтрация ("ALF"), или фильтрация адаптивного к отсчетам смещения ("SAO"); не показаны) может альтернативно или дополнительно применяться в качестве операций внутриконтурной фильтрации.
[055] Кодированные кадры (341) и информация (342) MMCO/RPS (или информация, эквивалентная информации (342) MMCO/RPS, так как зависимости и структуры упорядочения для кадров являются уже известными в кодере (340)) обрабатываются посредством эмулятора (350) обработки декодирования. Эмулятор (350) обработки декодирования осуществляет некоторые из функциональных возможностей декодера, например, задачи декодирования для восстановления опорных кадров. Способом, совместимым с информацией (342) MMCO/RPS, эмулятор (350) обработки декодирования определяет, должен ли заданный кодированный кадр (341) восстанавливаться и сохраняться для использования в качестве опорного кадра в интер-кадровом предсказании последующих кадров, подлежащих кодированию. Если кодированный кадр (341) должен сохраняться, эмулятор (350) обработки декодирования моделирует обработку декодирования, которая бы проводилась декодером, который принимает кодированный кадр (341), и формирует соответствующий декодированный кадр (351). Таким способом, когда кодер (340) использует декодированный кадр (кадры) (369), которые были сохранены в области (360) хранения декодированных кадров, эмулятор (350) обработки декодирования также использует декодированный кадр (кадры) (369) из области (360) хранения как часть обработки декодирования.
[056] Область (360) памяти временного хранения декодированных кадров включает в себя множество областей (361, 362,..., 36n) хранения буферов кадров. Способом, совместимым с информацией (342) MMCO/RPS, эмулятор (350) обработки декодирования управляет контентами области (360) хранения, чтобы идентифицировать любые буферы (361, 362, и т.д.) кадров с кадрами, которые более не нужны кодеру (340) для использования в качестве опорных кадров. После моделирования обработки декодирования, эмулятор (350) обработки декодирования сохраняет вновь декодированный кадр (351) в буфере (361, 362, и т.д.) кадров, который был идентифицирован таким образом.
[057] Кодированные кадры (341) и информация (342) MMCO/RPS буферизуются во временной области (370) кодированных данных. Кодированные данные, которые агрегируются в области (370) кодированных данных, содержат, как часть синтаксиса элементарного кодированного битового видеопотока, кодированные данные для одной или более картинок. Кодированные данные, которые агрегируются в области (370) кодированных данных, также могут включать в себя метаданные мультимедиа, относящиеся к кодированным видеоданным (например, как один или более параметров в одном или более сообщениях дополнительной информации расширения ("SEI") или сообщениях информации удобства в использовании видео ("VUI")).
[058] Агрегированные данные (371) из временной области (370) кодированных данных обрабатываются посредством канального кодера (380). Канальный кодер (380) может пакетировать и/или мультиплексировать агрегированные данные для передачи или сохранения в качестве мультимедийного потока (например, согласно потоку мультимедийной программы или формату транспортного потока, такому как ITU-T H.222.0 | ISO/IEC 13818-1, или формату транспортного протокола реального времени сети Интернет, такому как IETF RFC 3550), в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса потока передачи мультимедиа. Или, канальный кодер (380) может организовывать агрегированные данные для сохранения в виде файла (например, согласно формату контейнера мультимедиа, такому как ISO/IEC 14496-12), в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса файла хранения мультимедиа. Или, более широко, канальный кодер (380) может осуществлять один или более протоколов мультиплексирования мультимедийной системы или транспортных протоколов, в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса протокола (протоколов). Канальный кодер (380) обеспечивает вывод в канал (390), который представляет хранилище, соединение передачи данных, или другой канал для вывода. Канальный кодер (380) или канал (390) также может включать в себя другие элементы (не показаны), например, для кодирования прямой коррекции ошибок ("FEC") и модуляции аналогового сигнала.
IV. ИЛЛЮСТРАТИВНЫЕ ВИДЕОКОДЕРЫ.
[059] Фиг. 4a и 4b являются блок-схемой обобщенного видеокодера (400), совместно с которым могут осуществляться некоторые описанные варианты осуществления. Кодер (400) принимает последовательность видеокартинок, включающих в себя текущую картинку, в качестве входного видеосигнала (405) и формирует кодированные данные в кодированном битовом видеопотоке (495) в качестве вывода.
[060] Кодер (400) основывается на блоках и использует блочный формат, который зависит от реализации. Блоки могут дополнительно подразделяться на разных этапах, например, на этапах предсказания, частотного преобразования и/или энтропийного кодирования. Например, картинка может разделяться на блоки 64×64, блоки 32×32 или блоки 16×16, которые могут в свою очередь разделяться на более малые блоки значений отсчетов для кодирования и декодирования. В вариантах осуществления кодирования для стандарта HEVC, кодер разделяет картинку на единицы CTU (блоки CTB), единицы CU (блоки CB), единицы PU (блоки PB) и единицы TU (блоки TB).
[061] Кодер (400) сжимает картинки с использованием интра-картиночного кодирования и/или интер-картиночного кодирования. Многие из компонентов кодера (400) используются как для интра-картиночного кодирования, так и для интер-картиночного кодирования. Точные операции, выполняемые этими компонентами, могут изменяться в зависимости от типа информации, которая сжимается.
[062] Модуль (410) мозаичных элементов необязательно разделяет картинку на множество мозаичных элементов одного и того же размера или разных размеров. Например, модуль (410) мозаичных элементов разделяет картинку вдоль рядов мозаичных элементов и столбцов мозаичных элементов, которые, с границами картинки, определяют горизонтальные и вертикальные границы мозаичных элементов внутри картинки, где каждый мозаичный элемент является прямоугольной областью.
[063] Общее управление (420) кодированием принимает картинки для входного видеосигнала (405) также как обратную связь (не показана) от различных модулей кодера (400). В целом, общее управление (420) кодированием обеспечивает сигналы управления (не показаны) в другие модули (такие как модуль (410) мозаичных элементов, модуль преобразования/модуль масштабирования/модуль квантования (430), модуль масштабирования/модуль обратного преобразования (435), модуль (440) интра-картиночной оценки, модуль (450) оценки движения и модуль переключения интра/интер), чтобы устанавливать и изменять параметры кодирования во время кодирования. В частности, совместно с модулем (450) оценки движения, общее управление (420) кодированием может определять точность MV во время кодирования. Общее управление (420) кодированием также может оценивать промежуточные результаты во время кодирования, например, выполняя анализ отношения искажения к скорости передачи. Общее управление (420) кодированием формирует общие данные (422) управления, которые указывают решения, принимаемые во время кодирования, так что соответствующий декодер может принимать совместимые решения. Общие данные (422) управления обеспечиваются в модуль форматирования заголовков/энтропийный кодер (490).
[064] Если текущая картинка предсказывается с использованием интер-картиночного предсказания, модуль (450) оценки движения оценивает движение блоков значений отсчетов текущей картинки входного видеосигнала (405) по отношению к одной или более опорным картинкам. Модуль (450) оценки движения может выбирать точность вектора движения ("MV") (например, точность MV целочисленного отсчета, точность MV 1/2-отсчета, или точность MV 1/4-отсчета), как здесь описано, затем использовать выбранную точность MV во время оценки движения. Буфер (470) декодированных картинок буферизует одну или более восстановленных ранее кодированных картинок для использования в качестве опорных картинок. Когда используется множество опорных картинок, множество опорных картинок может быть из разных временных направлений или одного и того же временного направления. Модуль (450) оценки движения формирует в качестве сторонней информации данные (452) движения, такие как данные MV, значения индекса режима слияния и данные выбора опорных картинок, также как стороннюю информацию, которая указывает выбранную точность MV. Сторонняя информация, включающая в себя данные (452) движения, обеспечивается в модуль форматирования заголовков/энтропийный кодер (490) также как модуль (455) компенсации движения.
[065] Модуль (455) компенсации движения применяет значения MV, имеющие выбранную точность MV, к восстановленной опорной картинке (картинкам) из буфера (470) декодированных картинок. Когда данные цветности для картинки имеют такое же разрешение, что и данные яркости (например, когда формат является форматом YUV 4:4:4 или форматом RGB 4:4:4), значение MV, которое применяется для блока цветности, может быть таким же как значение MV, примененное для блока яркости. С другой стороны, когда данные цветности для картинки имеют уменьшенное разрешение по отношению к данным яркости (например, когда формат является форматом YUV 4:2:0 или форматом YUV 4:2:2), значение MV, которое применяется для блока цветности, может быть значением MV, для которого был уменьшен масштаб и которое было возможно округлено, чтобы осуществлять регулировку в отношении различия в разрешении цветности (например, для формата YUV 4:2:0, посредством деления вертикальной и горизонтальной компонент значения MV на два и усечения или округления их до точности, используемой для обработки компенсации движения цветности; для формата YUV 4:2:2, посредством деления горизонтальной компоненты значения MV на два и усечения или округления ее до точности, используемой для обработки компенсации движения цветности). Модуль (455) компенсации движения формирует предсказания с компенсацией движения для текущей картинки.
[066] В отдельном пути внутри кодера (400), модуль (440) интра-картиночной оценки определяет то, как выполнять интра-картиночное предсказание для блоков значений отсчетов текущей картинки входного видеосигнала (405). Текущая картинка может полностью или частично кодироваться с использованием интра-картиночного кодирования. С использованием значений восстановления (438) текущей картинки, для интра-пространственного предсказания, модуль (440) интра-картиночной оценки определяет то, как пространственно предсказывать значения отсчетов текущего блока текущей картинки из соседних, ранее восстановленных значений отсчетов текущей картинки. Или, для интра-BC предсказания с использованием значений BV, модуль (440) интра-картиночной оценки оценивает смещение значений отсчетов текущего блока для разных областей-кандидатов внутри текущей картинки.
[067] Модуль (440) интра-картиночной оценки формирует в качестве сторонней информации данные (442) интра-предсказания, такие как информация, указывающая то, использует ли интра-предсказание пространственное предсказание или интра-BC предсказание (например, значение флага в расчете на интра-блок), направление режима предсказания (для интра-пространственного предсказания), и значения BV (для интра-BC предсказания). Данные (442) интра-предсказания обеспечиваются в модуль форматирования заголовков/энтропийный кодер (490) также как модуль (445) интра-картиночного предсказания.
[068] Согласно данным (442) интра-предсказания, модуль (445) интра-картиночного предсказания пространственно предсказывает значения отсчетов текущего блока текущей картинки из соседних, ранее восстановленных значений отсчетов текущей картинки. Или, для интра-BC предсказания, модуль (445) интра-картиночного предсказания предсказывает значения отсчетов текущего блока с использованием ранее восстановленных значений отсчетов области интра-предсказания, которая указывается посредством значения BV для текущего блока.
[069] Модуль переключения интра/интер выбирает значения предсказания с компенсацией движения или интра-картиночного предсказания для использования в качестве предсказания (458) для заданного блока. Когда кодирование остатка не пропускается, различие (если есть какое-либо) между блоком предсказания (458) и соответствующей частью исходной текущей картинки входного видеосигнала (405) обеспечивает значения остатка (418). Во время восстановления текущей картинки, когда значения остатка были кодированы/сигнализированы, восстановленные значения остатка комбинируются с предсказанием (458), чтобы формировать восстановление (438) исходного контента из видеосигнала (405). В сжатии с потерями, однако, некоторая информация все же теряется из видеосигнала (405).
[070] В модуле преобразования/модуле масштабирования/модуле квантования (430), когда частотное преобразование не пропускается, модуль частотного преобразования преобразует видеоданные пространственной области в данные частотной области (то есть, спектральные, преобразованные). Для основанного на блоках кодирования видео, модуль частотного преобразования применяет дискретное косинусное преобразование ("DCT"), его целочисленную аппроксимацию, или другой тип прямого преобразования блоков (например, дискретное синусное преобразование или его целочисленную аппроксимацию) к блокам данных остатка предсказания (или данным значений отсчетов, если предсказание (458) является нулевым), формируя блоки коэффициентов частотного преобразования. Кодер (400) также может быть способным указывать, что такой этап преобразования пропускается. Модуль масштабирования/модуль квантования масштабирует и квантует коэффициенты преобразования. Например, модуль квантования применяет скалярное квантование мертвой зоны к данным частотной области с размером шага квантования, который изменяется на основе от кадра к кадру, на основе от мозаичного элемента к мозаичному элементу, на основе от слайса к слайсу, на основе от блока к блоку, на основе конкретной частоты или на другой основе. Данные (432) квантованных коэффициентов преобразования обеспечиваются в модуль форматирования заголовков/энтропийный кодер (490). Если частотное преобразование пропускается, модуль масштабирования/модуль квантования может масштабировать и квантовать блоки данных остатка предсказания (или данные значений отсчетов, если предсказание (458) является нулевым), формируя квантованные значения, которые обеспечиваются в модуль форматирования заголовков/энтропийный кодер (490).
[071] В модуле масштабирования/модуле обратного преобразования (435), модуль масштабирования/модуль обратного квантования выполняет обратное масштабирование и обратное квантование над квантованными коэффициентами преобразования. Модуль обратного частотного преобразования выполняет обратное частотное преобразование, формируя блоки восстановленных значений остатка предсказания или значений отсчетов. Если этап преобразования был пропущен, обратное частотное преобразование также пропускается. В этом случае, модуль масштабирования/модуль обратного квантования может выполнять обратное масштабирование и обратное квантование над блоками данных остатка предсказания (или данными значений отсчетов), формируя восстановленные значения. Когда значения остатка были кодированы/сигнализированы, кодер (400) комбинирует восстановленные значения остатка со значениями предсказания (458) (например, значениями предсказания с компенсацией движения, значениями интра-картиночного предсказания), чтобы формировать восстановление (438). Когда значения остатка не были кодированы/сигнализированы, кодер (400) использует значения предсказания (458) в качестве восстановления (438).
[072] Для интра-картиночного предсказания, значения восстановления (438) могут обеспечиваться назад в модуль (440) интра-картиночной оценки и модуль (445) интра-картиночного предсказания. Также, значения восстановления (438) могут использоваться для предсказания с компенсацией движения последующих картинок. Значения восстановления (438) могут дополнительно фильтроваться. Управление (460) фильтрацией определяет то, как выполнять фильтрацию устранения блочности и фильтрацию SAO над значениями восстановления (438), для заданной картинки видеосигнала (405). Управление (460) фильтрацией формирует данные (462) управления фильтром, которые обеспечиваются в модуль форматирования заголовков/энтропийный кодер (490) и модуль слияния/фильтр (фильтры) (465).
[073] В модуле слияния/фильтре (фильтрах) (465), кодер (400) осуществляет слияние контента из разных мозаичных элементов в восстановленную версию картинки. Кодер (400) избирательно выполняет фильтрацию устранения блочности и фильтрацию SAO согласно данным (462) управления фильтром, чтобы адаптивно сглаживать разрывы между границами в кадрах. Другая фильтрация (такая как фильтрация устранения окантовочных помех или ALF; не показана) может альтернативно или дополнительно применяться. Границы мозаичных элементов могут избирательно фильтроваться или не фильтроваться вовсе, в зависимости от настроек кодера (400), и кодер (400) может обеспечивать синтаксис внутри кодированного битового потока, чтобы указывать, была ли или нет такая фильтрация применена. Буфер (470) декодированных картинок буферизует восстановленную текущую картинку для использования в последующем предсказании с компенсацией движения.
[074] Модуль форматирования заголовков/энтропийный кодер (490) форматирует и/или энтропийно кодирует общие данные (422) управления, данные (432) квантованных коэффициентов преобразования, данные (442) интра-предсказания, данные (452) движения и данные (462) управления фильтром. Значения MV могут предсказательно кодироваться. Например, модуль форматирования заголовков/энтропийный кодер (490) использует экспоненциальное кодирование Голомба для энтропийного кодирования различных синтаксических элементов, таких как синтаксические элементы для дифференциальных значений MV, после предсказания MV.
[075] Модуль форматирования заголовков/энтропийный кодер (490) обеспечивает кодированные данные в кодированном битовом видеопотоке (495). Формат кодированного битового видеопотока (495) может быть вариантом или расширением формата HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[076] В зависимости от реализации и требуемого типа сжатия, модули кодера могут добавляться, пропускаться, разделяться на множество модулей, комбинироваться с другими модулями, и/или заменяться на сходные модули. В альтернативных вариантах осуществления, кодеры с разными модулями и/или другими конфигурациями модулей выполняют один или более из описанных способов. Конкретные варианты осуществления кодеров обычно используют вариант или дополненную версию кодера (400). Соотношения, показанные между модулями внутри кодера (400), указывают общие потоки информации в кодере; другие соотношения не показаны ради простоты.
V. ВЫБОР ТОЧНОСТИ MV ВО ВРЕМЯ КОДИРОВАНИЯ.
[077] Этот раздел представляет различные подходы к выбору точности вектора движения ("MV") во время кодирования. Эти подходы могут обеспечивать сжатие, которое является эффективным исходя из производительности отношения искажения к скорости передачи и/или вычислительной эффективности кодирования и декодирования.
[078] Подходы, здесь описанные, для выбора точности MV, могут применяться при кодировании любого типа видео. В частности, однако, выбор точности MV, как здесь описано, может улучшать производительность при кодировании некоторого искусственно созданного видеоконтента, такого как контент захвата экрана.
A. ТИПЫ ВИДЕО.
[079] В общем, видео захвата экрана (также называемое видео контента экрана или контент захвата экрана) представляет вывод процесса воспроизведения графики, который генерирует контент для экрана компьютера или другого устройства отображения. Это контрастирует с естественным видео, которое указывает на видеоизображение, захваченное из области обзора датчика камеры объектов реального мира, или видео, имеющее аналогичные характеристики. Видео захвата экрана обычно содержит воспроизведенный текст, компьютерную графику, сгенерированный анимацией контент или другие аналогичные типы контента, захваченного из вывода процесса воспроизведения для компьютерного устройства отображения, в противоположность (или в дополнение к) видеоконтенту, захваченному только камерой. Общие сценарии для кодирования/декодирования контента захвата экрана включают в себя конференц-связь удаленного рабочего стола и кодирование/декодирование графических или текстовых наложений на естественное видео или другое видео со "смешанным контентом". Несколько из новаторских решений, здесь описанных, выполнены с возможностью для кодирования видео захвата экрана или других искусственно созданных видео. Эти новаторские решения также могут использоваться для естественного видео, но могут не быть настолько эффективными. Другие новаторские решения, здесь описанные, являются эффективными в кодировании естественного видео или искусственно созданного видео.
[080] Фиг. 5 показывает среду (510) рабочего стола компьютера с контентом, который может обеспечивать ввод для захвата экрана. Например, видео захвата экрана может представлять ряд изображений всего рабочего стола (511) компьютера. Или, видео захвата экрана может представлять ряд изображений для одного из окон среды рабочего стола компьютера, как, например, окна (513) приложения, включающего в себя игровой контент, окна (512) браузера с контентом веб-страницы или окна (514) с контентом текстового процессора.
[081] Как компьютерно генерируемый, искусственно созданный видеоконтент, контент захвата экрана имеет тенденцию иметь относительно малое количество дискретных значений отсчетов, по сравнению с естественным видеоконтентом, который захватывается с использованием видеокамеры. Например, область контента захвата экрана часто включает в себя одиночный равномерный цвет, тогда как область в естественном видеоконтенте более вероятно включает в себя цвета, которые постепенно изменяются. Также, контент захвата экрана обычно включает в себя разные структуры (например, графику, текстовые символы), которые точно повторяются от кадра к кадру, даже если контент может пространственно смещаться (например, вследствие прокрутки). Контент захвата экрана обычно кодируется в формате (например, YUV 4:4:4 или RGB 4:4:4) с высоким разрешением дискретизации цветности, хотя он также может кодироваться в формате с более низким разрешением дискретизации цветности (например, YUV 4:2:0, YUV 4:2:2).
[082] Фиг. 6 показывает видео (620) со смешанным контентом, которое включает в себя некоторое естественное видео (621) и некоторый искусственно созданный видеоконтент. Искусственно созданный видеоконтент включает в себя графику (622) помимо естественного видео (621) и тикер (623), бегущий внизу естественного видео (621). Как контент захвата экрана, показанный на фиг. 5, искусственно созданный видеоконтент, показанный на фиг. 6, имеет тенденцию иметь относительно малое количество дискретных значений отсчетов. Он также имеет тенденцию иметь разные структуры (например, графику, текстовые символы), которые точно повторяются от кадра к кадру (например, вследствие прокрутки).
[083] Видео захвата экрана или видео со смешанным контентом может периодически считываться из выходного буфера для устройства отображения, или из одного или более других буферов, хранящих кадры. Или, видео захвата экрана может обеспечиваться из модуля захвата экрана (который может периодически считывать значения из выходного буфера для устройства отображения, перехватывать команды отображения из модуля операционной системы, или иным образом захватывать значения отсчетов, подлежащие отображению). Видео захвата экрана или видео со смешанным контентом может быть из потока "в реальном времени" или из ранее записанного потока в хранилище.
B. РАЗНЫЕ ТОЧНОСТИ MV.
[084] Во многих сценариях кодирования, при кодировании видео захвата экрана или другого искусственно созданного видеоконтента, большинство значений MV представляют пространственные смещения целочисленных отсчетов, и очень малое количество значений MV представляют пространственные смещения дробных отсчетов. Это обеспечивает возможности для уменьшения точности MV, чтобы улучшать общую производительность.
[085] Фиг. 7a показывает компенсацию движения с MV (720), имеющим пространственное смещение целочисленных отсчетов. MV (720) указывает пространственное смещение на четыре отсчета влево, и один отсчет вверх, по отношению к совместно расположенному положению (710) в опорной картинке для текущего блока. Например, для 4×4 текущего блока в положении (64, 96) в текущей картинке, MV (720) указывает 4×4 область (730) предсказания, чье положение является (60, 95) в опорной картинке. Область (730) предсказания включает в себя восстановленные значения отсчетов в положениях целочисленных отсчетов в опорной картинке. Кодер или декодер не должен выполнять интерполяцию, чтобы определять значения области (730) предсказания.
[086] Фиг. 7b показывает компенсацию движения с MV (721), имеющим пространственное смещение дробных отсчетов. MV (721) указывает пространственное смещение, равное 3.75, отсчетов влево, и 0.5 отсчетов вверх, по отношению к совместно расположенному положению (710) в опорной картинке для текущего блока. Например, для текущего блока 4×4 в положении (64, 96) в текущей картинке, MV (721) указывает 4×4 область (731) предсказания, чье положение является (60.25, 95.5) в опорной картинке. Область (731) предсказания включает в себя интерполированные значения отсчетов в положениях дробных отсчетов в опорной картинке. Кодер или декодер выполняет интерполяцию, чтобы определять значения отсчетов области (731) предсказания. Когда пространственные смещения дробных отсчетов разрешены, имеется больше областей-кандидатов предсказания, которые могут соответствовать текущему блоку, и, таким образом, качество предсказания с компенсацией движения обычно улучшается, по меньшей мере, для некоторых типов видеоконтента (например, естественного видео).
[087] Когда точность MV является точностью целочисленного отсчета для единицы видео, все значения MV для блоков в единице указывают пространственные смещения целочисленных отсчетов. Когда точность MV является точностью дробного отсчета для единицы видео, значение MV для блока в единице может указывать пространственное смещение дробных отсчетов или пространственное смещение целочисленных отсчетов. То есть, когда точность MV является точностью дробного отсчета для единицы видео, некоторые значения MV для блоков в единице могут указывать пространственные смещения дробных отсчетов, в то время как другие значения MV для блоков в единице указывают пространственные смещения целочисленных отсчетов.
[088] При кодировании блока с использованием оценки движения и компенсации движения, кодер часто вычисляет разности отсчет за отсчетом (также называемые значения остатка или значения ошибки) между значениями отсчетов блока и его предсказания с компенсацией движения. Значения остатка затем могут кодироваться. Для значений остатка, эффективность кодирования зависит от сложности значений остатка и того, сколько потерь или искажений введено как часть обработки сжатия. В общем, хорошее предсказание с компенсацией движения близко аппроксимирует блок, так что значения остатка являются разностями малой амплитуды, которые могут эффективно кодироваться. С другой стороны, плохое предсказание с компенсацией движения часто дает значения остатка, которые включают в себя значения более большой амплитуды, которые более трудно кодировать эффективно. Кодеры обычно тратят большую часть времени кодирования, выполняя оценку движения, пытаясь найти хорошее соответствие и, тем самым, улучшить производительность отношения искажения к скорости передачи.
[089] Когда кодек использует значения MV с точностью MV целочисленного отсчета, кодер и декодер не должны выполнять операции интерполяции между значениями отсчетов опорных картинок для компенсации движения, так как значения MV указывают пространственные смещения целочисленных отсчетов. Когда кодек использует значения MV с точностью MV дробного отсчета, кодер и декодер могут выполнять операции интерполяции между значениями отсчетов опорных картинок для компенсации движения (что добавляет вычислительную сложность, по меньшей мере, для значений MV, которые указывают пространственные смещения дробных отсчетов), но предсказания с компенсацией движения имеют тенденцию более близко аппроксимировать блоки (что ведет к значениям остатка с меньшим количеством значимых значений), по сравнению с точностью MV целочисленного отсчета.
C. ПРЕДСТАВЛЕНИЕ ЗНАЧЕНИЙ MV.
[090] Значения MV обычно представляются с использованием целочисленных значений, чей смысл зависит от ассоциированной точности MV. Для точности MV целочисленного отсчета, например, целочисленное значение, равное 1, указывает пространственное смещение на 1 отсчет, целочисленное значение, равное 2, указывает пространственное смещение на два отсчета, и так далее. Для точности MV 1/4-отсчета, например, целочисленное значение, равное 1, указывает пространственное смещение на 0.25 отсчета. Целочисленные значения, равные 2, 3, 4 и 5, указывают пространственные смещения 0.5, 0.75, 1.0 и 1.25 на отсчета, соответственно. Независимо от точности MV, целочисленное значение может указывать величину пространственного смещения, и отдельное значение флага может указывать, является ли смещение отрицательным или положительным. Горизонтальная компонента MV и вертикальная компонента MV заданного значения MV могут представляться с использованием двух целочисленных значений. Таким образом, смысл двух целочисленных значений, представляющих значение MV, зависит от точности MV. Например, для значения MV, имеющего горизонтальное смещение на 2 отсчета и никакого вертикального смещения, если точность MV является точностью MV 1/4-отсчета, значение MV представляется как (8, 0). Если точность MV является точностью MV целочисленного отсчета, однако, значение MV представляется как (2, 0).
[091] Значения MV в битовом потоке кодированных видеоданных обычно энтропийно кодируются (например, на основе по компонентам MV). Значение MV также может дифференциально кодироваться по отношению к предсказанному значению MV (например, на основе по компонентам MV). Во многих случаях, значение MV равняется предсказанному значению MV, таким образом, дифференциальное значение MV является нулем, который может кодироваться очень эффективно. Дифференциальное значение MV (или значение MV, если предсказание MV не используется) может энтропийно кодироваться с использованием экспоненциального кодирования Голомба, контекстно-адаптивного двоичного арифметического кодирования или другой формы энтропийного кодирования. Хотя точное отношение между значением MV (или дифференциальным значением MV) и кодированными битами зависит от используемой формы энтропийного кодирования, в общем, меньшие значения кодируются более эффективно (то есть, с использованием меньшего количества битов), так как они являются более обычными, и более большие значения кодируются менее эффективно (то есть, с использованием большего количества битов), так как они являются менее обычными.
D. АДАПТИВНАЯ ТОЧНОСТЬ MV - ВВЕДЕНИЕ.
[092] Чтобы резюмировать предшествующие три раздела, использование значений MV с точностью MV целочисленного отсчета имеет тенденцию уменьшать битрейт, ассоциированный с сигнализацией значений MV, и уменьшать вычислительную сложность кодирования и декодирования (посредством избегания интерполяции значений отсчетов в положениях дробных отсчетов в опорных картинках), но может уменьшать качество предсказания с компенсацией движения и, таким образом, увеличивать амплитуду значений остатка, по меньшей мере, для некоторых типов видеоконтента. С другой стороны, использование значений MV с точностью MV дробного отсчета имеет тенденцию увеличивать битрейт, ассоциированный с сигнализацией значений MV, и увеличивать вычислительную сложность кодирования и декодирования (посредством включения туда интерполяции значений отсчетов в положениях дробных отсчетов в опорных картинках), но может улучшать качество предсказания с компенсацией движения и уменьшать амплитуду значений остатка, по меньшей мере, для некоторых типов видеоконтента. В общем, вычислительная сложность, битрейт для сигнализации значений MV, и качество предсказания с компенсацией движения увеличиваются по мере того, как точность MV увеличивается (например, от целочисленного отсчета к 1/2-отсчета, или от 1/2-отсчета к 1/4-отсчета), вплоть до точки снижающегося эффекта. В то же время, хотя увеличенная точность MV имеет тенденцию увеличивать битрейт, необходимый, чтобы сигнализировать значения MV, при кодировании естественного контента ассоциированное улучшение в качестве предсказания с компенсацией движения может уменьшать битрейт, необходимый, чтобы посылать адекватную аппроксимацию значений остатка, и, тем самым, уменьшать полный битрейт, необходимый, чтобы кодировать видеоконтент с адекватным качеством картинки.
[093] При кодировании видео захвата экрана или другого искусственно созданного видеоконтента, добавленные стоимости точности MV дробного отсчета (исходя из битрейта и вычислительной сложности) могут быть неоправданными. Например, если большинство значений MV представляют пространственные смещения целочисленных отсчетов, и очень малое количество значений MV представляют пространственные смещения дробных отсчетов, добавленные стоимости точности MV дробного отсчета не оправданы. Кодер может пропускать поиск в положениях дробных отсчетов (и пропускать операции интерполяции, чтобы определять значения отсчетов в положениях дробных отсчетов) во время оценки движения. Для такого контента, битрейт и вычислительная сложность могут уменьшаться, без значительного штрафа для качества предсказания с компенсацией движения, посредством использования значений MV с точностью MV целочисленного отсчета.
[094] Так как точность MV дробного отсчета может все еще быть полезной для других типов видеоконтента (например, естественного видео, захваченного посредством камеры), кодер и декодер могут быть выполнены с возможностью переключаться между точностями MV. Например, кодер и декодер могут использовать точность MV целочисленного отсчета для видео захвата экрана, но использовать точность MV дробного отсчета (как, например, точность MV 1/4-отсчета) для естественного видео. Подходы, которым кодер может следовать при выборе точности MV, описываются в следующем разделе. Кодер может сигнализировать выбранную точность MV в декодер с использованием одного или более синтаксических элементов в битовом потоке.
[095] В одном подходе для сигнализирования точности MV, когда адаптивный выбор точности MV активирован, кодер выбирает точность MV на основе от слайса к слайсу. Значение флага в наборе параметров последовательности ("SPS"), наборе параметров картинок ("PPS") или другой синтаксической структуре указывает, активирован ли адаптивный выбор точности MV. Если это так, один или более синтаксических элементов в заголовке слайса для заданного слайса указывают выбранную точность MV для блоков этого слайса. Например, значение флага, равное 0, указывает точность MV 1/4-отсчета, и значение флага, равное 1, указывает точность MV целочисленного отсчета.
[096] В другом подходе для сигнализирования точности MV, кодер выбирает точность MV на основе от картинки к картинки или на основе от слайса к слайсу. Синтаксический элемент в PPS указывает один из трех режимов точности MV: (0) точность MV 1/4-отсчета для значений MV слайса (слайсов) картинки, ассоциированной с PPS, (1) точность MV целочисленного отсчета для значений MV слайса (слайсов) картинки, ассоциированной с PPS, или (2) адаптивная к слайсу точность MV в зависимости от значения флага, сигнализируемого в расчете на заголовок слайса, где значение флага в заголовке слайса для слайса может указывать точность MV 1/4-отсчета или точность MV целочисленного отсчета для значений MV слайса. Для дополнительных подробностей об этом подходе в одном варианте осуществления, см. JCTVC-P0277.
[097] В еще другом подходе для сигнализирования точности MV, когда адаптивный выбор точности MV активирован, кодер выбирает точность MV на основе от CU к CU. Один или более синтаксических элементов в структуре для заданной CU указывают выбранную точность MV для блоков этой CU. Например, значение флага в синтаксической структуре CU для CU указывает, имеют ли значения MV для всех единиц PU, ассоциированных с CU, точность MV целочисленного отсчета или точность MV 1/4-отсчета. Для дополнительных подробностей об этом подходе в одном варианте осуществления, см. JCTVC-P0283.
[098] В любом из этих подходов, кодер и декодер могут использовать разные точности MV для горизонтальной и вертикальной компонент MV. Это может быть полезным при кодировании видео захвата экрана, которое было масштабировано горизонтально или вертикально (например, с использованием точности MV целочисленного отсчета в немасштабированном измерении, и с использованием точности MV дробного отсчета в масштабированном измерении). В некоторых вариантах реализации, если управление скоростью не может достигаться единственно посредством регулировки значений QP, кодер может изменять размеры видео захвата экрана горизонтально или вертикально, чтобы уменьшать битрейт, затем кодировать измененное в размерах видео. На стороне декодера, видео масштабируется назад в его исходные размеры после декодирования. Кодер может сигнализировать точность MV для горизонтальных компонент MV (например, с помощью первого значения флага или синтаксического элемента) и также сигнализировать точность MV для вертикальных компонент MV (например, с помощью второго значения флага или синтаксического элемента) в декодер.
[099] Более широко, когда адаптивный выбор точности MV активирован, кодер выбирает точность MV и сигнализирует выбранную точность MV некоторым способом. Например, значение флага в SPS, PPS или другой синтаксической структуре может указывать, активирован ли адаптивный выбор точности MV. Когда адаптивная точность MV активирована, один или более синтаксических элементов в синтаксисе уровня последовательности, синтаксисе уровня группы картинок ("синтаксисе уровня GOP"), синтаксисе уровня картинки, синтаксисе уровня слайса, синтаксисе уровня мозаичного элемента, синтаксисе уровня блока или другой синтаксической структуре может указывать выбранную точность MV для значений MV. Или, один или более синтаксических элементов в синтаксисе уровня последовательности, синтаксисе уровня GOP, синтаксисе уровня картинки, синтаксисе уровня заголовка слайса, синтаксисе уровня данных слайса, синтаксисе уровня мозаичного элемента, синтаксисе уровня блока или другой синтаксической структуре может указывать точности MV для разных компонент MV. Когда имеется две доступные точности MV, значение флага может указывать выбор между упомянутыми двумя точностями MV. Там, где имеется больше доступных точностей MV, целочисленное значение может указывать выбор между этими точностями MV.
[0100] Помимо модификаций, чтобы сигнализировать/осуществлять синтаксический разбор синтаксических элементов, которые указывают выбранную точность (точности) MV, декодирование может модифицироваться, чтобы изменять то, как сигнализированные значения MV интерпретируются в зависимости от выбранной точности MV. Подробности того, как значения MV кодируются и восстанавливаются, могут изменяться в зависимости от точности MV. Например, когда точность MV является точностью целочисленного отсчета, предсказанные значения MV могут округляться до ближайшего целого числа, и дифференциальные значения MV могут указывать смещения целочисленных отсчетов. Или, когда точность MV является точностью 1/4-отсчета, предсказанные значения MV могут округляться до ближайшего смещения 1/4-отсчетов, и дифференциальные значения MV могут указывать смещения 1/4-отсчетов. Или, значения MV могут сигнализироваться некоторым другим способом. Когда значения MV имеют точность MV целочисленного отсчета и видео использует дискретизацию цветности 4:2:2 или 4:2:0, значения MV цветности могут выводиться посредством масштабирования, и т.д., что может давать результатом смещения 1/2-отсчетов для цветности. Или, значения MV цветности могут округляться до целочисленных значений.
E. ПОДХОДЫ К ВЫБОРУ ТОЧНОСТИ MV.
[0101] Когда точность MV может адаптироваться во время кодирования видео, кодер выбирает точность MV для единицы видео. Кодер может выбирать точность (точности) MV, чтобы использовать на основе указаний от источника видео (см. подход 1, ниже). Например, источник видео может указывать, что видео является контентом захвата экрана или естественным видео (захваченным из камеры). Или, кодер может выбирать точность (точности) MV на основе исчерпывающей оценки различных точностей MV (см. подход 2, ниже). Или, кодер может выбирать точность (точности) MV на основе анализа статистических данных из предыдущих единиц и/или статистических данных для текущей единицы, которая кодируется (см. подходы 3-4, ниже).
[0102] Некоторое из подходов к выбору точности MV выполнены с возможностью для сценариев кодирования захвата экрана. Другие подходы более широко применяются при кодировании любого типа видеоконтента.
[0103] В некоторых примерах, описанных в этом разделе, кодер осуществляет выбор между использованием точности MV 1/4-отсчета и точности MV целочисленного отсчета. Более широко, кодер осуществляет выбор между множеством доступных точностей MV, которые могут включать в себя точность MV целочисленного отсчета, точность MV 1/2-отсчета, точность MV 1/4-отсчета и/или другую точность MV.
[0104] Когда кодер выбирает точность MV для единицы видео, единица видео может быть последовательностью, GOP, картинкой, слайсом, мозаичным элементом, CU, PU, другим блоком или другим типом единицы видео. В зависимости от требуемого компромиссного соотношения между сложностью и гибкостью, выбор точности MV на высоко-локальной основе (например, на основе от CU к CU), на более большей основе от области к области (например, на основе от мозаичного элемента к мозаичному элементу или на основе от слайса к слайсу), на основе всей картинки, или на более глобальной основе (например, в расчете на сеанс кодирования, в расчете на последовательность, в расчете на GOP, или в расчете на ряд картинок между обнаруженными сменами сцен) может быть соответствующим.
1. ПОДХОДЫ, КОТОРЫЕ ИСПОЛЬЗУЮТ УКАЗАНИЯ ОТ ПРИЛОЖЕНИЯ, ОПЕРАЦИОННОЙ СИСТЕМЫ ИЛИ ИСТОЧНИКА ВИДЕО.
[0105] Кодер может выбирать точность MV на основе указания, сигнализированного приложением, операционной системой или источником видео. Например, указание может указывать, что видеоконтент, подлежащий кодированию был воспроизведен посредством конкретного приложения, такого как текстовый процессор, приложение табличных вычислений, или веб-браузер (без области встроенного видео, что может быть естественным видеоконтентом). Воспроизведение с таким приложением будет иметь тенденцию формировать только пространственные смещения целочисленных отсчетов контента. На основе такого указания, кодер может выбирать точность MV целочисленного отсчета. Для контента, воспроизведенного с помощью текстового процессора, приложения табличных вычислений, веб-браузера или другого приложения, которое обычно не воспроизводит естественный видеоконтент, точность MV целочисленного отсчета является скорей всего предпочтительной, нежели точность MV дробного отсчета. (Но точность MV дробного отсчета может быть предпочтительной, если видео было изменено в размерах).
[0106] Или, указание может указывать, что видеоконтент был доставлен посредством модуля захвата экрана или другого источника видео, который обычно доставляет искусственно созданный видеоконтент. Для такого контента, точность MV целочисленного отсчета является скорей всего предпочтительной, нежели точность MV дробного отсчета, таким образом, кодер выбирает точность MV целочисленного отсчета. (Но точность MV дробного отсчета может быть предпочтительной, если видео было изменено в размерах).
[0107] С другой стороны, если указание указывает, что видеоконтент был доставлен посредством камеры, DVD или другого диска, или карты тюнера, или воспроизведен посредством видеопроигрывателя, кодер может выбирать точность MV дробного отсчета. Для такого контента, точность MV дробного отсчета является скорей всего предпочтительной, нежели точность MV целочисленного отсчета.
[0108] Указание может применяться к сеансу кодирования, к ряду кадров, к одиночному видеокадру или к части видеокадра (как, например, области, соответствующей окну, ассоциированному с приложением).
[0109] В некоторых случаях, кодер может не принимать или может быть неспособным интерпретировать указание, обеспеченное источником видео, операционной системой или приложением относительно природы видеоконтента. Или, указание может быть некорректным или вводящим в заблуждение (например, для видео со смешанным контентом, которое включает в себя естественный видеоконтент и искусственно созданный видеоконтент, или для видео, которое было изменено в размерах). В таких случаях, кодер может использовать другой подход, чтобы определять, какая точность (точности) MV должна выбираться.
2. ПОДХОДЫ КОДИРОВАНИЯ ГРУБОЙ СИЛЫ.
[0110] В другом наборе подходов к выбору точности MV, кодер кодирует единицу видео множество раз с использованием разных точностей MV (например, один раз с точностью MV целочисленного отсчета, один раз с точностью MV 1/4-отсчета). Кодер выбирает точность MV, которая обеспечивает наилучшую производительность, и использует выбранную точность MV при кодировании единицы для вывода. Единица видео может быть блоком, PU, CU, слайсом, мозаичным элементом, картинкой, GOP, последовательностью или другим типом единицы видео. Обычно, кодер выполняет множество проходов кодирования в таких подходах.
[0111] Чтобы оценивать то, какая точность MV обеспечивает наилучшую производительность, кодер может определять стоимость отношения искажения к скорости передачи, когда разные точности MV используются во время кодирования единицы, и выбирать вариант выбора с наименьшей стоимостью отношения искажения к скорости передачи. Стоимость отношения искажения к скорости передачи имеет стоимость D искажения и стоимость R битрейта, с коэффициентом λ (часто называемым множитель Лагранжа), который взвешивает стоимость битрейта по отношению к стоимости искажения (D+λR) или наоборот (R+λD). Стоимость битрейта может быть оцениваемой или фактической стоимостью битрейта. В общем, стоимость искажения основывается на сравнении исходных отсчетов с восстановленными отсчетами. Стоимость искажения может измеряться как сумма абсолютных разностей ("SAD"), сумма абсолютных подвергнутых преобразованию Адамара разностей ("SAHD") или другая сумма абсолютных подвергнутых преобразованию разностей ("SATD"), сумма возведенных в квадрат ошибок ("SSE"), среднеквадратическая ошибка ("MSE"), средняя дисперсия или другая метрика искажения. Коэффициент λ может изменяться во время кодирования (например, увеличивая относительный вес стоимости битрейта, когда размер шага квантования является более большим). Стоимость отношения искажения к скорости передачи обычно обеспечивает наиболее точную оценку производительности разных вариантов выбора точности MV, но также имеет наивысшую вычислительную сложность.
[0112] Кодер может изменять один или более из членов функции стоимости отношения искажения к скорости передачи, чтобы склонять анализ отношения искажения к скорости передачи к варианту выбора точности MV целочисленного отсчета. Например, при определении точности MV для единицы видео с использованием анализа отношения искажения к скорости передачи, чтобы выбирать между множеством точностей MV, анализ отношения искажения к скорости передачи склоняется к точности MV целочисленного отсчета посредством масштабирования стоимости искажения, добавления штрафа к стоимости искажения, масштабирования стоимости битрейта, добавления штрафа к стоимости битрейта, и/или регулировки коэффициента множителя Лагранжа. При оценке точности MV дробного отсчета, кодер может увеличивать масштаб стоимости искажения (с коэффициентом более большим, чем 1), увеличивать масштаб стоимости битрейта (с коэффициентом более большим, чем 1), добавлять штраф искажения, добавлять штраф битрейта и/или использовать более большой коэффициент множителя Лагранжа. Или, при оценке точности MV целочисленного отсчета, кодер может уменьшать масштаб стоимости искажения (с коэффициентом меньшим, чем 1), уменьшать масштаб стоимости битрейта (с коэффициентом меньшим, чем 1), и/или использовать более малый коэффициент множителя Лагранжа.
[0113] Кодер может изменять степень склонения к или от точности MV целочисленного отсчета во время кодирования. Например, кодер может регулировать склонение к точности MV целочисленного отсчета в зависимости от степени уверенности, что значения MV целочисленного отсчета являются скорей всего более подходящими для кодирования видеоконтента (например, увеличивая склонение к точности MV целочисленного отсчета, если видеоконтент является скорей всего искусственно созданным контентом). Или, кодер может регулировать склонение к точности MV целочисленного отсчета в зависимости от вычислительной емкости для кодирования и/или декодирования (например, увеличивая склонение к точности MV целочисленного отсчета, если доступная вычислительная емкость является более низкой).
[0114] Альтернативно, кодер может использовать другой подход, чтобы оценивать то, какая точность MV обеспечивает наилучшую производительность. Например, кодер измеряет то, какая точность MV дает результатом меньше всего битов кодированных данных, для заданного размера шага квантования. Или, кодер оценивает только искажение для кодирования, которое использует разные точности MV. Или, кодер использует более простую меру, такую как преимущество уменьшения искажения для точности MV дробного отсчета по сравнению с точностью MV целочисленного отсчета, что может быть достаточно простым для определения в одиночном проходе кодирования. Например, кодер обследует величину уменьшения искажения (исходя из SAD, SATD, TSE, MSE или другой метрики искажения), когда используется точность MV дробного отсчета, по сравнению с тем, когда используется точность MV целочисленного отсчета.
[0115] Подходы кодирования грубой силы могут быть вычислительно интенсивными. Они потенциально вовлекают значительные дополнительные вычисления, дополнительное хранилище памяти, и дополнительные операции считывания и записи памяти, по сравнению с кодированием, которое использует фиксированную точность MV.
3. ПОДХОДЫ, КОТОРЫЕ ИСПОЛЬЗУЮТ АНАЛИЗ КОНТЕНТА.
[0116] В другом наборе подходов к выбору точности MV, кодер выбирает точность MV для единицы видео на основе анализа входного видеоконтента и/или кодированного видеоконтента. Единица видео может быть блоком, PB, PU, CU, CTU, подразделом макроблока, макроблоком, слайсом, мозаичным элементом, картинкой, GOP, последовательностью или другим типом единицы видео.
[0117] Фиг. 8 показывает способ (800) для адаптации точности MV во время кодирования. Способ (800) может выполняться посредством кодера, такого как кодер, описанный со ссылкой на фиг. 3 или фиг. 4a и 4b, или посредством другого кодера. Согласно способу (800), во время кодирования видео, кодер определяет точность MV из множества точностей MV для единиц видео. Множество точностей MV могут включать в себя одну или более точностей MV дробного отсчета также как точность MV целочисленного отсчета. Например, множество точностей MV могут включать в себя точность MV целочисленного отсчета и точность MV 1/4-отсчета. Или, множество точностей MV могут включать в себя точность MV целочисленного отсчета, точность MV 1/2-отсчета и точность MV 1/4-отсчета.
[0118] Конкретно, при кодировании единицы видео, кодер определяет (810), изменять ли точность MV. В начале кодирования, кодер может первоначально устанавливать точность MV согласно устанавливаемому по умолчанию значению, или продолжать, как если бы изменяя точность MV. Для более поздних единиц видео, кодер может использовать текущую точность MV (которая была использована для одной или более ранее кодированных единиц) или изменять точность MV. Например, кодер может принять решение изменить точность MV при наступлении определенного события (например, после кодирования количества единиц с пороговым значением, после изменения сцены, после определения того, что тип видео изменился).
[0119] Чтобы изменять точность MV, кодер собирает (820) информацию о видео. В общем, собранная информация может быть характеристиками входного видео или характеристиками кодированного видео. Собранная информация может относиться к текущей единице, которая кодируется, и/или относиться к ранее кодированным единицам видео. (Когда собранная информация относится к одной или более ранее кодированным единицам видео, сбор (820) такой информации может происходить до, во время или после кодирования предыдущей единицы (единиц). Этот сбор (820) является другим, нежели синхронизация, показанная на фиг. 8, и происходит независимо от решения (810) в отношении изменения точности MV). Кодер затем выбирает (830) точность MV для единицы видео на основе, по меньшей мере, частично собранной информации.
[0120] В качестве одного примера, кодер может собирать значения отсчетов для текущей единицы. Присутствие малого количества дискретных значений отсчетов имеет тенденцию указывать контент захвата экрана, и, следовательно, подсказывать, что должна выбираться точность MV целочисленного отсчета. С другой стороны, присутствие большого количества дискретных значений отсчетов имеет тенденцию указывать естественное видео, и, следовательно, подсказывать, что должна выбираться точность MV дробного отсчета. Значения отсчетов могут организовываться как гистограмма. Значения отсчетов могут собираться только из отсчетов яркости (Y) в цветовом пространстве YUV, из отсчетов яркости также как цветности (U, V) в цветовом пространстве YUV, из отсчетов R, G и B в цветовом пространстве RGB, или только из отсчетов G (или R или B) в цветовом пространстве RGB. Например, при выборе точности MV, кодер определяет число разных значений отсчетов среди собранных значений отсчетов. Кодер сравнивает число с порогом. Если число меньше, чем порог, кодер выбирает точность MV целочисленного отсчета. Если число больше, чем порог, кодер выбирает точность MV дробного отсчета. Граничное условие (число равняется порогу) может обрабатываться с использованием любого варианта выбора, в зависимости от реализации. Или, кодер в противном случае учитывает статистики из собранных значений отсчетов. Например, кодер определяет то, составляют ли x наиболее общих собранных значений отсчетов больше, чем y% значений отсчетов. Если это так, кодер выбирает точность MV целочисленного отсчета; в противном случае, кодер выбирает точность MV дробного отсчета. Значения x и y зависят от реализации. Значение x может быть 10 или некоторым другим числом. Значение y может быть 80, 90 или некоторым другим процентом меньшим, чем 100.
[0121] В качестве другого примера, кодер может собирать меры искажения для блоков текущей единицы, кодированной с соответствующими точностями MV. Например, кодер записывает улучшение (уменьшение) в искажении при использовании точности MV дробного отсчета, по сравнению с точностью MV целочисленного отсчета. При выборе точности MV, кодер определяет, оправдывает ли уменьшение в искажении увеличение в точности MV.
[0122] В качестве другого примера, кодер может собирать значения MV (имеющие точность MV дробного отсчета) для одной или более предыдущих единиц. Собранные значения MV могут организовываться согласно значению их дробных частей, например, для значений MV точности MV 1/4-отсчета, в гистограмме с интервалом для значений MV, имеющих дробную часть, равную нулю, интервалом для значений MV, имеющих дробную часть, равную 0.25, интервалом для значений MV, имеющих дробную часть, равную 0.5, и интервалом для значений MV, имеющих дробную часть, равную 0.75. Варианты низкой сложности этого подхода описываются в следующем разделе.
[0123] В качестве другого примера, кодер может собирать информацию о числе кодированных битов для данных MV (дифференциальных значений MV) для блоков, кодированных с использованием точности MV дробного отсчета. Низкое среднее количество битов для дифференциальных значений MV указывает нормальное (предсказуемое) движение и является более обычным, когда точность MV целочисленного отсчета будет подходящей. Высокое среднее количество битов, используемых для дифференциальных значений MV, является более обычным, когда точность MV дробного отсчета будет подходящей. При выборе точности MV, кодер измеряет среднее (или медианное) количество битов среди чисел кодированных битов для дифференциальных значений MV. Кодер сравнивает измерение с порогом. Если измерение меньше, чем порог, кодер выбирает точность MV целочисленного отсчета. Если измерение больше, чем порог, кодер выбирает точность MV дробного отсчета. Граничное условие (измерение равняется порогу) может обрабатываться с использованием любого варианта выбора, в зависимости от реализации.
[0124] В качестве другого примера, при кодировании единицы, кодер оценивает множество точностей MV в расчете на блок (например, PU) единицы, и собирает информацию в расчете на блок, которая указывает то, какая точность MV обеспечивает наилучшую производительность для этого блока. Кодер может определять стоимость отношения искажения к скорости передачи (например, D+λR), когда блок кодируется с использованием точности MV целочисленного отсчета, и также определять стоимость отношения искажения к скорости передачи (например, D+λR), когда блок кодируется с использованием точности MV дробного отсчета. Кодер определяет то, сколько раз каждая из множества точностей MV является наилучшей для соответствующих блоков внутри единицы, и выбирает точность MV с наибольшим числом. Например, для каждого из блоков в картинке, кодер определяет стоимость отношения искажения к скорости передачи, когда блок кодируется с использованием точности MV целочисленного отсчета, и также определяет стоимость отношения искажения к скорости передачи, когда блок кодируется с использованием точности MV 1/4-отсчета. Кодер подсчитывает количество раз, сколько точность MV целочисленного отсчета будет лучше, и количество раз, сколько точность MV 1/4-отсчета будет лучше, затем выбирает более высокое из упомянутых двух. Альтернативно, кодер определяет число того, сколько раз точность MV целочисленного отсчета является наилучшей для блоков единицы, затем выбирает точность MV целочисленного отсчета, только если число больше, чем пороговый процент количества блоков в единице. В некоторых вариантах реализации, кодер учитывает блоки с любым значением MV. В других вариантах осуществления, кодер учитывает только блоки с векторами MV ненулевого значения. Эта оценка в расчете на блок для множества точностей MV может выполняться для блоков заданной единицы, чтобы выбирать точность MV для одной или более последующих единиц, независимо от режима точности MV, используемого для заданной единицы. Или, оценка в расчете на блок для множества точностей MV может выполняться для заданной единицы, чтобы выбирать точность MV для заданной единицы.
[0125] Альтернативно, кодер использует другой подход к сбору информации и выбору точности MV на основе, по меньшей мере, частично выбранной информации.
[0126] Возвращаясь к фиг. 8, изменилась ли или точность MV нет, кодер кодирует (840) единицу с использованием выбранной точности MV. Значения MV для блоков (например, единиц PU, макроблоков, или других блоков) внутри единицы видео имеют выбранную точность MV. Кодер выводит кодированные данные для текущей единицы, например, в битовом потоке. Кодированные данные могут включать в себя синтаксические элементы, которые указывают выбранную точность MV.
[0127] Кодер принимает решение (850) в отношении того, переходить ли к следующей единице. Если это так, кодер принимает решение (810) в отношении того, изменять ли точность MV для следующей единицы. Таким образом, точность MV может выбираться для каждой единицы (например, в расчете на сегмент, в расчете на GOP, в расчете на картинку, в расчете на слайс, в расчете на CTU, в расчете на CU, в расчете на PU, в расчете на PB, в расчете на макроблок, в расчете на подраздел макроблока). Или, чтобы уменьшать сложность, точность MV для единицы может изменяться время от времени (например, периодически или при наступлении определенного события), затем повторяться для одной или более последующих единиц.
[0128] Когда кодер использует один и тот же шаблон мозаичных элементов от картинки к картинке, кодер может повторять точности MV в расчете на мозаичный элемент от картинки к картинке. Совместно расположенные мозаичные элементы от картинки к картинке могут использовать одну и ту же точность MV. Аналогично, совместно расположенные слайсы от картинки к картинке могут использовать одну и ту же точность MV. Например, предположим, что видео изображает рабочий стол компьютера, и часть рабочего стола имеет окно, отображающее естественный видеоконтент. Точность MV дробного отсчета может использоваться внутри этой области рабочего стола от картинки к картинке, тогда как другие области, которые показывают текст или другой воспроизведенный контент, кодируются с использованием точности MV целочисленного отсчета.
[0129] В этом наборе подходов, кодер может использовать кодирование одиночного прохода. Для текущей единицы видео, которая кодируется, выбранная точность MV для текущей единицы зависит, по меньшей мере, частично от собранной информации из одной или более предыдущих единиц видео (в порядке кодирования, который также называется порядок декодирования или порядок битового потока, не порядке ввода, который также называется временной порядок, порядок вывода или порядок отображения).
[0130] Альтернативно, в этом наборе подходов, кодер может использовать кодирование с множеством проходов или кодирование с коротким окном опережающего просмотра (иногда называемое кодирование 1.5 прохода). Для текущей единицы видео, которая кодируется, выбранная точность MV зависит, по меньшей мере, частично от собранной информации из текущей единицы. Выбранная точность MV для текущей единицы также может зависеть, по меньшей мере, частично от собранной информации из одной или более предыдущих единиц видео (в порядке кодирования, не порядке ввода).
[0131] В этом наборе подходов, кодер может регулировать величину склонения к или от точности MV целочисленного отсчета на основе, по меньшей мере, частично степени уверенности, что точность MV целочисленного отсчета является подходящей. Кодер также может регулировать величину склонения к или от точности MV целочисленного отсчета на основе, по меньшей мере, частично вычислительной емкости кодирования и/или декодирования (с предпочтением для точности MV целочисленного отсчета, чтобы уменьшать вычислительную сложность, если является доступной меньшая вычислительная емкость). Например, чтобы благоприятствовать выбору точности MV целочисленного отсчета, кодер может регулировать пороги, используемые в операциях сравнения, чтобы обеспечивать с более вероятностью, что выбирается точность MV целочисленного отсчета.
[0132] В этом наборе подходов, выбранная точность MV может быть для горизонтальных компонент MV и/или вертикальных компонент MV значений MV для блоков внутри единицы видео, где горизонтальным компонентам MV и вертикальным компонентам MV допускается иметь разные точности MV. Или, выбранная точность MV может быть как для горизонтальных компонент MV, так и для вертикальных компонент MV значений MV для блоков внутри единицы видео, где горизонтальные компоненты MV и вертикальные компоненты MV имеют одну и ту же точность MV.
[0133] В этом наборе подходов, кодированное видео (например, в битовом потоке) включает в себя один или более синтаксических элементов, которые указывают выбранную точность MV для единицы. Альтернативно, кодированное видео может не иметь каких-либо синтаксических элементов, которые указывают выбранную точность MV для единицы (см. ниже, в разделе о ненормативных подходах). Например, даже если битовый поток поддерживает сигнализирование значений MV с точностью MV дробного отсчета, кодер может ограничивать оценку движения для единицы видео, чтобы использовать только значения MV с дробными частями, равными нулю. Это может уменьшать вычислительную сложность кодирования и декодирования посредством избегания операций интерполяции.
4. ПОДХОДЫ, КОТОРЫЕ ИСПОЛЬЗУЮТ АНАЛИЗ КОНТЕНТА НИЗКОЙ СЛОЖНОСТИ.
[0134] Чтобы упрощать процесс принятия решений, кодер может учитывать более малый набор данных до выбора точности MV или использовать более простую логику принятия решения при выборе точности MV, избегая множества проходов кодирования.
[0135] Фиг. 9 показывает способ (900) для адаптации точности MV во время кодирования с использованием подхода низкой сложности. Способ (900) может выполняться посредством кодера, такого как кодер, описанный со ссылкой на фиг. 3 или фиг. 4a и 4b, или посредством другого кодера. Способ (900) подробно описывает один подход к сбору информации о видео и выбору точности MV на основе, по меньшей мере, частично собранной информации, как описано со ссылкой на фиг. 8.
[0136] Согласно способу (900), во время кодирования видео, кодер определяет точность MV для единицы видео. При определении точности MV для единицы, кодер идентифицирует (910) набор значений MV, имеющих точность MV дробного отсчета. Набору значений MV может разрешаться включать в себя векторы MV нулевого значения и векторы MV ненулевого значения. Или, набор значений MV может ограничиваться, чтобы включать в себя только векторы MV ненулевого значения. Или, набор значений MV может дополнительно ограничиваться, чтобы включать в себя только векторы MV ненулевого значения из блоков некоторого размера блока или более большого.
[0137] Кодер выбирает (920) точность MV для единицы на основе, по меньшей мере, частично преобладания, внутри набора значений MV, значений MV, имеющих дробную часть, равную нулю. Преобладание может измеряться исходя из доли набора значений MV, имеющих дробную часть, равную нулю. Например, для картинки, кодер может определять процент значений MV, имеющих дробную часть, равную нулю. Или, для области или набора областей, которая использует набор значений MV, преобладание может измеряться исходя из доли этой области или набора областей, имеющей дробную часть, равную нулю. Если доля превосходит порог, выбранная точность MV для единицы является точностью MV целочисленного отсчета. Если доля не превосходит порог, выбранная точность MV для единицы является точностью MV дробного отсчета. Граничное условие (доля равняется порогу) может обрабатываться с использованием любого варианта выбора, в зависимости от реализации.
[0138] Выбор (920) точности MV для единицы также может основываться, по меньшей мере, частично на преобладании векторов MV ненулевого значения, так что переключение на точность MV целочисленного отсчета разрешается, если имеется пороговая величина векторов MV ненулевого значения. Преобладание векторов MV ненулевого значения может измеряться исходя из доли значений MV, которые являются векторами MV ненулевого значения, исходя из числа блоков, которые используют векторы MV ненулевого значения, или исходя из доли области или набора областей, которая использует векторы MV ненулевого значения. В этом случае, набор значений MV, имеющих точность MV дробного отсчета, может идентифицироваться из числа векторов MV ненулевого значения области или набора областей. Таким образом, кодер может учитывать преобладание векторов MV ненулевого значения, имеющих дробную часть, равную нулю, внутри набора векторов MV, которые являются векторами MV ненулевого значения. Например, кодер переключается на точность MV целочисленного отсчета, если удовлетворяются два условия: (1) обнаружено достаточно большое количество векторов MV ненулевого значения, и (2) внутри этого набора векторов MV ненулевого значения, имеется достаточно много, которые имеют дробную часть, равную нулю (или, альтернативно, достаточно мало, которые имеют ненулевую дробную часть). Преобладание векторов MV ненулевого значения и преобладание значений MV, имеющих дробную часть, равную нулю, может определяться посредством подсчета значений MV (независимо от их ассоциированного размера блока) или посредством учета ассоциированного размера блока для значений MV (например, так как некоторые значения MV применяются к более большим блокам, чем другие).
[0139] Кодер кодирует единицу с использованием выбранной точности MV для единицы. Значения MV для блоков (например, единиц PU, макроблоков, или других блоков) внутри единицы видео имеют выбранную точность MV для единицы. Кодер выводит кодированные данные для текущей единицы, например, в битовом потоке. Кодированные данные могут включать в себя синтаксические элементы, которые указывают выбранную точность MV для единицы.
[0140] Чтобы уменьшать величину времени, которое кодер расходует, устанавливая точность MV, после того, как точность MV целочисленного отсчета выбирается для единицы, выбранная точность MV может использоваться для последующих единиц видео до тех пор, когда некоторое событие вызывает переключение точности MV назад на точность MV дробного отсчета. Например, событие может быть кодированием определенного количества единиц, изменением сцены, или определением, на основе наблюдений во время кодирования, что переключение назад на точность MV дробного отсчета будет предпочтительным.
[0141] В одном иллюстративном варианте осуществления, кодер кодирует единицу видео (например, картинку, мозаичный элемент, слайс или CU) только один раз. Чтобы начать, кодер кодирует единицу, используя точность MV 1/4-отсчета. Во время кодирования, кодер определяет, являются ли дробные части значений MV нулевыми или нет. Например, кодер измеряет то, какая доля значений MV имеет ненулевые дробные части. Или, так как некоторые значения MV оказывают влияние на более большие области картинки, чем другие, кодер измеряет то, какая доля интер-картиночно предсказанной области (областей) использует значения MV с ненулевыми дробными частями (измеряя область, не число значений MV). Если доля превосходит порог (который зависит от варианта осуществления и равняется, например, 75%), кодер переключается на точность MV целочисленного отсчета для одной или более последующих единиц видео.
[0142] В этом иллюстративном варианте осуществления, после того, как кодер переключается на точность MV целочисленного отсчета, кодер может поддерживать эту точность MV целочисленного отсчета неопределенно или до тех пор, когда определенное событие запускает переключение назад на точность MV дробного отсчета, по меньшей мере, временно. Событие может быть, например, кодированием конкретного количества единиц (например, 100 единиц). Или, событие может быть изменением сцены. Или, событие может быть определением, на основе статистик, собранных при кодировании, что переключение назад на точность MV дробного отсчета является скорей всего предпочтительным. (Такие статистики могут собираться во время кодирования некоторой области ограниченной величины, чтобы принимать решение о том, будет ли точность MV дробного отсчета работать более хорошо для этой области, затем применяться, чтобы переключать точность MV для одной или более единиц).
[0143] Является ли видеоконтент естественным видеоконтентом или искусственно созданным видеоконтентом, большие части видео могут быть неподвижными. Например, неподвижные части могут быть неподвижным фоном в естественном видео или неподвижным контентом в контенте захвата экрана. Неподвижные части видео имеют векторы MV нулевого значения, которые имеют дробные части, равные нулю, когда точность MV является точностью MV дробного отсчета. Присутствие значительного количества векторов MV нулевого значения может разрушать логику принятия решения, которая учитывает долю значений MV с ненулевыми дробными частями.
[0144] Поэтому, кодер может устранять векторы MV нулевого значения из рассмотрения. Фиг. 10 показывает картинку (1000), которая включает в себя неподвижную часть (1001) с (в основном) векторами MV нулевого значения и две подвижные части (1002, 1003) с (в основном) векторами MV ненулевого значения. Кодер учитывает векторы MV ненулевого значения в подвижных частях (1002, 1003), но не учитывает значения MV неподвижной части (1001). Кодер может переключаться на точность MV целочисленного отсчета, когда доля векторов MV ненулевого значения (в подвижных частях (1002, 1003)) с дробными частями, равными нулю, превосходит порог (или когда доля картинки, которая использует ненулевые векторы MV с дробными частями, равными нулю, (исходя из области) превосходит некоторый порог).
[0145] Кодер также может проверять, что количество векторов MV ненулевого значения, которое оценивается, превосходит пороговую величину, так что решения не делаются на основе незначительного количества значений MV. Это может делать процесс принятия решений более устойчивым.
[0146] В другом иллюстративном варианте осуществления, кодер кодирует заданную единицу видео (например, картинку, мозаичный элемент, слайс или CU) с использованием точности MV 1/4-отсчета. Кодер переключается на точность MV целочисленного отсчета для одной или более последующих единиц видео, если (1) более, чем x% единицы использует интер-картиночное предсказание с векторами MV ненулевого значения, и (2) более, чем y% части единицы, которая использует ненулевые векторы MV, имеет векторы MV целочисленного значения (дробные части, равные нулю). Значения x и y зависят от реализации и могут быть, например, 5 и 75, соответственно.
[0147] В аналогичном иллюстративном варианте осуществления, кодер кодирует заданную единицу видео (например, картинку, мозаичный элемент, слайс или CU) с использованием точности MV 1/4-отсчета. Кодер переключается на точность MV целочисленного отсчета для одной или более последующих единиц видео, если (1) более, чем z единиц PU единицы имеет векторы MV ненулевого значения, и (2) более, чем y% этих единиц PU имеют векторы MV целочисленного значения (дробные части, равные нулю). Значения z и y зависят от реализации и могут быть, например, 100 и 75, соответственно.
[0148] Значения MV для более больших областей могут быть более надежными, чем значения MV для более малых областей. Кодер может ограничивать то, какие значения MV оцениваются. Например, кодер может оценивать только значения MV для блоков некоторого размера блока или больше (например, 16×16 или больше).
[0149] В другом иллюстративном варианте осуществления, кодер кодирует заданную единицу видео (например, картинку, мозаичный элемент, слайс или CU) с использованием точности MV 1/4-отсчета. Кодер переключается на точность MV целочисленного отсчета для одной или более последующих единиц видео, если (1) более, чем z единиц PU единицы являются w×w или больше и имеют векторы MV ненулевого значения, и (2) более, чем y% этих единиц PU имеют векторы MV целочисленного значения (дробные части, равные нулю). Значения w, z и y зависят от реализации и могут быть, например, 16, 100 и 75, соответственно.
5. НЕНОРМАТИВНЫЕ ПОДХОДЫ.
[0150] В большинстве предшествующих примеров, кодер сигнализирует один или более синтаксических элементов, указывающих выбранную точность MV в кодированных данных, например, в битовом потоке. Декодер осуществляет синтаксический разбор синтаксического элемента (элементов), указывающего выбранную точность MV, и интерпретирует значения MV согласно выбранной точности MV.
[0151] Альтернативно, в ненормативном подходе, кодер не сигнализирует какие-либо синтаксические элементы, указывающие точность MV, выбранную кодером. Например, кодер осуществляет выбор между точностью MV целочисленного отсчета и точностью MV дробного отсчета, но всегда кодирует значения MV при точности MV дробного отсчета. Декодер восстанавливает и применяет значения MV при точности MV дробного отсчета.
[0152] Когда он выбирает точность MV целочисленного отсчета, кодер может упрощать оценку движения посредством избегания интерполяции значений отсчетов при смещениях дробных отсчетов и посредством оценки областей-кандидатов предсказания только при смещениях целочисленных отсчетов. Также, если предсказание MV формирует дробное значение - например, с использованием временного предсказания MV - кодер может учитывать только те разности MV, которые будут давать результатом целочисленные значения при добавлении разности MV к предсказанию MV дробного значения (например, из временного предсказания MV). Во время декодирования, компенсация движения может упрощаться посредством избегания интерполяции значений отсчетов при смещениях дробных отсчетов.
[0153] Некоторые подходы, описанные в предшествующем разделе (например, с использованием масштабированной стоимости отношения искажения к скорости передачи посредством масштабирования стоимости искажения и/или стоимости битрейта, или добавления штрафа стоимости искажения или штрафа стоимости битрейта, или регулировки весового коэффициента) также могут приспосабливаться для ненормативного подхода. Кодер может изменять степень склонения к или от точности MV целочисленного отсчета во время кодирования. Посредством масштабирования, штрафов и/или весового коэффициента, кодер может регулировать склонение к точности MV целочисленного отсчета в зависимости от степени уверенности, что значения MV целочисленного отсчета являются скорей всего более подходящими для кодирования видеоконтента, или в зависимости от вычислительной емкости для кодирования или декодирования.
6. АЛЬТЕРНАТИВЫ И ИЗМЕНЕНИЯ.
[0154] В некоторых сценариях использования, порядок кодирования картинок (также называемый порядок декодирования или декодированный порядок) отличается от временного порядка на входе/захвате камеры и устройстве отображения (также называемого порядок отображения). Кодер может учитывать такое переупорядочивание при выборе точности MV. Например, кодер может выбирать точность (точности) MV на основе временного порядка картинок, нежели на основе порядка кодирования картинок.
[0155] Во многих из примеров, здесь описанных, интра-BC предсказание и компенсация движения осуществляются в отдельных компонентах или процессах, и оценка BV и оценка движения осуществляются в отдельных компонентах или процессах. Альтернативно, интра-BC предсказание может осуществляться как специальный случай компенсации движения, и оценка BV может осуществляться как специальный случай оценки движения, для которых текущая картинка используется в качестве опорной картинки. В таких вариантах осуществления, значение BV может сигнализироваться как значение MV, но использоваться для интра-BC предсказания (внутри текущей картинки), нежели интер-картиночного предсказания. Как здесь используется, признак "интра-BC предсказание" указывает предсказание внутри текущей картинки, обеспечивается ли это предсказание с использованием модуля интра-картиночного предсказания, модуля компенсации движения, или некоторого другого модуля. Аналогично, значение BV может представляться с использованием значения MV или с использованием отличного типа параметра или синтаксического элемента, и оценка BV может обеспечиваться с использованием модуля интра-картиночной оценки, модуля оценки движения или некоторого другого модуля. Подходы, здесь описанные, для выбора точности MV, могут применяться, чтобы определять точность значений MV, которые будут использоваться в качестве значений BV для интра-BC предсказания (то есть, с текущей картинкой в качестве опорной картинки).
VI. ИННОВАЦИОННЫЕ ПРИЗНАКИ.
[0156] В дополнение к формуле изобретения, представленной ниже, инновационные признаки, здесь описанные, включают в себя но не ограничены этим следующее.
средство для кодирования видео, включающее в себя средство для определения точности вектора движения ("MV") для единицы видео, при этом значения MV для блоков внутри единицы видео имеют точность MV для единицы, и при этом средство для определения точности MV для единицы включает в себя:
средство для идентификации набора значений MV, имеющих точность MV дробного отсчета; и
средство для выбора точности MV для единицы на основе, по меньшей мере, частично преобладания, внутри набора значений MV, значений MV, имеющих дробную часть, равную нулю; и
средство для вывода кодированного видео.
средство для кодирования видео, включающее в себя средство для определения точности вектора движения ("MV") для единицы видео, при этом значения MV для блоков внутри единицы видео имеют точность MV для единицы, при этом средство для определения включает в себя средство для выполнения анализа отношения искажения к скорости передачи, чтобы принимать решение между множеством точностей MV, при этом множество точностей MV включают в себя одну или более точностей MV дробного отсчета и точность MV целочисленного отсчета, и при этом анализ отношения искажения к скорости передачи склоняется к точности MV целочисленного отсчета посредством: (a) масштабирования стоимости искажения, (b) добавления штрафа к стоимости искажения, (c) масштабирования стоимости битрейта, (d) добавления штрафа к стоимости битрейта, и/или (e) регулировки коэффициента множителя Лагранжа; и
средство для вывода кодированного видео
средство для кодирования видео, включающее в себя средство для определения точности вектора движения ("MV") для единицы видео из множества точностей MV, при этом множество точностей MV включает в себя одну или более точностей MV дробного отсчета и точность MV целочисленного отсчета, при этом значения MV для блоков внутри единицы видео имеют точность MV для единицы, и при этом средство для определения включает в себя:
средство для сбора информации о видео; и
средство для выбора точности MV для единицы на основе, по меньшей мере, частично собранной информации; и
средство для вывода кодированного видео.
[0157] Ввиду многих возможных вариантов осуществления, к которым могут применяться принципы раскрытого изобретения, следует понимать, что проиллюстрированные варианты осуществления являются всего лишь предпочтительными примерами изобретения и не должны браться как ограничивающие объем изобретения. Скорее, объем изобретения определяется посредством последующей формулы изобретения. Мы поэтому заявляем в качестве нашего изобретения все, что попадает в объем и сущность этой формулы изобретения.
Изобретение относится к способу кодирования искусственно созданного видео, вычислительному устройству и считываемому компьютером носителю. Технический результат заключается в обеспечении возможности выбора точности вектора движения. Способ содержит кодирование видео, включающее в себя определение точности вектора движения (MV) для единицы видео, причем единица содержит множество блоков, и кодирование этой единицы с использованием упомянутой точности MV для единицы, при этом значения MV для упомянутых блоков внутри единицы видео имеют точность MV для единицы, и при этом определение точности MV для единицы включает в себя идентификацию набора значений MV, имеющих точность MV дробного отсчета, посредством идентификации значения MV для каждого блока единицы, и выбор точности MV для блоков единицы на основе, по меньшей мере частично, преобладания, внутри набора значений MV блоков, значений MV, имеющих дробную часть, равную нулю, и вывод кодированного видео. 3 н. и 9 з.п. ф-лы, 13 ил.
1. Способ кодирования искусственно созданного видео в вычислительном устройстве с видеокодером, причем способ содержит:
кодирование видео, включающее в себя определение точности вектора движения ("MV") для единицы видео, причем единица содержит множество блоков, и кодирование этой единицы с использованием упомянутой точности MV для единицы, при этом значения MV для упомянутых блоков внутри единицы видео имеют точность MV для единицы, и при этом определение точности MV для единицы включает в себя:
идентификацию набора значений MV, имеющих точность MV дробного отсчета, посредством идентификации значения MV для каждого блока единицы; и
выбор точности MV для блоков единицы на основе, по меньшей мере частично, преобладания, внутри набора значений MV блоков, значений MV, имеющих дробную часть, равную нулю; и
вывод кодированного видео.
2. Способ по п. 1, в котором:
преобладание измеряется исходя из доли набора значений MV, имеющих дробную часть, равную нулю; или
область или набор областей использует набор значений MV, и преобладание измеряется исходя из доли области или набора областей, которая использует одно из значений MV, имеющих дробную часть, равную нулю.
3. Способ по п. 2, в котором, если доля превосходит порог, выбранная точность MV для единицы является точностью MV целочисленного отсчета, и при этом, если доля не превосходит порог, выбранная точность MV для единицы является точностью MV дробного отсчета.
4. Способ по п. 1, в котором выбранная точность MV для единицы является точностью MV целочисленного отсчета, при этом выбранная точность MV для единицы также используется для последующих единиц видео до тех пор, когда событие вызывает переключение назад на точность MV дробного отсчета, и при этом событие является:
кодированием определенного количества единиц;
изменением сцены или
определением, на основе наблюдений во время кодирования, что переключение назад на точность MV дробного отсчета будет предпочтительным.
5. Способ по п. 1, в котором:
набору значений MV разрешают включать в себя векторы MV нулевого значения и векторы MV ненулевого значения;
упомянутый набор ограничивают, чтобы он включал в себя только векторы MV ненулевого значения; или
упомянутый набор ограничивают, чтобы он включал в себя только векторы MV ненулевого значения из блоков некоторого размера блока или размера, превышающего упомянутый некоторый размер.
6. Способ по п. 1, в котором выбор точности MV для единицы также основывается, по меньшей мере частично, на преобладании векторов MV ненулевого значения, так что переключение на точность MV целочисленного отсчета разрешается, если имеется пороговая величина векторов MV ненулевого значения, при этом преобладание векторов MV ненулевого значения измеряется исходя из (a) доли значений MV, которые являются векторами MV ненулевого значения, (b) числа блоков, которые используют векторы MV ненулевого значения, или (c) доли области или набора областей, которая использует векторы MV ненулевого значения, и при этом набор значений MV, имеющих точность MV дробного отсчета, идентифицируется из числа векторов MV ненулевого значения области или набора областей.
7. Способ по п. 1, в котором:
кодирование является кодированием одиночного прохода, единица видео является текущей единицей видео и выбранная точность MV для текущей единицы зависит, по меньшей мере частично, от одной или более предыдущих единиц видео; или
кодирование является кодированием с множеством проходов, единица видео является текущей единицей видео и выбранная точность MV для текущей единицы зависит, по меньшей мере частично, от текущей единицы видео.
8. Способ по п. 1, в котором способ дополнительно содержит:
регулировку величины склонения к или от точности MV целочисленного отсчета на основе, по меньшей мере частично, (a) степени уверенности, что точность MV целочисленного отсчета является подходящей, и/или (b) вычислительной емкости кодирования и/или декодирования.
9. Способ по п. 1, в котором выбранная точность MV для единицы предназначена для горизонтальных компонент MV и/или вертикальных компонент MV значений MV для блоков внутри единицы видео.
10. Способ по п. 1, в котором единица выбирается из группы, состоящей из последовательности, ряда картинок между сменами сцен, группы картинок, картинки, мозаичного элемента, слайса, единицы дерева кодирования и единицы кодирования, и при этом блоки являются блоками предсказания, единицами предсказания, макроблоками или подразделами макроблока.
11. Вычислительное устройство, содержащее:
средство для кодирования видео, включающее в себя средство для определения точности вектора движения ("MV") для единицы видео, причем единица содержит множество блоков, и кодирования этой единицы с использованием упомянутой точности MV для единицы, при этом значения MV для упомянутых блоков внутри единицы видео имеют точность MV для единицы, и при этом средство для определения точности MV для единицы включает в себя:
средство для идентификации набора значений MV, имеющих точность MV дробного отсчета, посредством идентификации значения MV для каждого блока единицы; и
средство для выбора точности MV для блоков единицы на основе, по меньшей мере частично, преобладания, внутри набора значений MV блоков единицы, значений MV, имеющих дробную часть, равную нулю; и
средство для вывода кодированного видео.
12. Считываемый компьютером носитель, хранящий исполняемые компьютером инструкции для реализации способа по любому из пп. 1-10.
Способ приготовления лака | 1924 |
|
SU2011A1 |
Пломбировальные щипцы | 1923 |
|
SU2006A1 |
Многоступенчатая активно-реактивная турбина | 1924 |
|
SU2013A1 |
Изложница с суживающимся книзу сечением и с вертикально перемещающимся днищем | 1924 |
|
SU2012A1 |
УСТРОЙСТВО КОДИРОВАНИЯ ВИДЕО И УСТРОЙСТВО ДЕКОДИРОВАНИЯ ВИДЕО | 2009 |
|
RU2486692C1 |
Авторы
Даты
2019-03-21—Публикация
2014-12-19—Подача