ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Варианты осуществления настоящей заявки в целом относятся к области видеокодирования и, более конкретно, к интер-предсказанию.
УРОВЕНЬ ТЕХНИКИ
Видеокодирование (кодирование и декодирование видео) используется в широком диапазоне применений цифрового видео, например, в широковещательном цифровом телевидении, передаче видео через Интернет и мобильные сети, в диалоговых приложениях в реальном времени, таких как видеочат, видеоконференцсвязь, DVD и Blu-Ray диски, системы сбора и редактирования видеоконтента и видеокамеры приложений безопасности.
Объем видеоданных, необходимых для представления даже относительно короткого видео, может быть значительным, что может привести к трудностям, когда эти данные должны передаваться в потоковом режиме или иным образом передаваться по сети связи с ограниченной пропускной способностью. Таким образом, видеоданные, как правило, сжимаются перед тем, как передаваться через современные телекоммуникационные сети. Размер видео также может быть проблемой, когда видео хранится на запоминающем устройстве, поскольку ресурсы памяти могут быть ограничены. Устройства сжатия видео часто используют программное и/или аппаратное обеспечение в источнике для кодирования видеоданных перед передачей или хранением, тем самым уменьшая количество данных, необходимых для представления цифровых видеоснимков. Сжатые данные затем принимаются устройством декомпрессии видео получателя, которое декодирует видеоданные. С ограниченными сетевыми ресурсами и постоянно растущими требованиями к более высокому качеству видео, желательны улучшенные способы сжатия и декомпрессии, которые улучшают степень сжатия с минимальными потерями качества изображения или вообще без таких потерь.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Варианты осуществления настоящей заявки обеспечивают устройства и способы для кодирования и декодирования согласно независимым пунктам формулы изобретения.
Вышеупомянутые и другие цели достигаются изобретением по независимым пунктам формулы изобретения. Дополнительные формы реализации очевидны из зависимых пунктов формулы изобретения, описания и фигур.
Согласно первому аспекту настоящей заявки раскрыт способ хранения информации о движении, текущий блок состоит из первого подблока и второго подблока, первый подблок и второй подблок отделены общей границей, первый подблок соответствует первой информации о движении, а второй подблок соответствует второй информации о движении, причем способ содержит: определение расстояния между набором дискретных отсчетов в текущем блоке и общей границей; и сравнение расстояния с пороговой величиной для определения того, что третья информация о движении сохранена для набора дискретных отсчетов, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении.
В возможном варианте реализации сравнение расстояния с пороговой величиной для определения того, что третья информация о движении сохранена для набора дискретных отсчетов, содержит определение того, что третья информация о движении сохранена для набора дискретных отсчетов, в случае, при котором абсолютное значение расстояния меньше или равно пороговой величине.
В возможном варианте реализации, в случае, при котором абсолютное значение расстояния больше пороговой величины, способ дополнительно содержит: определение того, что первая информация о движении сохранена для набора дискретных отсчетов, в случае, при котором расстояние является положительным; или определение того, что вторая информация о движении сохранена для набора дискретных отсчетов, в случае, при котором расстояние является отрицательным.
В возможном варианте реализации пороговая величина является предварительно определенной.
В возможном варианте реализации пороговая величина основана на геометрическом соотношении между общей границей и горизонтальным направлением или вертикальным направлением.
В возможном варианте реализации пороговая величина основана на угле между перпендикулярным направлением общей границы и горизонтальным направлением или вертикальным направлением.
В возможном варианте реализации пороговая величина основана на ширине и/или высоте текущего блока.
В возможном варианте реализации общая граница определяется посредством углового параметра и параметра расстояния, причем перед определением расстояния между набором дискретных отсчетов в текущем блоке и общей границей способ дополнительно содержит: определение углового параметра и параметра расстояния.
В возможном варианте реализации в декодере определение углового параметра и параметра расстояния содержит: выделение посредством анализа углового параметра и параметра расстояния из битового потока; или выделение посредством анализа указателя из битового потока и получение углового параметра и параметра расстояния на основе указателя.
В возможном варианте реализации после определения углового параметра и параметра расстояния способ дополнительно содержит: определение первого вычислительного параметра на основе углового параметра; вычисление временного углового параметра на основе углового параметра; определение второго вычислительного параметра на основе временного углового параметра; и вычисление третьего вычислительного параметра на основе углового параметра и параметра расстояния.
В возможном варианте реализации первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно угловому параметру, и второй вычислительный параметр определяется посредством проверки упомянутой таблицы поиска согласно временному угловому параметру, и при этом первый вычислительный параметр и второй вычислительный параметр являются значением косинуса и значением синуса одного и того же угла, соответственно.
В возможном варианте реализации расстояние вычисляется следующим образом:
distFromLine=(x+K)*P1+(y+K)*P2-P3,
где P1, P2 и P3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром, соответственно, distFromLine представляет расстояние, K является неотрицательным целым числом, x представляет горизонтальную координату целевого положения в наборе дискретных отсчетов, y представляет вертикальную координату целевого положения в прямоугольной системе координат, где положение верхнего левого дискретного отсчета текущего блока устанавливается в качестве начала координат, направление вправо устанавливается в качестве положительного горизонтального направления, а направление вниз устанавливается в качестве положительного вертикального направления.
В возможном варианте реализации K равно 1.
В возможном варианте реализации целевое положение предварительно определено в наборе дискретных отсчетов.
В возможном варианте реализации предварительно определенное положение является верхним левым положением набора дискретных отсчетов или центральным положением набора дискретных отсчетов.
В возможном варианте реализации точность дискретного отсчета расстояния выше целочисленного дискретного отсчета; соответственно, расстояние вычисляется следующим образом:
distFromLine=((x<<N)+ K)*P1+((y<<N)+K)*P2-P3,
где 2N представляет обратную величину точности дискретного отсчета расстояния.
В возможном варианте реализации N равно 1.
В возможном варианте реализации набор дискретных отсчетов является набором дискретных отсчетов яркости текущего блока.
В возможном варианте реализации перед определением расстояния между набором дискретных отсчетов в текущем блоке и общей границей способ дополнительно содержит: разделение текущего блока на множество наборов дискретных отсчетов, при этом каждый из множества наборов дискретных отсчетов имеет тот же размер, что и набор дискретных отсчетов; или установку текущего блока в качестве набора дискретных отсчетов.
В возможном варианте реализации набор дискретных отсчетов является массивом дискретных отсчетов 4×4.
В возможном варианте реализации каждый из множества наборов дискретных отсчетов соответствует каждому модулю хранения информации о движении, модуль хранения информации о движении используется для хранения одной из первой информации о движении, второй информации о движении и третьей информации о движении.
В возможном варианте реализации первый подблок и второй подблок являются треугольным разбиением, трапециевидным разбиением или асимметричным прямоугольным разбиением.
В возможном варианте реализации первая информация о движении содержит информацию о движении на основе первого списка опорных снимков, вторая информация о движении содержит информацию о движении на основе второго списка опорных снимков, и при этом третья информация о движении содержит первую информацию о движении и вторую информацию о движении.
Информация.
Согласно второму аспекту настоящей заявки раскрыто устройство для декодирования видеопотока, включающее в себя процессор и память. Память хранит инструкции, которые предписывают процессору выполнять способ согласно первому аспекту.
Согласно третьему аспекту настоящей заявки раскрыто устройство для кодирования видеопотока, включающее в себя процессор и память. Память хранит инструкции, которые предписывают процессору выполнять способ согласно первому аспекту.
Согласно четвертому аспекту предлагается машиночитаемый носитель данных, на котором хранятся инструкции, которые, при их исполнении, предписывают одному или более процессорам обеспечивать кодирования видеоданных. Инструкции предписывают одному или более процессорам выполнять способ согласно первому аспекту.
В соответствии с пятым аспектом компьютерная программа содержит программный код для выполнения способа согласно первому аспекту при ее исполнении на компьютере.
Подробности одного или более вариантов осуществления изложены на прилагаемых чертежах и в нижеследующем описании. Другие особенности, цели и преимущества будут очевидны из описания, чертежей и формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
В следующих вариантах осуществления заявки описаны более подробно со ссылками на приложенные фигуры и чертежи, на которых:
Фиг.1A является блок-схемой, показывающей пример системы видеокодирования, выполненной с возможностью реализации вариантов осуществления настоящей заявки;
Фиг.1B является блок-схемой, показывающей другой пример системы видеокодирования, выполненной с возможностью реализации вариантов осуществления настоящей заявки;
Фиг.2 является блок-схемой, показывающей пример видеокодера, выполненного с возможностью реализации вариантов осуществления настоящей заявки;
Фиг.3 является блок-схемой, показывающей пример структуры видеодекодера, выполненного с возможностью реализации вариантов осуществления настоящей заявки;
Фиг.4 является блок-схемой, иллюстрирующей пример устройства кодирования или устройства декодирования;
Фиг.5 является блок-схемой, иллюстрирующей другой пример устройства кодирования или устройства декодирования;
Фиг.6 является схемой, показывающей пример положений пространственного потенциально подходящего варианта на слияние;
Фиг.7 является схемой, показывающей пример пар потенциально подходящих вариантов, рассматриваемых для проверки избыточности пространственных потенциально подходящих вариантов на слияние;
Фиг.8 является схемой, показывающей пример масштабирования вектора движения для временного потенциально подходящего варианта на слияние;
Фиг.9 является схемой, показывающей пример хранения вектора движения для блока предсказания размером 8×8 дискретных отсчетов яркости;
Фиг.10 является схемой, показывающей пример интер-предсказания на основе треугольного разбиения;
Фиг.11 является схемой, показывающей пример выбора MV с уни-предсказанием для режима треугольного разбиения;
Фиг.12 является схемой, показывающей пример весовых коэффициентов, используемых в процессе смешивания;
Фиг.13 является схемой, показывающей пример хранения вектора движения для режима треугольного разбиения;
Фиг.14 является схемой, показывающей пример другого геометрического разбиения;
Фиг.15 является схемой, показывающей пример параметров GEO-разбиения;
Фиг.16 является схемой, показывающей пример операции смешивания;
Фиг.17 является схемой, показывающей пример таблицы поиска для операции смешивания;
Фиг.18 является схемой, показывающей пример примера хранения движения 4×4 с целочисленным положением и положением в половину пикселя;
Фиг.19 является схемой, показывающей пример способа хранения движения;
Фиг.20 является блок-схемой, иллюстрирующей пример способа хранения информации о движении;
Фиг.21 является блок-схемой, иллюстрирующей пример устройства хранения информации о движении;
Фиг.22 является блок-схемой, показывающей примерную структуру системы 3100 предоставления контента, которая реализует службу доставки контента;
Фиг.23 является блок-схемой, показывающей структуру примерного терминального устройства.
Следующие одинаковые ссылочные позиции относятся к идентичным или, по меньшей мере, функционально эквивалентным признакам, если явно не указано иное.
ПОДРОБНОЕ ОПИСАНИЕ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ
В нижеследующем описании делается ссылка на сопроводительные чертежи, которые составляют часть раскрытия и на которых показаны в качестве иллюстрации конкретные аспекты вариантов осуществления заявки или конкретные аспекты, в которых варианты осуществления настоящей заявки могут быть использовал. Понятно, что варианты осуществления заявки могут использоваться в других аспектах и содержать структурные или логические изменения, не изображенные на фигурах. Поэтому нижеследующее подробное описание не следует воспринимать в ограничивающем смысле, и объем настоящей заявки определяется прилагаемой формулой изобретения.
Например, должно понятно, что раскрытие в связи с описанным способом также может быть верным для соответствующего устройства или системы, выполненной с возможностью выполнения способа, и наоборот. Например, если описан один или множество конкретных этапов способа, соответствующее устройство может включать в себя один или множество блоков (модулей), например функциональных блоков, для выполнения описанного одного или множества этапов способа (например, один блок, выполняющий один или множество этапов или множество блоков, каждый из которых выполняет один или более из множества этапов), даже если такой один или более блоков явно не описаны или не проиллюстрированы на фигурах. С другой стороны, например, если конкретное устройство описывается на основе одного или множества блоков, например функциональных блоков, соответствующий метод может включать в себя в себя один этап для выполнения функциональных возможностей одного или множества блоков (например, один этап выполнения функциональные возможности одного или множества модулей или множества этапов, каждый из которых выполняет функциональные возможности одного или более из множества модулей), даже если такой один или множество этапов явно не описаны или не проиллюстрированы на фигурах. Кроме того, понятно, что признаки различных примерных вариантов осуществления и/или аспектов, описанных в данном документе, могут быть объединены друг с другом, если специально не указано иное.
Видеокодирование обычно относится к обработке последовательности снимков, которые образуют видео или видеопоследовательность. Вместо термина «снимок» можно использовать термин «кадр» или «изображение» как синонимы в области видеокодирования. Видеокодирование (или кодирование в общем смысле) содержит две части видеокодирование и декодирование видео. Видеокодирование выполняется на стороне источника, обычно содержащее обработку (например, посредством сжатия) исходных видеоснимков для уменьшения объема данных, необходимых для представления видеоснимков (для более эффективного хранения и/или передачи). Видеодекодирование выполняется на стороне получателя и обычно включает в себя обратную обработку по сравнению с кодером для восстановления видеоснимков. Варианты осуществления, относящиеся к «кодированию» видеоснимков (или снимков в целом, следует понимать как относящиеся либо к «кодированию», либо к «декодированию» видеоснимков или соответственных видеопоследовательностей. Объединение кодирующей части и декодирующей части также называется CODEC (кодирование и декодирование).
В случае кодирования видео без потерь исходные видеоснимки могут быть восстановлены, т.е. восстановленные видеоснимки имеют то же качество, что и исходные видеоснимки (при условии отсутствия потерь при передаче или других потерь данных во время хранения или передачи). В случае кодирования видео с потерями выполняется дальнейшее сжатие, например, посредством квантования, чтобы уменьшить объем данных, представляющих видеоснимки, которые не могут быть полностью восстановлены в декодере, т.е. качество восстановленных видеоснимков ниже или хуже по сравнению с к качеству исходных видеоснимков.
Несколько стандартов видеокодирования принадлежат к группе «гибридных видеокодеков с потерями» (т.е. сочетают пространственное и временное предсказание в области дискретных отсчетов и кодирование с двумерным преобразованием для применения квантования в области преобразования). Каждый снимок видеопоследовательности обычно разделяется на набор неперекрывающихся блоков, и кодирование обычно выполняется на уровне блоков. Другими словами, в кодере видео обычно обрабатывается, то есть кодируется, на уровне блока (видеоблока), например, с использованием пространственного (внутри снимка) (интра) предсказания и/или временного (между снимками) (интер) предсказания для генерации блока предсказания, вычитая блок предсказания из текущего блока (блок, который в настоящее время обрабатывается/должен быть обработан) для получения остаточного блока, преобразование остаточного блока и квантование остаточного блока в области преобразования для уменьшения объема данных, которые должны быть переданы (сжатие), тогда как в декодере обратная обработка по сравнению с кодером применяется к кодированному или сжатому блоку, чтобы восстановить текущий блок для представления. Кроме того, кодер дублирует цикл обработки декодера, так что оба будут генерировать идентичные предсказания (например, интра- и интер-предсказание) и/или реконструкцию для обработки, то есть кодирования, последующих блоков.
В следующих вариантах осуществления системы 10 видеокодирования кодер 20 и декодер 30 описываются на основе фигур с 1 по 3.
Фиг.1A является схематической блок-схемой, иллюстрирующей примерную систему 10 кодирования, например систему 10 видеокодирования (или вкратце систему 10 кодирования), которая может использовать методики этой настоящей заявки. Видеокодер 20 (или вкратце кодер 20) и видеодекодер 30 (или вкратце декодер 30) системы 10 кодирования видео представляют примеры устройств, которые могут быть выполнены с возможностью выполнения методик в соответствии с различными примерами, описанными в настоящей заявке.
Как показано на Фиг.1A, система 10 кодирования содержит устройство-источник 12, выполненное с возможностью предоставления кодированных данных 21 снимка, например, в устройство-получатель 14 для декодирования кодированных данных 13 снимка.
Устройство-источник 12 содержит кодер 20 и может дополнительно, т.е. в необязательном порядке, содержать источник 16 снимка, препроцессор (или модуль предварительной обработки) 18, например препроцессор 18 снимка, и интерфейс связи или модуль 22 связи.
Источник 16 снимка может содержать или быть устройством захвата снимка любого типа, например, камерой для захвата реального снимка и/или любого вида устройством генерации снимка, например процессор компьютерной графики для генерации компьютерного анимированного снимка, или любое другое устройство для получения и/или предоставления реального снимка, сгенерированного компьютером снимка (например, содержимое экрана, снимок виртуальной реальности (VR)) и/или любое их сочетание (например, снимок дополненной реальности (AR)). Источником снимка может быть любой тип памяти или хранилища, в котором хранятся любые из вышеупомянутых снимков.
В отличие от препроцессора 18 и обработки, выполняемой модулем 18 предварительной обработки, снимок или данные 17 снимка также могут называться необработанным снимком или данными 17 необработанного снимка.
Препроцессор 18 выполнен с возможностью приема данных 17 (необработанного) снимка и выполнения предварительной обработки данных 17 снимка для получения предварительно обработанного снимка 19 или данных 19 предварительно обработанного снимка. Предварительная обработка, выполняемая препроцессором 18, может, например, включать в себя обрезку, преобразование цветового формата (например, из RGB в YCbCr), цветокоррекцию или уменьшение шума. Можно понять, что модуль 18 предварительной обработки может быть необязательным компонентом.
Видеокодер 20 выполнен с возможностью приема данных 19 предварительно обработанного снимка и предоставления данных 21 кодированного снимка (дополнительные подробности будут описаны ниже, например, на основе Фиг.2).
Интерфейс 22 связи устройства-источника 12 может быть выполнен с возможностью приема данных 21 кодированного снимка и для передачи данных 21 кодированного снимка (или любой их дальнейшей обработанной версии) по каналу 13 связи на другое устройство, например, на устройство-получатель 14 или любое другое устройство для хранения или прямого восстановления.
Устройство-получатель 14 содержит декодер 30 (например, видеодекодер 30) и может дополнительно, т.е. в необязательном порядке, содержать интерфейс или модуль 28 связи, постпроцессор 32 и устройство 34 отображения.
Интерфейс 28 связи устройства-получателя 14 выполнен с возможностью приема данных 21 кодированного снимка (или любой их дальнейшей обработанной версии), например, непосредственно от устройства-источника 12 или из любого другого источника, например запоминающего устройства, например устройство хранения данных кодированного снимка, и предоставить данные 21 кодированного снимка в декодер 30.
Интерфейс 22 связи и интерфейс 28 связи могут быть выполнены с возможностью передачи или приема данных 21 кодированного снимка или кодированных данных 13 через прямую линию связи между устройством-источником 12 и устройством-получателем 14, например прямое проводное или беспроводное соединение, или через сеть любого типа, например проводную или беспроводную сеть или любое их сочетание, или любую частную и общедоступную сеть, или любое их сочетание.
Интерфейс 22 связи может быть, например, выполнен с возможностью упаковки данных 21 кодированного снимка в соответствующий формат, например, в пакеты, и/или обработки данных кодированного снимка с использованием любого типа кодирования передачи или обработки для передачи по каналу связи или сети связи.
Интерфейс 28 связи, образующий аналог интерфейса 22 связи, может быть, например, выполнен с возможностью приема переданных данных и обработки данных передачи с использованием любого вида соответствующего декодирования или обработки передачи и/или распаковки для получения данных 21 кодированного снимка.
И интерфейс 22 связи, и интерфейс 28 связи могут быть выполнены как однонаправленные интерфейсы связи, как показано стрелкой для канала 13 связи на Фиг.1A, указывающего от устройства-источника 12 к устройству-получателю 14, или как интерфейсы двунаправленной связи, и может быть сконфигурирован, например, для отправки и приема сообщений, например для установки соединения, для подтверждения и обмена любой другой информацией, относящейся к каналу связи и/или передаче данных, например, к передаче данных кодированного снимка.
Декодер 30 выполнен с возможностью приема данных 21 кодированного снимка и предоставления данных 31 декодированного снимка или декодированного снимка 31 (дополнительные подробности будут описаны ниже, например, на основе Фиг.3 или Фиг.5).
Постпроцессор 32 устройства-получателя 14 выполнен с возможностью постобработки данных 31 декодированного снимка (также называемых данными восстановленного снимка), например, декодированного снимка 31, для получения данных 33 снимка 33 с постобработкой, например снимка 33 с постобработкой. Постобработка, выполняемая модулем 32 постобработки, может включать в себя, например, преобразование цветового формата (например, из YCbCr в RGB), цветокоррекцию, обрезку или повторную дискретизацию, или любую другую обработку, например, для подготовки данных декодированного снимка 31 для отображения, например, с помощью устройства 34 отображения.
Устройство 34 отображения устройства-получателя 14 выполнено с возможностью приема данных 33 снимка с постобработкой для отображения снимка, например, пользователю или зрителю. Устройство 34 отображения может быть или содержать любой вид дисплея для представления восстановленного снимка, например интегрированный или внешний дисплей или монитор. Дисплеи могут, например, содержать жидкокристаллические дисплеи (LCD), дисплеи на органических светодиодах (OLED), плазменные дисплеи, проекторы, микро-светодиодные дисплеи, жидкие кристаллы на кремнии (LCoS), цифровой световой процессор (DLP) или любые другие дисплеи.
Хотя Фиг.1A изображает устройство-источник 12 и устройство-получатель 14 как отдельные устройства, варианты осуществления устройств также могут содержать оба или обе функциональные возможности, устройство-источник 12 или соответствующие функциональные возможности и устройство-получатель 14 или соответствующие функциональные возможности. В таких вариантах осуществления устройство-источник 12 или соответствующие функциональные возможности и устройство-получатель 14 или соответствующие функциональные возможности могут быть реализованы с использованием одного и того же аппаратного и/или программного обеспечения или с помощью отдельного аппаратного и/или программного обеспечения или любого их сочетания.
Как будет очевидно для специального элемента на основании описания, наличие и (точное) разделение функциональных возможностей различных модулей или функций в устройстве-источнике 12 и/или устройстве-получателе 14, как показано на Фиг.1A, может варьироваться в зависимости от фактического устройства и применения.
Кодер 20 (например, видеокодер 20) или декодер 30 (например, видеодекодер 30), или как кодер 20, так и декодер 30 могут быть реализованы через схемы обработки, как показано на Фиг.1B, таких как один или более микропроцессоров, процессоров цифровых сигналов (DSP), прикладных программ. специальные интегральные схемы (ASIC), программируемые пользователем вентильные матрицы (FPGA), дискретная логика, оборудование, предназначенные для видеокодирования или любые их сочетания. Кодер 20 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении кодера 20 на Фиг.2 и/или любой другой кодирующей системе или подсистеме, описанной здесь. Декодер 30 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении декодера 30 на Фиг.3 и/или любую другую систему или подсистему декодера, описанную в данном документе. Схема обработки может быть выполнена с возможностью выполнения различных операций, как описано ниже. Как показано на Фиг.5, если методики частично реализованы в программном обеспечении, устройство может хранить инструкции для программного обеспечения на подходящем долговременном машиночитаемом носителе данных и может выполнять инструкции в аппаратных средствах, используя один или более процессоров для выполнения методик этого раскрытия. Любой из видеокодера 20 и видеодекодера 30 может быть интегрирован как часть объединенного кодера/декодера (CODEC) в одном устройстве, например, как показано на Фиг.1B.
Устройство-источник 12 и устройство-получатель 14 могут включать в себя любое из широкого диапазона устройств, включая любые виды портативных или стационарных устройств, например портативные или портативные компьютеры, мобильные телефоны, смартфоны, планшеты или планшетные компьютеры, камеры, настольные компьютеры, наборы- приставки, телевизоры, устройства отображения, цифровые медиаплееры, игровые приставки, устройства потоковой передачи видео (например, серверы служб контента или серверы доставки контента), устройство приемника широковещания, устройство передатчика широковещания и т.п. и могут использовать или не использовать любой вид операционной системы. В некоторых случаях устройство-источник 12 и устройство-получатель 14 могут быть оборудованы для беспроводной связи. Таким образом, устройство-источник 12 и устройство-получатель 14 могут быть устройствами беспроводной связи.
В некоторых случаях система 10 видеокодирования, проиллюстрированная на Фиг.1A является просто примером, и методики настоящей заявки могут применяться к настройкам кодирования видео (например, видеокодирования или видеодекодирования), которые не обязательно включают в себя какой-либо обмен данными между устройствами кодирования и декодирования. В других примерах данные извлекаются из локальной памяти, передаются по сети и т.п. Устройство кодирования видео может кодировать и сохранять данные в памяти, и/или устройство декодирования видео может извлекать и декодировать данные из памяти. В некоторых примерах кодирование и декодирование выполняются устройствами, которые не обмениваются данными друг с другом, а просто кодируют данные в память и/или извлекают и декодируют данные из памяти.
Для удобства описания варианты осуществления заявки описаны здесь, например, со ссылкой на высокоэффективное видеокодирование (HEVC) или на опорное программное обеспечение универсального кодирования видео (VVC), стандарта кодирования видео следующего поколения, разработанного Объединенной группой сотрудничества по кодированию видео (JCT-VC) Группы экспертов ITU-T по кодированию видео (VCEG) и Группы экспертов ISO/IEC по движущимся изображениям (MPEG). Специалист в данной области техники поймет, что варианты осуществления заявки не ограничиваются HEVC или VVC.
Кодер и способ кодирования
На Фиг.2 показано схематичное блочное представление примерного видеокодера 20, который выполнен с возможностью реализации способов настоящей заявки. В примере на Фиг.2 видеокодер 20 содержит ввод 201 (или интерфейс 201 ввода), модуль 204 вычисления остатка, модуль 206 обработки преобразования, модуль 208 квантования, модуль 210 обратного квантования и модуль 212 обработки обратного преобразования, модуль 214 восстановления, модуль 220 контурного фильтра, буфер 230 (DPB) декодированных снимков, модуль 260 выбора режима, модуль 270 энтропийного кодирования и вывод 272 (или интерфейс 272 вывода). Модуль 260 выбора режима может включать в себя модуль 244 интер-предсказания, модуль 254 интра-предсказания и модуль 262 разбиения. Модуль 244 интер-предсказания может включать в себя модуль оценки движения и модуль компенсации движения (не показаны). Видеокодер 20, показанный на Фиг.2, также может называться гибридным видеокодером или видеокодером согласно гибридному видеокодеку.
Модуль 204 вычисления остатка, модуль 206 обработки преобразования, модуль 208 квантования, модуль 260 выбора режима могут относится к формированию прямого пути сигнала кодера 20, тогда как модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, буфер 216, контурный фильтр 220, буфер 230 (DPB) декодированных снимков, модуль 244 интер-предсказания и модуль 254 интра-предсказания могут относится к формированию обратного пути сигнала видеокодера 20, при этом обратный путь сигнала видеокодера 20 соответствует пути сигнала декодера (см. видеодекодер 30 на Фиг.3). Модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных снимков, модуль 244 интер-предсказания и модуль 254 интра-предсказания также относятся к формированию «Встроенного декодера» видеокодера 20.
Снимки и разбиение снимков (снимки и блоки)
Кодер 20 может быть выполнен с возможностью приема, например, через ввод 201 снимка 17 (или данных 17 снимка), например снимка из последовательности снимков, образующих видео или видеопоследовательность. Принятый снимок или данные снимка также могут представлять собой предварительно обработанный снимок 19 (или предварительно обработанные данные 19 снимка). Для простоты нижеследующее описание ссылается на снимок 17. Снимок 17 также может именоваться текущим снимком или снимком, который подлежит кодированию (в частности, при видеокодировании, чтобы отличать текущий снимок от других снимков, например, ранее кодированных и/или декодированных снимков той же видеопоследовательности, т.е. видеопоследовательности, которая также содержит текущий снимок).
(Цифровой) снимок представляет собой или может рассматриваться как двумерный массив или матрица дискретных отсчетов со значениями интенсивности. Дискретный отсчет в массиве также может называться пикселем (сокращенная форма элемента снимка) или пикселем. Количество дискретных отсчетов в горизонтальном и вертикальном направлении (или по оси) массива или снимка определяет размер и/или разрешение снимка. Для представления цвета обычно используются три цветовых компонента, то есть снимок может быть представлен или включать в себя три массива дискретных отсчетов. В формате RBG или цветовом пространстве снимок содержит соответствующий массив дискретных отсчетов красного, зеленого и синего цветов. Однако при кодировании видео каждый пиксель обычно представлен в формате яркости и цветности или цветовом пространстве, например YCbCr, который содержит компонент яркости, обозначенный Y (иногда вместо него также используется L), и два компонента цветности, обозначенные Cb и Cr. Компонент Y яркости (или короткой яркости) представляет яркость или интенсивность уровня серого (например, как в полутоновом снимке), в то время как два компонента цветности (или короткой цветности) Cb и Cr представляют компоненты цветности или информации о цвете. Соответственно, снимок в формате YCbCr содержит массив дискретных отсчетов яркости значений дискретных отсчетов яркости (Y) и два массива дискретных отсчетов цветности значений цветности (Cb и Cr). Снимки в формате RGB могут быть преобразованы или преобразованы в формат YCbCr, и наоборот, этот процесс также известен как преобразование цвета или преобразование. Если снимок является монохромным, то он может содержать только массив дискретных отсчетов яркости. Соответственно, снимок может быть, например, массивом дискретных отсчетов яркости в монохромном формате или массивом дискретных отсчетов яркости и двумя соответствующими массивами дискретных отсчетов цветности в цветовой формат 4:2:0, 4:2:2 и 4:4:4.
Варианты осуществления видеокодера 20 могут содержать модуль разбиения снимка (не показан на фиг.2), выполненный с возможностью разбиения снимка 17 на множество (обычно не перекрывающихся) блоков 203 снимка. Эти блоки также могут называться корневыми блоками, макроблоками (H.264/AVC) или блоками дерева кодирования (CTB) или единичными блоками дерева кодирования (CTU) (H.265/HEVC и VVC). Блок разбиения снимка может быть выполнен с возможностью использования одного и того же размера блока для всех снимков видеопоследовательности и соответствующей сетки, определяющей размер блока, или для изменения размера блока между снимками или подмножествами или группами снимков, а также для разбиения каждого снимка на соответствующие блоки.
В дополнительных вариантах осуществления видеокодер может быть выполнен с возможностью приема непосредственно блока 203 снимка 17, например одного, нескольких или всех блоков, образующих снимок 17. Блок 203 снимка также может называться блоком текущего снимка или блоком снимка, который должен быть кодирован.
Подобно снимку 17, блок 203 снимка снова является или может рассматриваться как двумерный массив или матрица дискретных отсчетов со значениями интенсивности (значениями дискретных отсчетов), хотя и меньшего размера, чем снимок 17. Другими словами, блок 203 может содержать, например, один массив дискретных отсчетов (например, массив яркости в случае монохромного снимка 17 или массив яркости или цветности цветного снимка) или три массива дискретных отсчетов (например, массив яркости и два массива цветности в случае цветного снимка 17) или любое другое количество и/или вид массивов в зависимости от применяемого цветового формата. Количество дискретных отсчетов в горизонтальном и вертикальном направлении (или по оси) блока 203 определяет размер блока 203. Соответственно, блок может, например, массив дискретных отсчетов MxN (M-столбец на N-строка) или массив MxN коэффициентов преобразования.
Варианты осуществления видеокодера 20, как показано на Фиг.2, могут быть выполнены с возможностью кодирования снимка 17 блок за блоком, например, кодирование и предсказание выполняются для каждого блока 203.
Варианты осуществления видеокодера 20, как показано на Фиг.2, могут быть дополнительно выполнены с возможностью разбиения и/или кодирования снимка с использованием сегментов (также называемых видеосегментами), при этом снимок может быть разделен или кодировано с использованием одного или более сегментов (обычно без перекрытия), и каждый сегмент может содержать один или более блоков (например, CTU) или одну или более групп блоков (например, клеток (tile) (H.265/HEVC и VVC) или фрагментов (brick) (VVC)).
Варианты осуществления видеокодера 20, как показано на фиг.2, могут быть дополнительно выполнены с возможностью разбиения и/или кодирования снимка с использованием групп сегментов/клеток (также называемых группами клеток) и/или клеток (также называемых видеоклетками), в котором снимок может быть разделено или кодировано с использованием одной или более групп сегментов/клеток (обычно не перекрывающихся), и каждая группа сегментов/клеток может содержать, например, один или более блоков (например, CTU) или одну или более клеток, при этом каждая клетка, например, может иметь прямоугольную форму и может содержать один или более блоков (например, CTU), например полные или дробные блоки.
Вычисление остатка
Модуль 204 вычисления остатка может быть выполнен с возможностью вычисления остаточного блока 205 (также упоминаемого как остаток 205) на основе блока 203 снимка и блока 265 предсказания (дополнительные подробности о блоке 265 предсказания предоставлены позже), например, посредством вычитания значений дискретных отсчетов блока 265 предсказания из значений дискретных отсчетов блока 203 снимка, дискретный отсчет за дискретным отсчетом (пиксель за пикселем), чтобы получить остаточный блок 205 в области дискретных отсчетов.
Преобразование
Модуль 206 обработки преобразования может быть выполнен с возможностью применения преобразования, например дискретного косинусного преобразования (DCT) или дискретного синусного преобразования (DST), к значениям дискретных отсчетов остаточного блока 205 для получения коэффициентов 207 преобразования в области преобразования. Коэффициенты 207 преобразования могут также называться остаточными коэффициентами преобразования и представлять остаточный блок 205 в области преобразования.
Модуль 206 обработки преобразования может быть выполнен с возможностью применения целочисленных аппроксимаций DCT/DST, таких как преобразования, указанные для H.265/HEVC. По сравнению с ортогональным преобразованием DCT, такие целочисленные аппроксимации обычно масштабируются с определенным коэффициентом. Чтобы сохранить норму остаточного блока, который обрабатывается прямым и обратным преобразованиями, в процессе преобразования применяются дополнительные коэффициенты масштабирования. Коэффициенты масштабирования обычно выбираются на основе определенных ограничений, таких как коэффициенты масштабирования, являющиеся степенью двойки для операций сдвига, разрядность коэффициентов преобразования, компромисс между точностью и затратами на реализацию и т.д. Конкретные коэффициенты масштабирования, например, задаются для обратного преобразования, например, модулем 212 обработки обратного преобразования (и соответствующим обратным преобразованием, например, модулем 312 обработки обратного преобразования в видеокодере 30), и соответствующие коэффициенты масштабирования для прямого преобразования, например, посредством модуля 206 обработки преобразования, в кодере 20 может быть определено соответственно.
Варианты осуществления видеокодера 20 (соответственно модуль 206 обработки преобразования) могут быть выполнены с возможностью вывода параметров преобразования, например типа преобразования или преобразований, например, непосредственно или кодированы или сжаты через модуль 270 энтропийного кодирования, так что, например, видеодекодер 30 может принимать и использовать параметры преобразования для декодирования.
Квантование
Модуль 208 квантования может быть выполнен с возможностью квантования коэффициентов 207 преобразования для получения квантованных коэффициентов 209, например, посредством применения скалярного квантования или векторного квантования. Квантованные коэффициенты 209 также могут упоминаться как квантованные коэффициенты 209 преобразования или квантованные остаточные коэффициенты 209.
Процесс квантования может уменьшить битовую глубину, связанную с некоторыми или всеми коэффициентами 207 преобразования. Например, n-битовый коэффициент преобразования может быть округлен до m-битного коэффициента преобразования во время квантования, где n больше m. Степень квантования может быть изменена посредством регулировки параметра квантования (QP). Например, для скалярного квантования может применяться другое масштабирование для достижения более тонкого или более грубого квантования. Меньшие размеры шагов квантования соответствуют более тонкому квантованию, тогда как большие размеры шагов квантования соответствуют более грубому квантованию. Применимый размер шага квантования может быть указан параметром квантования (QP). Параметр квантования может, например, быть индексом для заранее определенного набора применимых размеров шага квантования. Например, малые параметры квантования могут соответствовать точному квантованию (малые размеры шагов квантования), а большие параметры квантования могут соответствовать грубому квантованию (большие размеры шагов квантования) или наоборот. Квантование может включать в себя деление на размер шага квантования, и соответствующее и/или обратное деквантование, например, посредством модуля 210 обратного квантования, может включать в себя умножение на размер шага квантования. Варианты осуществления согласно некоторым стандартам, например HEVC, могут быть выполнены с возможностью использования параметра квантования для определения размера шага квантования. Обычно размер шага квантования может быть вычислен на основе параметра квантования с использованием аппроксимации с фиксированной точкой уравнения, включающего деление. Дополнительные коэффициенты масштабирования могут быть введены для квантования и деквантования, чтобы восстановить норму остаточного блока, который может быть изменен из-за масштабирования, используемого в приближении с фиксированной точкой уравнения для размера шага квантования и параметра квантования. В одной примерной реализации масштабирование обратного преобразования и деквантование могут быть объединены. В качестве альтернативы могут использоваться настроенные таблицы квантования, и кодер может передавать их в декодер, например, в битовом потоке. Квантование - это операция с потерями, при которой потери возрастают с увеличением размеров этапов квантования.
Варианты осуществления видеокодера 20 (соответственно модуль 208 квантования) могут быть выполнены с возможностью вывода параметров квантования (QP), например, напрямую или кодированных через модуль 270 энтропийного кодирования, так что, например, видеодекодер 30 может принимать и применять параметры квантования для декодирования.
Обратное квантование
Модуль 210 обратного квантования выполнен с возможностью применения обратного квантования блока 208 квантования к квантованным коэффициентам для получения деквантованных коэффициентов 211, например, посредством применения обратной схемы квантования, применяемой блоком 208 квантования, на основе или с использованием того же размера шага квантования в качестве модуля 208 квантования. Деквантованные коэффициенты 211 также могут упоминаться как деквантованные остаточные коэффициенты 211 и соответствовать - хотя обычно не идентичны коэффициентам преобразования из-за потери при квантовании - коэффициентам 207 преобразования.
Обратное преобразование
Модуль 212 обработки обратного преобразования выполнен с возможностью применения обратного преобразования, применяемого блоком 206 обработки преобразования, например обратного дискретного косинусного преобразования (DCT) или обратного дискретного синусоидального преобразования (DST) или других обратных преобразования, чтобы получить восстановленный остаточный блок 213 (или соответствующие коэффициенты 213 деквантования) в области дискретных отсчетов. Восстановленный остаточный блок 213 также может называться блоком 213 преобразования.
Восстановление
Модуль 214 восстановления (например, сумматор 214) выполнен с возможностью добавления блока 213 преобразования (то есть восстановленного остаточного блока 213) к блоку 265 предсказания, чтобы получить восстановленный блок 215 в области дискретных отсчетов, например, посредством добавления (дискретный отсчет за дискретным отсчетом) значений дискретных отсчетов восстановленных остаточный блок 213 и значения дискретных отсчетов блока 265 предсказания.
Фильтрация
Модуль 220 контурного фильтра (или сокращенно «контурный фильтр» 220) выполнен с возможностью фильтрации восстановленного блока 215 для получения фильтрованного блока 221 или, в общем, для фильтрации восстановленных дискретных отсчетов для получения отфильтрованных значений дискретных отсчетов. Блок контурного фильтра, например, выполнен с возможностью сглаживания переходов пикселей или иного улучшения качества видео. Модуль 220 контурного фильтра может содержать один или более контурных фильтров, таких как фильтр устранения блочности, фильтр с адаптивным смещением дискретных отсчетов (SAO) или один или более других фильтров, например адаптивный контурный фильтр (ALF), фильтр подавления шума (NSF) или любое их сочетание. В одном примере модуль 220 контурного фильтра может содержать фильтр устранения блочности, фильтр SAO и фильтр ALF. Порядок процесса фильтрации может быть фильтром удаления блочности, SAO и ALF. В другом примере добавляется процесс, называемый отображением яркости с масштабированием цветности (LMCS) (а именно, адаптивным внутриконтурным преобразователем). Этот процесс выполняется перед расформированием блоков. В другом примере процесс фильтрации расформирования блоков может также применяться к внутренним краям подблока, например краям аффинных подблоков, краям подблоков ATMVP, краям преобразования подблоков (SBT) и краям внутри подблока (ISP). Хотя модуль 220 контурного фильтра показан на Фиг.2 как контурный фильтр, в других конфигурациях модуль 220 контурного фильтра может быть реализован как постконтурный фильтр. Отфильтрованный блок 221 также может упоминаться как фильтрованный восстановленный блок 221.
Варианты осуществления кодера 20 (соответственно модуль 220 контурного фильтра) могут быть выполнены с возможностью вывода параметров контурного фильтра (таких как информация об адаптивном смещении дискретных отсчетов), например, напрямую или энтропийно кодированных с помощью блока 270 энтропийного кодирования или любого другого блока энтропийного кодирования, так что, например, декодер 30 может принимать и применять одни и те же параметры контурного фильтра для декодирования.
Буфер декодированных снимков
Буфер 230 декодированных снимков (DPB) может быть памятью, в которой хранятся опорные снимки или, в общем, данные опорных снимков для кодирования видеоданных посредством видеокодера 20. DPB 230 может быть образован любым из множества запоминающих устройств, таких как динамическая память с произвольным доступом (DRAM), в том числе синхронная DRAM (SDRAM), магниторезистивная RAM (MRAM), резистивная RAM (RRAM) или запоминающие устройства других типов. Буфер 230 (DPB) декодированных снимков может быть выполнен с возможностью хранения одного или более фильтрованных блоков 221. Буфер 230 декодированных снимков может быть дополнительно выполнен с возможностью хранения других ранее отфильтрованных блоков, например ранее восстановленных и отфильтрованных блоков 221, того же самого текущего снимка или разных снимков, например ранее восстановленных снимков, и может предоставлять полные ранее восстановленные, т.е. декодированные, снимки (и соответствующие опорные блоки и дискретные отсчеты) и/или частично восстановленный текущий снимок (и соответствующие опорные блоки и дискретные отсчеты), например, для интер-предсказания. Буфер 230 декодированных снимков (DPB) также может быть выполнен с возможностью хранения одного или более нефильтрованных восстановленных блоков 215 или, в общем, нефильтрованных восстановленных дискретных отсчетов, например если восстановленный блок 215 не фильтруется модулем 220 контурного фильтра, или любой другой дополнительно обработанной версии восстановленных блоков или дискретных отсчетов.
Выбор режима (Разбиение и Предсказание)
Модуль 260 выбора режима содержит модуль 262 разбиения, модуль 244 интер-предсказания и модуль 254 интра-предсказания и выполнен с возможностью приема или получения данных исходного снимка, например исходного блока 203 (текущего блока 203 текущего снимка 17), и данных восстановленного снимка, например отфильтрованных и/или нефильтрованных восстановленных дискретных отсчетов или блоков того же самого (текущего) снимка и/или из одного или множества ранее декодированных снимков, например из буфера 230 декодированных снимков или других буферов (например, линейного (строкового) буфера, не показан). Данные восстановленного снимка используются в качестве данных опорного снимка для предсказания, например интер-предсказания или интра-предсказания, чтобы получить блок 265 предсказания или предиктор 265.
Модуль 260 выбора режима может быть выполнен с возможностью определения или выбора разбиения для текущего режима предсказания блока (включая отсутствие разбиения) и режима предсказания (например, режима внутреннего или интер-предсказания) и генерации соответствующего блока 265 предсказания, который используется для вычисления остаточного блока 205 и для восстановления восстановленного блока 215.
Варианты осуществления модуля 260 выбора режима могут быть выполнены с возможностью выбора разбиения и режима предсказания (например, из тех, которые поддерживаются или доступны для модуля 260 выбора режима), которые обеспечивают наилучшее совпадение или, другими словами, минимальный остаток (минимальный остаток означает лучшее сжатие для передачи или хранения), или минимальные издержки на сигнализацию (минимальные издержки на сигнализацию означают лучшее сжатие для передачи или хранения), или который учитывает или балансирует оба. Модуль 260 выбора режима может быть выполнен с возможностью определения режима разбиения и предсказания на основе оптимизации искажения скорости (RDO), то есть выбора режима предсказания, который обеспечивает минимальное искажение скорости. Такие термины, как «лучший», «минимум», «оптимальный» и т.д. В этом контексте не обязательно относятся к общему «лучшему», «минимуму», «оптимальному» и т.д., Но также могут относиться к выполнению прекращения или критерий выбора, такой как значение, превышающее или падающее ниже порогового значения, или другие характеристик, потенциально ведущие к «неоптимальному выбору», но уменьшающие сложность и время обработки.
Другими словами, модуль 262 разбиения может быть выполнен с возможностью разбиения снимка из видеопоследовательности на последовательность единичных блоков дерева кодирования (CTU), а CTU 203 может быть дополнительно разделен на более мелкие блочные разделы или подблоки (которые снова образуют блоков), например, итеративно с использованием разбиения на квадранты (QT), двоичного разбиения (BT) или разбиения на троичное дерево (TT) или любого их сочетания, и для выполнения, например, предсказания для каждого из разбиений блока или подблоков, при этом выбор режима включает в себя выбор древовидной структуры разделенного блока 203, и режимы предсказания применяются к каждому из разбиений или подблоков блока.
Далее более подробно поясняется разбиение (например, посредством модуля 260 разбиения) и обработка предсказания (посредством модуля 244 интер-предсказания и модуля 254 интра-предсказания), выполняемые примерным видеокодером 20.
Разбиение
Модуль 262 разбиения может быть выполнен с возможностью разбиения снимка из видеопоследовательности на последовательность единиц дерева кодирования (CTU), а модуль 262 разбиения может разбивать (или разделять) блок 203 дерева кодирования (CTU) на меньшие разделы, например блоки меньшего размера квадратного или прямоугольного размера. Для снимка, который имеет три массива дискретных отсчетов, CTU состоит из блока N × N дискретных отсчетов яркости вместе с двумя соответствующими блоками дискретных отсчетов цветности. Максимально допустимый размер блока яркости в CTU определен равным 128 × 128 в развивающемся универсальном кодировании видео (VVC), но в будущем может быть указано значение, а не 128×128, например 256×256. CTU снимка могут быть кластеризованы/сгруппированы как сегменты/группы клеток, клетки или блоки. Клетка покрывает прямоугольную область снимка, и она может быть разделена на один или более фрагментов. Фрагмент состоит из некоторого количества рядов CTU внутри клетки. Клетку, не разделенную на несколько фрагментов, можно назвать фрагментом. Однако фрагмент - это истинное подмножество клетки и не называется клеткой. В VVC поддерживаются два режима групп клеток, а именно режим растрового сканирования сегмента/группы клеток и режим прямоугольного сегмента. В режиме растровым сканированием группы клеток группа клеток/сегмент содержит последовательность клеток при поклеточном растровом сканировании снимка. В режиме прямоугольного сегмента сегмент содержит несколько фрагментов снимка, которые вместе образуют прямоугольную область снимка. Фрагменты внутри прямоугольного сегмента находятся в порядке растрового сканирования сегмента. Эти меньшие блоки (которые также могут называться подблоками) могут быть дополнительно разделены на еще меньшие разделы. Это также относится к разбиению дерева или иерархическому разбиению дерева, в котором корневой блок, например, на уровне корневого дерева 0 (уровень иерархии 0, глубина 0), может быть рекурсивно разделен, например разделен на два или более блока следующий более низкий уровень дерева, например узлы на уровне дерева 1 (уровень иерархии 1, глубина 1), при этом эти блоки могут быть снова разделены на два или более блоков следующего более низкого уровня, например, уровень дерева 2 (уровень иерархии 2, глубина 2) и т.д. До тех пор, пока разбиение не будет завершено, например, потому что критерий завершения выполняется, например, достигнута максимальная глубина дерева или минимальный размер блока. Блоки, которые не разделяются далее, также называются концевыми блоками или концевыми узлами дерева. Дерево, использующее разбиение на два разбиения, называется двоичным деревом (BT), дерево, использующее разбиение на три разбиения, называется тройным деревом (TT), а дерево, использующее разбиение на четыре разбиения, называется деревом квадрантов (QT).
Например, единичный блок дерева кодирования (CTU) может быть или содержать CTB дискретных отсчетов яркости, два соответствующих CTB дискретных отсчетов цветности снимка, которое имеет три массива дискретных отсчетов, или CTB дискретных отсчетов монохромного снимка или снимка, которое кодируется. с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования дискретных отсчетов. Соответственно, блок дерева кодирования (CTB) может быть блоком NxN дискретных отсчетов для некоторого значения N, так что разбиение компонента на CTB является разбиением. Единичный блок кодирования (CU) может быть или содержать блок кодирования дискретных отсчетов яркости, два соответствующих блока кодирования дискретных отсчетов цветности снимка, которое имеет три массива дискретных отсчетов, или блок кодирования дискретных отсчетов монохромного снимка или снимка, который кодируется с использованием трех отдельных цветовых плоскости и синтаксические структуры, используемые для кодирования дискретных отсчетов. Соответственно, блок кодирования (CB) может быть блоком MxN дискретных отсчетов для некоторых значений M и N, так что разбиение CTB на блоки кодирования является разбиением.
В вариантах осуществления, например, согласно HEVC, единица дерева кодирования (CTU) может быть разделена на CU с использованием структуры дерева квадрантов, обозначенной как дерево кодирования. Решение о том, кодировать ли область снимка с использованием межснимочного (интер) (временного) или внутриснимочного (интра) (пространственного) предсказания, принимается на уровне конечных CU. Каждый концевой CU может быть дополнительно разделен на один, два или четыре PU в соответствии с типом разбиения PU. Внутри одного PU применяется один и тот же процесс предсказания, и соответствующая информация передается в декодер на основе PU. После получения остаточного блока посредством применения процесса предсказания на основе типа разбиения PU, концевой CU может быть разделен на блоки преобразования (TU) в соответствии с другой структурой дерева квадрантов, аналогичной дереву кодирования для CU.
В вариантах осуществления, например, в соответствии с последним разрабатываемым в настоящее время стандартом кодирования видео, который называется универсальным кодированием видео (VVC), объединенное дерево квадратов с вложенным множеством типов, использующее двоичное и троичное разбиение, структура сегментации, например, используемая для разбиения блок дерева кодирования. В структуре дерева кодирования внутри единицы дерева кодирования CU может иметь квадратную или прямоугольную форму. Например, единичный блок дерева кодирования (CTU) сначала разделяется четвертичным деревом. Затем концевые узлы дерева квадрантов могут быть дополнительно разделены с помощью многотипной древовидной структуры. Существует четыре типа разбиения в многотипной древовидной структуре: вертикальное двоичное разбиение (SPLIT_BT_VER), горизонтальное двоичное разбиение (SPLIT_BT_HOR), вертикальное троичное разбиение (SPLIT_TT_VER) и горизонтальное троичное разбиение (SPLIT_TT_HOR). Концевые узлы многотипного дерева называются единицами кодирования (CU), и, если CU не слишком велик для максимальной длины преобразования, эта сегментация используется для предсказания и обработки преобразования без какого-либо дальнейшего разбиения. Это означает, что в большинстве случаев CU, PU и TU имеют одинаковый размер блока в дереве квадрантов с вложенной структурой блока кодирования многотипного дерева. Исключение возникает, когда максимальная поддерживаемая длина преобразования меньше, чем ширина или высота цветового компонента CU. VVC разрабатывает уникальный механизм сигнализации информации о разбиении разделов в дереве квадрантов с вложенной древовидной структурой кодирования с множеством типов. В механизме сигнализации единица дерева кодирования (CTU) рассматривается как корень дерева квадрантов и сначала разделяется структурой дерева квадрантов. Каждый концевой узел дерева квадрантов (если он достаточно большой, чтобы его можно было использовать) затем разбивается на части с помощью многотипной древовидной структуры. В многотипной древовидной структуре первый флаг (mtt_split_cu_flag) сигнализируется, чтобы указать, разделен ли узел дальше; когда узел дополнительно разбивается на разделы, второй флаг (mtt_split_cu_vertical_flag) сигнализируется, чтобы указать направление разбиения, а затем сигнализируется третий флаг (mtt_split_cu_binary_flag), чтобы указать, является ли разбиение двоичным или троичным. На основе значений mtt_split_cu_vertical_flag и mtt_split_cu_binary_flag, режим разрезания многотипного дерева (MttSplitMode) CU может быть получен декодером на основе предварительно заданного правила или таблицы. Следует отметить, что для определенного дизайна, например, для конвейерной обработки блока яркости 64 × 64 и конвейерной обработки цветности 32 × 32 в аппаратных декодерах VVC, разбиение TT запрещено, когда ширина или высота блока кодирования яркости больше 64, так как показано на фигуре 6. Разбиение TT также запрещено, если ширина или высота блока кодирования цветности больше 32. Конструкция конвейерной обработки делит снимок на блоки данных виртуального конвейера (VPDU), которые определены как неперекрывающиеся блоки в снимке. В аппаратных декодерах последовательные блоки VPDU обрабатываются несколькими этапами конвейера одновременно. Размер VPDU примерно пропорционален размеру буфера на большинстве этапов конвейера, поэтому важно, чтобы размер VPDU был небольшим. В большинстве аппаратных декодеров размер VPDU может быть установлен равным максимальному размеру блока преобразования (TB). Однако в VVC разбиение троичного дерева (TT) и двоичного дерева (BT) может привести к увеличению размера VPDU. Кроме того, следует отметить, что, когда часть блока узла дерева превышает нижнюю или правую границу снимка, блок узла дерева принудительно разделяется до тех пор, пока все дискретные отсчеты каждого кодированного CU не окажутся внутри границ снимка.
В качестве примера инструмент интра-подразбиений (Intra Sub-Partitions (ISP)) может разделять блоки яркости с внутренним предсказанием по вертикали или горизонтали на 2 или 4 подразбиения в зависимости от размера блока.
В одном примере модуль 260 выбора режима видеокодера 20 может быть выполнен с возможностью выполнения любого сочетания способов разбиения, описанных в данном документе.
Как описано выше, видеокодер 20 выполнен с возможностью определения или выбора наилучшего или оптимального режима предсказания из набора (например, предварительно определенных) режимов предсказания. Набор режимов предсказания может содержать, например, режимы интра-предсказания и/или режимы интер-предсказания.
Интра-предсказание
Набор режимов интра-предсказания может содержать 35 различных режимов интра-предсказания, например ненаправленные режимы, такие как режим постоянного (или среднего) и планарный режим, или направленные режимы, например, как определено в HEVC, или может содержать 67 различных режимов интра-предсказания, например, ненаправленные режимы, такие как режим постоянного тока (или среднего) и планарный режим, или направленные режимы, например, как определено для VVC. В качестве примера, несколько обычных режимов углового интра-предсказания адаптивно заменяются режимами широкоугольного интра-предсказания для неквадратных блоков, например, как определено в VVC. В качестве другого примера, чтобы избежать операций деления для предсказания DC, только длинная сторона используется для вычисления среднего для неквадратных блоков. И результаты интра-предсказания планарного режима могут быть дополнительно модифицированы с помощью способа объединения позиционно-зависимого интра-предсказания (PDPC).
Модуль 254 интра-предсказания выполнен с возможностью использования восстановленных дискретных отсчетов соседних блоков одного и того же текущего снимка для генерации блока 265 интра-предсказания согласно режиму интра-предсказания набора режимов интра-предсказания.
Модуль 254 интра-предсказания (или, в общем, модуль 260 выбора режима) дополнительно выполнен с возможностью вывода параметров интра-предсказания (или, в общем, информации, указывающей выбранный режим интра-предсказания для блока) в модуль 270 энтропийного кодирования в форме синтаксиса элементы 266 для включения в данные 21 кодированного снимка, чтобы, например, видеодекодер 30 мог принимать и использовать параметры предсказания для декодирования.
Интер-предсказание
Набор (или возможно) режимы интер-предсказания зависит от доступных опорных снимков (т.е. предыдущим, по меньшей мере, частично декодированных снимков, например, хранится в DBP 230) и других параметрах интер-предсказания, например, используется ли весь опорный снимок или только часть, например, область поиска окна вокруг области текущего блока, опорного снимка для поиска наилучшего соответствия опорного блока, и/или, например, применяются ли интерполяции пикселей, например, интерполяция половины/полу-пикселя, четверть пикселя и/или 1/16 пикселя или нет.
В дополнение к вышеупомянутым режимам предсказания могут применяться режим пропуска, прямой режим.
Модуль 244 интер-предсказания может включать в себя модуль оценки движения (ME) (не показан на фиг.2) и модуль компенсации движения (MC) (оба не показаны на фиг.2). Модуль оценки движения может быть выполнен с возможностью приема или получения блока 203 снимка (блока 203 текущего снимка текущего снимка 17) и декодированного снимка 231, или, по меньшей мере, одного или множества ранее восстановленных блоков, например, восстановленных блоков одного или более множество других/различных ранее декодированных снимков 231 для оценки движения. Например, видеопоследовательность может содержать текущий снимок и ранее декодированные снимки 231, или, другими словами, текущий снимок и ранее декодированные снимки 231 могут быть частью или формировать последовательность снимков, образующих видеопоследовательность.
Кодер 20 может, например, быть выполнен с возможностью выбора опорного блока из множества опорных блоков одинаковых или различных снимков из множества других снимков и обеспечивает опорный снимок (или индекс опорного снимка) и/или смещение (пространственное смещение) между положением (координатами X, Y) опорного блока и положением текущего блока в качестве взаимосвязанных параметров предсказания в модуль оценки движения. Это смещение также называется вектором движения (MV).
Модуль компенсации движения выполнен с возможностью получения, например, приема параметра интер-предсказания и выполнения интер-предсказания на основе или с использованием параметра интер-предсказания для получения блока 265 интер-предсказания. Компенсация движения, выполняемая блоком компенсации движения, может включать в себя выборку или генерацию блока предсказания на основе вектора движения/блока, определенного посредством оценки движения, возможно выполнение интерполяции до субпиксельной точности. Интерполяционная фильтрация может генерировать дополнительные дискретные отсчеты пикселей из дискретных отсчетов известных пикселей, таким образом потенциально увеличивая количество блоков предсказания потенциально подходящих вариантов, которые могут использоваться для кодирования блока снимка. После приема вектора движения для PU текущего блока снимка модуль компенсации движения может найти блок предсказания, на который указывает вектор движения, в одном из списков опорных снимков.
Модуль компенсации движения также может генерировать синтаксические элементы, связанные с блоками и видеосегментами, для использования видеодекодером 30 при декодировании блоков снимка видеосегмента. В дополнение или в качестве альтернативы сегментам и соответствующим элементам синтаксиса могут генерироваться или использоваться группы клеток и/или клетки и соответствующие синтаксические элементы.
Энтропийное кодирование
Модуль 270 энтропийного кодирования выполнен с возможностью применения, например, алгоритма или схемы энтропийного кодирования (например, схемы кодирования с переменной длиной (VLC), схемы контекстно-адаптивного VLC (CAVLC), схемы арифметического кодирования, бинаризации, контекстно-адаптивного двоичного арифметического кодирования (CABAC), основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), энтропийного кодирования с разбиением интервала вероятности (PIPE) или другого способа или методики энтропийного кодирования) или обхода (без сжатия) в отношении квантованных коэффициентов 209, параметров интер-предсказания, параметров интра-предсказания, параметров контурного фильтра и/или других элементов синтаксиса для получения данных 21 кодированного снимка, которые могут выводиться через вывод 272, например в форме кодированного битового потока 21, так что, например, видеодекодер 30 может принимать и использовать эти параметры для декодирования. Кодированный битовый поток 21 может быть передан на видеодекодер 30 или сохранен в памяти для последующей передачи или извлечения видеодекодером 30.
Другие изменения в структуре видеокодера 20 могут использоваться для кодирования видеопотока. Например, кодер 20, не основанный на преобразовании, может квантовать остаточный сигнал напрямую без блока 206 обработки преобразования. В другой реализации кодер 20 может иметь модуль 208 квантования и модуль 210 обратного квантования, объединенные в единый блок.
Декодер и способ декодирования
На Фиг.3 показан пример видеодекодера 30, который выполнен с возможностью реализации способов настоящей заявки. Видеодекодер 30 выполнен с возможностью приема данных 21 кодированного снимка (например, кодированного битового потока 21), например кодированных кодером 20, чтобы получить декодированный снимок 331. Данные кодированного снимка или кодированный битовый поток содержат информацию для декодирования данных кодированного снимка, например данных, которые представляют блоки снимка кодированного сегмента видео (и/или клеток или групп клеток) и связанные синтаксические элементы.
В примере на Фиг.3, декодер 30 содержит модуль 304 энтропийного декодирования, модуль 310 обратного квантования, модуль 312 обработки обратного преобразования, модуль 314 восстановления (например, сумматор 314), контурный фильтр 320, буфер 330 (DPB) декодированных снимков, модуль 360 применения режима, модуль 344 интер-предсказания и модуль 354 интра-предсказания. Модуль 344 интер-предсказания может быть или включать в себя модуль компенсации движения. Видеодекодер 30 может, в некоторых примерах, выполнять этап декодирования, в целом обратный этапу кодирования, описанному в отношении видеокодера 100 на Фиг.2.
Как описано в отношении кодера 20, модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных снимков, модуль 344 интер-предсказания и модуль 354 интра-предсказания также относятся к формированию «встроенного декодера» видеокодера 20. Соответственно, модуль 310 обратного квантования может быть идентичен по функции модулю 110 обратного квантования, модуль 312 обработки обратного преобразования может быть идентичен по функции модулю 212 обработки обратного преобразования, модуль 314 восстановления может быть идентичен по функции модулю 214 восстановления, контурный фильтр 320 может быть идентичен по функции контурному фильтру 220, а буфер 330 декодированных снимков может быть идентичен по функции буферу 230 декодированных снимков. Следовательно, пояснения, предоставленные для соответствующих блоков и функций видеокодера 20, применимы соответственно и к соответствующим блокам и функциям видеодекодера 30.
Энтропийное декодирование
Модуль 304 энтропийного декодирования выполнен с возможностью синтаксического анализа битового потока 21 (или, в общем, данных 21 кодированного снимка) и выполнения, например, энтропийного декодирования для данных 21 кодированного снимка, чтобы получить, например, квантованные коэффициенты 309 и/или параметры декодированного кодирования (не показаны на Фиг.3), например, любые или все из параметров интер-предсказания (например, индекс опорного снимка и вектор движения), параметр интра-предсказания (например, индекс или режим интра-предсказания), параметры преобразования, параметры квантования, параметры контурного фильтра и/или другие синтаксические элементы. Модуль 304 энтропийного декодирования может быть выполнен с возможностью применения алгоритмов или схем декодирования, соответствующих схемам кодирования, как описано в отношении модуля 270 энтропийного кодирования кодера 20. Модуль 304 энтропийного декодирования может быть дополнительно выполнен с возможностью предоставления параметров интер-предсказания, параметра интра-предсказания и/или других элементов синтаксиса модулю 360 применения режима и других параметров другим модулям декодера 30. Видеодекодер 30 может принимать синтаксические элементы на уровне видеосегмента и/или уровне видеоблока. В дополнение или в качестве альтернативы сегментам и соответствующим синтаксическим элементам могут приниматься и/или использоваться группы клеток и/или клетки и соответствующие синтаксические элементы.
Обратное квантование
Модуль 310 обратного квантования может быть выполнен с возможностью приема параметров квантования (QP) (или, в общем, информации, относящейся к обратному квантованию) и квантованных коэффициентов из данных 21 кодированного снимка (например, посредством синтаксического анализа и/или декодирования, например, посредством модуля 304 энтропийного декодирования) и применять на основе параметров квантования обратное квантование к декодированным квантованным коэффициентам 309 для получения деквантованных коэффициентов 311, которые также могут называться коэффициентами 311 преобразования. Процесс обратного квантования может включать в себя использование параметра квантования, определенного видеокодером 20 для каждого видеоблока в видеосегменте (или клетке или группе клеток), для определения степени квантования и, аналогично, степени обратного квантования, которая должна быть применена.
Обратное преобразование
Модуль 312 обработки обратного преобразования может быть выполнен с возможностью приема деквантованных коэффициентов 311, также называемых коэффициентами 311 преобразования, и для применения преобразования к деквантованным коэффициентам 311, чтобы получить восстановленные остаточные блоки 213 в области дискретных отсчетов. Восстановленные остаточные блоки 213 также могут упоминаться как блоки 313 преобразования. Преобразование может быть обратным преобразованием, например, обратным DCT, обратным DST, обратным целочисленным преобразованием или принципиально аналогичным процессом обратного преобразования. Модуль 312 обработки обратного преобразования может быть дополнительно выполнен с возможностью приема параметров преобразования или соответствующей информации из данных 21 кодированного снимка (например, посредством синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования), чтобы определять преобразование, которое должно применяться к деквантованным коэффициентам 311.
Восстановление
Модуль 314 восстановления (например, сумматор 314) может быть выполнен с возможностью добавления восстановленного остаточного блока 313 к блоку 365 предсказания, чтобы получить восстановленный блок 315 в области дискретных отсчетов, например, посредством добавления значений дискретных отсчетов восстановленных остаточный блок 313 и значения дискретных отсчетов блока 365 предсказания.
Фильтрация
Модуль 320 контурного фильтра (либо в контуре кодирования, либо после контура кодирования) выполнен с возможностью фильтрации восстановленного блока 315 для получения отфильтрованного блока 321, например, для сглаживания переходов пикселей или иного улучшения качества видео. Модуль 320 контурного фильтра может содержать один или более контурных фильтров, таких как фильтр устранения блочности, фильтр с адаптивным смещением дискретных отсчетов (SAO) или один или более других фильтров, например адаптивный контурный фильтр (ALF), фильтр подавления шума (NSF) или любое их сочетание. В одном примере модуль 220 контурного фильтра может содержать фильтр устранения блочности, фильтр SAO и фильтр ALF. Порядок процесса фильтрации может быть фильтром расформирования блоков, SAO и ALF. В другом примере добавляется процесс, называемый отображением яркости с масштабированием цветности (LMCS) (а именно, адаптивным внутриконтурным преобразователем). Этот процесс выполняется перед расформированием блоков. В другом примере процесс фильтрации расформирования блоков может также применяться к внутренним краям подблока, например краям аффинных подблоков, краям подблоков ATMVP, краям преобразования подблоков (SBT) и краям внутри подблока (ISP). Хотя модуль 320 контурного фильтра показан на Фиг.3 как контурный фильтр, в других конфигурациях модуль 320 контурного фильтра может быть реализован как постконтурный фильтр.
Буфер декодированных снимков
Декодированные видеоблоки 321 снимка затем сохраняются в буфере 330 декодированных снимков, который сохраняет декодированные снимки 331 в качестве опорных снимков для последующей компенсации движения для других снимков и/или для вывода, соответственно, отображения.
Декодер 30 выполнен с возможностью вывода декодированного снимка 311, например, через вывод 312 для представления или просмотра пользователю.
Предсказание
Модуль 344 интер-предсказания может быть идентичен модулю 244 интер-предсказания (в частности, модулю компенсации движения), а модуль 354 интра-предсказания может быть идентичен модулю 254 интер-предсказания по функции, и принимает решения по разбиению или разделению и выполняет предсказание на основе параметров разбиения и/или предсказания или соответствующей информации, принимаемой из кодированных данных 21 изображения (например, посредством анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования). Модуль 360 применения режима может быть выполнен с возможностью осуществления предсказания (интра- или интер-предсказания) для каждого блока на основе восстановленных снимков, блоков или соответствующих дискретных отсчетов (фильтрованных или нефильтрованных) для получения блока 365 предсказания.
Когда видеосегмент кодируется как сегмент с интра-кодированием (I), модуль 354 интра-предсказания модуля 360 применения режима конфигурируется для генерации блока 365 предсказания для блока снимка текущего видеосегмента на основе сигнального режима интра-предсказания и данных из ранее декодированные блоки текущего снимка. Когда видеоиснимок кодируется с интер-кодированием (то есть B или P) сегмент, модуль 344 интер-предсказания (например, модуль компенсации движения) модуля 360 применения режима конфигурируется для создания блоков 365 предсказания для видеоблока текущего видео. сегмент на основе векторов движения и других элементов синтаксиса, полученных от модуля 304 энтропийного декодирования. Для интер-предсказания блоки предсказания могут быть созданы из одного из опорных снимков в одном из списков опорных снимков. Видеодекодер 30 может создавать списки опорных кадров, Список 0 и Список 1, используя методики построения по умолчанию на основе опорных снимков, хранящихся в DPB 330. То же самое или подобное может применяться для или посредством вариантов осуществления с использованием групп клеток (например, групп видеоклеток) и/или клеток (например, видеоклеток) в дополнение или альтернативно к сегментам (например, видеосегментам), например, видео может быть кодировано с использованием групп I, P или B клеток и/или клеток.
Модуль 360 применения режима выполнен с возможностью определения информации предсказания для видеоблока текущего видеосегмента посредством анализа векторов движения или связанной информации и других элементов синтаксиса, и использует информацию предсказания для создания блоков предсказания для текущего декодируемого видеоблока. Например, модуль 360 применения режима использует некоторые из принятых элементов синтаксиса для определения режима предсказания (например, внутреннее или внешнее предсказание), используемого для кодирования видеоблоков видеосегмента, типа сегмента интер-предсказания (например, B-сегмент, P-сегмент или GPB-сегмент), информация о конструкции для одного или более списков опорных снимков для сегмента, векторы движения для каждого видеоблока с интер-кодированием сегмента, статус интер-предсказания для каждого видеоблока с интер-кодированием сегмента и другие информация для декодирования видеоблоков в текущем видеосегменте. То же самое или подобное может применяться для вариантов осуществления или посредством вариантов осуществления с использованием групп клеток (например, групп видеоклеток) и/или клеток (например, видеоклеток) в дополнение или альтернативно к сегментам (например, видеосегментам), например, видео может быть кодировано с использованием групп I, P или B клеток и/или клеток.
Варианты осуществления видеодекодера 30, как показано на фиг.3, могут быть выполнены с возможностью разбиения и/или декодирования снимка с использованием сегментов (также называемых видео сегментами), при этом снимок может быть разделен на или декодировано с использованием одного или более сегментов (обычно без перекрытия), и каждый сегмент может содержать один или более блоков (например, CTU) или одну или более групп блоков (например, клеток (tile) (H.265/HEVC и VVC) или фрагментов (brick) (VVC)).
Варианты осуществления видеодекодера 30, как показано на фиг.3, могут быть выполнены с возможностью разбиения и/или декодирования снимка с использованием групп сегментов/клеток (также называемых группами клеток) и/или клеток (также называемых видеоклетками), при этом снимок может быть разделен на или декодировано с использованием одной или более групп сегментов/клеток (обычно не перекрывающихся), и каждая группа сегментов/клеток может содержать, например, один или более блоков (например, CTU) или одну или более клеток, при этом каждая клетка, например, может иметь прямоугольную форму и может содержать один или более блоков (например, CTU), например полные или дробные блоки.
Другие варианты видеодекодера 30 могут использоваться для декодирования данных 21 кодированного снимка. Например, декодер 30 может создавать выходной видеопоток без блока 320 контурной фильтрации. Например, декодер 30, не основанный на преобразовании, может выполнять обратное квантование остаточного сигнала напрямую без модуля 312 обработки обратного преобразования для определенных блоков или кадров. В другой реализации видеодекодер 30 может иметь модуль 310 обратного квантования и модуль 312 обработки обратного преобразования, объединенные в один модуль.
Следует понимать, что в кодере 20 и декодере 30 результат обработки текущего этапа может быть дополнительно обработан и затем выведен на следующий этап. Например, после интерполяционной фильтрации, вывода вектора движения или петлевой фильтрации может выполняться дополнительная операция, такая как обрезка или сдвиг, над результатом обработки интерполяционной фильтрации, вывода вектора движения или петлевой фильтрации.
Следует отметить, что дополнительные операции могут применяться к получаемым векторам движения текущего блока (в том числе, но без ограничения, к векторам движения контрольной точки аффинного режима, векторам движения подблока в аффинном, планарном режимах, режиме ATMVP, временным векторам движения и тому подобному). Например, значение вектора движения ограничивается предварительно определенным диапазоном согласно его представляющему биту. Если представляющий бит вектора движения является bitDepth (битовой глубиной), тогда диапазон составляет -2^(bitDepth-1)~2^(bitDepth-1)-1, где «^» означает возведение в степень. Например, если bitDepth равна 16, то диапазон составляет -32768~32767; если bitDepth равна 18, то диапазон составляет -131072~131071. Например, значение получаемого вектора движения (например, MV четырех подблоков 4×4 в одном блоке 8×8) ограничивается таким образом, чтобы максимальная разность между целыми частями MV четырех подблоков 4×4 не превышала N пикселей, например была не более 1 пикселя. Здесь представлены два способа ограничения вектора движения согласно bitDepth.
Фиг.4 является схематической диаграммой устройства 400 видеокодирования согласно варианту осуществления раскрытия. Устройство 400 видеокодирования подходит для реализации раскрытых вариантов осуществления, как описано в данном документе. В варианте осуществления устройство 400 видеокодирования может быть декодером, таким как видеодекодер 30 с Фиг.1A или кодер, такой как видеокодер 20 с Фиг.1А.
Устройство 400 видеокодирования содержит входные порты 410 (или порты 410 ввода) и модули 420 приемника (Rx) для приема данных; процессор, логический модуль или центральный процессор (CPU) 430 для обработки данных; модули 440 передатчика (Tx) и выходные порты 450 (или порты 450 вывода) для передачи данных; и память 460 для хранения данных. Устройство 400 видеокодирования может также содержать оптико-электрические (OE) компоненты и электрическо-оптические (EO) компоненты, подключенные к входным портам 410, модулям 420 приемника, модулям 440 передатчика и выходным портам 450 для выход или попадание оптических или электрических сигналов.
Процессор 430 реализован аппаратно и программно. Процессор 430 может быть реализован как одна или более микросхем ЦП, ядер (например, как многоядерный процессор), FPGA, ASIC и DSP. Процессор 430 поддерживает связь с входными портами 410, модулями 420 приемника, модулями 440 передатчика, выходными портами 450 и памятью 460. Процессор 430 содержит модуль 470 кодирования. Модуль 470 кодирования реализует раскрытые варианты осуществления, описанные выше. Например, модуль 470 кодирования реализует, обрабатывает, подготавливает или предоставляет различные операции кодирования. Таким образом, разрешение модуля 470 кодирования обеспечивает существенное улучшение функциональных возможностей устройства 400 видеокодирования и обеспечивает преобразование устройства 400 видеокодирования в другое состояние. В качестве альтернативы модуль 470 кодирования реализован как инструкции, хранящиеся в памяти 460 и выполняемые процессором 430.
Память 460 может содержать один или более дисков, ленточных накопителей и твердотельных накопителей и может использоваться в качестве устройства хранения данных с переполнением, для хранения программ, когда такие программы выбраны для выполнения, и для хранения инструкций и данных, которые считываются во время выполнения программы. Память 460 может быть, например, энергозависимой и/или долговременной и может представлять собой постоянную память (ROM), оперативную память (RAM), троичную память с адресацией по содержимому (TCAM) и/или статическую память с произвольным доступом (SRAM).
Фиг.5 является упрощенной блок-схемой устройства 500, которое может использоваться как одно или оба из устройства-источника 12 и устройства-получателя 14 с Фиг.1 согласно примерному варианту осуществления.
Процессор 502 в устройстве 500 может быть центральным процессором. В качестве альтернативы, процессор 502 может быть устройством любого другого типа или множеством устройств, способных манипулировать или обрабатывать информацию, существующую в настоящее время или разработанную в будущем. Хотя раскрытые реализации могут быть реализованы с одним процессором, как показано, например процессором 502, преимущества в скорости и эффективности могут быть достигнуты с использованием более чем одного процессора.
Память 504 в устройстве 500 может быть постоянным запоминающим устройством (ROM) или устройством оперативной памяти (RAM) в реализации. В качестве памяти 504 может использоваться любой другой подходящий тип запоминающего устройства. Память 504 может включать в себя код и данные 506, к которым обращается процессор 502, используя шину 512. Память 504 может дополнительно включать в себя операционную систему 508 и прикладные программы 510, прикладные программы 510 включают в себя по меньшей мере одну программу, которая позволяет процессору 502 выполнять описанные здесь способы. Например, прикладные программы 510 могут включать в себя приложения с 1 по N, которые дополнительно включают в себя приложение кодирования видео, которое выполняет описанные здесь способы.
Устройство 500 может также включать в себя одно или более устройств вывода, например дисплей 518. Дисплей 518 может быть, в одном примере, сенсорным дисплеем, который объединяет дисплей с сенсорным элементом, способным воспринимать сенсорные вводы (касанием). Дисплей 518 может быть соединен с процессором 502 через шину 512.
Хотя здесь изображена как одна шина, шина 512 устройства 500 может состоять из многочисленных шин. Кроме того, вторичное хранилище 514 может быть напрямую связано с другими компонентами устройства 500 или может быть доступно через сеть и может содержать один встраиваемый блок, такой как карта памяти, или множество блоков, таких как множество карт памяти. Таким образом, устройство 500 может быть реализовано в самых разнообразных конфигурациях.
Ниже приведены некоторые связанные примеры, и отмечается, что в качестве справочного материала используется документ JVET-N1002, посвященный собранию JVET.
I. Предсказание со слиянием:
Список потенциально подходящих вариантов на слияние строится посредством включения следующих пяти типов потенциально подходящих вариантов в следующем порядке:
1) Пространственный MVP из пространственных соседних CU;
2) Временной MVP из совмещенных CU;
3) MVP на основе истории из таблицы FIFO;
4) Попарный средний MVP;
5) Нулевые MV.
Размер списка слияния указывается в заголовке фрагмента, а максимально допустимый размер списка слияния - это целое число, например число может быть 6. Для каждого кода CU в режиме слияния кодируется индекс лучшего потенциально подходящего варианта на слияние. В этом сеансе представлен процесс генерации каждой категории потенциально подходящих вариантов на слияние.
(1) Выведение пространственных потенциально подходящих вариантов
Например, среди потенциально подходящих вариантов, расположенных в положениях, изображенных на фигуре 6, выбираются максимум четыре потенциально подходящего варианта на слияние. Порядок вывода: A0, B0, B1, A1 и B2. Положение B2 рассматривается только тогда, когда какой-либо CU положения A0, B0, B1, A1 недоступно (например, потому что оно принадлежит другому сегменту или клетке) или интра-кодировано. После добавления потенциально подходящего варианта в положение A1 добавление оставшихся потенциально подходящих вариантов подвергается проверке на избыточность, которая гарантирует, что потенциально подходящие варианты с одинаковой информацией о движении будут исключены из списка. В возможном варианте реализации рассматриваются только пары, соединенные стрелкой на фигуре 7, и потенциально подходящий вариант добавляется в список только в случае, при котором соответствующий потенциально подходящий вариант, используемый для проверки избыточности, не имеет той же самой информации о движении.
(2) Выведение временных потенциально подходящих вариантов
Например, в список добавляется только один потенциально подходящий вариант. В частности, при выведении этого временного потенциально подходящего варианта на слияние масштабированный вектор движения выводится на основе совмещенного CU, принадлежащего совмещенному опорному снимку. Список опорных снимков, который должен использоваться для выведения совмещенного CU, явно указывается в заголовке сегмента. Масштабированный вектор движения для временного потенциально подходящего варианта на слияние получается, как показано пунктирной линией на фигуре 8, который масштабируется от вектора движения совмещенного CU с использованием расстояний POC, tb и td, где tb определяется как разность POC между опорным снимком текущего снимка и текущим снимком и td определяется как разность POC между опорным снимком совмещенного снимка и совмещенным снимком. Индекс опорного снимка временного потенциально подходящего варианта на слияние устанавливается равным нулю.
Следует отметить, что POC (порядковый номер снимка) означает переменную, которая связана с каждым снимком, однозначно идентифицирует связанный снимок среди всех снимков в CVS (кодированной видеопоследовательности), и, когда связанный снимок должен быть выведен из буфера декодированных снимков, указывает положение связанного снимка в порядке вывода относительно положений порядка вывода других снимков в том же CVS, которые должны быть выведены из буфера декодированных снимков.
(3) Выведение потенциально подходящих вариантов на слияние на основе истории
Потенциально подходящие варианты на слияние MVP на основе истории (HMVP) добавляются в список слияния после пространственных MVP и TMVP. Информация о движении ранее кодированного блока сохраняется в таблице и используется как MVP для текущего CU. Таблица с множеством потенциально подходящих вариантов HMVP поддерживается в процессе кодирования/декодирования. Таблица сбрасывается при обнаружении новой строки CTU. Всякий раз, когда имеется CU с интер-кодированием, не относящийся к подблоку, соответствующая информация о движении добавляется к последней записи таблицы в качестве нового потенциально подходящего варианта HMVP. Последние несколько потенциально подходящих вариантов HMVP в таблице проверяются по порядку и вставляются в список потенциально подходящих вариантов после потенциально подходящего варианта TMVP. Проверка избыточности применяется к потенциально подходящим вариантам HMVP к пространственному или временному потенциально подходящему варианту на слияние.
(4) Выведение попарных средних потенциально подходящих вариантов на слияние
Попарные средние потенциально подходящие варианты генерируются посредством усреднения предварительно заданных пар потенциально подходящих вариантов в существующем списке потенциально подходящих вариантов на слияние, и предварительно заданные пары задаются как {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}, где числа обозначают индексы слияния в списке потенциально подходящих вариантов на слияние. Усредненные векторы движения рассчитываются отдельно для каждого опорного списка. Если оба вектора движения доступны в одном списке, эти два вектора движения усредняются, даже если они указывают на разные опорные снимки; если доступен только один вектор движения, то используют его напрямую; если вектор движения недоступен, оставляют этот список недействительным.
(5) Когда список слияния не заполнен после добавления попарных средних потенциально подходящих вариантов на слияние, нулевые MVP вставляются в конец до тех пор, пока не встретится максимальное количество потенциально подходящих вариантов на слияние.
II. Би-предсказание
Интер-предсказание использует временную корреляцию между снимками, чтобы получить предсказание с компенсацией движения (MCP) для блока дискретных отсчетов изображения. Для каждого блока может быть найден соответствующий блок в ранее декодированном снимке, который служит предиктором. Положение блока в ранее декодированном снимке указывается вектором движения (Δx, Δy), где Δx задает горизонтальное, а Δy задает вертикальное смещение относительно положения текущего блока. Векторы движения (Δx, Δy) могут иметь дробную точность дискретного отсчета для более точного захвата движения нижележащего объекта. Интерполяция применяется к опорным снимкам для выведения сигнала предсказания, когда соответствующий вектор движения имеет дробную точность дискретного отсчета. Ранее декодированный снимок упоминается как опорный снимок и обозначается индексом Δt опорного снимка в списке опорных снимков.
В случае би-предсказания (по сравнению с уни-предсказанием, которое использует один набор данных о движении) два набора данных о движении (Δx0, Δy0, Δt0 и Δx1, Δy1, Δt1) используются для генерации двух MCP (могут быть из разных снимков или одного и того же снимка), которые затем объединяются для получения окончательного MCP. Как правило, это выводится посредством усреднения. В случае взвешенного предсказания к каждому MCP могут быть применены разные весовые коэффициенты. Опорные снимки, которые можно использовать в би-предсказании, хранятся в двух отдельных списках, а именно в списке 0 и списке 1.
III. Хранение информации о движении
После выполнения компенсации движения информация о движении (уни-предсказания или би-предсказания), связанная с блоком предсказания, сохраняется в памяти. Сохраненная информация о движении используется в качестве опорной информации для будущего блока (CU/PU), например, посредством пространственного или временного предсказания вектора движения.
В некоторых примерах хранение информации о движении выполняется с использованием двумерного массива подблоков информации о движении или модулей хранения информации о движении. Пространственное разрешение двумерного массива может отличаться от пространственного разрешения подлежащего кодированию снимка. В одном примере более низкое разрешение модуля хранения информации о движении используется для экономии места в памяти. Например, 16×16 дискретных отсчетов яркости соответствуют одному модулю хранения информации о движении, что означает, что каждый дискретный отсчет в 16×16 дискретных отсчетах яркости содержит одинаковую информацию о движении, и одна и та же информация о движении хранится в одном блоке хранения информации о движении, который соответствует этим 16×16 дискретным отсчетам яркости. Другими словами, модуль хранения информации о движении содержит информацию интер-предсказания соответствующего блока предсказания, который состоит из 16×16 дискретных отсчетов яркости.
Также следует отметить, что 16×16 дискретных отсчетов яркости означают набор дискретных отсчетов яркости, который является массивом двумерных дискретных отсчетов, а ширина и высота массива двумерных дискретных отсчетов равны 16. Один модуль хранения информации о движении может также соответствовать 8×8 дискретным отсчетам яркости, 4×4 дискретным отсчетам яркости или другим NxM дискретным отсчетам яркости или дискретным отсчетам цветности, N и M являются положительными целыми числами. И понятно, что меньший размер модуля хранения информации о движении позволяет лучше предсказывать вектор движения, но требует больше места в памяти. Хранение вектора движения для блока предсказания размером в 8×8 дискретных отсчетов яркости показано на фигуре 9. Информация о движении блока предсказания, обозначенная как Mv0, хранится в каждом модуле хранения вектора движения 2×2.
III. Треугольное разбиение для интер-предсказания
Например, режим треугольного разбиения применяется только к CU размером 8×8 или больше, закодированным в режиме пропуска или слияния. Сигнализируется флаг уровня ACU, чтобы указать, применяется ли режим треугольного разбиения или нет.
CU в режиме треугольного разбиения равномерно разделяется на два треугольных разбиения, используя либо диагональное разделение, либо антидиагональное разделение (Фиг. 10). Каждое треугольное разбиение в CU интер-предсказано с использованием собственного движении; для каждого разбиения разрешено только уни-предсказание, то есть каждое разбиение имеет один вектор движения и один опорный индекс. Ограничение движения с уни-предсказанием применяется для того, чтобы гарантировать, что, как и при обычном би-предсказании, для каждого CU требуются только два предсказания с компенсацией движения. Движение с уни-предсказанием для каждого разбиения получается непосредственно из списка потенциально подходящих вариантов на слияние, созданного для предсказания со слиянием, упомянутого выше, и выбор движения с уни-предсказанием из заданного потенциально подходящего варианта на слияние в списке осуществляется в соответствии с процедурой «построение списка потенциально подходящих вариантов с уни-предсказанием». После предсказания каждого из треугольных разбиений (разделов) значения дискретных отсчетов вдоль диагонального или антидиагонального края корректируются с использованием обработки смешивания с адаптивными весовыми коэффициентами. Наконец, сохраняется поле движения CU, предсказанное с использованием режима треугольного разбиения.
(1) Построение списка потенциально подходящих вариантов с уни-предсказанием
Учитывая индекс потенциально подходящего варианта на слияние, вектор движения с уни-предсказанием выводится из списка потенциально подходящих вариантов на слияние, построенного для предсказания со слиянием, упомянутого выше, в качестве примера на фигуре 11. Для потенциально подходящего варианта в списке его вектор движения LX с X, равным четности значения индекса потенциально подходящего варианта на слияние, используется в качестве вектора движения с уни-предсказанием для режима треугольного разбиения. Эти векторы движения отмечены знаком «x» на фигуре 11. В случае, при котором соответствующий вектор движения LX не существует, вектор движения L(1-X) того же потенциально подходящего варианта в списке потенциально подходящих вариантов предсказания со слиянием используется в качестве вектора движения с уни-предсказанием для режима треугольного разбиения.
(2) Смешивание вдоль края треугольного разбиения
После предсказания каждого треугольного разбиения с использованием его собственного движения к двум сигналам предсказания применяется смешивание для выведения дискретных отсчетов вокруг диагонального или антидиагонального края. В процессе смешивания используются следующие весовые коэффициенты: {7/8, 6/8, 5/8, 4/8, 3/8, 2/8, 1/8} для яркости и {6/8, 4/8 , 2/8} для цветности, как показано на фигуре 12.
(3) Хранение поля движения
Например, векторы движения CU, закодированные в режиме треугольного разбиения, хранятся в модулях 4×4. В зависимости от положения каждого модуля 4×4 сохраняются векторы движения с уни- предсказанием или би-предсказанием. Обозначим Mv1 и Mv2 как векторы движения с уни-предсказанием для разбиения 1 и разбиения 2, соответственно. Если модуль 4×4 расположен в не взвешенной области, показанной в примере на фигуре 12, для этого модуля 4×4 сохраняется либо Mv1, либо Mv2. В противном случае (если модуль 4×4 находится во взвешенной области) сохраняется вектор движения би-предсказания. Вектор движения би-предсказания выводится из Mv1 и Mv2 в соответствии со следующим процессом:
1) Если Mv1 и Mv2 взяты из разных списков опорных снимков (один из L0, а другой из L1), то Mv1 и Mv2 просто объединяются для формирования вектора движения с би-предсказанием;
2) В противном случае, если Mv1 и Mv2 принадлежат одному и тому же списку, и без ограничения общности считают, что они оба из L0.
В таком случае:
Если опорный снимок Mv2 (или Mv1) появляется в L1, то этот Mv2 (или Mv1) преобразуется в вектор движения L1 с использованием этого опорного снимка в L1. Затем два вектора движения объединяются для формирования вектора движения с би-предсказанием.
В противном случае вместо движении с би-предсказанием сохраняется только движение Mv1 с уни-предсказанием.
В качестве другого примера хранение вектора движения для режима треугольного разбиения показано на фигуре 13.
IV. Геометрическое разбиение на промежуточные блоки
В режиме треугольного разбиения два подблока разделены отделительной линией, а направление отделительной линии составляет 45 градусов или 135 градусов. Также возможны другие углы разбиения и пропорции разбиения, которые называются режимом GEO (геометрического разбиения) в настоящей заявке, например, как показано на фигуре 14.
Например, общее количество GEO-разбиений может быть 140. Это число оказалось оптимальным из-за баланса между гибкостью и битовой стоимостью. Дополнительная сигнализация для GEO требует сигнализации угла α и смещения отделительной линии относительно центра блока ρ. α представляет собой квантованный угол от 0 до 360 градусов с отделением в 11,25 градусов, а ρ представляет собой расстояние с 5 различными значениями. Значение α и ρ показано на фигуре 15.
Понятно, что в области техники кодирования видео, как правило, процесс предсказания, выполняемый на стороне кодера и на стороне декодера, аналогичен, за исключением того, что дополнительная информация выделяется посредством анализа из битового потока на стороне декодера, и дополнительная информация определяется предварительно установленным правилом, таким как способ оптимизации скорости к искажению (RDO). Например, для получения дискретных отсчетов предсказания в режиме GEO на стороне декодера применяются следующие этапы:
S101: Определение пропорции разбиения для текущего блока.
Синтаксис элемента geo_partition_idx выделяется посредством анализа из битового потока, который используется в качестве индекса для таблицы поиска, в которой хранятся пары α и ρ. В примере α и ρ представлены индексом угла и индексом расстояния, соответственно.
S102: Получение первого режима предсказания для первого подблока и второй режим предсказания для второго подблока.
Как правило, для выведения векторов движения каждого разбиения (подблока) GEO-блока используется тот же процесс выведения списка слияния, который используется для режима треугольного разбиения. Каждое разбиение предсказывается только посредством уни-предсказания. Синтаксис двух элементов geo_merge_idx0 и geo_merge_idx1 выделяется посредством анализа из битового потока, чтобы указать режимы предсказания двух подблоков, соответственно.
В одном примере первый режим предсказания не идентичен второму режиму предсказания. В одном примере режим предсказания (первый режим предсказания или второй режим предсказания) может быть режимом интер-предсказания, информация для режима интер-предсказания может содержать индекс опорного снимка и вектор движения. В другом примере режим предсказания может быть режимом интра-предсказания, информация для режима интра-предсказания может содержать индекс режима интра-предсказания.
S103: Генерирование первого значения предсказания для первого подблока и второго значения предсказания для второго подблока, используя первый режим предсказания и второй режим предсказания, соответственно.
S104: Получение объединенных значений дискретных отсчетов предсказания в соответствии с объединением первого значения предсказания и второго значения предсказания в соответствии с делением, которое раскрыто на этапе S101.
Например, более конкретно, этап S104 включает в себя:
S104-1: Для дискретного отсчета яркости в текущем блоке вычисляется расстояние дискретного отсчета (sample_dist), расстояние дискретного отсчета представляет собой расстояние от дискретного отсчета яркости до отделительной линии текущего блока, как определено на этапе S101.
В одном примере расстояние дискретного отсчета sample_dist вычисляется согласно формуле:
sample_dist=((x<<1)+1)*Dis[angleIdx1]+((y<<1)+1))*Dis[angleIdx2]-offset(distanceIdx).
angleIdx1 и angleIdx2 получают из битового потока или выводят на основе другой информации, полученной из битового потока, например, выводят на основе синтаксиса элемента geo_partition_idx в качестве индекса угла на этапе S101; angleIdx1 и angleIdx2 представляют собой квантованные тригонометрические параметры отделительной линии.
x и y - горизонтальное и вертикальное расстояния дискретного отсчета относительно верхнего левого дискретного отсчета текущего блока.
offset(distanceIdx) является функцией значения индекса (distanceIdx), значение индекса получается из битового потока или выводится на основе другой информации, полученной из битового потока, например, выводится на основе синтаксиса элемента geo_partition_idx, как индекс расстояния на этапе S101.
Dis[] - это предварительно заданная таблица поиска.
В другом примере sample_dist и sampleWeight1 могут быть получены согласно следующим уравнениям:
nCbR=(W>H)?(W/H):(H/W)
sample_dist=(W>H)?(Clip3(0, 8, (x/nCbR-y)+4)):(Clip3(0, 8, (x-y/nCbR)+4)),
или
sample_dist=(W>H)?(Clip3(0, 8, (H-1-x/nCbR-y)+4)):(Clip3(0, 8, (W-1-x-y/nCbR)+4)),
где W - ширина текущего блока, H - высота текущего блока.
Следует отметить, что приведенные выше 2 примера показывают два способа вычисления согласно целочисленной арифметике. Варианты осуществления изобретения не ограничены этими примерами вычисления sample_dist.
В примерах sample_dist может быть расстоянием по перпендикулярной линии между дискретным отсчетом, расположенным на (x, y), и отделительной линией. В другом примере проводят горизонтальную линию или вертикальную линию через дискретный отсчет, расположенный в (x, y). Горизонтальная линия или вертикальная линия будут иметь точку пересечения с отделительной линией. sample_dist может быть расстоянием между дискретным отсчетом, расположенным на (x, y), и точкой пересечения.
S104-2: Операция смешивания реализована как функция с sample_dist в качестве входных данных и sampleWeight1 или sampleWeight2 в качестве выходных данных.
Sample_dist используется для вычисления весовых коэффициентов, весовые коэффициенты используются для значения предсказания с объединением, которое выводится посредством объединения первого значения предсказания и второго значения предсказания, соответствующих первому подблоку и второму подблоку, соответственно. В примере весовые коэффициенты обозначаются как sampleWeight1 и sampleWeight2, ссылаясь на значения весовых коэффициентов, соответствующих первому значению предсказания и второму значению предсказания, соответственно. В одном примере sampleWeight1 вычисляется согласно sample_dist, sampleWeight2 вычисляется по формуле sampleWeight2=T-sampleWeight1, где T - предварительно заданная константа. В одном примере предварительно заданная константа T равняется 8, что означает, что sampleWeight1 и sampleWeight2 могут иметь значения в диапазоне значений от 0 до 8 (включая 0 и 8). В другом примере предварительно заданная константа T равняется 16.
Согласно одному примеру первый весовой коэффициент sampleWeight1 получается в соответствии с sample_dist и таблицей поиска. В одном примере таблица поиска используется для хранения коэффициентов фильтра. Другими словами, операция смешивания реализуется в соответствии с интерполяционной таблицей. В таком примере функция sample_dist может быть использовано в качестве индексного значения для таблицы поиска. Упомянутая функция может быть операцией деления или умножения с постоянным числом, операцией сдвига вправо на постоянную величину, операцией усечения или взятия абсолютного значения, или их сочетанием.
Операция смешивания применяется к дискретному отсчету в соответствии со значением указания в битовом потоке или к дискретному отсчету в соответствии со значением указания в битовом потоке.
Например, sampleWeight1=Clip3(0, 8, f(sample_dist)). Функция f() может быть делением/сложением/умножением с операцией постоянного числа, сдвигом вправо с операцией постоянной величины, операцией получения абсолютного значения или операцией отсечения или их сочетанием.
Например, sampleWeight1 (или sampleWeight2)=Clip3(0, 8, sample_dist),
Например, sampleWeight1 (или sampleWeight2)=Clip3(0, 8, sample_dist+4);
Например, sampleWeight1 (или sampleWeight2)=sample_dist==4 ? 4 : sample_dist < 4 ? 0 : 8;
Например, sampleWeight1 (или sampleWeight2)=Clip3(0, 8, (sample_dist - 4)*K+sample_dist);
Например, sampleWeight1 (или sampleWeight2)=sample_dist == 0 ? 4 : sample_dist < 0 ? 0 : 8;
Например, sampleWeight1 (или sampleWeight2)=Clip3(0, 8, sample_dist*K+Clip3(0, 8, sample_dist+4)), K - целое число со значением больше 0. Следует отметить, что операция смешивания становится короче (следовательно, более резкой) с увеличением K. Например, когда K=4, то вторая операция смешивания становится идентичной следующему "sampleWeight=sample_dist == 0 ? 4 : sample_dist < 0 ? 0 : 8", пример которого показан на фигуре 16. Согласно одному примеру значение указателя в битовом потоке указывает значение K.
В одном примере операция смешивания может быть реализована в виде таблицы поиска, такой как таблицы, проиллюстрированные на фигуре 17. Например, sampleWeight можно получить как geoFilter[idx], где idx получается как функция от sampleDist, а geoFilter - это одномерный линейный массив весовых коэффициентов фильтров. Например, idx=min((abs(sample_dist) + 8) >> 4, maxIdx), где maxIdx - это максимальное значение, которое может принять idx.
S105: сохранение информации о режиме предсказания (например, информации о движении, содержащей векторы движения или информации интра-предсказания) текущего блока в соответствии с разделением, которое раскрывается на этапе S101, и в соответствии со способом объединения, который раскрывается на этапе 104.
В частности, в первом варианте осуществления процесса декодирования для режима GEO-предсказания:
Этот процесс вызывается при декодировании единичного блока кодирования с MergeTriangleFlag[xCb][yCb], равным 1, или с geo_flag[xCb][yCb], равным 1.
Входные данные для этого процесса являются следующими:
местоположение яркости (xCb, yCb), указывающее верхний левый дискретный отсчет текущего блока кодирования относительно верхнего левого дискретного отсчета яркости текущего снимка,
переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетах яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетах яркости,
векторы движения яркости в mvA и mvB с точностью до 1/16 дробного дискретного отсчета,
векторы движения цветности mvCA и mvCB,
опорные индексы refIdxA и refIdxB,
флаги predListFlagA и predListFlagB списка предсказания.
Результатами этого процесса являются:
массив (cbWidth)x(cbHeight) predSamplesL дискретных отсчетов предсказания яркости,
массив (cbWidth/2)x(cbHeight/2) predSamplesCb дискретных отсчетов предсказания цветности для компонента Cb,
массив (cbWidth/2)x(cbHeight/2) predSamplesCr дискретных отсчетов предсказания цветности для компонента Cr.
Пусть predSamplesLAL и predSamplesLBL будут (cbWidth)x(cbHeight) массивами предсказываемых значений дискретных отсчетов яркости, а predSamplesLACb, predSamplesLBCb, predSamplesLACr и predSamplesLBCr будут (cbWidth/2)x(cbHeight/2) массивами предсказываемых значений дискретных отсчетов цветности.
predSamplesL, predSamplesCb и predSamplesCr получаются с помощью следующих упорядоченных этапов:
1. Для N, являющегося каждым из A и B, применяется следующее:
Опорный снимок, состоящий из упорядоченного двумерного массива refPicLNL дискретных отсчетов яркости и двух упорядоченных двумерных массивов refPicLNCb и refPicLNCr дискретных отсчетов цветности, выводится b с X, установленным равным predListFlagN, и refIdxX, установленным равным refIdxN, в качестве входных данных.
Массив predSamplesLNL выводится с расположением яркости(xCb, yCb), шириной sbWidth блока кодирования яркости, установленной равной cbWidth, высотой sbHeight блока кодирования яркости, установленной равной cbHeight, смещением mvOffset вектора движения, установленным равным (0, 0), вектором mvLX движения, установленным равным mvN, и опорным массивом refPicLXL, установленным равным refPicLNL, переменной bdofFlag, установленной в FALSE, и переменной cIdx, установленной равной 0 в качестве входных данных.
Массив predSamplesLNCb выводится с расположением яркости (xCb, yCb), шириной sbWidth блока кодирования, установленной равной cbWidth/2, высотой sbHeight блока кодирования, установленной равной cbHeight/2, смещением mvOffset вектора движения, установленным равным (0, 0), вектором mvLX движения, установленным равным mvCN, и опорным массивом refPicLXCb, установленным равным refPicLNCb, переменная bdofFlag, установленной в FALSE, и переменной cIdx, установленной равной 1 в качестве входных данных.
Массив predSamplesLNCr выводится с расположением яркости (xCb, yCb), шириной sbWidth блока кодирования, установленной равной cbWidth/2, высотой sbHeight блока кодирования, установленной равной cbHeight/2, смещением mvOffset вектора движения, установленным равным (0, 0), вектором mvLX движения, установленным равным mvCN, и опорным массивом refPicLXCr, установленным равным refPicLNCr, переменной bdofFlag, установленной в FALSE (ЛОЖЬ), и переменной cIdx, установленной равной 2, в качестве входных данных.
2. Если geo_flag[xCb][yCb] равно 1, переменные angleIdx и DistanceIdx, связанные с геометрическим разбиением, устанавливаются в соответствии со значением geo_partitioning_idx[xCb][yCb], как указано в таблице 1.
a. Запускается процесс выведения весового коэффициента дискретного отсчета для режима слияния геометрического разбиения. Входными данными для процесса являются три упорядоченных массива sampleWeightL, sampleWeightC и motionWeight размером (cbWidth)x(cbHeight), (cbWidth/2)x(cbHeight/2) и (cbWidth/4)x(cbHeight/4), соответственно, а также переменные angleIdx, DistanceIdx, cbWidth и cbHeight.
b. Дискретные отсчеты предсказания внутри текущего блока кодирования яркости, predSamplesL[xL][yL] с xL=0…cbWidth - 1 и yL=0…cbHeight - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима слияния с геометрическим разбиением с шириной nCbW блока кодирования , установленной равной cbWidth, высотой nCbH блока кодирования, установленной равной cbHeight, массивами дискретных отсчетов predSamplesLAL, predSamplesLBL, predWeightL и cIdx равными 0, в качестве входных данных.
c. Дискретные отсчеты предсказания внутри текущего блока кодирования компонента цветности Cb, predSamplesCb[xC][yC] с xC=0…cbWidth/2 - 1 и yC=0…cbHeight/2 - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима слияния геометрического разбиения с шириной nCbW блока кодирования , установленной равной cbWidth/2, высотой nCbH блока кодирования, установленной равной cbHeight/2, массивами дискретных отсчетов predSamplesLACb, predSamplesLBCb, predWeightC и cIdx равными 1, в качестве входных данных.
d. Дискретные отсчеты предсказания внутри текущего блока кодирования компонента цветности Cr, predSamplesCr[xC][yC] с xC=0…cbWidth/2 - 1 и yC=0…cbHeight/2 - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима слияния геометрического разбиения с шириной nCbW блока кодирования , установленной равной cbWidth/2, высотой nCbH блока кодирования, установленной равной cbHeight/2, массивами дискретных отсчетов predSamplesLACr, predSamplesLBCr, predWeightC и cIdx равными 2, в качестве входных данных.
e. Процесс хранения вектора движения для режима геометрического слияния вызывается с расположением блока кодирования яркости (xCb, yCb), шириной cbWidth блока кодирования яркости, высотой cbHeight блока кодирования яркости, массивом motionWeight дискретных отсчетов, векторами mvA и mvB движения яркости, опорными индексами refIdxA и refIdxB и флагами predListFlagA и predListFlagB списка предсказания в качестве входных данных.
Процесс сопоставления опорного снимка для режима треугольного слияния
Входными данными в этот процесс является следующее:
переменная X, представляющая список ссылок, равна 0 или 1,
опорный индекс refIdxN.
Результат этого процесса:
опорный индекс refIdxTemp.
Переменная refPicPoc выводится следующим образом:
refPicPoc=(X== 0) ? RefPicList[0][refIdxN] : RefPicList[1][refIdxN] (8-878)
Список опорных снимков refPicListTemp выводится следующим образом:
refPicListTemp=(X==0)?RefPicList[1]:RefPicList[0] (8-879)
Переменная refIdxTemp получается следующим образом:
Переменная mapStop устанавливается равной FALSE.
Для переменной refIdxm с m=0…NumRefIdxActive[1] - 1 применяется следующее, пока mapStop не будет равен FALSE:
refIdxTemp=(refPicListTemp[refIdxm]== refPicPoc) ? refIdxm : -1 (8-880)
mapStop=(refIdxTemp!= -1)? TRUE : FALSE (8-881)
Процесс выведения весового коэффициента дискретного отсчета для режима слияния геометрического разбиения
Входные данные для этого процесса являются следующими:
две переменные nCbW и nCbH, определяющие ширину и высоту текущего блока кодирования,
две переменные angleIdx и DistanceIdx, которые определяют значения поиска угла и расстояния для текущего режима геометрического разбиения,
(nCbW)x(nCbH) массив sampleWeightL,
(nCbW/2)x(nCbH/2) массив sampleWeightC,
(nCbW/4)x(nCbH/4) массив motionWeight.
Результатом этого процесса являются те же три массива sampleWeightL, sampleWeightC и motionWeight со значениями весовые коэффициенты для дискретного отсчета, имеющими диапазон от 0 … 8.
1. Весовые коэффициенты смешивания яркости, сохраненные в sampleWeightL для текущего режима геометрического разбиения, выводятся следующим образом:
Устанавливаются значения следующих переменных:
wIdx установлен в log2 (nCbW) - 3,
hIdx устанавливается равным log2(nCbH) - 3,
stepOffset установлен в 64,
следующие переменные устанавливаются в соответствии со сравнением (wIdx >= hIdx):
whRratio=(wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx (8-882)
wIsLargerH=(wIdx >= hIdx)? true : false (8-883)
scaleStep=(wIdx >= hIdx)? (1 << hIdx) : (1 << wIdx) (8-884)
displacementX установлено в angularIdx
displacementY установлено в (displacementX+8)% 32
angleN устанавливается равным:
angleN=angleIdx, если angleIdx >= 0 && angleIdx <=8,
angleN=16 - angleIdx, если angleIdx > 8 && angleIdx<= 16,
angleN=angleIdx - 16, если angleIdx > 16 && angleIdx <=24,
angleN=32 - angleIdx в противном случае,
далее angleN устанавливается в следующее значение, зависящее от wIsLargerH:
angleN=(wIsLargerH) ? 8 - angleN : angleN
stepDis устанавливается в соответствии со значениями whRatio и angleN, как указано в таблице 2 и далее,
stepSize=stepDis+stepOffset
rho устанавливается в следующее значение с использованием таблицы поиска, обозначенной как Dis, указанной в таблице 3:
rho=DistanceIdx*stepSize*scaleStep+nCbW*Dis[displacementX] + nCbH*Dis[displacementY] . (8-885)
Для каждого положения дискретного отсчета x=0… nCbW - 1 и y=0… nCbH - 1 значение sampleWeightL[x][y] выводится следующим образом:
расстояние distFromLine вычисляется с использованием таблицы поиска, обозначенной как Dis, указанной в таблице 3 следующим образом:
distFromLine=((x<<1) + 1)*Dis[displacementX] + ((y<<1) + 1))*Dis[displacementY] - rho. (8-886)
Масштабированное расстояние distScaled получается следующим образом:
distScaled=min((abs(distFromLine) + 8) >> 4, 14). (8-887)
Значение sampleWeightL[x][y] устанавливается в соответствии с таблицей поиска весовых коэффициентов фильтра, обозначенной как GeoFilter, указанной в
Таблице 4 как:
sampleWeightL[x][y]=GeoFilter[distScaled], если distFromLine <= 0
sampleWeightL[x][y]=8 - GeoFilter [distScaled], если distFromLine > 0
2. Весовые коэффициенты цветности, хранящиеся в sampleWeightC для текущего режима геометрического разбиения, выводятся следующим образом:
Для каждого положения дискретного отсчета x=0… (nCbW/2) - 1 и y=0… (nCbH/2) - 1 значение sampleWeightC[x][y] выводится следующим образом:
sampleWeightC[x][y]=sampleWeightL[(x<<1)][(y<<1)]
3. Весовые коэффициенты движения, хранящиеся в массиве motionWeight для текущего режима геометрического разбиения, выводятся следующим образом:
Устанавливаются следующие переменные:
threshScaler=((log2(nCbW) + log2(nCbH)) >> 1) - 1
threshLower=32 >> threshScaler
threshUpper=32 - threshLower
Для каждого положения дискретного отсчета x=0… (nCbW/4) - 1 и y=0… (nCbH/4) - 1 значение motionWeight[x][y] выводится следующим образом:
Cnt=sampleWeightL[(x<<2)][(y<<2)]
+ sampleWeightL[(x<<2) + 3][(y<<2)]
+ sampleWeightL[(x<<2)][(y<<2) + 3]
+ sampleWeightL[(x<<2) + 3][(y<<2) + 3]
Значение motionWeight[x][y] равно:
motionWeight[x][y]=0, если Cnt <= threshLower
motionWeight[x][y]=1 , если Cnt >= threshUpper
motionWeight[x][y]=2 , иначе
Процесс предсказания взвешенного дискретного отсчета для режима слияния с геометрическим разбиением
Входные данные для этого процесса являются следующими:
две переменные nCbW и nCbH, определяющие ширину и высоту текущего блока кодирования,
два массива (nCbW)x(nCbH) predSamplesLA и predSamplesLB,
Массив (nCbW)x(nCbH) sampleWeight,
переменная cIdx, указывающая индекс компонента цвета.
Результатом этого процесса является массив (nCbW)x(nCbH) pbSamples значений дискретных отсчетов предсказания.
Переменная bitDepth выводится следующим образом:
- Если cIdx равен 0, bitDepth устанавливается равной BitDepthY.
- В противном случае bitDepth устанавливается равной BitDepthC.
Переменные shift1 и offset1 выводятся следующим образом:
- Переменная shift1 устанавливается равной Max(5, 17 - bitDepth).
- Переменная offset1 устанавливается равной 1 << (shift1 - 1).
Значения дискретных отсчетов предсказания выводятся следующим образом:
pbSamples[х][у] =
Clip3(0, (1 << bitDepth) - 1,
(predSamplesLA[x][y] * sampleWeight[x][y]
+ predSamplesLB[x][y] * (8 - sampleWeight [x][y]) + offset1) >> shift1)
Хранение векторов движения для режима слияния геометрического разбиения
Этот процесс вызывается при декодировании единичного блока кодирования с geo_flag[xCb][yCb] равным 1.
Входные данные для этого процесса являются следующими:
местоположение яркости (xCb, yCb), указывающее верхний левый дискретный отсчет текущего блока кодирования относительно верхнего левого дискретного отсчета яркости текущего снимка,
переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетах яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетах яркости,
массив motionWeight размером (cbWidth/4)x(cbHeight/4), содержащий индексы назначения движения,
векторы движения яркости в mvA и mvB с точностью до 1/16 дробного дискретного отсчета,
опорные индексы refIdxA и refIdxB,
флаги predListFlagA и predListFlagB списка предсказания.
Переменные numSbX и numSbY, определяющие количество блоков 4×4 в текущем блоке кодирования по горизонтали и вертикали, устанавливаются равными numSbX=cbWidth >> 2 и numSbY=cbHeight >> 2.
Переменная minSb устанавливается равной min(numSbX, numSbY).
Переменная refIdxTempA выводится посредством вызова процесса соотнесения опорного снимка для режима треугольного слияния с X, установленным равным predListFlagA, и refIdxN, установленным равным refIdxA, в качестве входных данных.
Переменная refIdxTempB выводится посредством вызова процесса соотнесения опорного снимка для режима треугольного слияния с X, установленным равным predListFlagB, и refIdxN, установленным равным refIdxB, в качестве входных данных.
Для каждого подблока 4×4 с индексом подблока (xSbIdx, ySbIdx) с xSbIdx=0…numSbX - 1 и ySbIdx=0…numSbY - 1 применяется следующее:
Если motionWeight[xSbIdx][ySbIdx] равен 0, применяется следующее:
predFlagL0=(predListFlagA== 0) ? 1 : 0 (8-888)
predFlagL1=(predListFlagA== 0) ? 0 : 1 (8-889)
refIdxL0=(predListFlagA== 0) ? refIdxA : -1 (8-890)
refIdxL1=(predListFlagA== 0) ? -1 : refIdxA (8-891)
mvL0 [0]=(predListFlagA== 0) ? mvA[0] : 0 (8-892)
mvL0[1]=(predListFlagA== 0) ? mvA[1]: 0 (8-893)
mvL1 [0]=(predListFlagA== 0) ? 0 : mvA[0] (8-894)
mvL1[1]=(predListFlagA== 0) ? 0 : mvA[1] (8-895)
В противном случае, если motionWeight[xSbIdx][ySbIdx] равен 1, применяется следующее:
predFlagL0=(predListFlagB== 0) ? 1 : 0 (8-896)
predFlagL1=(predListFlagB== 0) ? 0 : 1 (8-897)
refIdxL0=(predListFlagB== 0) ? refIdxB : -1 (8-898)
refIdxL1=(predListFlagB== 0) ? -1 : refIdxB (8-899)
mvL0 [0]=(predListFlagB== 0) ? mvB[0] : 0 (8-900)
mvL0[1]=(predListFlagB== 0) ? mvB[1]: 0 (8-901)
mvL1 [0]=(predListFlagB== 0) ? 0 : mvB[0] (8-902)
mvL1[1]=(predListFlagB== 0) ? 0 : mvB[1] (8-903)
В противном случае (motionWeight[xSbIdx][ySbIdx] равно 2) применяется следующее:
Если predListFlagA+predListFlagB равен 1,
predFlagL0=1 (8-904)
predFlagL1=1 (8-905)
refIdxL0=(predListFlagA== 0) ? refIdxA : refIdxB (8-906)
refIdxL1=(predListFlagA== 0) ? refIdxB : refIdxA (8-907)
mvL0 [0]=(predListFlagA== 0) ? mvA[0] : mvB[0] (8-908)
mvL0[1]=(predListFlagA== 0) ? mvA[1] : mvB[1] (8-909)
mvL1 [0]=(predListFlagA== 0) ? mvB[0] : mvA[0] (8-910)
mvL1[1]=(predListFlagA== 0) ? mvB[1] : mvA[1] (8-911)
Если predListFlagA+predListFlagB равен 0, применяется следующее:
predFlagL0=1 (8-912)
predFlagL1=(refIdxTempA== -1 && refIdxTempB== -1) ? 0 : 1 (8-913)
refIdxL0=(refIdxTempB != -1) ? refIdxA : (8 914) ((refIdxTempA != -1) ? refIdxB : refIdxA)
refIdxL1=(refIdxTempB != -1) ? refIdxTempB : (8 915) ((refIdxTempA != -1) ? refIdxTempA : -1)
mvL0[0] = (refIdxTempB != -1) ? mvA[0] : (8-916) ((refIdxTempA != -1) ? mvB[0] : mvA[0])
mvL0[1] = (refIdxTempB != -1) ? mvA[1]: (8-917) ((refIdxTempA != -1) ? mvB[1] : mvA[1])
mvL1[0] = (refIdxTempB != -1) ? mvB[0] : (8-918) ((refIdxTempA != -1) ? mvA[0] : 0)
mvL1[1] = (refIdxTempB != -1) ? mvB[1]: (8-919) ((refIdxTempA != -1) ? mvA[1] : 0)
Если значение predListFlagA+predListFlagB равно 2, применяется следующее:
predFlagL0=(refIdxTempA== -1 && refIdxTempB== -1) ? 0 : 1 (8-920)
predFlagL1=1 (8-921)
refIdxL0=(refIdxTempB != -1) ? refIdxTempB : (8-922) ((refIdxTempA != -1) ? refIdxTempA : -1)
refIdxL1=(refIdxTempB != -1) ? refIdxA : (8-923) ((refIdxTempA != -1) ? refIdxB : refIdxA)
mvL0[0] = (refIdxTempB != -1) ? mvB[0] : (8-924) ((refIdxTempA != -1) ? mvA[0] : 0)
mvL0[1] = (refIdxTempB != -1) ? mvB[1]: (8-925) ((refIdxTempA != -1) ? mvA[1] : 0)
mvL1[0] = (refIdxTempB != -1) ? mvA[0] : (8-926) ((refIdxTempA != -1) ? mvB[0] : mvA[0])
mvL1[1] = (refIdxTempB != -1) ? mvA[1]: (8-927) ((refIdxTempA != -1) ? mvB[1] : mvA[1])
Для x=0..3 и y=0..3 сделаны следующие назначения:
MvL0[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=mvL0 (8-928)
MvL1[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=mvL1 (8-929)
RefIdxL0[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=refIdxL0 (8-930)
RedIdxL1[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=refIdxL1 (8-931)
PredFlagL0[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=predFlagL0 (8-932)
PredFlagL1[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=predFlagL1 (8-933)
Во втором варианте осуществления процесса декодирования для режима GEO-предсказания процесс хранения информации о движении следующий:
Разделяют блок кодирования на K модулей хранения движения, размер блока кодирования составляет MxN дискретных отсчетов яркости, например, каждый модуль хранения движения имеет одинаковый размер (M/K)x(N/K) дискретных отсчетов яркости. В одном примере значение K равно 4, значение M равно 16 и значение N равно 16. В этом примере каждый модуль хранения движения связан с подблоком яркости размером 4×4. Верхнее левое положение яркости (x, y) блока кодирования связано с верхним левым положением (x/K, y/K) блока хранения движения.
Для модуля хранения движения решают, сохранена ли первая информация о движении с уни-предсказанием, вторая информация о движении с уни-предсказанием или информация о движении с би-предсказанием, в соответствии с первым весовым коэффициентом дискретного отсчета или вторым весовым коэффициентом дискретного отсчета. В одном примере решение принимается в соответствии с расстоянием от дискретного отсчета в модуле хранения движения до разделительной границы. Дискретный отсчет может быть целочисленным или дробным. Отделительная линия определяется как разделительная линия режима геометрического разбиения. В соответствии с одним примером K равно 4 (ширина и высота модуля хранения движения с точки зрения дискретных отсчетов яркости). Пример деления блока кодирования на модуля хранения движения показан на фигуре 13.
Согласно одному примеру расстояние между дискретным отсчетом и разделительной границей можно рассчитать следующим образом: Для дискретного отсчета яркости в блоке вычисляется расстояние дискретного отсчета (sample_dist), расстояние дискретного отсчета представляет собой расстояние от дискретного отсчета яркости до отделительной линии блока.
В одном примере расстояние дискретного отсчета sample_dist вычисляется согласно формуле:
sample_dist=((x<<1)+1)*Dis[angleIdx1]+((y<<1)+1))*Dis[angleIdx2]-offset(distanceIdx).
Значение angleIdx1 и значение angleIdx2 получаются из битового потока или выводятся/вычисляются на основе другой информации, полученной из битового потока, angleIdx1 и angleIdx2 представляют собой квантованные тригонометрические параметры отделительной линии, первый из которых имеет тип косинуса, а второй - типа синуса.
x и y представляют собой координаты -x и -y дискретного отсчета относительно левой верхней дискретного отсчета блока кодирования.
offset(distanceIdx) - это значение смещения, которое является функцией значения индекса (distanceIdx), значение индекса получается из битового потока или выводится/вычисляется на основе другой информации, полученной из битового потока.
Dis[] является таблицей поиска. Dis[angleIdx1] описывает изменение расстояния дискретного отсчета (sample_dist) относительно единичного увеличения (увеличение на значение 1) в координате -x указанного дискретного отсчета. Dis[angleIdx2] описывает изменение расстояния дискретного отсчета (sample_dist) по отношению к единичному увеличению (увеличению на значение 1) координаты -y указанного дискретного отсчета.
Следует отметить, что координатор в приведенном выше примере находится в соответствии с верхним левым положением текущего блока кодирования, а не в соответствии с верхнем левым положением.
Следует отметить, что в приведенном выше примере показан способ вычисления в соответствии с целочисленной арифметикой. Варианты осуществления изобретения не ограничены этими примерами вычисления sample_dist.
Следует отметить, что в соответствии с приведенным выше примером координатор дискретного отсчета сдвигается влево на один бит ((x<<1), (y<<1)). В этом примере расчет расстояния может быть выполнен с точностью до 1/2 дискретного отсчета для целочисленной арифметики, например, может быть рассчитано положение дискретного отсчета в (0,5, 0,5).
На Фиг. 18 показан пример хранения движения 4×4 с целочисленным положением и положением в половину пикселя (дробное положение, разделительная граница и расстояние между дискретным отсчетом и разделительной границей (sample_dist).
В одном примере решение относится к тому, хранить ли первую информацию о движении с уни-предсказанием, помеченную как Mv0, вторую информацию о движении с уни-предсказанием, помеченную как Mv1, или объединенную информацию о движении, такую как информация о движении с би-предсказанием, помеченную как Mv2, осуществляется в соответствии со следующими этапами. В примере одном решение выполняется для модуля хранения движения; в другом примере решение выполняется по меньшей мере для двух (или всех) модулей хранения движения, содержащихся в блоке кодирования. Верхняя левая координата модуля хранения движения устанавливается в качестве (x/K, y/K), а ширина и высота модуля хранения движения задаются как K в дискретных отсчетах яркости.
Если вычисленное расстояние sample_dist меньше и/или равно пороговой величине, объединенная информация о движении (Mv2) сохраняется для модуля хранения движения. Пороговая величина может быть фиксированным числом, которое может быть выедено адаптивно на основе угла отделительной линии, соотношения сторон текущего блока кодирования или других параметров; в противном случае (если расстояние sample_dist больше или/и равно пороговой величине), проверяется знак sample_dist:
Если sample_dist является отрицательным (или положительным), MV0 (или MV1) сохраняются для текущего модуля хранения движения,
В противном случае (sample_dist положительно (или отрицательно)) MV1 (или MV0) сохраняются для текущего модуля хранения движения.
На Фиг. 19 показан один из примеров хранения движения на основе упомянутого способа.
По сравнению с другим способом хранения движения, этот способ требует вычисления только одного расстояния дискретного отсчета для каждого модуля хранения движения, что снижает сложность вычислений.
В третьем варианте осуществления процесс декодирования для режима GEO-предсказания, как показано на Фиг.20, выглядит следующим образом:
Для методики кодирования видео, которая допускает би-предсказание, используются два списка опорных кадров, например, List0 и List1, или список прямых опорных кадров и список обратных опорных кадров. Например, информация о движении включает в себя:
(1) Флаг предсказания L0 (PFL0) и флаг предсказания L1 (PFL1), где, когда флаг предсказания L0 имеет значение «истина» (true), List0 будет использоваться в интер-предсказании, в противном случае (флаг предсказания L0 является ложным (false)) List0 не будет использоваться. Флаг предсказания L1 аналогичен.
(2) Опорный индекс L0 (RIL0) и Опорный индекс L1 (RIL1), Опорный индекс L0 используется для указания того, какой опорный кадр (потенциально подходящий вариант) из List0 используется в качестве текущего опорного кадра. Опорный индекс L1 аналогичен. И в возможном варианте реализации Опорный Индекс L0 равен -1, что означает, что опорный кадр из списка List0 не используется.
(3) Вектор движения L0 (MVL0) и вектор движения L1 (MVL1) соответствуют List0 и List1 соответственно, и оба они имеют горизонтальную составляющую и вертикальную составляющую.
После того, как информация о движении определена для текущего блока, в возможном варианте реализации информация о движении может быть сохранена и использована в качестве опорной информации для процесса предсказания будущих блоков кодирования, например, как информация о движении для предсказания соседнего блока в пространственном предсказании или временном предсказании.
Информация о движении хранится в памяти, более конкретно, хранится в модулях хранения информации о движении в этом варианте осуществления.
Текущий блок может быть разделен на множество наборов дискретных отсчетов, при этом каждый из множества наборов дискретных отсчетов имеет тот же размер, что и набор дискретных отсчетов; или установка текущего блока в качестве набора дискретных отсчетов. Например, набор дискретных отсчетов может быть массивом дискретных отсчетов 4×4. Размер набора дискретных отсчетов также может быть 8×8, 16×16, 8×16 и т. д., что не ограничено. Каждый из множества наборов дискретных отсчетов соответствует каждому модулю хранения информации о движении, поэтому информация о движении из набора дискретных отсчетов будет храниться в соответствующем модуле хранения информации о движении. Отмечается, что существует два случая «информации о движении набора дискретных отсчетов». Случай 1: информация о движении используется для определения значения предсказания набора дискретных отсчетов; Случай 2: информация о движении назначается набору дискретных отсчетов для хранения.
Кроме того, в текущем варианте осуществления набор дискретных отсчетов является набором дискретных отсчетов яркости, а в другом варианте осуществления набор дискретных отсчетов может быть набором дискретных отсчетов цветности.
Режим GEO-предсказания представлен в предыдущем разделе. Как правило, при GEO-предсказании текущий блок состоит из первого подблока и второго подблока, первый подблок и второй подблок отделены общей границей, первый подблок соответствует первой информации о движении, а второй подблок соответствует второй информации о движении. Первый подблок и второй подблок могут быть треугольным разбиением, трапециевидным разбиением или асимметричным прямоугольным разбиением и т.д., что не ограничивается. И понятно, что, например, в треугольном разбиении каждый подблок является треугольным блоком.
Например, в текущем варианте осуществления как первая информация о движении, так и вторая информация о движении исходят из уни-предсказания. Первая информация о движении может включать в себя только RIL0, MVL0, что означает PFL0=1, PFL1=0; или может включать в себя только RIL1, MVL1, что означает PFL0=0, PFL1 =1; аналогично, вторая информация о движении может включать в себя только RIL0, MVL0, что означает PFL0=1, PFL1=0; или может включать в себя только RIL1, MVL1, что означает PFL0=0, PFL1 =1.
S201: определение углового параметра и параметра расстояния.
Общая граница определяется посредством углового параметра и параметра расстояния.
(1) В декодере:
В возможном варианте реализации выделение посредством анализа углового параметра и параметра расстояния непосредственно из битового потока.
В другом возможном варианте реализации выделение посредством анализа указателя из битового потока и получение углового параметра и параметра расстояния на основе указателя. Указатель может быть индексом, угловой параметр и параметр расстояния могут быть определены посредством проверки таблицы поиска с таким индексом. Или угловой параметр и параметр расстояния могут быть рассчитаны посредством функции, а указатель является входными данными для функции.
В другом возможном варианте реализации выделение посредством анализа двух указателей из битового потока и получение углового параметра из одного из двух указателей и параметра расстояния из другого из двух указателей.
В текущем варианте осуществления синтаксический элемент «geo_partition_idx» выделяется посредством анализа из битового потока. Угловой параметр «angleIdx» и параметр расстояния «distanceIdx» получаются посредством поиска в таблице поиска, которая определяет соотношение между «geo_partition_idx» и парой «angleIdx» и «distanceIdx». Таблица поиска, например, может быть таблицей 1.
S202: определение первого вычислительного параметра на основе углового параметра; вычисление временного углового параметра на основе углового параметра; определение второго вычислительного параметра на основе временного углового параметра; и вычисление третьего вычислительного параметра на основе углового параметра и параметра расстояния.
Первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно угловому параметру, а второй вычислительный параметр определяется посредством проверки упомянутой таблицы поиска согласно временному угловому параметру, причем первый вычислительный параметр и второй вычислительный параметр представляют собой значение косинуса и значение синуса одного и того же угла, соответственно. Понятно, что вычисления косинуса и синуса можно смоделировать и заменить способом интерполяционной таблицы, при этом сложность вычислений снижается.
В текущем варианте осуществления,
В возможном варианте реализации: Первый вычислительный параметр имеет значение Dis[angleIdx], Dis[] - это таблица поиска, например, это может быть Таблица 3.
Для временного углового параметра установлено значение (angleIdx+8)%32, предполагается, что это TempIdx.
Второй вычислительный параметр имеет значение Dis[TempIdx].
Отмечается, что теоретически Dis[angleIdx] и Dis[TempIdx] являются приблизительными значениями косинуса и синуса одного и того же угла, а угол представляет собой геометрическое соотношение между общей границей и текущим блоком.
В другом возможном варианте реализации: Первый вычислительный параметр имеет значение Dis1[angleIdx], Dis1[] - это таблица поиска, например, это может быть Таблица 3.
Второй вычислительный параметр установлен в Dis2[angleIdx], Dis2[] - это другая таблица поиска.
Следует отметить, что Dis1[angleIdx] и Dis2[angleIdx] являются приблизительными значениями косинуса и синуса одного и того же угла, а угол представляет собой геометрическое соотношение между общей границей и текущим блоком.
Третий вычислительный параметр получается следующим образом:
wIdx устанавливается равным log2(nCbW) - 3, nCbW - ширина текущего блока;
hIdx устанавливается равным log2(nCbH) - 3, nCbH - высота текущего блока;
stepOffset устанавливается равным положительному целому числу, например, равному 64.
Сравнение wIdx и hIdx:
whRratio=(wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx
wIsLargerH=(wIdx >= hIdx)? true : false
scaleStep=(wIdx >= hIdx)? (1 << hIdx) : (1 << wIdx)
Понятно, что в другом возможном варианте реализации:
whRratio=(wIdx > hIdx)? wIdx - hIdx : hIdx - wIdx
wIsLargerH=(wIdx > hIdx)? true : false
ScaleStep=(wIdx > hIdx)? (1 << hIdx) : (1 << wIdx)
angleN устанавливается равным:
angleN=angleIdx, если angleIdx >= 0 && angleIdx <=8,
angleN=16 - angleIdx, если angleIdx > 8 && angleIdx<= 16,
angleN=angleIdx - 16, если angleIdx > 16 && angleIdx <=24,
angleN=32 - angleIdx в противном случае,
Следует отметить, что в разных вариантах реализации конечные точки angleIdx 0, 8, 16, 24 могут принадлежать разным подразделам, например:
В другом возможном варианте реализации для угла N установлено значение:
angleN=angleIdx, если angleIdx > 0 && angleIdx <8,
angleN=16 - angleIdx, если angleIdx >= 8 && angleIdx< 16,
angleN=angleIdx - 16, если angleIdx > =16 && angleIdx <24,
angleN=32 - angleIdx в противном случае,
Кроме того, angleN устанавливается в следующее значение:
angleN=(wIsLargerH) ? 8 - angleN : angleN
stepDis устанавливается в соответствии со значениями whRatio и angleN, указанными в таблице поиска, например, в Таблице 2.
stepSize=stepDis+stepOffset
Третий вычислительный параметр rho устанавливается в следующее значение с использованием таблицы поиска, обозначенной как Dis, например, Таблица 3.
rho=DistanceIdx*stepSize*scaleStep+nCbW*Dis[angleIdx] + nCbH*Dis[TempIdx].
И, соответственно, в другом возможном варианте реализации третий вычислительный параметр rho может быть установлен как:
rho=DistanceIdx*stepSize*scaleStep+nCbW*Dis1 [angleIdx] + nCbH*Dis2 [angleIdx].
Отмечено, что поскольку после наличия углового параметра и параметра расстояния, можно определить первый, второй и третий вычислительный параметр. В возможном варианте реализации первый, второй и третий вычислительный параметр будут вычисляться только один раз как параметры для всех дискретных отсчетов в текущем блоке. И этапы S201 и S202 могут быть пропущены для процесса сохранения информации о движении, если первый, второй и третий вычислительный параметр текущего блока уже определены.
S203: определение расстояния между набором дискретных отсчетов в текущем блоке и общей границей.
расстояние вычисляется следующим образом:
distFromLine=(x+K)*P1+(y+K)*P2-P3,
где P1, P2 и P3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром, соответственно, distFromLine представляет расстояние, K является неотрицательным целым числом, x представляет горизонтальную координату целевого положения в наборе дискретных отсчетов, y представляет вертикальную координату целевого положения в прямоугольной системе координат, где положение верхнего левого дискретного отсчета текущего блока устанавливается в качестве начала координат, направление вправо устанавливается в качестве положительного горизонтального направления, а направление вниз устанавливается в качестве положительного вертикального направления.
В возможном варианте реализации K равно 1.
distFromLine=(x+1)*P1+(y+1)*P2-P3.
Отмечается, что расстояние между набором дискретных отсчетов в текущем блоке и общей границей, как правило, является расстоянием между целевым положением в наборе дискретных отсчетов и общей границей.
Целевое положение в наборе дискретных отсчетов является предварительно определенным. Например, предварительно определенное положение может быть верхним левым положением набора дискретных отсчетов, или центральным положением набора дискретных отсчетов, или другим положением набора дискретных отсчетов.
Следует отметить, что целевое положение может быть положением целочисленного дискретного отсчета в наборе дискретных отсчетов, и целевое положение также может быть положением дробного дискретного отсчета. Например, целевое положение может быть положением центра тяжести текущего блока. Более конкретно, в случае, при котором текущий блок является массивом дискретных отсчетов 4×4, целевое положение может быть положением с координатами (1,5, 1,5) в прямоугольной системе координат текущего варианта осуществления.
В возможном варианте реализации точность дискретного отсчета расстояния выше целочисленного дискретного отсчета. Соответственно, расстояние вычисляется следующим образом:
distFromLine=((x<<N)+ K)*P1+((y<<N)+K)*P2-P3,
где 2N представляет обратную величину точности дискретного отсчета расстояния, например, когда точность дискретного отсчета расстояния составляет половину пикселя, N равно 1, когда точность дискретного отсчета расстояния составляет 1/4 пикселя, N равно 2.
Например, расстояние вычисляется следующим образом:
distFromLine=((x<<1)+1)*Dis[angleIdx]+((y<<1)+1)*Dis[TempIdx]-rho
S204: сравнение расстояния с пороговой величиной для определения того, что третья информация о движении сохранена для набора дискретных отсчетов.
Третья информация о движении выводится из первой информации о движении и второй информации. В возможном варианте реализации третья информация о движении представляет собой объединение первой информации о движении и второй информации о движении, подобно информации о движении для би-предсказания. Более конкретно, в случае, при котором первая информация о движении включает в себя RILX_first, MVLX_first, вторая информация о движении включает в себя RILY_second, MVLY_second, где X может быть 0 или 1, а Y может быть 0 или 1, третья информация о движении может включать в себя все RILX_first, MVLX_first , RILY_second, MVLY_second, что означает PFL0=1, PFL1=1.
В другом возможном варианте реализации третья информация о движении может быть равна одной из первой информации о движении или второй информации о движении в случае, при котором и первая информация о движении, и вторая информация о движении соответствуют одному и тому же списку (List0 или List1). Например, если PFL0 равен 1, а PFL1 равен 0 как для первой, так и для второй информации о движении, третья информация о движении может быть установлена равной первой информации о движении (или второй информации о движении, в соответствии с другим вариантом реализацией). Аналогично, если PFL0 равен 0, а PFL1 равен 1 как для первой, так и для второй информации о движении, третья информация о движении может быть установлена равной первой информации о движении (или второй информации о движении, в соответствии с другим вариантом реализации).
В возможном варианте реализации пороговая величина может быть предварительно определенным значением.
В другом возможном варианте реализации пороговая величина основана на геометрическом соотношении между общей границей и горизонтальным направлением или на геометрическом соотношении между общей границей и вертикальным направлением. Более конкретно, пороговая величина основана на угле между перпендикулярным направлением общей границы и горизонтальным направлением или вертикальным направлением. А в других вариантах реализации геометрическое соотношение может включать в себя соотношение длины между общей границей и границей блока текущего блока или подблока текущего блока. В текущем варианте осуществления пороговая величина может быть получена с помощью таблицы поиска, например таблицы 5, в соответствии с углом, рассчитанным выше.
Threshold=RhoMax[angleN].
Следует отметить, что, поскольку угол N может быть определен до этапа S204, пороговая величина (Threshold) может быть определен до этапа S204 и для текущего блока.
Пороговая величина может быть также
threshLower=- RhoMax[angleN]
threshUpper=RhoMax[angleN].
В другом возможном варианте реализации пороговая величина может быть также
threshLower=- K
threshUpper=K, где K - предварительно определенное положительное число. Например, значение K может быть равно 1. В одном примере K может быть получено согласно указателю в битовом потоке.
В другом возможном варианте реализации пороговая величина основана на ширине и/или высоте текущего блока.
Следует отметить, что пороговая величина может также определяться двумя или более указанными выше условиями. Например, ширина и/или высота текущего блока может определять некоторое отношение (ratio), ratio=1<< abs(log2(width) - log2(height)), а затем это отношение используется для масштабирования пороговой величины, определяемой углом. И масштабированная пороговая величина устанавливается как окончательная пороговая величина.
Сравнения между пороговой величиной и расстоянием выполняются на следующих этапах:
S204-1: Определение, что третья информации о движении сохранена для набора дискретных отсчетов, в случае, при котором абсолютное значение расстояния меньше или равно пороговой величине;
S204-2: в случае, при котором абсолютное значение расстояния больше пороговой величины:
определение, что первая информации о движении сохранена для набора дискретных отсчетов, в случае, при котором расстояние является положительным (или отрицательным); или
определение, что вторая информация о движении сохранена для набора дискретных отсчетов, в случае, при котором расстояние является отрицательным (или положительным, в соответствии с вышеприведенным ответвлением).
Понятно, что в соответствии с другим вариантом реализации условие на этапе S204-1 также может быть в том, что абсолютное значение расстояния меньше пороговой величины, соответственно, условием на этапе S204-2 может быть то, что абсолютное значение расстояния больше или равно пороговой величине.
В другом возможном варианте реализации вычисление абсолютного значения заменяется большим количеством подразделов.
В текущем варианте осуществления то, что первая информация о движении сохранена для набора дискретных отсчетов, сохраняется в случае, при котором расстояние меньше, чем threshLower; То, что вторая информация о движении сохранена для набора дискретных отсчетов, сохраняется в случае, при котором расстояние больше, чем threshUpper; В противном случае сохраняется то, что третья информация о движении сохранена для набора дискретных отсчетов.
И понятно, что одна из первой информации о движении, второй информации о движении и третьей информации о движении хранится в модуле хранения информации о движении и соответствует набору дискретных отсчетов.
Следует отметить, что когда текущий блок может быть разделен на множество наборов дискретных отсчетов, в возможном варианте реализации вышеописанные этапы в текущем варианте осуществления используются для всех наборов дискретных отсчетов. В другом возможном варианте реализации описанные выше этапы в текущем варианте осуществления используются только для одного набора дискретных отсчетов. В другом возможном варианте реализации описанные выше этапы в текущем варианте осуществления используются по меньшей мере для двух наборов дискретных отсчетов. Для наборов дискретных отсчетов, не реализованных с помощью вышеописанных этапов, в возможном варианте реализации будет храниться информация о движении по умолчанию или информация о движении, выведенная в соответствии с предварительно определенным условием.
Следует отметить, что только значение расстояния необходимо вычислить на основе предварительно определенного модуля (функции) GEO-разбиения, параметр модуля которого можно определить на уровне CU для определения хранения информации о движении для GEO-разбиения. Сложность вычислений ограничивается.
В четвертом варианте осуществления процесса декодирования для режима GEO-предсказания:
Этот процесс вызывается при декодировании единичного блока кодирования с MergeTriangleFlag[xCb][yCb], равным 1, или с geo_flag[xCb][yCb], равным 1.
Входные данные для этого процесса являются следующими:
местоположение яркости (xCb, yCb), указывающее верхний левый дискретный отсчет текущего блока кодирования относительно верхнего левого дискретного отсчета яркости текущего снимка,
переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетах яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетах яркости,
векторы движения яркости в mvA и mvB с точностью до 1/16 дробного дискретного отсчета,
векторы mvCA и mvCB движения цветности,
опорные индексы refIdxA и refIdxB,
флаги predListFlagA и predListFlagB списка предсказания.
Результатами этого процесса являются:
массив (cbWidth)x(cbHeight) predSamplesL дискретных отсчетов предсказания яркости,
массив (cbWidth/2)x(cbHeight/2) predSamplesCb дискретных отсчетов предсказания цветности для компонента Cb,
массив (cbWidth/2)x(cbHeight/2) predSamplesCr дискретных отсчетов предсказания цветности для компонента Cr.
Пусть predSamplesLAL и predSamplesLBL будут массивами (cbWidth)x(cbHeight) предсказываемых значений дискретных отсчетов яркости, а predSamplesLACb, predSamplesLBCb, predSamplesLACr и predSamplesLBCr будут массивами (cbWidth/2)x(cbHeight/2) предсказываемых значений дискретных отсчетов цветности.
predSamplesL, predSamplesCb и predSamplesCr выводятся с помощью следующих упорядоченных этапов:
3. Для N, являющегося каждым из A и B, применяется следующее:
Опорный снимок, состоящий из упорядоченного двумерного массива refPicLNL дискретных отсчетов яркости и двух упорядоченных двумерных массивов refPicLNCb и refPicLNCr дискретных отсчетов цветности, выводится с X, установленным равным predListFlagN, и refIdxX, установленным равным refIdxN, в качестве входных данных.
Массив predSamplesLNL выводится посредством вызова процесса интерполяции дробного дискретного отсчета с местоположением яркости (xCb, yCb), шириной sbWidth блока кодирования яркости, установленной равной cbWidth, высотой sbHeight блока кодирования яркости, установленной равной cbHeight, смещением mvOffset вектора движения, установленным равным (0, 0), вектором mvLX движения, установленным равным mvN, и опорным массивом refPicLXL, установленным равным refPicLNL, переменной bdofFlag, установленой в FALSE ("ЛОЖЬ"), и переменной cIdx, установленой равной 0, в качестве входных данных.
Массив predSamplesLNCb выводится посредством вызова процесса интерполяции дробного дискретного отсчета с расположением яркости (xCb, yCb), шириной sbWidth блока кодирования, установленной равной cbWidth/2, высотой sbHeight блока кодирования, установленной равной cbHeight/2, смещением mvOffset вектора движения, установленным равным (0, 0), вектором mvLX движения, установленным равным mvCN, опорным массивом refPicLXCb, установленным равным refPicLNCb, переменной bdofFlag, установленной в FALSE, и переменная cIdx, установленной равной 1, в качестве входных данных.
Массив predSamplesLNCr выводится посредством вызова процесса интерполяции дробного дискретного отсчета с положением яркости (xCb, yCb), шириной sbWidth блока кодирования, установленной равной cbWidth/2, высотой sbHeight блока кодирования, установленной равной cbHeight/2, смещением mvOffset вектора движения, установленным равным (0, 0), вектором mvLX движения, установленным равным mvCN, опорным массивом refPicLXCr, установленным равным refPicLNCr, переменной bdofFlag, установленной в FALSE, и переменной cIdx, установленной равной 2, в качестве входных данных.
4. Если MergeTriangleFlag[xCb][yCb] равно 1, направление разбиения переменной triangleDir режима треугольного слияния устанавливается равной merge_triangle_split_dir[xCb][yCb].
a. Дискретные отсчеты предсказания внутри текущего блока кодирования яркости, predSamplesL[xL][yL] с xL=0…cbWidth - 1 и yL=0…cbHeight - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима треугольного слияния с шириной nCbW блока кодирования, устанавленной равной cbWidth, высотой nCbH блока кодирования, устанавленной равной cbHeight, массивами predSamplesLAL и predSamplesLBL дискретных отсчетов и переменными triangleDir и cIdx равными 0, в качестве входных данных.
b. Дискретные отсчеты предсказания внутри текущего блока кодирования компонента цветности Cb, predSamplesCb[xC][yC] с xC=0…cbWidth/2 - 1 и yC=0…cbHeight/2 - 1, выводтся посредством вызова процесс предсказания взвешенного дискретного отсчета для режима треугольного слияния с шириной nCbW блока кодирования , установленной равной cbWidth/2, высотой nCbH блока кодирования, установленной равной cbHeight/2, массивами predSamplesLACb и predSamplesLBCb дискртеных отсчетов, и переменными triangleDir и cIdx равными 1, в качестве входных данных.
d. Дискретные отсчеты предсказания внутри текущего блока кодирования компонента цветности Cr, predSamplesCr[xC][yC] с xC=0…cbWidth/2 - 1 и yC=0…cbHeight/2 - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима треугольного слияния с шириной nCbW блока кодирования , установленной равной cbWidth/2, высотой nCbH блока кодирования, установленной равной cbHeight/2, массивами predSamplesLACr и predSamplesLBCr дискртеных отсчетов, и переменными triangleDir и cIdx равными 2, в качестве входных данных.
d. Процесс сохранения вектора движения для режима треугольного слияния вызывается с местоположением блока кодирования яркости (xCb, yCb), шириной cbWidth блока кодирования яркости, высотой cbHeight блока кодирования яркости, направлением triangleDir разбиения, векторами mvA и mvB движения яркости, опорными индексами refIdxA и refIdxB и флагами predListFlagA и predListFlagB списка предсказания в качестве входных данных.
5. Если geo_flag[xCb][yCb] равно 1, переменные angleIdx и distanceIdx, связанные с геометрическим разбиением, устанавливаются в соответствии со значением geo_partitioning_idx[xCb][yCb], как указано в таблице 1.
a. Запускается процесс выведения весового коэффициента дискретного отсчета для режима слияния геометрического разбиения. Входными данными для процесса являются три упорядоченных массива sampleWeightL, sampleWeightC и motionWeight с размером в (cbWidth)x(cbHeight), (cbWidth/2)x(cbHeight/2) и (cbWidth/4)x(cbHeight/4), соответственно, а также переменные angleIdx, DistanceIdx, cbWidth и cbHeight.
b. Дискретные отсчеты предсказания внутри текущего блока кодирования яркости, predSamplesL[xL][yL] с xL=0..cbWidth - 1 и yL=0..cbHeight - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима слияния с геометрическим разбиением с шириной nCbW блока кодирования , установленной равной cbWidth, высотой nCbH блока кодирования, установленной равной cbHeight, массивами дискретных отсчетов predSamplesLAL, predSamplesLBL, predWeightL и cIdx равными 0, в качестве входных данных.
c. Дискретные отсчеты предсказания внутри текущего блока кодирования компонента цветности Cb, predSamplesCb[xC][yC] с xC=0..cbWidth/2 - 1 и yC=0..cbHeight/2 - 1, выводятся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима слияния геометрического разбиения с шириной nCbW блока кодирования , установленной равной cbWidth/2, высотой nCbH блока кодирования, установленной равной cbHeight/2, массивами дискретных отсчетов predSamplesLACb, predSamplesLBCb, predWeightC и cIdx равными 1, в качестве входных данных.
d. Дискретные отсчеты предсказания внутри текущего блока кодирования компонента цветности Cr, predSamplesCr[xC][yC] с xC=0..cbWidth/2 - 1 и yC=0..cbHeight/2 - 1, выводтся посредством вызова процесса предсказания взвешенного дискретного отсчета для режима слияния геометрического разбиения, как указано в п. 8.5.8.3, с шириной nCbW блока кодирования , установленной равной cbWidth/2, высотой nCbH блока кодирования, установленной равной cbHeight/2, массивами predSamplesLACr, predSamplesLBCr дискретных отсчетов, predWeightC и cIdx равными 2, в качестве входов.
e. Процесс сохранения вектора движения для режима геометрического слияния вызывается с местоположением блока кодирования яркости (xCb, yCb), шириной cbWidth блока кодирования яркости, высотой cbHeight блока кодирования яркости, массивом motionWeight дискретных отсчетов, векторами mvA и mvB движения яркости, опорными индексами refIdxA и refIdxB и флагами predListFlagA и predListFlagB списка предсказания в качестве входных данных.
Процесс соотнесения опорного снимка для режима треугольного слияния
Входными данными в этот процесс является следующее:
переменная X, представляющая список ссылок, равна 0 или 1,
опорный индекс refIdxN.
Результат этого процесса:
опорный индекс refIdxTemp.
Переменная refPicPoc выводится следующим образом:
refPicPoc=(X== 0) ? RefPicList[0][refIdxN] : RefPicList[1][refIdxN] (8-878)
Список опорных снимков refPicListTemp выводится следующим образом:
refPicListTemp=(X== 0) ? RefPicList[1] : RefPicList[0] (8-879)
Переменная refIdxTemp получается следующим образом:
Переменная mapStop устанавливается равной FALSE.
Для переменной refIdxm с m=0..NumRefIdxActive[1] - 1 применяется следующее, пока mapStop не будет равен FALSE:
refIdxTemp=(refPicListTemp[refIdxm]== refPicPoc) ? refIdxm : -1 (8-880)
mapStop=(refIdxTemp!= -1)? TRUE : FALSE (8-881)
Процесс выведения весового коэффициента дискретного отсчета для режима слияния геометрического разбиения
Входные данные для этого процесса являются следующими:
две переменные nCbW и nCbH, определяющие ширину и высоту текущего блока кодирования,
две переменные angleIdx и DistanceIdx, которые определяют значения поиска угла и расстояния для текущего режима геометрического разбиения,
(nCbW)x(nCbH) массив sampleWeightL,
(nCbW/2)x(nCbH/2) массив sampleWeightC,
(nCbW/4)x(nCbH/4) массив motionWeight.
Результатом этого процесса являются те же три массива sampleWeightL, sampleWeightC и motionWeight со значениями весовые коэффициенты для дискретного отсчета, имеющими диапазон от 0 … 8.
4. Весовые коэффициенты смешивания яркости, сохраненные в sampleWeightL для текущего режима геометрического разбиения, выводятся следующим образом:
Устанавливаются значения следующих переменных:
wIdx установлен в log2 (nCbW) - 3,
hIdx устанавливается равным log2(nCbH) - 3,
stepOffset установлен в 64,
следующие переменные устанавливаются в соответствии со сравнением (wIdx >= hIdx):
whRratio=(wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx (8-882)
wIsLargerH=(wIdx >= hIdx)? true : false (8-883)
scaleStep=(wIdx >= hIdx)? (1 << hIdx) : (1 << wIdx) (8-884)
displacementX установлено в angularIdx
displacementY установлено в (displacementX+8)% 32
angleN устанавливается равным:
angleN=angleIdx, если angleIdx >= 0 && angleIdx <=8,
angleN=16 - angleIdx, если angleIdx > 8 && angleIdx<= 16,
angleN=angleIdx - 16, если angleIdx > 16 && angleIdx <=24,
angleN=32 - angleIdx в противном случае,
далее angleN устанавливается в следующее значение, зависящее от wIsLargerH:
angleN=(wIsLargerH) ? 8 - angleN : angleN
stepDis устанавливается в соответствии со значениями whRatio и angleN, как указано в таблице 2 и далее,
stepSize=stepDis+stepOffset
rho устанавливается в следующее значение с использованием таблицы поиска, обозначенной как Dis, указанной в таблице 3:
rho=DistanceIdx*stepSize*scaleStep+nCbW*Dis[displacementX] + nCbH*Dis[displacementY] . (8-885)
Для каждого положения дискретного отсчета x=0… nCbW - 1 и y=0… nCbH - 1 значение sampleWeightL[x][y] выводится следующим образом:
расстояние distFromLine[x][y] вычисляется с использованием таблицы поиска, обозначенной как Dis, указанной в таблице 3 следующим образом:
distFromLine[x][y]=((x<<1) + 1)*Dis[displacementX] + ((y<<1) + 1))*Dis[displacementY] - rho (8-886)
Масштабированное расстояние distScaled получается следующим образом:
distScaled=min((abs(distFromLine[x][y]) + 8) >> 4, 14). (8-887)
Значение sampleWeightL[x][y] устанавливается в соответствии с таблицей поиска весовых коэффициентов фильтра, обозначенной как GeoFilter, указанной в таблице 4, как:
sampleWeightL[x][y]=GeoFilter[distScaled], если distFromLine <= 0
sampleWeightL[x][y]=8 - GeoFilter [distScaled], если distFromLine > 0
5. Весовые коэффициенты цветности, хранящиеся в sampleWeightC для текущего режима геометрического разбиения, выводятся следующим образом:
Для каждого положения дискретного отсчета x=0… (nCbW/2) - 1 и y=0… (nCbH/2) - 1 значение sampleWeightC[x][y] выводится следующим образом:
sampleWeightC[x][y]=sampleWeightL[(x<<1)][(y<<1)]
6. Весовые коэффициенты движения, хранящиеся в массиве motionWeight для текущего режима геометрического разбиения, выводятся следующим образом:
Следующие переменные устанавливаются в соответствии с таблицей 5:
threshLower=- RhoMax[angleN]
threshUpper=RhoMax[angleN].
Для каждого положения дискретного отсчета x=0… (nCbW/4) - 1 и y=0… (nCbH/4) - 1 значение motionWeight[x][y] выводится следующим образом:
Cnt=distFromLine[x*4+1][y*4+1] Значение motionWeight[x][y] устанавливается равным:
motionWeight[x][y]=0, если Cnt <= threshLower
motionWeight[x][y]=1, если Cnt >= threshUpper
motionWeight[x][y]=2 иначе
Процесс предсказания взвешенного дискретного отсчета для режима слияния с геометрическим разбиением
Входные данные для этого процесса являются следующими:
две переменные nCbW и nCbH, определяющие ширину и высоту текущего блока кодирования,
два массива (nCbW)x(nCbH) predSamplesLA и predSamplesLB,
Массив (nCbW)x(nCbH) sampleWeight,
переменная cIdx, указывающая индекс компонента цвета.
Результатом этого процесса является массив (nCbW)x(nCbH) pbSamples значений дискретных отсчетов предсказания.
Переменная bitDepth выводится следующим образом:
- Если cIdx равен 0, bitDepth устанавливается равной BitDepthY.
- В противном случае bitDepth устанавливается равной BitDepthC.
Переменные shift1 и offset1 выводятся следующим образом:
- Переменная shift1 устанавливается равной Max(5, 17 - bitDepth).
- Переменная offset1 устанавливается равной 1 << (shift1 - 1).
Значения дискретных отсчетов предсказания выводятся следующим образом:
pbSamples[х][у] =
Clip3(0, (1 << bitDepth) - 1,
(predSamplesLA[x][y] * sampleWeight[x][y]
+ predSamplesLB[x][y] * (8 - sampleWeight [x][y]) + offset1) >> shift1)
Сохранение векторов движения для режима слияния геометрического разбиения
Этот процесс вызывается при декодировании единичного блока кодирования с geo_flag[xCb][yCb] равным 1.
Входные данные для этого процесса являются следующими:
местоположение яркости (xCb, yCb), указывающее верхний левый дискретный отсчет текущего блока кодирования относительно верхнего левого дискретного отсчета яркости текущего снимка,
переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетах яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетах яркости,
массив motionWeight размером (cbWidth/4)x(cbHeight/4), содержащий индексы назначения движения,
векторы движения яркости в mvA и mvB с точностью до 1/16 дробного дискретного отсчета,
опорные индексы refIdxA и refIdxB, Data
флаги predListFlagA и predListFlagB списка предсказания.
Переменные numSbX и numSbY, определяющие количество блоков 4×4 в текущем блоке кодирования по горизонтали и вертикали, устанавливаются равными numSbX=cbWidth >> 2 и numSbY=cbHeight >> 2.
Переменная minSb устанавливается равной min(numSbX, numSbY).
Переменная refIdxTempA выводится посредством вызова процесса соотнесения опорного снимка для режима треугольного слияния, указанного в пункте 8.5.7.4, с X, установленным равным predListFlagA, и refIdxN, установленным равным refIdxA, в качестве входных данных.
Переменная refIdxTempB выводится посредством запуска процесса соотнесения опорного снимка для режима треугольного слияния, указанного в пункте 8.5.7.4, с X, установленным равным predListFlagB, и refIdxN, установленным равным refIdxB, в качестве входных данных.
Для каждого подблока 4×4 с индексом подблока (xSbIdx, ySbIdx) с xSbIdx=0..numSbX - 1 и ySbIdx=0..numSbY - 1 применяется следующее:
Если motionWeight[xSbIdx][ySbIdx] равен 0, применяется следующее:
predFlagL0=(predListFlagA== 0) ? 1 : 0 (8-888)
predFlagL1=(predListFlagA== 0) ? 0 : 1 (8-889)
refIdxL0=(predListFlagA== 0) ? refIdxA : -1 (8-890)
refIdxL1=(predListFlagA== 0) ? -1 : refIdxA (8-891)
mvL0 [0]=(predListFlagA== 0) ? mvA[0] : 0 (8-892)
mvL0[1]=(predListFlagA== 0) ? mvA[1]: 0 (8-893)
mvL1 [0]=(predListFlagA== 0) ? 0 : mvA[0] (8-894)
mvL1[1]=(predListFlagA== 0) ? 0 : mvA[1] (8-895)
В противном случае, если motionWeight[xSbIdx][ySbIdx] равен 1, применяется следующее:
predFlagL0=(predListFlagB== 0) ? 1 : 0 (8-896)
predFlagL1=(predListFlagB== 0) ? 0 : 1 (8-897)
refIdxL0=(predListFlagB== 0) ? refIdxB : -1 (8-898)
refIdxL1=(predListFlagB== 0) ? -1 : refIdxB (8-899)
mvL0 [0]=(predListFlagB== 0) ? mvB[0] : 0 (8-900)
mvL0[1]=(predListFlagB== 0) ? mvB[1]: 0 (8-901)
mvL1 [0]=(predListFlagB== 0) ? 0 : mvB[0] (8-902)
mvL1[1]=(predListFlagB== 0) ? 0 : mvB[1] (8-903)
В противном случае (motionWeight[xSbIdx][ySbIdx] равно 2) применяется следующее:
Если predListFlagA+predListFlagB равен 1,
predFlagL0=1 (8-904)
predFlagL1=1 (8-905)
refIdxL0=(predListFlagA== 0) ? refIdxA : refIdxB (8-906)
refIdxL1=(predListFlagA== 0) ? refIdxB : refIdxA (8-907)
mvL0 [0]=(predListFlagA== 0) ? mvA[0] : mvB[0] (8-908)
mvL0[1]=(predListFlagA== 0) ? mvA[1] : mvB[1] (8-909)
mvL1 [0]=(predListFlagA== 0) ? mvB[0] : mvA[0] (8-910)
mvL1[1]=(predListFlagA== 0) ? mvB[1] : mvA[1] (8-911)
Если predListFlagA+predListFlagB равен 0, применяется следующее:
predFlagL0=1 (8-912)
predFlagL1=(refIdxTempA== -1 && refIdxTempB== -1) ? 0 : 1 (8-913)
refIdxL0=(refIdxTempB != -1) ? refIdxA : (8-914) ((refIdxTempA != -1) ? refIdxB : refIdxA)
refIdxL1=(refIdxTempB != -1) ? refIdxTempB : (8-915) ((refIdxTempA != -1) ? refIdxTempA : -1)
mvL0[0] = (refIdxTempB != -1) ? mvA[0] : (8-916) ((refIdxTempA != -1) ? mvB[0] : mvA[0])
mvL0[1] = (refIdxTempB != -1) ? mvA[1]: (8-917) ((refIdxTempA != -1) ? mvB[1] : mvA[1])
mvL1[0] = (refIdxTempB != -1) ? mvB[0] : (8-918) ((refIdxTempA != -1) ? mvA[0] : 0)
mvL1[1] = (refIdxTempB != -1) ? mvB[1]: (8-919) ((refIdxTempA != -1) ? mvA[1] : 0)
Если значение predListFlagA+predListFlagB равно 2, применяется следующее:
predFlagL0=(refIdxTempA== -1 && refIdxTempB== -1) ? 0 : 1 (8-920)
predFlagL1=1 (8-921)
refIdxL0=(refIdxTempB != -1) ? refIdxTempB : (8-922) ((refIdxTempA != -1) ? refIdxTempA : -1)
refIdxL1=(refIdxTempB != -1) ? refIdxA : (8-923) ((refIdxTempA != -1) ? refIdxB : refIdxA)
mvL0[0] = (refIdxTempB != -1) ? mvB[0] : (8-924) ((refIdxTempA != -1) ? mvA[0] : 0)
mvL0[1] = (refIdxTempB != -1) ? mvB[1]: (8-925) ((refIdxTempA != -1) ? mvA[1] : 0)
mvL1[0] = (refIdxTempB != -1) ? mvA[0] : (8-926) ((refIdxTempA != -1) ? mvB[0] : mvA[0])
mvL1[1] = (refIdxTempB != -1) ? mvA[1]: (8-927) ((refIdxTempA != -1) ? mvB[1] : mvA[1])
Для x=0..3 и y=0..3 сделаны следующие назначения:
MvL0[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=mvL0 (8-928)
MvL1[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=mvL1 (8-929)
RefIdxL0[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=refIdxL0 (8-930)
RedIdxL1[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=refIdxL1 (8-931)
PredFlagL0[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=predFlagL0 (8-932)
PredFlagL1[(xSbIdx << 2) + x][(ySbIdx << 2) + y]=predFlagL1 (8-933)
В альтернативном варианте реализации этапа 6 «Процесс выведения весового коэффициента дискретного отсчета для режима слияния геометрического разбиения» может быть реализован следующим образом:
6. Весовые коэффициенты движения, хранящиеся в массиве motionWeight для текущего режима геометрического разбиения, выводятся следующим образом:
Следующие переменные устанавливаются в соответствии с таблицей 5:
threshLower=- RhoMax[angleN]
threshUpper=RhoMax[angleN].
Для каждого положения дискретного отсчета x=0... (nCbW/4) - 1 и y=0… (nCbH/4) - 1 значение motionWeight[x][y] выводится следующим образом:
Cnt=((x<<4) + 3)*Dis[смещениеХ] + ((y<<4) + 3))*Dis[смещениеY] - rho<<1
Значение motionWeight[x][y] равно:
motionWeight[x][y]=0, если Cnt <= threshLower
motionWeight[x][y]=1, если Cnt >= threshUpper
motionWeight[x][y]=2 иначе
В приведенной выше примерной реализации этапа 6 «Процесс выведения весового коэффициента дискретного отсчета для режима слияния геометрического разбиения» уравнение "Cnt=((x<<4) + 3)*Dis[displacementX] + ((y<<4) + 3))*Dis[displacementY] - rho<<1” соответствует вычислению расстояния между центром тяжести набора дискретных отсчетов и линией. Набор дискретных отсчетов в этом примере состоит из 16 дискретных отсчетов со следующими координатами:
(х*4,у*4), (х*4+1,у*4), (х*4+2,у*4), (х*4+3,у*4), (х*4,у*4+1), (х*4+1,у*4+1), (х*4+2,у*4+1), (х*4+3,у*4+1), (х*4,у*4+2), (х*4+1,у*4+2), (х*4+2,у*4+2), (х*4+3,у*4 +2), (х*4,у*4+3), (х*4+1,у*4+3), (х*4+2,у*4+3), (х*4+3,у*4+3).
Координаты центра тяжести (x*4+1,5,y*4+1,5). В приведенном выше уравнении все аддитивные члены уравнения умножаются на 2, чтобы сделать смещения координат 1,5 целочисленными (следовательно, 3 в этом примере), поскольку целочисленная арифметика является желательной функцией реализации.
В пятом варианте осуществления устройство для хранения информации о движении, как показано на Фиг.21, выглядит следующим образом:
Устройство (3000) хранения информации о движении, при этом текущий блок состоит из первого подблока и второго подблока, первый подблок и второй подблок отделены общей границей, первый подблок соответствует первой информации о движении, и второй подблок соответствует второй информации о движении, при этом устройство (3000) содержит: модуль вычисления (3001), выполненный с возможностью определения расстояния между набором дискретных отсчетов в текущем блоке и общей границей; и модуль (3002) сравнения, выполненный с возможностью сравнения расстояния с пороговой величиной для определения того, что третья информация о движении сохранена для набора дискретных отсчетов, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении.
В возможном варианте реализации, в котором модуль сравнения (3002) выполнен с возможностью:
определять, что третья информация о движении сохранена для набора дискретных отсчетов, в случае, при котором абсолютное значение расстояния меньше или равно пороговой величине.
В возможном варианте реализации, в котором в случае, при котором абсолютное значение расстояния больше пороговой величины, модуль сравнения (3002) дополнительно выполнен с возможностью: определять, что первая информация о движении сохранена для набора дискретных отсчетов, в случае, при котором расстояние является положительным; или определить, что вторая информация о движении сохранена для набора дискретных отсчетов, в случае, при котором расстояние является отрицательным.
В возможном варианте реализации пороговая величина является предварительно определенной.
В возможном варианте реализации пороговая величина основана на геометрическом соотношении между общей границей и горизонтальным направлением или вертикальным направлением.
В возможном варианте реализации пороговая величина основана на угле между перпендикулярным направлением общей границы и горизонтальным направлением или вертикальным направлением.
В возможном варианте реализации пороговая величина основана на ширине и/или высоте текущего блока.
В возможном варианте реализации, в котором общая граница определяется посредством углового параметра и параметра расстояния, модуль вычисления (3001) дополнительно выполнен с возможностью: определения углового параметра и параметра расстояния.
В возможном варианте реализации, в котором в декодере модуль вычисления (3001) дополнительно выполнен с возможностью: выделения посредством анализа углового параметра и параметра расстояния из битового потока; или выделения посредством анализа указателя из битового потока и получения углового параметра и параметра расстояния на основе указателя.
В возможном варианте реализации модуль (3001) вычисления дополнительно выполнен с возможностью: определения первого вычислительного параметра на основе углового параметра; вычисления временного углового параметра на основе углового параметра; определения второго вычислительного параметра на основе временного углового параметра; и вычисления третьего вычислительного параметра на основе углового параметра и параметра расстояния.
В возможном варианте реализации, в котором первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно угловому параметру, а второй вычислительный параметр определяется посредством проверки упомянутой таблицы поиска согласно временному угловому параметру, и в котором первый вычислительный параметр и второй вычислительный параметр являются значением косинуса и значением синуса одного и того же угла, соответственно.
В возможном варианте реализации расстояние вычисляется следующим образом:
distFromLine=(x+K)*P1+(y+K)*P2-P3,
где P1, P2 и P3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром, соответственно, distFromLine представляет расстояние, K является неотрицательным целым числом, x представляет горизонтальную координату целевого положения в наборе дискретных отсчетов, y представляет вертикальную координату целевого положения в прямоугольной системе координат, где положение верхнего левого дискретного отсчета текущего блока устанавливается в качестве начала координат, направление вправо устанавливается в качестве положительного горизонтального направления, а направление вниз устанавливается в качестве положительного вертикального направления.
В возможном варианте реализации, где K равно 1.
В возможном варианте реализации, в котором целевое положение предварительно определено в наборе дискретных отсчетов.
В возможном варианте реализации, в котором предварительно определенное положение является верхним левым положением набора дискретных отсчетов или центральным положением набора дискретных отсчетов.
В возможном варианте реализации, в котором точность дискретного отсчета расстояния выше целочисленного дискретного отсчета;
соответственно, расстояние вычисляется следующим образом:
distFromLine=((x<<N)+ K)*P1+((y<<N)+K)*P2-P3,
где 2N представляет обратную величину точности дискретного отсчета расстояния.
В возможном варианте реализации, где N равно 1.
В возможном варианте реализации набор дискретных отсчетов является набором дискретных отсчетов яркости текущего блока.
В возможном варианте реализации, в котором устройство (3000) дополнительно содержит модуль (3003) разделения, выполненный с возможностью: разделения текущего блока на множество наборов дискретных отсчетов, при этом каждый из множества наборов дискретных отсчетов имеет тот же размер, что и набор дискретных отсчетов; или установки текущего блока в качестве набора дискретных отсчетов.
В возможном варианте реализации набор дискретных отсчетов является массивом дискретных отсчетов 4×4.
В возможном варианте реализации, в котором каждый из множества наборов дискретных отсчетов соответствует каждому модулю хранения информации о движении, модуль хранения информации о движении используется для хранения одной из первой информации о движении, второй информации о движении и третьей информации о движении.
В возможном варианте реализации первый подблок и второй подблок являются треугольным разбиением, трапециевидным разбиением или асимметричным прямоугольным разбиением.
В возможном варианте реализации, в котором первая информация о движении содержит информацию о движении на основе первого списка опорных снимков, вторая информация о движении содержит информацию о движении на основе второго списка опорных снимков, и третья информация о движении содержит первую информацию о движении и вторую информация о движении.
В шестом варианте осуществления устройство для декодирования видеопотока включает в себя процессор и память, при этом в памяти хранятся инструкции, которые предписывают процессору выполнять способ согласно любому варианту реализации третьего варианта осуществления.
В седьмом варианте осуществления устройство для кодирования видеопотока включает в себя процессор и память, при этом в памяти хранятся инструкции, которые предписывают процессору выполнять способ согласно любому варианту реализации третьего варианта осуществления.
В восьмом варианте осуществления машиночитаемый носитель данных, на котором сохранены инструкции, которые, при их исполнении, предписывают одному или более процессорам обеспечивать кодирования видеоданных, при этом инструкции предписывают одному или более процессорам выполнять способ согласно любому варианту реализации третьего варианта осуществления.
В девятом варианте осуществления компьютерная программа содержит программный код для выполнения способа согласно любому варианту реализации третьего варианта осуществления при ее исполнении на компьютере.
Ниже приводится объяснение применений способа кодирования, а также способа декодирования, как показано в вышеупомянутых вариантах осуществления, и системы, использующей их.
Фиг.22 - это блок-схема, показывающая систему 3100 предоставления контента для реализации службы распространения контента. Эта система 3100 предоставления контента включает в себя устройство 3102 захвата, терминальное устройство 3106 и, в необязательном порядке, включает в себя дисплей 3126. Устройство 3102 захвата обменивается данными с терминальным устройством 3106 по линии 3104 связи. Линия связи может включать в себя канал 13 связи, описанный выше. Линия 3104 связи включает в себя, помимо прочего, WIFI, Ethernet, кабель, беспроводную связь (3G/4G/5G), USB или любое их сочетание и т.п.
Устройство 3102 захвата генерирует данные и может кодировать данные способом кодирования, как показано в приведенных выше вариантах осуществления. В качестве альтернативы устройство 3102 захвата может распространять данные на сервер потоковой передачи (не показан на фигурах), и сервер кодирует данные и передает кодированные данные на терминальное устройство 3106. Устройство 3102 захвата включает в себя, помимо прочего, камеру, смартфон или планшет, компьютер или портативный компьютер, систему видеоконференцсвязи, PDA, установленное на транспортном средстве устройство или сочетание любого из них или тому подобное. Например, устройство 3102 захвата может включать в себя устройство-источник 12, как описано выше. Когда данные включают в себя видео, видеокодер 20, включенный в устройство 3102 захвата, может фактически выполнять обработку кодирования видео. Когда данные включают в себя звук (то есть голос), аудиокодер, включенный в устройство 3102 захвата, может фактически выполнять обработку кодирования звука. Для некоторых практических сценариев устройство 3102 захвата распределяет кодированные видео- и аудиоданные, мультиплексируя их вместе. Для других практических сценариев, например, в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. Устройство 3102 захвата отдельно распределяет кодированные аудиоданные и кодированные видеоданные на терминальное устройство 3106.
В системе 3100 предоставления контента терминальное устройство 310 принимает и воспроизводит кодированные данные. Терминальное устройство 3106 может быть устройством с возможностью приема и восстановления данных, таким как смартфон или планшет 3108, компьютер или ноутбук 3110, сетевой видеорегистратор (NVR)/цифровой видеорегистратор (DVR) 3112, телевизор 3114, телеприставка (STB) 3116, система 3118 видеоконференцсвязи, система 3120 видеонаблюдения, персональный цифровой помощник (PDA) 3122, установленное в транспортном средстве устройство 3124, или их сочетание, или подобное, способное декодировать вышеупомянутые кодированные данные. Например, терминальное устройство 3106 может включать в себя устройство-получатель 14, как описано выше. Когда кодированные данные включают в себя видео, видеодекодеру 30, включенному в терминальное устройство, отдается приоритет для выполнения декодирования видео. Когда кодированные данные включают в себя звук, аудиодекодер, включенный в терминальное устройство, получает приоритет для выполнения обработки декодирования звука.
Для терминального устройства с дисплеем, например смартфона или планшета 3108, компьютера или ноутбука 3110, сетевого видеорегистратора (NVR)/цифрового видеорегистратора (DVR) 3112, телевизора 3114, персонального цифрового помощника (PDA) 3122 или установленное в транспортном средстве устройство 3124, терминальное устройство может передавать декодированные данные на свой дисплей. Для терминального устройства, не оборудованного дисплеем, например STB 3116, системы 3118 видеоконференцсвязи или системы 3120 видеонаблюдения, в нем устанавливается контакт с внешним дисплеем 3126 для приема и отображения декодированных данных.
Когда каждое устройство в этой системе выполняет кодирование или декодирование, может использоваться устройство кодирования снимка или устройство декодирования снимка, как показано в вышеупомянутых вариантах осуществления.
Фиг.23 - схема, показывающая структуру примера терминального устройства 3106. После того, как терминальное устройство 3106 принимает поток от устройства 3102 захвата, модуль 3202 обработки протокола анализирует протокол передачи потока. Протокол включает в себя, помимо прочего, протокол потоковой передачи в реальном времени (RTSP), протокол передачи гипертекста (HTTP), протокол потоковой передачи в реальном времени HTTP (HLS), MPEG-DASH, транспортный протокол в реальном времени (RTP), протокол обмена сообщениями в реальном времени (RTMP), или любое их сочетание или тому подобное.
После того, как модуль 3202 обработки протокола обработает поток, создается файл потока. Файл выводится в модуль 3204 демультиплексирования. Модуль 3204 демультиплексирования может разделять мультиплексированные данные на кодированные аудиоданные и кодированные видеоданные. Как описано выше, для некоторых практических сценариев, например в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. В этой ситуации кодированные данные передаются на видеодекодер 3206 и аудиодекодер 3208 без использования модуля 3204 демультиплексирования.
Посредством обработки демультиплексирования генерируются элементарный поток (ES) видео, ES аудио и, в необязательном порядке, субтитры. Видеодекодер 3206, который включает в себя видеодекодер 30, как объяснено в вышеупомянутых вариантах осуществления, декодирует видео ES с помощью способа декодирования, как показано в вышеупомянутых вариантах осуществления, для генерации видеокадра и подает эти данные в модуль 3212 синхронизации. Аудиодекодер 3208 декодирует аудио ES для генерации аудиокадра и подает эти данные в модуль 3212 синхронизации. В качестве альтернативы видеокадр может сохраняться в буфере (не показан на Фиг.23) перед подачей его в модуль 3212 синхронизации. Точно так же аудиокадр может сохраняться в буфере (не показан на Фиг.23) перед подачей его в модуль 3212 синхронизации.
Модуль 3212 синхронизации синхронизирует видеокадр и аудиокадр и подает видео/аудио на видео/аудио дисплей 3214. Например, модуль 3212 синхронизации синхронизирует представление видео и аудио информации. Информация может закодироваться в синтаксисе с использованием меток времени, касающихся представления кодированных аудио- и визуальных данных, и меток времени, касающихся доставки самого потока данных.
Если субтитры включены в поток, декодер 3210 субтитров декодирует субтитры и синхронизирует их с видеокадром и звуковым кадром и передает видео/аудио/субтитры на дисплей 3216 видео/аудио/субтитров.
Настоящая заявка не ограничивается вышеупомянутой системой, и либо устройство кодирования снимка, либо устройство декодирования снимка в вышеупомянутых вариантах осуществления может быть включено в другую систему, например, автомобильную систему.
Математические операторы
Математические операторы, используемые в настоящей заявке, аналогичны тем, которые используются в языке программирования C. Однако результаты операций целочисленного деления и арифметического сдвига определяются более точно, а также определяются дополнительные операции, такие как возведение в степень и деление с действительным знаком. Правила нумерации и подсчета обычно начинаются с 0, например, «первый» эквивалентен 0-му, «второй» эквивалентен 1-му и т.д.
Арифметические операторы
Следующие арифметические операторы определены следующим образом:
Логические операторы
Следующие логические операторы определены следующим образом:
x && y Булево логическое "и" для x и y
х || y Булево логическое "или" для x и y
! Булево логическое «не»
x?y:z Если x равен ИСТИНЕ или не равен 0, вычисляется значение y; в противном случае вычисляется значение z.
Операторы отношения
Следующие операторы отношения определены следующим образом:
> Больше чем
>= Больше или равно
< Менее чем
<= Меньше или равно
== Равно
!= Не равно
Когда оператор отношения применяется к элементу или переменной синтаксиса, которой присвоено значение «na» (не применимо), значение «na» обрабатывается как отдельное значение для элемента или переменной синтаксиса. Значение «na» не считается равным любому другому значению.
Побитовые операторы
Следующие побитовые операторы определены следующим образом:
& Побитовое "и". При работе с целочисленными аргументами оперирует дополнительным до двух представлением целочисленного значения. При работе с двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется посредством добавления более значимых битов, равных 0.
| Побитовое "или". При работе с целочисленными аргументами оперирует дополнительным до двух представлением целочисленного значения. При работе с двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется посредством добавления более значимых битов, равных 0.
^ Побитовое «исключающее ИЛИ». При работе с целочисленными аргументами оперирует дополнительным до двух представлением целочисленного значения. При работе с двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется посредством добавления более значимых битов, равных 0.
x >> y Арифметический сдвиг вправо целочисленного представления x с двоичным дополнением на y двоичных цифр. Эта функция определена только для неотрицательных целых значений y. Биты, сдвинутые в старшие значащие биты (MSB) в результате сдвига вправо, имеют значение, равное MSB x до операции сдвига.
x << y Арифметический сдвиг влево целочисленного представления x с дополнением до двух на y двоичных цифр. Эта функция определена только для неотрицательных целых значений y. Биты, сдвинутые в младшие значащие биты (LSB) в результате сдвига влево, имеют значение, равное 0.
Операторы присваивания
Следующие арифметические операторы определены следующим образом:
= Оператор присваивания
++ Приращение, т.е. x++ эквивалентно x=x+1; при использовании в индексе массива оценивается в значение переменной до операции приращения.
-- Уменьшение, т.е. x-- эквивалентно x=x-1; при использовании в индексе массива оценивает значение переменной до операции уменьшения.
+= Приращение на указанную величину, т.е. x+=3 эквивалентно x=x+3, а x+=(-3) эквивалентно x=x+(-3).
-= Уменьшение на указанную величину, т.е. x-=3 эквивалентно x=x-3, а x-=(-3) эквивалентно x=x-(-3).
Обозначение диапазона
Следующее обозначение используется для указания диапазона значений:
x=y..z x принимает целочисленные значения от y до z, включительно, где x, y и z являются целыми числами, и z больше y.
Математические функции
Определены следующие математические функции:
Abs(x)=
Asin(x) тригонометрическая функция арксинуса, работающая с аргументом x, который находится в диапазоне от -1,0 до 1,0 включительно, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах счисления радиан.
Atan(x) тригонометрическая функция арктангенса, работающая с аргументом x, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах счисления радиан.
Ceil(x) наименьшее целое число, большее или равное x.
Clip1Y(x)=Clip3(0, (1 << BitDepthY) - 1, x)
Clip1C(x)=Clip3(0, (1 << BitDepthC) - 1, x)
Cos(x) тригонометрическая функция косинуса, работающая с аргументом x в единицах счисления радиан.
Floor(x) наибольшее целое количество, меньшее или равное x.
Ln(x) натуральный логарифм x (логарифм по основанию e, где e - постоянная основания натурального логарифма 2,781 281 828…).
Log2(x) логарифм x по основанию 2.
Log10(x) логарифм x по основанию 10.
Min(x, y)=
Max(x, y)=
Round(x)=Sign(x)*Floor(Abs(x)+)
Sign(x)=
Sin(x) тригонометрическая функция синуса, работающая с аргументом x в единицах счисления радиан.
Sqrt(x)=
Swap(x, y)=(y, x)
Tan(x) тригонометрическая функция тангенса, работающая с аргументом x в единицах счисления радиан.
Порядок приоритетности операций
Когда порядок приоритетности в выражении явно не указан с помощью круглых скобок, применяются следующие правила:
- Операции с более высоким приоритетом оцениваются перед любой операцией с более низким приоритетом.
- Операции с одинаковым приоритетом оцениваются последовательно слева направо.
В таблице ниже указан приоритет операций от наивысшего к низшему; более высокая позиция в таблице указывает на более высокий приоритет.
Для тех операторов, которые также используются в языке программирования C, порядок приоритетности, используемый в этом описании, является таким же, что и в языке программирования C.
Текстовое описание логических операций
В тексте определение логических операций, которое математически бы описывалось в следующей форме:
если(условие 0)
утверждение 0
иначе если(условие 1)
утверждение 1
…
иначе /* информативный комментарий по оставшемуся условию */
утверждение n
может быть описано следующим образом:
… как указано ниже / … применяется следующее:
- Если условие 0, утверждение 0
- Иначе, Если условие 1, утверждение 1
- …
- Иначе (информативный комментарий по оставшемуся условию), утверждение n.
Каждое утверждение «Если … Иначе, Если … Иначе, …» в тексте вводится словами «… как указано ниже» или «…применяется следующее», за которым сразу следует «Если …». Последним условием «Если … Иначе Если … Иначе, …» всегда является «Иначе, …». Чередование определений «Если … Иначе Если … Иначе, …» может быть идентифицировано посредством сопоставления «… как указано ниже» или «… применяется следующее» с завершающим «Иначе, …».
В тексте утверждение логических операций, которое математически бы описывалось в следующей форме:
если(условие 0a && условие 0b)
утверждение 0
иначе если(условие 1a | | условие 1b)
утверждение 1
…
иначе
утверждение n
может быть описано следующим образом:
… как указано ниже / … применяется следующее:
-- Если все из следующих условий истинны, утверждение 0:
- условие 0a
- условие 0b
- Иначе, если истинными являются одно или более из следующих условий, утверждение 1:
- условие 1a
- условие 1b
- …
- Иначе, утверждение n
В тексте утверждение логических операций, которое математически бы описывалось в следующей форме:
если(условие 0)
утверждение 0
если(условие 1)
утверждение 1
может быть описано следующим образом:
Когда условие 0, утверждение 0
Когда условие 1, утверждение 1.
Варианты осуществления, например кодера 20 и декодера 30, а также описанные в данном документе функции, например применительно к кодеру 20 и декодеру 30 могут быть реализованы аппаратным обеспечением, программным обеспечением, встроенным программным обеспечением или любым их сочетанием. Если реализованы в программном обеспечении, функции могут храниться на машиночитаемом носителе или передаваться по среде связи в виде одной или более инструкций или кода выполняться аппаратным блоком обработки. Машиночитаемый носитель может включать в себя машиночитаемый носитель данных, который соответствует материальному носителю, например носителю данных, или среде передачи, включая в себя любой носитель, который облегчает передачу компьютерной программы из одного места в другое, например, в соответствии с протоколом связи. Таким образом, машиночитаемые носители обычно могут соответствовать (1) материальным машиночитаемым носителям данных, которые являются долговременными, или (2) средам передачи, таким как сигнал или несущая волна. Носители данных могут быть любыми доступными носителями, к которым может получить доступ один или более компьютеров или один или более процессоров для извлечения инструкций, кода и/или структур данных для реализации методик, описанных в этом раскрытии. Компьютерный программный продукт может включать в себя машиночитаемый носитель.
В качестве примера, но не ограничений, такие машиночитаемые носители данных могут содержать RAM, ROM, EEPROM, CD-ROM или другое запоминающее устройство на оптическом диске, запоминающее устройство на магнитном диске или другие магнитные запоминающие устройства, флэш-память или любой другой носитель, который может использоваться для хранения желаемого программного кода в форме инструкций или структур данных и может быть доступен для компьютера. Кроме того, любое соединение правильно называть машиночитаемым носителем. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасный порт, радио и микроволновая печь, тогда коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасный порт, радио и микроволновая связь, включены в определение носителя. Однако следует понимать, что машиночитаемые носители данных и носители данных не включают в себя соединения, несущие волны, сигналы или другие временные носители, а вместо этого направлены на долговременные материальные носители данных. Диск и диск, используемые здесь, включают компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискету и диск Blu-ray, где диски обычно воспроизводят данные магнитным способом, а диски воспроизводят данные оптически с помощью лазеров. Объединения вышеперечисленного также должны быть включены в объем машиночитаемых носителей.
Инструкции могут выполняться одним или более процессорами, такими как один или более процессоров цифровых сигналов (DSP), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые логические матрицы (FPGA) или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин «процессор», используемый здесь, может относиться к любой из вышеупомянутой структуры или любой другой структуре, подходящей для реализации описанных здесь методик. Кроме того, в некоторых аспектах описанные здесь функциональные возможности могут быть предоставлены в рамках выделенных аппаратных и/или программных модулей, сконфигурированных для кодирования и декодирования или включенных в объединенный кодек. Кроме того, методики могут быть полностью реализованы в одной или более схемах или логических элементах.
Методики этого раскрытия могут быть реализованы в большом количестве устройств или устройств, включая беспроводной телефон, интегральную схему (IC) или набор IC (например, набор микросхем). В этом раскрытии описаны различные компоненты, модули или блоки, чтобы подчеркнуть функциональные аспекты устройств, сконфигурированных для выполнения раскрытых технологий, но не обязательно требующих реализации различными аппаратными блоками. Скорее, как описано выше, различные блоки могут быть объединены в аппаратный блок кодека или предоставлены набором взаимодействующих аппаратных блоков, включая один или более процессоров, как описано выше, в сочетании с подходящим программным обеспечением и/или встроенным программным обеспечением.
Положение 1. Способ хранения информации о движении, в котором текущий блок состоит из первого подблока и второго подблока, первый подблок и второй подблок отделены общей границей, первый подблок соответствует первой информации о движении, а второй подблок соответствует второй информации о движении, при этом способ содержит этапы, на которых:
определяют расстояние между набором дискретных отсчетов в текущем блоке и общей границей; и
сравнивают расстояние с пороговой величиной для определения того, сохранена ли третья информация о движении для набора дискретных отсчетов, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении.
Положение 2. Способ согласно Положению 1, в котором сравнение расстояния с пороговой величиной для определения того, сохранена ли третья информация о движении для набора дискретных отсчетов, содержит этап, на котором определяют, что третья информация о движении сохранена для набора дискретных отсчетов в случае, в котором абсолютное значение расстояния меньше или равно пороговой величине.
Положение 3. Способ согласно Положению 2, при этом в случае, в котором абсолютное значение расстояния больше пороговой величины, способ дополнительно содержит этапы, на которых:
определяют, что первая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является положительным; или
определяют, что вторая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является отрицательным.
Положение 4. Способ согласно любому одному из Положений 1-3, в котором пороговая величина является предварительно определенной.
Положение 5. Способ согласно любому одному из Положений 1-4, в котором пороговая величина основана на геометрическом соотношении между общей границей и горизонтальным направлением или вертикальным направлением.
Положение 6. Способ согласно Положению 5, в котором пороговая величина основана на угле между перпендикулярным направлением общей границы и горизонтальным направлением или вертикальным направлением.
Положение 7. Способ согласно любому одному из Положений 1-6, в котором пороговая величина основана на ширине и/или высоте текущего блока.
Положение 8. Способ согласно любому одному из Положений 1-7, в котором общая граница определяется посредством углового параметра и параметра расстояния, при этом перед определением расстояния между набором дискретных отсчетов в текущем блоке и общей границей способ дополнительно содержит этап, на котором определяют угловой параметр и параметр расстояния.
Положение 9. Способ согласно Положению 8, в котором в декодере определение углового параметра и параметра расстояния содержит этапы, на которых:
выделяют посредством анализа угловой параметр и параметр расстояния из битового потока; или
выделяют посредством анализа указатель из битового потока, и
получают угловой параметр и параметр расстояния на основе указателя.
Положение 10. Способ согласно Положению 8 или 9, при этом после определения углового параметра и параметра расстояния способ дополнительно содержит этапы, на которых:
определяют первый вычислительный параметр на основе углового параметра;
вычисляют временный угловой параметр на основе углового параметра;
определяют второй вычислительный параметр на основе временного углового параметра; и
вычисляют третий вычислительный параметр на основе углового параметра и параметра расстояния.
Положение 11. Способ согласно Положению 10, в котором первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно угловому параметру, и второй вычислительный параметр определяется посредством проверки упомянутой таблицы поиска согласно временному угловому параметру, при этом первый вычислительный параметр и второй вычислительный параметр являются значением косинуса и значением синуса одного и того же угла, соответственно.
Положение 12. Способ согласно Положению 10 или 11, в котором расстояние вычисляется следующим образом:
distFromLine=(x+K)*P1+(y+K)*P2-P3,
где P1, P2 и P3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром, соответственно, distFromLine представляет расстояние, K является неотрицательным целым числом, x представляет горизонтальную координату целевого положения в наборе дискретных отсчетов, y представляет вертикальную координату целевого положения в прямоугольной системе координат, где Положение верхнего левого дискретного отсчета текущего блока устанавливается в качестве начала координат, направление вправо устанавливается в качестве положительного горизонтального направления, а направление вниз устанавливается в качестве положительного вертикального направления.
Положение 13. Способ согласно Положению 12, в котором K равно 1.
Положение 14. Способ согласно Положению 12 или 13, в котором целевое Положение предварительно определено в наборе дискретных отсчетов.
Положение 15. Способ согласно Положению 14, в котором предварительно определенное Положение является верхним левым положением набора дискретных отсчетов или центральным положением набора дискретных отсчетов.
Положение 16. Способ согласно любому одному из Положений 12-15, в котором точность дискретного отсчета расстояния выше целочисленного дискретного отсчета;
соответственно, расстояние вычисляется следующим образом:
distFromLine=((x<<N)+ K)*P1+((y<<N)+K)*P2-P3,
где 2N представляет обратную величину точности дискретного отсчета расстояния.
Положение 17. Способ согласно Положению 13, в котором N равно 1.
Положение 18. Способ согласно любому одному из Положений 1-17, в котором набор дискретных отсчетов является набором дискретных отсчетов яркости текущего блока.
Положение 19. Способ согласно любому одному из Положений 1-18, в котором перед определением расстояния между набором дискретных отсчетов в текущем блоке и общей границей способ дополнительно содержит этапы, на которых:
разделяют текущий блок на множество наборов дискретных отсчетов, при этом каждый из множества наборов дискретных отсчетов имеет тот же размер, что и набор дискретных отсчетов; или
устанавливают текущий блок в качестве набора дискретных отсчетов.
Положение 20. Способ согласно любому одному из Положений 1-19, в котором набор дискретных отсчетов является массивом дискретных отсчетов 4×4.
Положение 21. Способ согласно Положению 18 или 19, в котором каждый из множества наборов дискретных отсчетов соответствует каждому модулю хранения информации о движении, причем модуль хранения информации о движении используется для хранения одной из первой информации о движении, второй информации о движении и третьей информации о движении.
Положение 22. Способ согласно любому одному из Положений 1-21, в котором первый подблок и второй подблок являются треугольным разбиением, трапециевидным разбиением или асимметричным прямоугольным разбиением.
Положение 23. Способ согласно любому одному из Положений 1-22, в котором первая информация о движении содержит информацию о движении на основе первого списка опорных снимков, вторая информация о движении содержит информацию о движении на основе второго списка опорных снимков, при этом третья информация о движении содержит первую информацию о движении и вторую информацию о движении.
Положение 24. Устройство хранения информации о движении, при этом текущий блок состоит из первого подблока и второго подблока, первый подблок и второй подблок отделены общей границей, первый подблок соответствует первой информации о движении, и второй подблок соответствует второй информации о движении, причем устройство содержит:
модуль вычисления, выполненный с возможностью определять расстояние между набором дискретных отсчетов в текущем блоке и общей границей; и
модуль сравнения, выполненный с возможностью сравнивать расстояние с пороговой величиной для определения того, сохранена ли третья информация о движении для набора дискретных отсчетов, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении.
Положение 25. Устройство согласно Положению 24, в котором модуль сравнения выполнен с возможностью:
определять, что третья информация о движении сохранена для набора дискретных отсчетов в случае, в котором абсолютное значение расстояния меньше или равно пороговой величине.
Положение 26. Устройство согласно Положению 25, в котором в случае, в котором абсолютное значение расстояния больше пороговой величины, модуль сравнения дополнительно выполнен с возможностью:
определять, что первая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является положительным; или
определять, что вторая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является отрицательным.
Положение 27. Устройство согласно любому одному из Положений 24-26, при этом пороговая величина является предварительно определенной.
Положение 28. Устройство согласно любому одному из Положений 24-27, при этом пороговая величина основана на геометрическом соотношении между общей границей и горизонтальным направлением или вертикальным направлением.
Положение 29. Устройство согласно Положению 28, при этом пороговая величина основана на угле между перпендикулярным направлением общей границы и горизонтальным направлением или вертикальным направлением.
Положение 30. Устройство согласно любому одному из Положений 24-29, при этом пороговая величина основана на ширине и/или высоте текущего блока.
Положение 31. Устройство согласно любому одному из Положений 24-30, при этом общая граница определяется посредством углового параметра и параметра расстояния, причем модуль вычисления дополнительно выполнен с возможностью определять угловой параметр и параметр расстояния.
Положение 32. Устройство согласно Положению 31, в котором в декодере модуль вычисления дополнительно выполнен с возможностью:
выделять посредством анализа угловой параметр и параметр расстояния из битового потока; или
выделять посредством анализа указатель из битового потока, и
получать угловой параметр и параметр расстояния на основе указателя.
Положение 33. Устройство согласно Положению 31 или 32, в котором модуль вычисления дополнительно выполнен с возможностью:
определять первый вычислительный параметр на основе углового параметра;
вычислять временный угловой параметр на основе углового параметра;
определять второй вычислительный параметр на основе временного углового параметра; и
вычислять третий вычислительный параметр на основе углового параметра и параметра расстояния.
Положение 34. Устройство согласно Положению 33, при этом первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно угловому параметру, а второй вычислительный параметр определяется посредством проверки упомянутой таблицы поиска согласно временному угловому параметру, причем первый вычислительный параметр и второй вычислительный параметр являются значением косинуса и значением синуса одного и того же угла, соответственно.
Положение 35. Устройство согласно Положению 33 или 34, при этом расстояние вычисляется следующим образом:
distFromLine=(x+K)*P1+(y+K)*P2-P3,
где P1, P2 и P3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром, соответственно, distFromLine представляет расстояние, K является неотрицательным целым числом, x представляет горизонтальную координату целевого положения в наборе дискретных отсчетов, y представляет вертикальную координату целевого положения в прямоугольной системе координат, где Положение верхнего левого дискретного отсчета текущего блока устанавливается в качестве начала координат, направление вправо устанавливается в качестве положительного горизонтального направления, а направление вниз устанавливается в качестве положительного вертикального направления.
Положение 36. Устройство согласно Положению 35, при этом K равно 1.
Положение 37. Устройство согласно Положению 35 или 36, при этом целевое Положение предварительно определено в наборе дискретных отсчетов.
Положение 38. Устройство согласно Положению 37, при этом предварительно определенное Положение является верхним левым положением набора дискретных отсчетов или центральным положением набора дискретных отсчетов.
Положение 39. Устройство согласно любому одному из Положений 35-38, при этом точность дискретного отсчета расстояния выше целочисленного дискретного отсчета;
соответственно, расстояние вычисляется следующим образом:
distFromLine=((x<<N)+ K)*P1+((y<<N)+K)*P2-P3,
где 2N представляет обратную величину точности дискретного отсчета расстояния.
Положение 40. Устройство согласно Положению 36, в котором N равно 1.
Положение 41. Устройство согласно любому одному из Положений 24-40, при этом набор дискретных отсчетов является набором дискретных отсчетов яркости текущего блока.
Положение 42. Устройство согласно любому одному из Положений 24-41, при этом устройство дополнительно содержит модуль разделения, выполненный с возможностью:
разделять текущий блок на множество наборов дискретных отсчетов, причем каждый из множества наборов дискретных отсчетов имеет тот же размер, что и набор дискретных отсчетов; или
устанавливать текущий блок в качестве набора дискретных отсчетов.
Положение 43. Устройство согласно любому одному из Положений 24-42, при этом набор дискретных отсчетов является массивом дискретных отсчетов 4×4.
Положение 44. Устройство согласно Положению 42 или 43, при этом каждый из множества наборов дискретных отсчетов соответствует каждому модулю хранения информации о движении, причем модуль хранения информации о движении используется для хранения одной из первой информации о движении, второй информации о движении и третьей информации о движении.
Положение 45. Устройство согласно любому одному из Положений 24-44, при этом первый подблок и второй подблок являются треугольным разбиением, трапециевидным разбиением или асимметричным прямоугольным разбиением.
Положение 46. Устройство согласно любому одному из Положений 24-45, при этом первая информация о движении содержит информацию о движении на основе первого списка опорных снимков, вторая информация о движении содержит информацию о движении на основе второго списка опорных снимков, причем третья информация о движении содержит первую информацию о движении и вторую информацию о движении.
Положение 47. Устройство для декодирования видеопотока включает в себя процессор и память, при этом в памяти хранятся инструкции, которые предписывают процессору выполнять способ по любому из пп.1-23.
Положение 48. Устройство для кодирования видеопотока включает в себя процессор и память, при этом в памяти хранятся инструкции, которые предписывают процессору выполнять способ по любому из пп.1-23.
Положение 49. Машиночитаемый носитель данных, на котором сохранены инструкции, которые при их исполнении предписывают одному или более процессорам обеспечивать кодирование видеоданных, при этом инструкции предписывают одному или более процессорам выполнять способ согласно любому одному из Положений 1-23.
Положение 50. Компьютерная программа, содержащая программный код для выполнения способа согласно любому одному из Положений 1-23 при ее исполнении на компьютере.
название | год | авторы | номер документа |
---|---|---|---|
СПОСОБ И УСТРОЙСТВО ДЛЯ ХРАНЕНИЯ ИНФОРМАЦИИ О ДВИЖЕНИИ | 2019 |
|
RU2793825C1 |
ПРОЦЕСС КОДИРОВАНИЯ ДЛЯ РЕЖИМА ГЕОМЕТРИЧЕСКОГО РАЗДЕЛЕНИЯ | 2020 |
|
RU2822450C1 |
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ИСПОЛЬЗОВАНИЯ ДЛЯ СПИСКА ОБЪЕДИНЕНИЯ IBC | 2020 |
|
RU2817030C2 |
СПОСОБ И АППАРАТНЫЙ КОМПОНЕНТ СИГНАЛИЗАЦИИ ЧИСЛА КАНДИДАТОВ ДЛЯ РЕЖИМА СЛИЯНИЯ | 2021 |
|
RU2823267C1 |
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ДЛЯ РЕЖИМА СУББЛОЧНОГО РАЗДЕЛЕНИЯ | 2020 |
|
RU2811983C2 |
ВЫЧИСЛЕНИЕ РАССТОЯНИЯ ДО ВЫБОРКИ ДЛЯ РЕЖИМА ГЕОМЕТРИЧЕСКОГО ДЕЛЕНИЯ | 2020 |
|
RU2826830C2 |
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ ДЛЯ ИНТРА-ПРЕДСКАЗАНИЯ | 2020 |
|
RU2821012C2 |
СПОСОБ И УСТРОЙСТВО СОГЛАСОВАНИЯ ВЗВЕШЕННОГО ПРЕДСКАЗАНИЯ С НЕПРЯМОУГОЛЬНЫМИ РЕЖИМАМИ СЛИЯНИЯ | 2021 |
|
RU2821011C1 |
Способ и устройство для кодирования видеоданных | 2020 |
|
RU2777392C1 |
КОДЕР, ДЕКОДЕР И СООТВЕТСТВУЮЩИЕ СПОСОБЫ | 2020 |
|
RU2824186C2 |
Изобретение относится к средствам для видеокодирования. Технический результат заключается в повышении эффективности видеокодирования. Принимают битовый поток, который содержит кодированные данные текущего блока и указатель. Текущий блок разделен общей границей на первый подблок и второй подблок. Первый подблок соответствует первому значению предсказания, а второй подблок соответствует второму значению предсказания. Общая граница представляет собой разделительную линию режима геометрического разбиения. Выделяют посредством анализа указатель из битового потока. Получают угловой параметр и параметр расстояния на основе указателя, где угловой параметр задает индекс угла режима геометрического разбиения, а параметр расстояния задает индекс расстояния режима геометрического разбиения. Определяют расстояние между набором дискретных отсчетов в текущем блоке и общей границей на основе углового параметра и параметра расстояния посредством проверки предварительно установленной таблицы поиска. Получают первый весовой коэффициент согласно расстоянию. Получают второй весовой коэффициент согласно первому весовому коэффициенту. Получают значение предсказания с объединением для текущего блока посредством использования первого значения предсказания, второго значения предсказания, первого весового коэффициента и второго весового коэффициента. 6 н. и 33 з.п. ф-лы, 24 ил., 5 табл.
1. Способ декодирования, содержащий этапы, на которых:
принимают битовый поток, причем битовый поток содержит кодированные данные текущего блока и указатель, при этом текущий блок разделен общей границей на первый подблок и второй подблок, причем первый подблок соответствует первому значению предсказания, а второй подблок соответствует второму значению предсказания, при этом общая граница представляет собой разделительную линию режима геометрического разбиения;
выделяют посредством анализа указатель из битового потока;
получают угловой параметр и параметр расстояния на основе указателя, при этом угловой параметр задает индекс угла режима геометрического разбиения, а параметр расстояния задает индекс расстояния режима геометрического разбиения;
определяют расстояние между набором дискретных отсчетов в текущем блоке и общей границей на основе углового параметра и параметра расстояния посредством проверки предварительно установленной таблицы поиска;
получают первый весовой коэффициент согласно расстоянию;
получают второй весовой коэффициент согласно первому весовому коэффициенту; и
получают значение предсказания с объединением для текущего блока посредством использования первого значения предсказания, второго значения предсказания, первого весового коэффициента и второго весового коэффициента.
2. Способ по п. 1, в котором угловой параметр - это angleIdx, параметр расстояния - это distanceIdx, при этом упомянутое определение расстояния на основе углового параметра и параметра расстояния посредством проверки предварительно установленной таблицы поиска содержит этап, на котором вычисляют расстояние с использованием следующего уравнения:
где distFromLine представляет расстояние, K является неотрицательным целым числом, N=1, P1, Р2 и Р3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром соответственно, при этом первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно angleIdx, второй вычислительный параметр определяется посредством проверки этой таблицы поиска согласно (angleIdx+8)%32 и третий вычислительный параметр определяется на основе angleIdx и distanceIdx.
3. Способ по п. 1 или 2, при этом способ дополнительно содержит этап, на котором сравнивают расстояние с пороговой величиной для определения того, сохранять ли третью информацию о движении для набора дискретных отсчетов, причем первый подблок соответствует первой информации о движении, а второй подблок соответствует второй информации о движении, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении.
4. Способ по п. 3, в котором упомянутое сравнение расстояния с пороговой величиной для определения того, сохранять ли третью информацию о движении для набора дискретных отсчетов, содержит этап, на котором определяют, сохранить третью информацию о движении для набора дискретных отсчетов в случае, в котором абсолютное значение расстояния меньше или равно пороговой величине.
5. Способ по п. 3 или 4, при этом в случае, в котором абсолютное значение расстояния больше пороговой величины, способ дополнительно содержит этапы, на которых:
определяют, что первая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является положительным; или
определяют, что вторая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является отрицательным.
6. Способ по любому одному из пп. 3-5, в котором пороговая величина является предварительно определенной.
7. Способ по любому одному из пп. 1-6, в котором первый весовой коэффициент вычисляется с использованием следующего уравнения:
где sampleWeight1 представляет первый весовой коэффициент, sample_dist представляет расстояние, f(sample_dist) представляет функцию с sample_dist в качестве входа.
8. Способ по любому одному из пп. 1-7, в котором упомянутое получение второго весового коэффициента согласно первому весовому коэффициенту содержит этап, на котором вычисляют второй весовой коэффициент в соответствии со следующей формулой:
где sampleWeight1 представляет первый весовой коэффициент, sampleWeight2 представляет второй весовой коэффициент, Т - заранее заданная константа.
9. Способ по п. 8, в котором Т равно 8.
10. Способ по любому одному из пп. 1-9, в котором набор дискретных отсчетов является набором дискретных отсчетов яркости текущего блока.
11. Способ по любому одному из пп. 1-10, при этом перед определением расстояния между набором дискретных отсчетов в текущем блоке и общей границей способ дополнительно содержит этап, на котором:
разделяют текущий блок на множество наборов дискретных отсчетов, причем каждый из множества наборов дискретных отсчетов имеет тот же размер, что и упомянутый набор дискретных отсчетов; или
устанавливают текущий блок в качестве упомянутого набора дискретных отсчетов.
12. Способ по любому одному из пп. 1-11, в котором набор дискретных отсчетов является массивом дискретных отсчетов 4×4.
13. Способ по любому одному из пп. 1-12, в котором третью информацию о движении получают посредством объединения первой информации о движении и второй информации о движении, когда первая информация о движении и вторая информация о движении - из разных списков опорных снимков, при этом третья информация о движении равна второй информации о движении, когда первая информация о движении и вторая информация о движении - из одного и того же списка опорных снимков.
14. Способ по любому одному из пп. 1-13, в котором сохраненная информация о движении используется для определения значения предсказания набора дискретных отсчетов, либо сохраненная информация о движении используется в качестве опорной информации для процесса предсказания будущих блоков кодирования.
15. Устройство декодирования, содержащее:
модуль приема, выполненный с возможностью принимать битовый поток, причем битовый поток содержит кодированные данные текущего блока и указатель, при этом текущий блок разделен общей границей на первый подблок и второй подблок, причем первый подблок соответствует первому значению предсказания, а второй подблок соответствует второму значению предсказания, при этом общая граница представляет собой разделительную линию режима геометрического разбиения;
модуль анализа, выполненный с возможностью выделять посредством анализа указатель из битового потока;
модуль получения, выполненный с возможностью получать угловой параметр и параметр расстояния на основе указателя, при этом угловой параметр задает индекс угла режима геометрического разбиения, а параметр расстояния задает индекс расстояния режима геометрического разбиения;
модуль вычисления, выполненный с возможностью определять расстояние между набором дискретных отсчетов в текущем блоке и общей границей на основе углового параметра и параметра расстояния посредством проверки предварительно установленной таблицы поиска;
при этом модуль получения дополнительно выполнен с возможностью:
получать первый весовой коэффициент согласно расстоянию;
получать второй весовой коэффициент согласно первому весовому коэффициенту; и
получать значение предсказания с объединением для текущего блока посредством использования первого значения предсказания, второго значения предсказания, первого весового коэффициента и второго весового коэффициента.
16. Устройство по п. 15, при этом угловой параметр - это angleIdx, параметр расстояния - это distanceIdx, причем модуль вычисления дополнительно выполнен с возможностью вычислять расстояние с использованием следующего уравнения:
где distFromLine представляет расстояние, K является неотрицательным целым числом, N=1, P1, Р2 и Р3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром соответственно, при этом первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно angleIdx, второй вычислительный параметр определяется посредством проверки этой таблицы поиска согласно (angleIdx+8)%32 и третий вычислительный параметр определяется на основе angleIdx и distanceIdx.
17. Устройство по п. 15 или 16, дополнительно содержащее модуль сравнения, выполненный с возможностью сравнивать расстояние с пороговой величиной для определения того, сохранять ли третью информацию о движении для набора дискретных отсчетов, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении, причем первый подблок соответствует первой информации о движении, а второй подблок соответствует второй информации о движении.
18. Устройство по п. 17, в котором модуль сравнения выполнен с возможностью определения сохранить третью информацию о движении для набора дискретных отсчетов в случае, в котором абсолютное значение расстояния меньше или равно пороговой величине.
19. Устройство по п. 17 или 18, в котором в случае, в котором абсолютное значение расстояния больше пороговой величины, модуль сравнения дополнительно выполнен с возможностью:
определять, что первая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является положительным; или
определять, что вторая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является отрицательным.
20. Устройство по любому одному из пп. 15-19, при этом пороговая величина является предварительно определенной.
21. Устройство по любому одному из пп. 15-20, при этом первый весовой коэффициент вычисляется с использованием следующего уравнения:
где sampleWeight1 представляет первый весовой коэффициент, sample_dist представляет расстояние, f(sample_dist) представляет функцию с sample_dist в качестве входа.
22. Устройство по любому одному из пп. 15-21, в котором модуль получения дополнительно выполнен с возможностью вычислять второй весовой коэффициент в соответствии со следующей формулой:
где sampleWeight1 представляет первый весовой коэффициент, sampleWeight2 представляет второй весовой коэффициент, Т - заранее заданная константа.
23. Устройство по п. 22, при этом Т равно 8.
24. Устройство по любому одному из пп. 15-23, при этом набор дискретных отсчетов является набором дискретных отсчетов яркости текущего блока.
25. Устройство по любому одному из пп. 15-24, при этом устройство дополнительно содержит модуль разделения, выполненный с возможностью:
разделять текущий блок на множество наборов дискретных отсчетов, при этом каждый из множества наборов дискретных отсчетов имеет тот же размер, что и упомянутый набор дискретных отсчетов; или
устанавливать текущий блок в качестве упомянутого набора дискретных отсчетов.
26. Устройство по любому одному из пп. 15-25, при этом набор дискретных отсчетов является массивом дискретных отсчетов 4×4.
27. Устройство по любому одному из пп. 15-26, в котором третья информация о движении получается посредством объединения первой информации о движении и второй информации о движении, когда первая информация о движении и вторая информация о движении - из разных списков опорных снимков, при этом третья информация о движении равна второй информации о движении, когда первая информация о движении и вторая информация о движении - из одного и того же списка опорных снимков.
28. Устройство по любому одному из пп. 15-27, в котором сохраненная информация о движении используется для определения значения предсказания набора дискретных отсчетов, либо сохраненная информация о движении используется в качестве опорной информации для процесса предсказания будущих блоков кодирования.
29. Устройство для декодирования видеопотока, включающее в себя процессор и память, при этом в памяти хранятся инструкции, которые предписывают процессору выполнять способ по любому из пп. 1-14.
30. Машиночитаемый носитель данных, на котором сохранены инструкции, которые при их исполнении предписывают одному или более процессорам обеспечивать кодирование видеоданных, при этом инструкции предписывают одному или более процессорам выполнять способ по любому одному из пп. 1-14.
31. Способ кодирования, содержащий этапы, на которых:
кодируют текущий блок и указатель в битовый поток, при этом текущий блок разделен общей границей на первый подблок и второй подблок, причем первый подблок соответствует первому значению предсказания, а второй подблок соответствует второму значению предсказания, при этом общая граница представляет собой разделительную линию режима геометрического разбиения; причем указатель используется для получения углового параметра и параметра расстояния, при этом угловой параметр задает индекс угла режима геометрического разбиения, а параметр расстояния задает индекс расстояния режима геометрического разбиения;
определяют расстояние между набором дискретных отсчетов в текущем блоке и общей границей на основе углового параметра и параметра расстояния посредством проверки предварительно установленной таблицы поиска;
получают первый весовой коэффициент согласно расстоянию;
получают второй весовой коэффициент согласно первому весовому коэффициенту; и
получают значение предсказания с объединением для текущего блока посредством использования первого значения предсказания, второго значения предсказания, первого весового коэффициента и второго весового коэффициента.
32. Способ по п. 31, в котором первый весовой коэффициент вычисляется с использованием следующего уравнения:
где sampleWeight1 представляет первый весовой коэффициент, sample_dist представляет расстояние, f(sample_dist) представляет функцию с sample_dist в качестве входа.
33. Способ по п. 31 или 32, в котором упомянутое получение второго весового коэффициента согласно первому весовому коэффициенту содержит этап, на котором вычисляют второй весовой коэффициент в соответствии со следующей формулой:
где sampleWeight1 представляет первый весовой коэффициент, sampleWeight2 представляет второй весовой коэффициент, Т - заранее заданная константа.
34. Способ по п. 33, в котором Т равно 8.
35. Способ по любому одному из пп. 31-34, в котором угловой параметр - это angleIdx, параметр расстояния - это distanceIdx, при этом упомянутое определение расстояния на основе углового параметра и параметра расстояния посредством проверки предварительно установленной таблицы поиска содержит этап, на котором вычисляют расстояние с использованием следующего уравнения:
где distFromLine представляет расстояние, K является неотрицательным целым числом, N=1, P1, Р2 и Р3 являются первым вычислительным параметром, вторым вычислительным параметром и третьим вычислительным параметром соответственно, при этом первый вычислительный параметр определяется посредством проверки предварительно установленной таблицы поиска согласно angleIdx, второй вычислительный параметр определяется посредством проверки этой таблицы поиска согласно (angleIdx+8)%32 и третий вычислительный параметр определяется на основе angleIdx и distanceIdx.
36. Способ по любому одному из пп. 31-35, при этом способ дополнительно содержит этап, на котором сравнивают расстояние с пороговой величиной для определения того, сохранять ли третью информацию о движении для набора дискретных отсчетов, причем первый подблок соответствует первой информации о движении, а второй подблок соответствует второй информации о движении, при этом третья информация о движении выводится из первой информации о движении и второй информации о движении.
37. Способ по п. 36, в котором упомянутое сравнение расстояния с пороговой величиной для определения того, сохранять ли третью информацию о движении для набора дискретных отсчетов, содержит этап, на котором определяют, сохранить третью информацию о движении для набора дискретных отсчетов в случае, в котором абсолютное значение расстояния меньше или равно пороговой величине.
38. Способ по п. 36 или 37, при этом в случае, в котором абсолютное значение расстояния больше пороговой величины, способ дополнительно содержит этап, на котором:
определяют, что первая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является положительным; или
определяют, что вторая информация о движении сохранена для набора дискретных отсчетов в случае, в котором расстояние является отрицательным.
39. Устройство для кодирования видеопотока, включающее в себя процессор и память, при этом в памяти хранятся инструкции, которые предписывают процессору выполнять способ по любому из пп. 31-38.
Chen J | |||
et al | |||
Кипятильник для воды | 1921 |
|
SU5A1 |
Francois E | |||
et al, "Core Experiment 2: Flexible Motion Partitioning", JCT-VC of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11, Гуанчжоу, Китай, 2010 | |||
US 9338476 B2, |
Авторы
Даты
2024-03-21—Публикация
2023-03-31—Подача