КОДИРОВАНИЕ ВЕКТОРА ДВИЖЕНИЯ И БИ-ПРЕДСКАЗАНИЕ В HEVC И ЕГО РАСШИРЕНИЯХ
MOTION VECTOR CODING AND BI-PREDICTION IN HEVC AND ITS EXTENSIONS

[0001] Настоящая заявка испрашивает приоритет следующих предварительных заявок на патент, все содержимое каждой из которых тем самым включено по ссылке:
предварительной патентной заявки US61/611,959, поданной 16 марта 2012;
предварительной патентной заявки US61/624,990, поданной 16 апреля 2012;
предварительной патентной заявки US61/658,344, поданной 11 июня 2012; и
предварительной патентной заявки US61/663,484, поданной 22 июня 2012.
ОБЛАСТЬ ТЕХНИКИ
[0002] Настоящее раскрытие относится к кодированию видео.
УРОВЕНЬ ТЕХНИКИ
[0003] Цифровые возможности видео могут быть включены в широкий диапазон устройств, включающий в себя цифровые телевизоры, цифровые системы прямого вещания, беспроводные системы вещания, персональные цифровые помощники (PDA), ноутбуки или настольные компьютеры, планшетные компьютеры, считыватели электронных книг, цифровые камеры, цифровые устройства записи, цифровые медиаплееры, устройства проигрывания видео, консоли видеоигр, сотовые или спутниковые радиотелефоны, так называемые “смартфоны,” устройства организации видео телеконференций, устройства потоковой передачи видео и т.п. Цифровые видео устройства реализуют способы кодирования видео, такие как описанные в стандартах, определенных посредством MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Часть 10, Усовершенствованное кодирование видео (AVC), стандарт высокоэффективного кодирования видео (HEVC) находящегося в настоящее время в развитии, и расширениях таких стандартов, таких как масштабируемое кодирование видео (SVC) и кодирование видео с множественными видами (MVC). Версия 6 рабочего проекта (WD) HEVC доступна по адресу http://phenix.int-evry.fr/jct/doc_end_user/documents/8_San%20Jose/wg11/JCTVC-H1003-v21.zip. Видео устройства могут передавать, принимать, кодировать, декодировать, и/или сохранять цифровую информацию видео более эффективно посредством реализации таких способов кодирования видео.
[0004] Способы кодирования видео включают в себя пространственное (внутри картинки) предсказание и/или временное (между картинками) предсказание, чтобы уменьшить или удалить избыточность, присущую видео последовательностям. Для основанного на блоке кодирования видео видео-вырезка (например, видео кадр или часть видео кадра) могут быть разделены на блоки видео, которые могут также упоминаться как блоки дерева, единицы кодирования (единицы CU) и/или узлы кодирования. Блоки видео во внутренне кодированной (I) вырезке картинки кодируют, используя пространственное предсказание относительно опорных выборок в соседних блоках на той же самой картинке. Блоки видео во внешне кодированной (P или B) вырезке картинки могут использовать пространственное предсказание относительно опорных выборок в соседних блоках на той же самой картинке или временное предсказание относительно опорных выборок в других опорных картинках. Картинки могут упоминаться как кадры, и опорные картинки могут упоминаться как опорные кадры.
[0005] Пространственное или временное предсказание приводит к предсказывающему блоку для блока, который должен быть закодирован. Остаточные данные представляют пиксельные разности между первоначальным блоком, который должен быть закодирован, и предсказывающим блоком. Внешне кодированный блок кодируют согласно вектору движения, который указывает на блок опорных выборок, формирующих предсказывающий блок, и остаточным данным, указывающим разность между закодированным блоком и предсказывающим блоком. Внутренне кодированный блок кодируют согласно режиму внутреннего кодирования и остаточным данным. Для дальнейшего сжатия остаточные данные могут быть преобразованы из пиксельной области в область преобразования, приводя к остаточным коэффициентам преобразования, которые затем могут быть квантованы. Квантованные коэффициенты преобразования, первоначально скомпонованные в двумерном массиве, могут быть сканированы, чтобы сформировать одномерный вектор коэффициентов преобразования, и может быть применено энтропийное кодирование, чтобы достигнуть еще большего сжатия.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0006] В целом, настоящее раскрытие описывает способы для кодирования векторов движения и для выполнения би-предсказания в высокоэффективном кодировании видео (HEVC) и его расширениях, таких как расширения для множественных видов или трехмерного видео (3DV). Способы настоящего раскрытия могут поддерживать лучшую совместимость с будущими версиями для кодека видео с множественными видами и/или кода 3D видео в базовой структуре кодека.
[0007] В одном примере способ декодирования видео данных включает в себя определение первого типа для текущего вектора движения текущего блока данных видео, определение второго типа для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установку переменной, представляющей, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и декодирование текущего вектора движения на основании, по меньшей мере частично, значения этой переменной.
[0008] В другом примере способ кодирования видео данных включает в себя определение первого типа для текущего вектора движения текущего блока данных видео, определение второго типа для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установку переменной, представляющей, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодирование текущего вектора движения на основании, по меньшей мере частично, значения этой переменной.
[0009] В другом примере устройство для декодирования видео данных включает в себя декодер видео, конфигурируемый, чтобы определить первый тип для текущего вектора движения текущего блока данных видео, определить второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и декодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной.
[0010] В другом примере устройство для кодирования видео данных включает в себя кодер видео, конфигурируемый, чтобы определить первый тип для текущего вектора движения текущего блока данных видео, определить второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной.
[0011] В другом примере устройство для кодирования видео данных включает в себя средство для определения первого типа для текущего вектора движения текущего блока данных видео, средство для определения второго типа для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, средство для установки переменной, представляющей, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и средство для декодирования текущего вектора движения на основании, по меньшей мере частично, значения этой переменной.
[0012] В другом примере устройство для кодирования видео данных включает в себя средство для определения первого типа для текущего вектора движения текущего блока данных видео, средство для определения второго типа для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, средство для установки переменной, представляющей, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и средство для кодирования текущего вектора движения на основании, по меньшей мере частично, значения этой переменной.
[0013] В другом примере считываемый компьютером запоминающий носитель (например, невременный считываемый компьютером запоминающий носитель) имеет сохраненные на нем инструкции, которые, когда выполняются, вынуждают процессор определять первый тип для текущего вектора движения текущего блока данных видео, определять второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и декодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной.
[0014] В другом примере считываемый компьютером запоминающий носитель (например, невременный считываемый компьютером запоминающий носитель) имеет сохраненные на нем инструкции, которые, когда выполняются, вынуждают процессор определять первый тип для текущего вектора движения текущего блока данных видео, определять второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной.
[0015] Подробности одного или более примеров сформулированы на сопроводительных чертежах и описании ниже. Другие признаки, задачи, и преимущества будут очевидны из описания и чертежей и из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0016] ФИГ. 1 является блок-схемой, иллюстрирующей примерную систему кодирования и декодирования видео, которая может использовать способы для кодирования векторов движения и для выполнения би-предсказания в высокоэффективном кодировании видео (HEVC) и его расширениях, таких как расширения для множественных видов или трехмерного видео (3DV).
[0017] ФИГ. 2 является блок-схемой, иллюстрирующей пример кодера видео, который может реализовать способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV.
[0018] ФИГ. 3 является блок-схемой, иллюстрирующей примерный видео декодер 30, который может реализовать способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV.
[0019] ФИГ. 4 является концептуальной диаграммой, иллюстрирующей примерный шаблон предсказания MVC.
[0020] ФИГ. 5 является последовательностью операций, иллюстрирующей примерный способ для кодирования текущего блока в соответствии со способами настоящего раскрытия.
[0021] ФИГ. 6 является последовательностью операций, иллюстрирующей примерный способ для декодирования текущего блока данных видео в соответствии со способами настоящего раскрытия.
ПОДРОБНОЕ ОПИСАНИЕ
[0022] В целом, настоящее раскрытие описывает способы для кодирования данных кодирования видео с множественными видами (MVC). В настоящее время группа экспертов по движущимся изображениям (MPEG) развивает стандарт трехмерного видео (3DV) на основании предстоящего стандарта кодирования видео высокой производительности (HEVC). Часть усилий по стандартизации также включает в себя стандартизацию кодека видео с множественными видами на основании HEVC. В двумерном кодировании данные видео для видео (то есть, последовательность картинок) являются закодированными картинка - за - картинкой, не обязательно в порядке отображения. Устройства кодирования видео делят каждую картинку на блоки, и кодируют каждый блок индивидуально. Основанные на блоках режимы предсказания включают в себя пространственное предсказание, также называемое внутренним предсказанием, и временное предсказание, также называемое внешним предсказанием.
[0023] Для данных трехмерного видео, таких как основанные на 3DV HEVC, блоки могут также быть предсказаны между видами. Таким образом, блоки могут быть предсказаны из картинки другого вида, где каждый вид обычно соответствует соответствующему местоположению камеры. Таким образом, в основанном на HEVC 3DV, может быть разрешено предсказание между видами, основанное на реконструированных компонентах вида из различных видов. Настоящее раскрытие использует термин "компонент вида", чтобы ссылаться на кодированную картинку конкретного вида. То есть, компонент вида может содержать закодированную картинку для конкретного вида в конкретное время (в терминах порядка отображения или порядка вывода). Компонент вида (или вырезка (слайс) компонента вида) может иметь значение счета по порядку картинки (POC), которое обычно указывает порядок отображения (или порядок вывода) компонента вида.
[0024] Во временном внешнем предсказании или предсказании между видами устройство кодирования видео может кодировать данные, указывающие один или более векторов движения (временное внешнее предсказание) и/или один или более векторов смещения (предсказание между видами). В некоторых примерах блок, закодированный с одним вектором движения или одним вектором смещения, упоминается как P-блок, тогда как блок, закодированный с двумя векторами движения или двумя векторами смещения, упоминается как би-предсказывающий блок, или B-блок. Способы, которые применимы к векторам движения, также обычно применимы к векторам смещения, и поэтому настоящее раскрытие прежде всего описывает способы кодирования вектора движения. Однако, нужно подразумевать, что такие способы также применимы к векторам смещения, и аналогично, что способы, описанные относительно векторов смещения, также применимы к векторам движения, если иначе не обозначено.
[0025] В целом, данные, указывающие опорные картинки, на которые могут ссылаться вектор движения или вектор смещения, хранятся в списках опорных картинок. Таким образом, данные вектора движения (или данные вектора смещения) могут включать в себя не только данные для x-компонента и y-компонента вектора движения, но также и индикацию записи списка опорных картинок, называемого индексом опорной картинки. Устройства кодирования видео могут конструировать множественные списки опорных картинок. Например, устройство кодирования видео может конструировать первый список опорных картинок (список 0 или RefPicList0), чтобы сохранить данные для опорных картинок, имеющих значения POC, более ранние, чем текущая картинка, и второй список опорных картинок (список 1, или RefPicList1), чтобы сохранить данные для опорных картинок, имеющих значения POC, более поздних, чем текущая картинка. Снова следует отметить, что порядки отображения или вывода для картинок не обязательно являются такими же, как значения порядка кодирования (например, номер кадра или значения “frame_num”). Таким образом, картинки могут быть закодированы в порядке, который отличается от порядка, в котором кадры показываются (или захвачены).
[0026] Как правило, конструирование списка опорных картинок для первого или второго списка опорных картинок B-картинки включает в себя два этапа: инициализация списка опорных картинок и переупорядочение списка опорных картинок (модификация). Инициализация списка опорных картинок является явным механизмом, который помещает опорные картинки в память опорных картинок (также известную как буфер декодированных картинок) в список на основании значений порядка POC (счет по порядку картинок, согласованный с порядком отображения картинок). Механизм переупорядочения списка опорных картинок может модифицировать позицию картинки, которая была помещена в список во время инициализации списка опорных картинок, в любую новую позицию, или помещение любой опорной картинки в память опорных картинок в любой позиции, даже если картинка не принадлежит инициализированному списку. Некоторые картинки после переупорядочения списка опорных картинок (модификации) могут быть помещены в дополнительную позицию в списке. Однако, если позиция картинки превышает количество активных опорных картинок списка, эта картинка не рассматривается как запись окончательного списка опорных картинок. Количество активных опорных картинок может быть сигнализировано в заголовке вырезки для каждого списка. После того как списки опорных картинок построены (например, RefPicList0 и RefPicList1, если доступны), опорный индекс может быть использован для идентификации картинки в любом списке опорных картинок.
[0027] Как отмечено выше, данные вектора движения могут также включать в себя горизонтальный компонент (или x-компонент) и вертикальный компонент (или y-компонент). Таким образом, вектор движения может быть определен как <x, y>. Вместо того, чтобы кодировать x-компонент и y-компонент вектора движения непосредственно, устройства кодирования видео могут кодировать вектора движения относительно предсказателей вектора движения. Предсказатели вектора движения могут быть выбраны из пространственных соседей для текущего блока, совместно расположенного блока временно отделенной картинки (то есть, совместно расположенного блока в ранее закодированной картинке), или совместно расположенного блока картинки в другом виде в одном и том же временном экземпляре, в различных примерах. Предсказатели вектора движения отдельной во времени картинки называются как временные предсказатели вектора движения (TMVPs).
[0028] Чтобы определить TMVP для текущего блока (например, текущая единица предсказания (PU) текущей единицы кодирования (CU) в HEVC), устройство кодирования видео может сначала идентифицировать совмещенную картинку. Термин "совмещенная" картинка относится к картинке, включающей в себя конкретный совмещенный блок. Совмещенный блок может также быть включен в “совмещенное разделение”, как указано в WD6 в HEVC. Если текущая картинка является вырезкой B, collocated_from_10_flag может быть сигнализирован в заголовке вырезки для вырезки текущей картинки, чтобы указать, является ли совмещенная картинка из RefPicList0 или RefPicList1. После того, как список опорных картинок идентифицирован, устройство кодирования видео может использовать collocated_ref_idx, сигнализированный в заголовке вырезки, чтобы идентифицировать совмещенную картинку в списке опорных картинок. Совмещенная PU затем идентифицируется посредством проверки совмещенной картинки. Любой вектор движения из правой нижней единицы PU в CU, содержащей текущую PU, или вектор движения правой нижней PU в пределах центральных PU в CU, содержащей эту PU, можно рассматривать как TMVP для текущей PU. Когда вектора движения, идентифицированные вышеупомянутым процессом, используются для генерирования кандидата движения для AMVP или режима слияния, они могут быть масштабированы на основании временного местоположения (отраженного посредством значения POC опорной картинки). В соответствии со способами настоящего раскрытия, как описано ниже, TMVP может быть одного и того же вида или различного вида.
[0029] В HEVC набор параметров картинки (PPS) включает в себя флаг enable_temporal_mvp_flag. Когда конкретная картинка с temporal_id, равным 0, ссылается на PPS, имеющий enable_temporal_mvp_flag, равный 0, все опорные картинки в DPB могут быть отмечены как “неиспользованные для временного предсказания вектора движения”, и никакой вектор движения из картинок до этой конкретной картинки в порядке декодирования не может быть использован как временной предсказатель вектора движения при декодировании конкретной картинки или картинки после конкретной картинки в порядке декодирования.
[0030] В H.264/AVC или HEVC, для вырезок P, когда взвешенное предсказание разрешено посредством установки weighted_pred_flag в 1, веса предсказания явно сигнализируются. Элемент синтаксиса weighted_pred_flag сигнализируется в заголовке вырезки, и его семантика является следующей.
[0031] В некоторых примерах weighted_pred_flag, равный 0, может задавать, что взвешенное предсказание не может быть применено к вырезкам P. weighted_pred_flag, равный 1, задает, что взвешенное предсказание может быть применено к вырезкам P.
[0032] Для вырезки B, когда взвешенное предсказание разрешено посредством установки weighted_bipred_idc ненулевым, веса предсказания могут быть явно сигнализированы или выведены неявно. Синтаксис может также быть сигнализирован в заголовке вырезки, и его семантика является следующей.
[0033] В некоторых примерах weighted_bipred_idc, равное 0, задает, что взвешенное предсказание по умолчанию применяется к вырезкам B. В некоторых примерах weighted_bipred_idc, равное 1, задает, что явное взвешенное предсказание применяется к вырезкам B. В некоторых примерах weighted_bipred_idc, равное 2, задает, что неявное взвешенное предсказание должно быть применено к вырезкам B. Значение weighted_bipred_idc может быть в диапазоне от 0 до 2, включительно.
[0034] Когда weighted_bipred_idc равно 1, веса могут быть выведены на основании временного расстояния двух опорных кадров посредством вычисления расстояния POC.
[0035] Текущая структура HEVC может препятствовать развитию будущих расширений, таких как расширение для множественных видов или 3DV, особенно если разработчики таких расширений хотят обеспечить возможность только создания изменений синтаксиса высокого уровня. Например, если опорная картинка, которая должна использоваться для TMVP, исходит из отличного вида, она может иметь то же самое POC, как текущая картинка. Текущая структура HEVC для масштабирования вектора движения может быть не в состоянии точно идентифицировать опорную картинку, используемую для TMVP в этом сценарии. Когда неявное взвешенное предсказание применяется для вырезки B и одна опорная картинка берется из отличного вида, процесс вычисления весов предсказания может столкнуться с проблемой, так как процесс был разработан на основании только расстояний POC.
[0036] Способы настоящего раскрытия могут решить эти проблемы. В целом, настоящее раскрытие обеспечивает способы только для изменения синтаксиса высокого уровня на вершине структуры HEVC, чтобы поддерживать MVC или 3DV. Некоторые из решений предназначены для базовой спецификации HEVC, и таким образом, в целях совместимости вперед. Видео кодировщик, такой как видео кодер или декодер видео, может быть сконфигурирован, чтобы реализовать любой или все из различных способов настоящего раскрытия, по одиночке или в любой комбинации. Различные способы описаны более подробно ниже.
[0037] В качестве одного примера, видео кодировщик может быть сконфигурирован, чтобы определить первый тип для текущего вектора движения текущего блока данных видео, определить второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной. Различные типы векторов движения могут содержать, например, диспаратные вектора движения и временные вектора движения.
[0038] Любое из множества способов может быть использовано для определения типа для вектора движения. Например, видео кодировщик может определить тип для вектора движения (например, временное в зависимости от диспаратности) на основании сравнения значений POC между текущей картинкой и опорной картинкой, на которую ссылается вектор движения. Если значения POC различны, то видео кодировщик может определить, что вектор движения является временным вектором движения. С другой стороны, если значения POC одинаковы, видео кодировщик может определить, что вектор движения является диспаратным вектором движения.
[0039] В качестве другого примера видео кодировщик может сравнивать уровни (например, уровни видов или масштабируемости), в которых текущая картинка и опорная картинка, на которую вектор движения ссылается, имеют место. Если текущая картинка и опорная картинка имеют место в одном и том же уровне, видео кодировщик может определить, что вектор движения является временным вектором движения. С другой стороны, если текущая картинка и опорная картинка имеют место в различных уровнях, видео кодировщик может определить, что вектор движения является диспаратным вектором движения.
[0040] В качестве еще одного другого примера, видео кодировщик может определить, является ли опорная картинка, на которую ссылается вектор движения, долгосрочной опорной картинкой или краткосрочной опорной картинкой. Если опорная картинка является краткосрочной опорной картинкой, видео кодировщик может определить, что вектор движения является диспаратным вектором движения. Однако, если опорная картинка является долгосрочной опорной картинкой, видео кодировщик может определить, что вектор движения является временным вектором движения.
[0041] Кроме того, в соответствии с некоторыми способами настоящего раскрытия, когда текущий вектор движения имеет отличный тип, чем предсказатель вектора движения - кандидат, видео кодировщик может быть сконфигурирован, чтобы определить, что предсказатель вектора движения - кандидат не доступен. Например, видео кодировщик может установить флаг (или переменную) "доступный" (available), указывающий, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя для текущего вектора движения, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда типы являются различными между текущим вектором движения и предсказателем вектора движения - кандидатом.
[0042] ФИГ. 1 является блок-схемой, иллюстрирующей примерную систему 10 кодирования и декодирования видео, которая может использовать способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV. Как показано на ФИГ. 1, система 10 включает в себя исходное устройство 12, которое выдает закодированные данные видео, которые должны быть декодированы в более позднее время устройством 14 назначения. В частности, исходное устройство 12 выдает данные видео устройству 14 назначения через считываемый компьютером носитель 16. Исходное устройство 12 и устройство 14 назначения может содержать любое из широкого диапазона устройств, включая настольные компьютеры, портативные компьютеры (то есть, ноутбуки), планшетные компьютеры, телевизионные приставки, телефонные трубки, такие как так называемые "интеллектуальные" телефоны, так называемые «интеллектуальные» клавиатуры, телевизоры, камеры, устройства отображения, цифровые медиаплееры, пульты видео игр, устройство потоковой передачи видео, или подобные. В некоторых случаях исходное устройство 12 и устройство 14 назначения может быть оборудовано для беспроводной связи.
[0043] Устройство 14 назначения может принять закодированные данные видео, которые должны быть декодированы, через считываемый компьютером носитель 16. Считываемый компьютером носитель 16 может содержать любой тип носителя или устройства, способного к перемещению закодированных видео данных от исходного устройства 12 к устройству 14 назначения. В одном примере считываемый компьютером носитель 16 может содержать коммуникационный носитель, чтобы разрешить исходному устройству 12 передать закодированные данные видео непосредственно к устройству 14 назначения в реальном времени. Закодированные данные видео могут быть модулированы согласно стандарту связи, такому как протокол беспроводной связи, и переданы к устройству 14 назначения. Коммуникационный носитель может содержать любой носитель беспроводной связи или проводной коммуникационный носитель, например, радиочастотного (RF, РЧ) спектра или одну или более физических линий передачи. Коммуникационный носитель может быть частью основанной на пакетной передаче сети, такой как локальная сеть, региональная сеть, или глобальная сеть, такая как Интернет. Коммуникационный носитель может включать в себя маршрутизаторы, коммутаторы, базовые станции, или любое другое оборудование, которое может быть полезным, чтобы облегчить связь от исходного устройства 12 к устройству 14 назначения.
[0044] В некоторых примерах закодированные данные могут быть выведены от интерфейса 22 вывода на устройство хранения. Аналогично, к закодированным данным может получить доступ из устройства хранения через интерфейс ввода. Устройство хранения может включать в себя любое из множества распределенных или локально доступных запоминающих носителей данных, таких как накопитель на жестких дисках, диски Blu-ray, DVD, CD-ROM, флэш-память, энергозависимая или энергонезависимая память, или любые другие подходящие цифровые запоминающие носители для того, чтобы хранить закодированные данные видео. В дальнейшем примере устройство хранения может соответствовать файловому серверу или другому промежуточному устройству хранения, которое может хранить закодированное видео, генерируемое исходным устройством 12. Устройство 14 назначения может получать доступ к сохраненным данным видео из устройства хранения через потоковую передачу или загрузку. Файловый сервер может быть любым типом сервера, способного к тому, чтобы хранить закодированные данные видео и передавать эти закодированные данные видео к устройству 14 назначения. Примерные файловые серверы включают в себя web-сервер (например, для вебсайта), сервер FTP, устройства сетевого хранения данных (NAS), или локальный накопитель на дисках. Устройство 14 назначения может получить доступ к закодированным видео данным через любое стандартное соединение данных, включая интернет-соединение. Оно может включать в себя беспроводный канал (например, соединение Wi-Fi), проводное соединение (например, DSL, кабельный модем, и т.д.), или комбинацию обоих, которая является подходящей для того, чтобы получить доступ к закодированным видео данным, хранящимся на файловом сервере. Передача закодированных видео данных от устройства хранения может быть потоковой передачей, передачей загрузки, или их комбинацией.
[0045] Способы настоящего раскрытия не обязательно ограничены беспроводными приложениями или параметрами настройки. Эти способы могут быть применены к кодированию видео в поддержку любого множества мультимедийных приложений, таких как эфирное телевидение, передачи кабельного телевидения, передачи спутникового телевидения, Интернет, передачи потокового видео, такие как динамическая адаптивная потоковая передача по HTTP (DASH), цифровое видео, которое закодировано на запоминающем носителе данных, декодирование цифрового видео, сохраненного на запоминающем носителе данных, или других приложений. В некоторых примерах система 10 может быть сконфигурирована, чтобы поддерживать одностороннюю или двухстороннюю передачу видео, чтобы поддерживать приложения, такие как потоковая передача видео, воспроизведение видео, вещание видео и/или видео телефония.
[0046] В примере на ФИГ. 1 исходное устройство 12 включает в себя видео источник 18, видео кодер 20 и интерфейс 22 вывода. Устройство 14 назначения включает в себя интерфейс 28 ввода, видео декодер 30, и устройство 32 отображения. В соответствии с этим раскрытием видео кодер 20 из исходного устройства 12 может быть сконфигурирован, чтобы применять способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV. В других примерах исходное устройство и устройство назначения могут включать в себя другие компоненты или компоновки. Например, исходное устройство 12 может принять данные видео из внешнего видео источника 18, такого как внешняя камера. Аналогично, устройство 14 назначения может взаимодействовать с внешним устройством отображения, вместо включения интегрированного устройства отображения.
[0047] Иллюстрированная система 10 из ФИГ. 1 является просто одним примером. Способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV, могут быть выполнены любым цифровым устройством кодирования и/или декодирования видео. Хотя обычно способы настоящего раскрытия выполняются устройством кодирования видео, эти способы могут также быть выполнены видео кодером/декодером, обычно называемым как "кодек". Кроме того, способы настоящего раскрытия могут также быть выполнены видео препроцессором. Исходное устройство 12 и устройство 14 назначения является просто примерами таких устройств кодирования, в которых исходное устройство 12 генерирует закодированные данные видео для передачи к устройству 14 назначения. В некоторых примерах устройства 12, 14 могут работать по существу симметричным способом таким образом, что каждое из устройств 12, 14 включают в себя компоненты кодирования и декодирования видео. Следовательно, система 10 может поддерживать одностороннюю или двухстороннюю передачу видео между видео устройствами 12, 14, например, для потоковой передачи видео, воспроизведения видео, вещания видео или видео телефонии.
[0048] Видео источник 18 из исходного устройства 12 может включать в себя устройство захвата видео, такое как видео камера, видео архив, содержащий ранее захваченное видео, и/или интерфейс подачи видео, чтобы принять видео от поставщика видео контента. В качестве дальнейшей альтернативы, видео источник 18 может генерировать основанные на компьютерной графике данные в качестве исходного видео, или комбинацию живого видео, заархивированного видео, и машинно-генерируемого видео. В некоторых случаях, если видео источник 18 является видео камерой, исходное устройство 12 и устройство 14 назначения могут сформировать так называемые камерофоны или видео телефоны. Как упомянуто выше, однако, способы, описанные в настоящем раскрытии, могут быть применимыми к кодированию видео в целом, и могут быть применены к беспроводным и/или проводным приложениям. В каждом случае захваченное, предзахваченное, или машинно-генерируемое видео может быть закодировано видео кодером 20. Закодированная видео информация может затем быть выведена интерфейсом 22 вывода на считываемый компьютером носитель 16.
[0049] Считываемый компьютером носитель 16 может включать в себя временный носитель, такой как передача беспроводного вещания или проводная передача по сети, или запоминающие носители (то есть, невременные запоминающие носители), такие как жесткий диск, флэш-накопитель, компакт-диск, цифровой видео диск, диск Blu-ray, или другой считываемый компьютером носитель. В некоторых примерах сетевой сервер (не показан) может принять закодированные данные видео от исходного устройства 12 и выдать закодированные данные видео устройству 14 назначения, например, через передачу по сети. Аналогично, вычислительное устройство фабрики по производству носителей, такое как устройство штамповки дисков, может принять закодированные данные видео от исходного устройства 12 и сформировать диск, содержащий закодированные данные видео. Поэтому считываемый компьютером носитель 16, как можно понимать, включает в себя один или более считываемых компьютером носителей различных форм в различных примерах.
[0050] Интерфейс 28 ввода из устройства 14 назначения принимает информацию от считываемого компьютером носителя 16. Информация считываемого компьютером носителя 16 может включать в себя информацию синтаксиса, определенную видео кодером 20, которая также используется декодером видео 30, которая включает в себя элементы синтаксиса, которые описывают характеристики и/или обработку блоков и других закодированных единиц, например, GOP (групп картинок). Устройство 32 отображения отображает декодированные данные видео пользователю, и может содержать любое из множества устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светодиодах (OLED), или другой тип устройства отображения.
[0051] Видео кодер 20 и видео декодер 30 могут работать согласно стандарту кодирования видео, такому как стандарт высокоэффективного кодирования видео (HEVC), находящийся сейчас в стадии развития, и могут соответствовать тестовой модели HEVC (HM). Аналогично, видео кодер 20 и видео декодер 30 может быть сконфигурирован согласно расширению стандарта HEVC, например, расширению для множественных видов или расширению для трехмерного видео (3DV). Альтернативно, видео кодер 20 и видео декодер 30 могут работать согласно другим составляющим собственность стандартам или стандартам промышленности, таким как стандарт ITU-T H.264, альтернативно называемый MPEG-4, Часть 10, Усовершенствованное кодирование видео (AVC), или расширения таких стандартов. Способы настоящего раскрытия, однако, не ограничены никаким конкретным стандартом кодирования. Другие примеры стандартов кодирования видео включают в себя MPEG-2 и ITU-T H.263. Хотя не показано на ФИГ. 1, в некоторых аспектах видео кодер 20 и видео декодер 30 могут каждый интегрироваться с аудио кодером и декодером, и могут включать в себя соответствующие блоки MUX-DEMUX (мультиплексирования-демультиплексирования), или другое аппаратное обеспечение и программное обеспечение, чтобы управлять кодированием и аудио и видео в общем потоке данных или отдельных потоках данных. Если применимо, блоки MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223, или другим протоколам, таким как протокол дейтаграмм пользователя (UDP).
[0052] Стандарт ITU-T H.264/MPEG-4 (AVC) был сформулирован группой экспертов по кодированию видео ITU-T (VCEG) вместе с ISO/IEC Группой экспертов по движущимся изображениям (MPEG) как продукт коллективного товарищества, известного как объединенная команда видео (JVT). В некоторых аспектах способы, описанные в настоящем раскрытии, могут быть применены к устройствам, которые обычно соответствуют стандарту H.264. Стандарт H.264 описан в рекомендации H.264 ITU-T, усовершенствованному кодированию видео для обобщенных аудиовизуальных услуг, группой по изучению ITU-T, и датированной мартом 2005, который может быть упомянут здесь как стандарт H.264 или спецификация H.264, или стандарт H.264/AVC или спецификация. Объединенная команда видео (JVT) продолжает работать с расширениями к H.264/MPEG-4 AVC.
[0053] Видео кодер 20 и видео декодер 30 каждый может быть реализован как любая из множества подходящих схем кодера, таких как один или более микропроцессоров, цифровых сигнальных процессоров (DSPs), специализированных интегральных схем (ASICs), программируемых пользователем вентильных матриц (FPGAs), схем дискретной логики, программного обеспечения, аппаратного обеспечения, программно-аппаратные средства или любые их комбинации. Когда способы реализованы частично в программном обеспечении, устройство может сохранить инструкции для программного обеспечения в подходящем невременном считываемом компьютером носителе и выполнять инструкции в аппаратном обеспечении, используя один или более процессоров, чтобы выполнять способы настоящего раскрытия. Каждый видео кодер 20 и видео декодер 30 может быть включен в один или более кодеров или декодеров, любой из которых может интегрироваться как часть объединенного кодера/декодера (кодек) в соответствующем устройстве.
[0054] JCT-VC работает над развитием стандарта HEVC. Усилия по стандартизации HEVC основаны на развивающейся модели устройства кодирования видео, называемой тестовой моделью HEVC (HM). HM предполагает несколько дополнительных возможностей устройств кодирования видео относительно существующих устройств согласно, например, ITU-T H.264/AVC. Например, тогда как H.264 обеспечивает девять режимов кодирования с внутренним предсказанием, HM может обеспечить целых тридцать три режима кодирования с внутренним предсказанием.
[0055] В целом рабочая модель HM описывает, что видео кадр или картинка могут быть разделены на последовательность блоков дерева или наибольших единиц кодирования (LCU), которые включают в себя выборки как яркости так и цветности. Данные синтаксиса в пределах потока битов могут определить размер для LCU, которая является наибольшей единицей кодирования в терминах количества пикселей. Вырезка включает в себя множество последовательных блоков дерева в порядке кодирования. Видео кадр или картинка могут быть разделены на одну или более вырезок. Каждый блок дерева может быть разделен на единицы кодирования (CUs) согласно квадродереву. В целом, структура данных квадродерева включает в себя один узел для каждой CU, с корневым узлом, соответствующим блоку дерева. Если CU разделена на четыре суб-CU, узел, соответствующий этой CU, включает в себя четыре листовых узла, каждый из которых соответствует одной из суб-CU.
[0056] Каждый узел структуры данных квадродерева может обеспечить данные синтаксиса для соответствующей CU. Например, узел в квадродереве может включать в себя флаг разделения, указывающий, разделена ли CU, соответствующая узлу, на суб-CUs. Элементы синтаксиса для CU могут быть определены рекурсивно, и могут зависеть от того, разделена ли CU на суб-CUs. Если CU не разделена далее, она называется как листовая-CU. В настоящем раскрытии четыре суб-CU листовой-CU будут также упоминаться как листовые-CU, даже если не имеется никакого явного разделения первоначальной листовой-CU. Например, если CU размером 16×16 не будет разделена далее, то четыре 8×8 суб-CU будут также упоминаться как листовые-CU, хотя CU 16×16 никогда не разделялась.
[0057] CU имеет аналогичную цель как макроблок стандарта H.264, за исключением того, что CU не имеет различия в размерах. Например, блок дерева может быть разделен на четыре дочерних узла (также называемых суб-CU), и каждый дочерний узел может в свою очередь быть родительским узлом и быть разделен еще на четыре дочерних узла. Заключительный, неразделенный дочерний узел, называемый листовым узлом квадродерева, содержит узел кодирования, также называемый листовой-CU. Данные синтаксиса, ассоциированные с закодированным потоком битов, могут определить максимальное количество раз, сколько блок дерева может быть разделен, называемое максимальной глубиной CU, и может также определить минимальный размер узлов кодирования. Соответственно, поток битов может также определить наименьшую единицу кодирования (SCU). Настоящее раскрытие использует термин "блок", чтобы ссылаться на любую из CU, PU, или TU, в контексте HEVC, или подобных структурах данных в контексте других стандартов (например, их макроблоки и суб-блоки в H.264/AVC).
[0058] CU включает в себя узел кодирования и единицы предсказания (PU) и единицы преобразования (TU), ассоциированные с узлом кодирования. Размер CU соответствует размеру узла кодирования и должен быть квадратным по форме. Размер CU может изменяться от 8x8 пикселей до размера блока дерева с максимумом 64x64 пикселей или больше. Каждая CU может содержать одну или более единиц PU и одну или более единиц TU. Данные синтаксиса, ассоциированные с CU, могут описывать, например, разделение CU в одну или более единиц PU. Режимы разделения могут отличаться между тем, является ли CU закодированной в режиме пропуска или прямом, закодированной в режиме внутреннего предсказания, или закодированной в режиме внешнего предсказания. Единицы PU могут быть разделены, чтобы быть неквадратным по форме. Данные синтаксиса, ассоциированные с CU, могут также описывать, например, разделение CU в одну или более единиц TU согласно квадродереву. TU может быть квадратной или неквадратной (например, прямоугольной) по форме.
[0059] Стандарт HEVC обеспечивает преобразования согласно единицам TU, которые могут быть различными для различных единиц CU. Единицы TU обычно измеряется на основании размера единиц PU в пределах заданной CU, определенной для разделенной LCU, хотя это может не всегда иметь место. Единицы TU обычно имеют тот же размер или меньший, чем единицы PU. В некоторых примерах остаточные выборки, соответствующие единице CU, могут быть подразделены на меньшие блоки, используя структуру квадродерева, известную как “остаточное квадродерево” (RQT). Листовые узлы RQT могут упоминаться как единицы преобразования (единицы TU). Значения пиксельных разностей, ассоциированные с единицами TU, могут быть преобразованы, чтобы сформировать коэффициенты преобразования, которые могут быть квантованы.
[0060] Листовая-CU может включать в себя одну или более единиц предсказания (единиц PU). В целом, PU представляет пространственную область, соответствующую всем или части соответствующей CU, и может включать в себя данные для того, чтобы извлечь опорную выборку для PU. Кроме того, PU включает в себя данные, относящиеся к предсказанию. Например, когда PU является закодированной во внутреннем режиме, данные для этой PU могут быть включены в остаточное квадродерево (RQT), которое может включать в себя данные, описывающие режим внутреннего предсказания для TU, соответствующей PU. В качестве другого примера, когда PU является закодированной во внешнем режиме, PU может включать в себя данные, определяющие один или более векторов движения для этой PU. Данные, определяющие вектор движения для PU, могут описывать, например, горизонтальный компонент вектора движения, вертикальный компонент вектора движения, разрешения для вектора движения (например, пиксельная точность в одну четверть или пиксельная точность в одну восьмую), опорную картинку, на которую вектор движения указывает, и/или список опорных картинок (например, Список 0, Список 1, или Список C) для вектора движения.
[0061] Листовая-CU, имеющая одну или более единиц PU, может также включать в себя одну или более единиц преобразования (единиц TU). Единицы преобразования могут быть заданы, используя RQT (также называемую структурой квадродерева TU), как описано выше. Например, флаг разделения может указывать, разделена ли листовая-CU на четыре единицы преобразования. Затем каждая единица преобразования может быть разделена далее на дополнительные суб-единицы TU. Когда TU не разделена далее, она может упоминаться как листовая-TU. В целом, для внутреннего кодирования все листовые-TU, принадлежащие листовой-CU, совместно использует один и тот же режим внутреннего предсказания. Таким образом, один и тот же режим внутреннего предсказания обычно применяют, чтобы вычислить предсказанные значения для всех единиц TU листовой-CU. Для внутреннего кодирования видео кодер 20 может вычислить остаточное значение для каждой листовой-TU, используя режим внутреннего предсказания, как разность между частью CU, соответствующей этой TU, и первоначальным блоком. TU не обязательно ограничена размером PU. Таким образом, единицы TU могут быть большими или меньшими чем PU. Для внутреннего кодирования PU может быть расположена с соответствующей листовой-TU для одной и той же CU. В некоторых примерах максимальный размер листовой-TU может соответствовать размеру соответствующей листовой-CU.
[0062] Кроме того, единицы TU листовой-CU могут также быть ассоциированы с соответствующими структурами данных квадродерева, называемых остаточными квадродеревьями (RQT). Таким образом, листовая-CU может включать в себя квадродерево, указывающее, как листовая-CU разделена на единицы TU. Корневой узел квадродерева TU обычно соответствует листовой-CU, в то время как корневой узел квадродерева CU обычно соответствует блоку дерева (или LCU). Единицы TU для RQT, которые не разделены, упоминается как листовые-TU. В целом, настоящее раскрытие использует термины CU и TU, чтобы ссылаться на листовые-CU и листовые-TU, соответственно, если не отмечено иначе.
[0063] Видео последовательность обычно включает в себя ряд видео кадров или картинок. Группа картинок (GOP) обычно содержит последовательность из одной или более картинок видео. GOP может включать данные синтаксиса в заголовок GOP, заголовок одной или более картинок, или в другое место, которое описывает множество картинок, включенных в GOP. Каждая вырезка картинки может включать в себя данные синтаксиса вырезки, которые описывают режим кодирования для соответствующей вырезки. Видео кодер 20 обычно оперирует над блоками видео в пределах индивидуальных видео вырезок, чтобы закодировать данные видео. Блок видео может соответствовать узлу кодирования в пределах CU. Блоки видео могут иметь фиксированные или переменные размеры, и могут отличаться по размеру согласно указанному стандарту кодирования.
[0064] Как пример, HM поддерживает предсказание в различных размерах PU. Предполагая, что размер конкретной CU равен 2N×2N, HM поддерживает внутреннее предсказание в размерах PU 2N×2N или N×N, и внешнее предсказание в симметричных размерах PU, равных 2N×2N, 2N×N, N×2N, или N×N. HM также поддерживает асимметричное разделение для внешнего предсказания в размерах PU, равных 2N×nU, 2N×nD, nL×2N, и nR×2N. В асимметричном разделении одно направление CU не разделяется, в то время как другое направление разделяется на 25% и 75%. Часть CU, соответствующая 25%-ому разделению, обозначена “n”, сопровождаемым индикацией “Верхний”, "Нижний", "Левый", или "Правый". Таким образом, например, “2N×nU” относится к 2N×2N CU, которая разделена горизонтально с 2N×0,5N PU наверху и 2N×1,5N PU внизу.
[0065] В настоящем раскрытии “N×N” и "N на N" могут быть использованы взаимозаменяемо, чтобы ссылаться на пиксельные размерности блока в терминах вертикального и горизонтального измерений, например, 16×16 пикселей или 16 на 16 пикселей. Обычно блок 16×16 будет иметь 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Аналогично, блок N×N обычно имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целочисленное значение. Пиксели в блоке могут быть размещены в рядах и колонках. Кроме того, блоки не обязательно должны иметь одно и то же количество пикселей в горизонтальном направлении как в вертикальном направлении. Например, блоки могут содержать N×M пикселей, где М не обязательно равно N.
[0066] Видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы выполнять один или более различных способов настоящего раскрытия, по одному или в любой комбинации. Например, в соответствии с некоторыми способами настоящего раскрытия, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы выполнять различные способы, относящиеся к кодированию видео с множественными видами (MVC) или трехмерному видео (3DV) кодированию, например, как расширения H.264/AVC или HEVC. Расширения стандартов MVC и/или 3DV кодирования видео могут быть достигнуты в некоторых случаях, используя изменения синтаксиса высокого уровня (HLS) к базовому стандарту. Например, вместо того, чтобы ввести новые структуры кодирования, некоторые существующие структуры кодирования могут быть пересмотрены или использоваться другим способом, чтобы достигнуть расширения только для HLS.
[0067] В качестве примера, чтобы закодировать данные видео в соответствии с расширениями MVC и 3DV, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы выполнять предсказание между видами или между уровнями. Таким образом, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы предсказывать блоки текущей картинки в текущем виде, используя данные ранее закодированной картинки ранее закодированного вида. Как правило, ранее закодированная картинка (то есть, опорная картинка между видами) и текущая картинка имеет одно и то же значение (POC) счета по порядку картинки, так что опорная картинка между видами и текущая картинка имеют место в одном и том же блоке доступа, и аналогично, имеют по существу один и тот же порядок вывода (или порядок отображения).
[0068] Видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы использовать диспаратный вектор движения, чтобы закодировать текущий блок текущей картинки, используя предсказание между видами. Таким образом, в некоторых примерах диспаратный вектор движения, можно сказать, содержит вектор движения, для которого текущее значение POC для текущей картинки, включающей текущий блок, предсказанное с использованием вектора движения, равно значению POC опорной картинки, на которую ссылается упомянутый вектор движения. Таким образом, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить, что вектор движения является диспаратным вектором движения, когда значение POC для блока, предсказанного вектором движения, равно значению POC опорной картинки, на которую ссылается вектор движения. Аналогично, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить, что вектор движения содержит временный вектор движения, когда POC для блока, предсказанного вектором движения, не равно значению POC опорной картинки, на которую ссылается вектор движения.
[0069] Дополнительно или альтернативно, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить, что вектор движения содержит диспаратный вектор движения, когда текущая картинка, включающая в себя текущий блок, предсказанный с использованием вектора движения, находится в другом уровне, чем опорная картинка, на которую ссылается вектор движения. Аналогично, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить, что вектор движения содержит временный вектор движения, когда текущая картинка, включающая в себя текущий блок, предсказанная с использованием вектора движения, находится в том же уровне, что и опорная картинка, на которую ссылается вектор движения.
[0070] В качестве еще одного другого примера, HEVC отличает долгосрочные от краткосрочных опорных картинок. В методах HEVC долгосрочные картинки сохраняют в буфере декодированных картинок (DPB) относительно дольше, чем краткосрочные опорные картинки. Дополнительно, элементы синтаксиса используются для указания, является ли опорная картинка долгосрочной или краткосрочной опорной картинкой. В некоторых примерах в MVC и 3DV, долгосрочные опорные картинки могут вместо этого соответствовать временным опорным картинкам (то есть, одного и того же уровня или вида, что и текущая закодированная картинка), в то время как краткосрочные опорные картинки могут вместо этого соответствовать опорным картинкам между видами (то есть, другого уровня или вида, что и текущая закодированная картинка). Таким образом, использование долгосрочных и краткосрочных опорных картинок может также обеспечить индикацию того, является ли опорная картинка временной опорной картинкой или опорной картинкой между видами. Аналогично, вектор движения, ссылающийся на долгосрочную опорную картинку, может содержать временный вектор движения, тогда как вектор движения, ссылающийся на краткосрочную опорную картинку, может содержать диспаратный вектор движения.
[0071] В соответствии с некоторыми способами настоящего раскрытия, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы запретить использование векторов движения различных типов в качестве предсказателей вектора движения друг для друга. Например, если текущий вектор движения является временным вектором движения, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы не использовать диспаратные вектора движения в качестве предсказателей вектора движения, чтобы предсказать временный вектор движения. Аналогично, если текущий вектор движения является диспаратным вектором движения, видео кодер 20 и видео декодер 30 могут быть сконфигурированы не использовать временные вектора движения в качестве предсказателей вектора движения, чтобы предсказать диспаратный вектор движения.
[0072] Видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы выполнять различные режимы предсказания вектора движения. В одном примере, режиме слияния, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать флаг слияния, представляющий, от какого из множества соседних блоков наследовать параметры движения, такие как, например, список опорных картинок, из которого выбирать опорную картинку, опорный индекс, указывающий опорную картинку в опорном списке, горизонтальный компонент вектора движения, и вертикальный компонент вектора движения.
[0073] В другом примере, усовершенствованном предсказании вектора движения (AMVP), видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать индикацию списка опорных картинок, из которых выбирать опорную картинку, опорный индекс, указывающий опорную картинку в списке опорных картинок, значение разности вектора движения, и индекс AMVP, представляющий соседний блок, из которого выбирать предсказатель вектора движения.
[0074] В режиме слияния и/или режиме AMVP или других таких режимах кодирования вектора движения видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы не использовать информацию движения от соседнего блока, который использует вектор движения другого типа, чем вектор движения текущего блока. Таким образом, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить первый тип для текущего вектора движения, второй тип для предсказателя вектора движения - кандидата, и если первый тип не является таким же как второй тип, запретить использование предсказателя вектора движения - кандидата в качестве предсказателя вектора движения для текущего вектора движения.
[0075] Чтобы запретить предсказатель вектора движения - кандидат, видео кодер 20 и видео декодер 30 могут установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя вектора движения для текущего вектора движения. Видео кодер 20 и видео декодер 30 могут установить значение для этой переменной, чтобы указывать, что предсказатель вектора движения - кандидат не доступен, даже когда предсказатель вектора движения - кандидат ранее считался доступным на основании других условий, которые указывали, что предсказатель вектора движения - кандидат был доступен. Например, как объяснено более подробно ниже, видео кодер 20 и видео декодер 30 могут ассоциировать переменную с предсказателем вектора движения - кандидатом, где значение переменной указывает, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя вектора движения для текущего вектора движения.
[0076] В частности, видео кодер 20 может быть сконфигурирован, чтобы определить набор предсказателей вектора движения, которые доступны для использования, чтобы предсказать текущий вектор движения. Видео декодер 30 может также быть сконфигурирован, чтобы конструировать такой набор, или альтернативно, видео кодер 20 может сигнализировать набор предсказателей вектора движения, которые доступны. В любом случае, видео кодер 20 и видео декодер 30 могут определить набор доступных предсказателей вектора движения, и выбрать один из набора предсказателей вектора движения в качестве фактического предсказателя вектора движения, чтобы использовать, чтобы закодировать текущий вектор движения.
[0077] В режиме AMVP видео кодер 20 может вычислять значения разности вектора движения между текущим вектором движения и предсказателем вектора движения и закодировать значения разности вектора движения. Аналогично, видео декодер 30 может объединить значения разности вектора движения с определенным предсказателем вектора движения, чтобы реконструировать текущий вектор движения (то есть, вектор движения для текущего блока данных видео, например, текущей PU). В режиме слияния фактический предсказатель вектора движения может использоваться как текущий вектор движения. Таким образом, в режиме слияния видео кодер 20 и видео декодер 30 могут рассматривать значения разности вектора движения как оцениваемые как нуль.
[0078] В соответствии с некоторыми способами настоящего раскрытия, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить, недоступны ли один или более предсказателей вектора движения - кандидатов в списке предсказателей вектора движения - кандидатов (любой или все из которых могли быть ранее настроены как доступные на основании других критериев) для предсказания текущего вектора движения на основании того, имеют ли один или более предсказателей вектора движения - кандидатов отличные типы, чем текущий вектор движения. Видео кодер 20 и видео декодер 30 могут также конфигурироваться, чтобы запретить предсказание вектора движения, используя те предсказатели вектора движения - кандидаты, которые настроены как недоступные, например, посредством установки доступного флага (или переменной) для недоступных предсказателей вектора движения - кандидатов в значение, указывающее, что недоступные предсказатели вектора движения - кандидаты недоступны.
[0079] Дополнительно или альтернативно, после выбора предсказателя вектора движения из набора доступных предсказателей вектора движения - кандидатов, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы определить, является ли выбранный предсказатель вектора движения диспаратным вектором движения (то есть, ссылается ли выбранный предсказатель вектора движения на опорную картинку между видами). Если да, видео кодер 20 и видео декодер 30 могут запретить масштабирование предсказателя вектора движения при кодировании текущего вектора движения. Таким образом, предполагая, что текущий вектор движения и предсказатель вектора движения - оба являются диспаратными векторами движения (то есть, ссылаются на опорную картинку между видами), разность в значениях POC между текущей картинкой и опорной картинкой(ками) между видами будет нулем (так как опорные картинки между видами обычно имеют место в пределах одной и той же единицы доступа в качестве текущей закодированной картинки), и поэтому, масштабирование не является необходимым. Кроме того, попытка масштабировать предсказатель вектора движения может вызвать ошибки, которых можно избежать, запрещая масштабирование, в соответствии со способами настоящего раскрытия.
[0080] В некоторых примерах в MVC или 3DV расширении для HEVC, enable_temporal_mvp_flag всегда устанавливается в 0 для любого активного PPS. То есть, видео кодер 20 может быть сконфигурирован, чтобы установить enable_temporal_mvp_flag активного PPS в MVC или 3DV расширении для HEVC в 0. Аналогично, видео декодер 30 может быть сконфигурирован, чтобы декодировать enable_temporal_mvp_flag, или логически вывести значение 0 для enable_temporal_mvp_flag при декодировании потока битов, соответствующего MVC или 3DV расширению для HEVC.
[0081] В некоторых примерах в MVC или 3DV расширении для HEVC, видео кодер 20 и видео декодер 30 устанавливают значение collocated_ref_idx таким способом, что совмещенная картинка никогда не соответствует опорной картинке из другого вида, в профиле, который имеет изменения только синтаксиса высокого уровня (HLS). Кроме того, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать данные, представляющие индикацию для MVC или 3DV расширения для HEVC, чтобы позволить профилю, который использует изменения низкого уровня, иметь больше гибкости совмещенных картинок.
[0082] В некоторых примерах видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать данные, представляющие индикацию в заголовке вырезки для вырезки, закодированной согласно HEVC, чтобы явно запретить масштабирование векторов движения идентифицированной совмещенной картинки во время TMVP. Такая совмещенная картинка может быть отмечена как «неиспользуемая для временного предсказания вектора движения».
[0083] В некоторых примерах в HEVC видео кодер 20 и видео декодер 30 могут запретить масштабирование вектора движения во время усовершенствованного предсказания вектора движения, когда вектор движения соседнего блока имеет отличный опорный индекс, чем текущий опорный индекс, и также отличное значение (POC) счета по порядку картинки, чем таковое текущей опорной картинки. Видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать данные, представляющие индикацию, которая может быть в заголовке вырезки, наборе параметров адаптации (APS), наборе параметров картинки (PPS), наборе параметров последовательности (SPS), наборе параметров видео (VPS), или другой структуре данных, чтобы сигнализировать, запрещено ли или разрешено AMVP.
[0084] В некоторых примерах в HEVC видео кодер 20 и видео декодер 30 могут определить вектор движения из пространственно соседнего блока как недоступный, когда один и только один из этого вектора движения и вектора движения, который должен быть предсказан, исходит из картинки, которая имеет то же самое значение POC, как текущая картинка. Такие способы могут относиться к любому или обоим из режимов AMVP и слияния. Альтернативно, такие способы можно применять только к аспекту режима временного предсказания вектора движения (TMVP) режимов AMVP и слияния. Видео кодер 20 и видео декодер 30 могут кодировать данные в заголовке вырезки, APS, SPS, PPS, или VPS, представляющие индикацию - разрешить или запретить этот метод.
[0085] В некоторых примерах с HEVC вектор движения, для которого опорный индекс указывает на картинку из другого вида/уровня, можно считать также недоступным для использования в качестве предсказателя вектора движения, когда опорный индекс вектора движения, который должен быть предсказан, указывает на временную опорную картинку (из того же вида/уровня). Это может относиться к обоим из режимов AMVP и слияния. Альтернативно, это может применяться только к части TMVP режимов AMVP и слияния.
[0086] В некоторых примерах в HEVC видео кодер 20 и видео декодер 30 могут закодировать данные, представляющие индикацию для каждого поднабора набора опорных картинок (RPS), чтобы сигнализировать, будет ли какая-нибудь совмещенная картинка из конкретного поднабора RPS использоваться для масштабирования вектора движения, когда совмещенная картинка будет идентифицирована как совмещенная картинка во время TMVP. Каждая картинка в поднаборе RPS может быть отмечена как «неиспользуемая для временного предсказания вектора движения».
[0087] В некоторых примерах в HEVC видео кодер 20 и видео декодер 30 могут закодировать данные, представляющие индикацию для каждого поднабора RPS, чтобы сигнализировать, будет ли рассматриваться какое-нибудь пространственно соседнее предсказание вектора движения из картинки в конкретном поднаборе RPS как недоступное во время AMVP, если этот вектор движения и вектор движения, который должен быть предсказан, принадлежат поднаборам RPS, имеющим одну и ту же индикацию.
[0088] В некоторых примерах в HEVC видео кодер 20 и видео декодер 30 могут закодировать данные, представляющие новый тип неявного взвешенного предсказания для вырезок B, таким образом, что для некоторых пар опорных картинок в RefPicList0 и RefPicList1, если любая из опорных картинок в паре используется для взвешенного би-предсказания для PU, веса могут быть одинаковыми для обеих опорных картинок. Для других комбинаций картинок из RefPicList0 и RefPiclist1, может применяться текущее неявное взвешенное предсказание в HEVC или H.264/AVC. Видео кодер 20 и видео декодер 30 могут закодировать данные, представляющие, какие комбинации разрешены или запрещены в заголовке вырезки.
[0089] В некоторых примерах видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы не использовать диспаратный вектор движения, чтобы предсказать нормальный (то есть, временный) вектор движения, и не использовать временный вектор движения, чтобы предсказать диспаратный вектор движения. Кроме того, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы не измерить диспаратный вектор движения. В некоторых примерах, когда одна или две опорные картинки текущей PU являются опорными картинками между видами, и включен неявный взвешенный режим предсказания, веса для этих двух опорных картинок текущей PU могут быть установлены одинаковыми (например, Ѕ, Ѕ).
[0090] В некоторых примерах в качестве выведения свойств поднаборов RPS, для каждого поднабора RPS из RefPicSetLtCurr, RefPicSetLtFoll, RefPicSetStCurrBefore, RefPicSetStCurrAfter и RefPicSetStFoll, видео кодировщик может вывести RefTypeIdc, чтобы быть равным 0. Каждая картинка, включенная в поднабор RPS, может иметь набор RefPicTypeIdc, равный RefTypeIdc поднабора RPS. В качестве примера использования этого в потенциальном расширении MVC HEVC, поднабор RPS между видами может быть установлен, чтобы иметь RefTypeIdc равный 1.
[0091] Настоящее раскрытие определяет функцию RefPicTypeFunc(pic), которая возвращает значение RefPicTypeIdc опорной картинки "pic", переданной к функции в качестве аргумента. Эта функция может быть выполнена как часть процесса декодирования, например, видео кодером 20, при декодировании ранее закодированных данных видео для использования в качестве опорных данных видео, или декодером 30 видео во время процесса декодирования видео.
k
k
0
0
1
1
1
0
[0092] Настоящее раскрытие также обеспечивает способы для процесса выведения для кандидатов предсказателя вектора движения. Видео кодировщик, такой как видео кодер 20 и видео декодер 30, может вывести вектор движения mvLXA и флаг доступности availableFlagLXA с использованием следующей процедуры, в дополнение или как альтернатива процедурам обычного HEVC. Когда availableFlagLXA равен 0, для (xA, yA) из (xA, yA)-(xA, yA), где yA=yA - MinPuSize, следующее может применяться повторяющимся образом, пока availableFlagLXA не равен 1 (где числа в формате #-### относятся к конкретным секциям предстоящего стандарта HEVC, в этом примере):
k
k
k
k
k
k
k
k
*Если единица предсказания, охватывающая местоположение яркости (xA, yA), доступна, PredMode не является MODE_INTRA, predFlagLX [xA] [yA] равно 1, availableFlagLXA установлен равным 1, вектор движения mvLXA установлен равным вектору движения mvLX [xA] [yA], refIdxA установлен равным refIdxLX [xA] [yA], ListA установлен равным LX.
k
k
k
k
k
k
k
k
*Иначе, если единица предсказания, охватывающая местоположение яркости (xA, yA), доступна, PredMode не является MODE_INTRA, predFlagLY [xA] [yA] (с Y=!X) равно 1, availableFlagLXA установлен равным 1, вектор движения mvLXA установлен равным вектору движения mvLY [xA] [yA], refIdxA установлен равным refIdxLY [xA] [yA], ListA установлен равным LY.
*Если availableFlagLXA равен 1, и RefPicTypeFunc (RefPicListListA (refIdxA)) не равен RefPicTypeFunc (RefPicListLX (refIdxLX)), availableFlagLXA установлен в 0.
*Когда availableFlagLXA равен 1, и RefPicTypeFunc (RefPicListListA (refIdxA)) и RefPicTypeFunc (RefPicListLX (refIdxLX)) оба равны 0, mvLXA может быть выведен как определено ниже:
tx=(16384+(Abs (td)>>1))/td (8-136)
DistScaleFactor = Clip3 (−4096, 4095, (tb*tx+32)>>6)  (8-137)
mvLXA=Clip3 (−8192, 8191.75, Sign(DistScaleFactor*mvLXA)*((Abs (DistScaleFactor*mvLXA)+127)>> 8)) (8-138)
где td и tb могут быть выведены как:
td=Clip3 (−128, 127, PicOrderCntVal - PicOrderCnt (RefPicListListA (refIdxA))) (8-139)
tb=Clip3 (−128, 127, PicOrderCntVal - PicOrderCnt (RefPicListLX (refIdxLX))) (8-140)
*Когда availableFlagLXA равен 1, и RefPicTypeFunc (RefPicListListA (refIdxA)) и RefPicTypeFunc (RefPicListLX (refIdxLX)) оба равны ненулевому значению, mvLAX установлен в mvLXA без масштабирования.
k
k
0
0
2
2
0
1
0
2
[0093] Видео кодировщик, такой как видео кодер 20 и видео декодер 30, может вывести вектор движения mvLXB и флаг доступности availableFlagLXB с использованием следующей процедуры, в дополнение к или альтернативно процедурам обычного HEVC. Когда isScaledFlagLX равен 0, availableFlagLXB может быть установлен равным 0 и для (xB, yB) из (xB, yB)-(xB, yB), где xB=xP+nPSW, xB=xB-MinPuSize, и xB=xP-MinPuSize, следующее может повторяющимся образом применяться, пока availableFlagLXB не равен 1:
k
k
*Если единица предсказания, охватывающая местоположение яркости (xB, yB), доступна, PredMode не является MODE_INTRA, predFlagLX [xBk] [yBk] равен 1, availableFlagLXB установлен равным 1, вектор движения mvLXB установлен равным вектору движения mvLX [xBk] [yBk], refIdxB установлен равным refIdxLX [xBk] [yBk], ListB установлен равным LX.
*Иначе, если единица предсказания, охватывающая местоположение яркости (xBk, yBk), доступна, PredMode не является MODE_INTRA, predFlagLY [xBk] [yBk] (с Y=! X) равен 1, availableFlagLXB установлен равным 1, вектор движения mvLXB установлен равным вектору движения mvLY [xBk] [yBk], refIdxB установлен равным refIdxLY [xBk] [yBk], ListB установлен равным LY.
*Если availableFlagLXA равен 1, и RefPicTypeFunc (RefPicListListB (refIdxB)) не равен RefPicTypeFunc (RefPicListLX (refIdxLX)), availableFlagLXB установлен в 0.
*Когда availableFlagLXB равен 1 и RefPicTypeFunc (RefPicListListA (refIdxA)) и RefPicTypeFunc (RefPicListLX (refIdxLX)) и равны 0, и PicOrderCnt (RefPicListListB (refIdxB)) не равен PicOrderCnt (RefPicListLX (refIdxLX)), mvLXB выводится, как определено ниже.
tx=(16384+(Abs (td)>>1))/td (8-144)
DistScaleFactor=Clip3 (−4096, 4095, (tb*tx+32)>>6) (8-145)
mvLXB =Clip3 (−8192, 8191.75, Знак (DistScaleFactor*mvLXA)*Abs (DistScaleFactor*mvLXA)+127)>>8)) (8-146)
где td и tb могут быть выведены как
td=Clip3 (−128, 127, PicOrderCntVal - PicOrderCnt (RefPicListListB (refIdxB))) (8-147)
tb=Clip3 (−128, 127, PicOrderCntVal - PicOrderCnt (RefPicListLX (refIdxLX))) (8-148)
*Когда availableFlagLXB равен 1, и RefPicTypeFunc (RefPicListListB (refIdxB)) и RefPicTypeFunc (RefPicListLX (refIdxLX)) оба равны ненулевому значению, mvLAX установлен в mvLXA без масштабирования.
[0094] Видео кодировщик, такой как видео кодер 20 и видео декодер 30, может вывести временной предсказатель вектора движения яркости в соответствии со способами настоящего раскрытия. Например, видео кодировщик может вывести переменные mvLXCol и availableFlagLXCol следующим образом:
*Если одно из следующих условий верно, оба компонента mvLXCol могут быть установлены равными 0, и availableFlagLXCol может быть установлен равным 0:
- colPu закодирован в режиме внутреннего предсказания.
- colPu отмечен как "недоступный".
- colPic отмечен как "неиспользуемый для временного предсказания вектора движения".
- enable_temporal_mvp_flag равен 0.
*Иначе, вектор движения mvCol, опорный индекс refIdxCol, и опорный идентификатор списка listCol могут быть выведены следующим образом.
- Если PredFlagL0 [xPCol] [yPCol] равен 0, mvCol, refIdxCol, и listCol может быть установлен равным MvL1 [xPCol] [yPCol], RefIdxL1 [xPCol] [yPCol], и L1, соответственно.
- Иначе (PredFlagL0 [xPCol] [yPCol] равен 1), следующее может применяться:
**Если PredFlagL1 [xPCol] [yPCol] равен 0, mvCol, refIdxCol, и listCol может быть установлен равным MvL0 [xPCol] [yPCol], RefIdxL0 [xPCol] [yPCol], и L0, соответственно.
*Иначе (PredFlagL1 [xPCol] [yPCol] равен 1), следующие назначения могут быть сделаны.
*Если PicOrderCnt (pic) каждой картинки pic в каждом списке опорных картинок меньше чем или равен PicOrderCntVal, mvCol, refIdxCol, и listCol могут быть установлены равным MvLX [xPCol] [yPCol], RefIdxLX [xPCol] [yPCol] и LX, соответственно, с X, являющимся значением X, когда этот процесс вызывается.
*Иначе (PicOrderCnt (pic) по меньшей мере одной картинки pic по меньшей мере в одном списке опорных картинок больше, чем PicOrderCntVal, mvCol, refIdxCol и listCol могут быть установлены равным MvLN [xPCol] [yPCol], RefIdxLN [xPCol] [yPCol] и LN, соответственно, с N быть значением collocated_from_10_flag.
и переменная availableFlagLXCol может быть установлена равной 1, и следующее может применяться:
**Если RefPicTypeFunc (RefPicListLX (refIdxLX)) не равен RefPicTypeFunc (listCol (refIdxCol)), availableFlagLXCol установлен равным 0. Следует отметить, что listCol (refIdxCol) возвращает опорную картинку временного вектора движения.
- Если availableFlagLXCol 1 и RefPicTypeFunc (RefPicListLX (refIdxLX)) и RefPicTypeFunc (listCol (refIdxCol)) оба равны ненулевому значению, или PicOrderCnt (colPic) - RefPicOrderCnt (colPic, refIdxCol, listCol) равен PicOrderCntVal - PicOrderCnt (RefPicListLX (refIdxLX)),
**mvLXCol = mvCol (8-153)
- Иначе, если RefPicTypeFunc (RefPicListLX (refIdxLX)) и RefPicTypeFunc (listCol (refIdxCol)) оба равны 0, mvLXCol может быть выведен как масштабированная версия вектора движения mvCol, как определено ниже:
tx=(16384+(Abs (td)>>1))/d 8-154)
DistScaleFactor=Clip3 (−4096, 4095, (tb*tx+32)>>6) (8-155)
mvLXCol=Clip3 (−8192, 8191.75, Sign(DistScaleFactor*mvCol)*(Abs (DistScaleFactor*mvCol)+127)>>8)) (8-156)
где td и tb могут быть выведены как:
td = Clip3 (−128, 127, PicOrderCnt (colPic)-RefPicOrderCnt (colPic, refIdxCol, listCol)) (8-157)
tb=Clip3 (−128, 127, PicOrderCntVal-PicOrderCnt (RefPicListLX (refIdxLX))) (8-158)
[0095] Переменные, описанные здесь, могут быть выведены для неявного взвешенного предсказания.
[0096] Настоящее раскрытие также обеспечивает способы для процесса взвешенного предсказания выборок, который видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы выполнить. Входными данными к этому процессу могут включать в себя:
*местоположение (xB, yB), задающее верхнюю левую выборку текущей единицы предсказания относительно верхней левой выборки текущей единицы кодирования,
*ширина и высота этой единицы предсказания, nPSW и nPSH,
*два массива (nPSW)×(nPSH) predSamplesL0 и predSamplesL1,
*флаги использования списка предсказания, predFlagL0 и predFlagL1,
*опорные индексы, refIdxL0 и refIdxL1,
*вектора движения, mvL0 и mvL1,
*битовая глубина компонента цветности, bitDepth.
[0097] Выходные данные этого процесса могут включать в себя:
*массив (nPSW) x (nPSH) predSamples значений выборки предсказания.
[0098] В одном примере переменные shift1, shift2, offset1, и offset2 выводятся следующим образом:
*переменная shift1 установлена равной 14-bitDepth, и переменная shift2 установлена равной 15-bitDepth,
*переменная offset1 установлена равной 1<<(shift1−1), и переменная offset2 установлена равной 1<<(shift2−1).
[0099] В вырезках P, если значение predFlagL0 равно 1, может применяться следующее:
*Если weighted_pred_flag равен 0, процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1, вызывается с теми же самыми входными и выходными данными, как и процесс, описанный в этом подпункте.
*Иначе (weighted_pred_flag равно 1), явный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 вызывается с теми же самыми входными и выходными данными, как и процесс, описанный в этом подпункте.
*В вырезках B, если predFlagL0 или predFlagL1 равны 1, следующее может применяться:
*Если weighted_bipred_idc равен 0, процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1, вызывается с теми же самыми входными и выходными данными, как и процесс, описанный в этом подпункте.
*Иначе, если weighted_bipred_idc равен 1 и если predFlagL0 или predFlagL1 равный 1, явный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 вызывается с теми же самыми входными и выходными данными, как и процесс, описанный в этом подпункте.
*Иначе (weighted_bipred_idc равно 2), следующее может применяться:
- Если predFlagL0 равен 1 и predFlagL1 равно 1, и оба, RefPicTypeFunc (RefPicListL0 (refIdxL0)) и RefPicTypeFunc (RefPicListL1 (refIdxL1)) равны 0, неявный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 текущего рабочего проекта HEVC, вызывается с теми же самыми входными и выходными данными, как и процесс, описанный в этом подпункте.
- Иначе (predFlagL0 или predFlagL1 равны 1, но не оба), процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1 вызывается с теми же самыми входными и выходными данными, как и процесс, описанный в этом подпункте.
[0100] Настоящее раскрытие также обеспечивает способы для процесса взвешенного предсказания выборок по умолчанию. Входными данными к этому процессу и выходными данными этого процесса могут быть такие, как описано выше для взвешенного процесса предсказания выборок. В зависимости от значения predFlagL0 и predFlagL1, выборки предсказания predSamples [x, y] с x=0…(nPSW) −1 и y=0…(nPSH)−1 могут быть выведены следующим образом:
*Если predFlagL0 равен 1 и predFlagL1, равно 0,
- predSamples [x, y]=Clip3 (0, (1<<bitDepth)−1, (predSamplesL0 [x, y]+offset1)>>shift1) (8-211)
*Иначе, если predFlagL0 равен 0 и predFlagL1, равно 1,
- predSamples [x, y]=Clip3 (0, (1<<bitDepth)−1, (predSamplesL1 [x, y]+offset1)>> shift1) (8-212)
*Иначе (и predFlagL0 и predFlagL1 равны 1), если RefPicOrderCnt (currPic, refIdxL0, L0) равен RefPicOrderCnt (currPic, refIdxL1, L1) и mvL0, равно mvL1 и оба RefPicTypeFunc (RefPicListL0 (refIdxL0)) и RefPicTypeFunc (RefPicListL1 (refIdxL1)) равны 0,
- predSamples [x, y]=Clip3 (0, (1<<bitDepth)−1, (predSamplesL0 [x, y]+offset1)>> shift1) (8-213)
*Иначе,
- predSamples [x, y]=Clip3 (0, (1<<bitDepth)−1, (predSamplesL0 [x, y]+predSamplesL1 [x, y]+offset2)>>shift2) (8-214)
[0101] В другом примере взвешенное предсказание может быть выполнено следующим образом. Может быть выполнен новый тип неявного взвешивания, который может соответствовать модифицированному неявному взвешенному предсказанию. Следующие изменения могут быть сделаны в семантике RBSP набора параметров картинки.
[0102] weighted_bipred_idc, равный 0, может задавать, что взвешенное предсказание по умолчанию применяется к вырезкам B. weighted_bipred_idc, равный 1, может задавать, что явное взвешенное предсказание применяется к вырезкам B. weighted_bipred_idc, равный 2, может задавать, что неявное взвешенное предсказание должно быть применено к вырезкам B. weighted_bipred_idc, равный 3, может задавать, что ограниченное неявное взвешенное предсказание применяется к вырезкам B. Значение weighted_bipred_idc может быть в диапазоне от 0 до 3, включительно.
[0103] В некоторых примерах способы настоящего раскрытия могут включать в себя следующий процесс взвешенного предсказания выборок, например, выполняемый во время процесса декодирования. Входные данные к процессу взвешенного предсказания выборок могут включать в себя:
*местоположение (xB, yB), задающее верхнюю левую выборку текущей единицы предсказания относительно верхней левой выборки текущей единицы кодирования,
*ширина и высота этой единицы предсказания, nPSW и nPSH,
*два массива (nPSW) x (nPSH) predSamplesL0 и predSamplesL1,
*флаги использования списка предсказания, predFlagL0 и predFlagL1,
*опорные индексы, refIdxL0 и refIdxL1,
*вектора движения, mvL0 и mvL1,
*битовая глубина компонента цветности, bitDepth.
[0104] Выходные данные этого процесса могут включать в себя:
*массив (nPSW) x (nPSH) predSamples значений выборки предсказания.
[0105] Переменные shift1, shift2, offset1 и offset2 могут быть выведены следующим образом:
*переменная shift1 устанавливается равной 14-bitDepth, и переменная shift2 устанавливается равной 15-bitDepth,
*переменная offset1 устанавливается равной 1<<(shift1−1), и переменная offset2 устанавливается равной 1<<(shift2−1).
[0106] В вырезках P, если значение predFlagL0 равно 1, может применяться следующее:
*Если weighted_pred_flag равен 0, процесс взвешенного предсказания выборки по умолчанию, как описано в подпункте 8.5.2.2.3.1 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
*Иначе (weighted_pred_flag равно 1), явный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
[0107] В вырезках B, если predFlagL0 или predFlagL1 равны 1, может применяться следующее:
*Если weighted_bipred_idc равен 0, процесс взвешенного предсказания выборки по умолчанию, как описано в подпункте 8.5.2.2.3.1 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
*Иначе, если weighted_bipred_idc равен 1 и если predFlagL0 или predFlagL1 равны 1, явный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
*Иначе, если weighted_bipred_idc равен 2, следующее может применяться:
- Если predFlagL0 равен 1 и predFlagL1 равны 1, неявный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
- Иначе (predFlagL0 или predFlagL1 равны 1, но не оба), процесс взвешенного предсказания выборки по умолчанию, как описано в подпункте 8.5.2.2.3.1 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
*Иначе (weighted_bipred_idc равно 3), следующее может применяться:
- Если predFlagL0 равен 1 и predFlagL1, равно 1, и оба, RefPicTypeFunc (RefPicListL0 (refIdxL0)) и RefPicTypeFunc (RefPicListL1 (refIdxL1)) равны 0, неявный процесс взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
- Иначе (predFlagL0 или predFlagL1 равно 1, но не оба, равны 1), процесс взвешенного предсказания выборки по умолчанию, как описано в подпункте 8.5.2.2.3.1 текущего рабочего проекта HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте, например, подпункте 4.2.2.
[0108] В некоторых примерах видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать флаг, чтобы запретить масштабирование пространственно соседних блоков, масштабируемых для AMVP. Таблица 1 ниже обеспечивает примерный синтаксис RBSP набора параметров последовательности для этого флага:
[0109] В целом, семантики набора параметров последовательности Таблицы 2 остаются такими же, как в текущем рабочем проекте HEVC. Однако, Таблица 2 вводит флаг запрещения масштабирования POC пространственного MV. Различные примеры семантики для этого дополнения предоставлены ниже:
[0110] В этом примере, disable_spatial_mv_poc_scaling_flag, равный 0 указывает, что пространственный вектор движения должен быть масштабирован на основании POC, когда целевой вектор движения соответствует картинке с другим опорным индексом или другим POC. В этом примере, disable_spatial_mv_poc_scaling_flag, равный 1 указывает, что пространственный вектор движения рассматривают как недоступный, когда опорный индекс этого вектора движения отличается от целевого вектора движения. Следует отметить, что целевой вектор движения является вектором движения, который должен быть предсказан при AMVP.
[0111] Альтернативно, disable_spatial_mv_poc_scaling_flag равный 1, может указывать, что пространственный вектор движения рассматривают как недоступный, когда опорный индекс этого вектора движения отличается от опорного индекса целевого вектора движения, и POC опорной картинки этого вектора движения отличается от такового целевого вектора движения.
[0112] Альтернативно, disable_spatial_mv_poc_scaling_flag может быть добавлен в PPS, APS, или заголовок вырезки, чтобы указать одни и те же функциональные возможности для картинок, к которым конкретный PPS, APS, или заголовок вырезки могут быть применены.
[0113] В еще одном примере видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать флаг в SPS в контексте множественных видов или 3DV, чтобы запретить использование вектора движения между видами (например, диспаратные вектора движения) для временного предсказания вектора движения (TMVP). Таблица 2 ниже обеспечивает примерный синтаксис полезных данных (RBSP) необработанной последовательности байтов набора параметров последовательности, совместимый с некоторыми способами настоящего раскрытия:
[0114] В целом, семантика набора параметров последовательности из Таблицы 2 остается той же самой по сравнению с текущим рабочим проектом HEVC. Однако, Таблица 2 вводит bit_equal_one, disable_inter_view_as_tmvp_flag, sps_extension_flag, и _sps_extension_data_flag2. Семантика примера для этих дополнений представлена ниже.
[0115] В этом примере disable_inter_view_as_tmvp_flag, равный 1 указывает, что для всех вырезок в закодированной видео последовательности опорная картинка между видами (только) никогда не выбирается как совмещенная картинка режима TMVP. Следует отметить, что это подразумевает ограничение для collocated_ref_idx (то есть, collocated_ref_idx может быть установлен способом, в которым совмещенная картинка никогда не соответствует опорной картинке из другого вида).
[0116] В этом примере disable_inter_view_as_tmvp_flag, равный 0 указывает, что опорная картинка между видами (только) может быть выбрана как совмещенная картинка режима TMVP.
[0117] В некоторых примерах набор параметров последовательности может включать в себя элементы из любой или обеих из Таблиц 1 и 2, описанных выше, в дополнение к или альтернативно к любому из элементов текущего рабочего проекта HEVC.
[0118] Текущий синтаксис может быть сигнализирован как часть битов расширения для расширения MVC/3DV. Альтернативно, элемент синтаксиса может быть сигнализирован в других местах, которые могут содержать информацию уровня последовательности для последовательности множества видов/3DV, такую как набор параметров последовательности поднабора (SPS), или даже потенциально таблица высокоуровневого синтаксиса, такая как набор параметров видео. Альтернативно, вышеупомянутый элемент синтаксиса (disable_inter_view_as_tmvp_flag) может не быть сигнализирован, но поток битов может всегда соответствовать случаю, когда disable_inter_view_as_tmvp_flag равен 1. Это может быть реализовано, выбирая collocated_ref_idx способом, в котором это никогда не соответствует опорной картинке между видами.
[0119] Кроме того, синтаксис набор параметров картинки (PPS) может быть модифицирован в соответствии со способами настоящего раскрытия. Например, элемент синтаксиса “weighted_bipred_idc” может быть сигнализирован в PPS. Семантики для этого элемента синтаксиса могут быть следующими: weighted_bipred_idc,, равный 0, может задавать, что взвешенное предсказание по умолчанию применяется к вырезкам B. weighted_bipred_idc, равный 1, может задавать, что явное взвешенное предсказание применяется к вырезкам B. weighted_bipred_idc, равный 2, может задавать, что неявное взвешенное предсказание должно быть применено к вырезкам B. weighted_bipred_idc, равный 3, может задавать, что ограниченное неявное взвешенное предсказание применяется к вырезкам B. Значение weighted_bipred_idc может быть в диапазоне от 0 до 3, включительно.
[0120] Таблица 3 ниже обеспечивает примерную таблицу синтаксиса для заголовка вырезки, совместимого с некоторыми способами настоящего раскрытия:
[0121] В целом, семантики заголовка вырезки Таблицы 3 остаются такими же как в HEVC. Однако, Таблица 3 вводит poc_sacling_tmvp_disabled флаг и ограничивает неявную таблицу. Семантики для этих дополнений предоставлены ниже (где примеры неявной таблицы ограничений описаны относительно Таблиц 4 и 5 ниже):
[0122] poc_scaling_tmvp_disabled_flag, равный 1, может указывать, что вектора движения, выведенные из TMVP, не масштабированы. Этот флаг, равный 0, может указывать, что вектора движения, выведенные из TMVP, могут быть масштабированы как в текущей структуре TMVP.
[0123] Как отмечено выше, заголовок вырезки может включать в себя ограниченную неявную таблицу, например, в соответствии с Таблицей 4 или Таблицей 5 ниже.
[0124] Таблица 5 обеспечивает альтернативный пример ограничения неявной таблицы:
[0125] Семантики элементов синтаксиса в Таблицах 4 и 5 представлены ниже:
[0126] implicit_disabled_pic_flag[i], равный 1, может указывать, что в неявном взвешенном предсказании, если опорная картинка, соответствующая опорному индексу i в объединенном списке опорных картинок используется, веса для этой опорной картинки и другой опорной картинки во время неявного взвешенного предсказания оба установлены в 0.5, означая не взвешенное предсказание.
[0127] implicit_disabled_pic_l0_flag[i], равный 1, может указывать, что в неявном взвешенном предсказании, если опорная картинка, соответствующая опорному индексу i в RefPicList0, используется, веса для этой опорной картинки и другой опорной картинки во время неявного взвешенного предсказания оба установлены в 0.5, означая не взвешенное предсказание.
[0128] implicit_disabled_pic_l1_flag[i], равный 1, может указывать, что в неявном взвешенном предсказании, если опорная картинка, соответствующая опорному индексу i в RefPicList1, используется, веса для этой опорной картинки и другой опорной картинки во время взвешенного предсказания оба установлены в 0.5, означая не взвешенное предсказание.
[0129] Альтернативно, значения опорного индекса картинок, которые должны быть ограничены из неявного взвешенного предсказания, могут быть непосредственно сигнализированы.
[0130] Альтернативно, как часть сигнализации RPS, картинки, которые должны быть ограничены из неявного взвешенного предсказания, могут быть непосредственно сигнализированы.
[0131] Альтернативно, в кодеке MVC или 3DV, поднабор RPS, содержащий опорные картинки между видами (только), может всегда устанавливаться как ограниченные неявные взвешенные картинки предсказания.
[0132] Ограниченная неявная взвешенная картинка предсказания является картинкой такой, что, когда используется для неявного предсказания, веса этой картинки и другой картинки пары би-предсказания оба равны 0.5.
[0133] Альтернативно, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать в PPS или SPS, или заголовке вырезки для каждого поднабора RPS, флаг, указывающий, являются ли в поднаборе RPS ограниченными все неявные взвешенные картинки предсказания.
[0134] В качестве другого примера, видео кодер 20 и видео декодер 30 могут быть сконфигурированы, чтобы закодировать refPicType в SPS. Таблица 6 обеспечивает набор примера синтаксиса для такого SPS:
[0135] В целом, семантика набора параметров последовательности согласно Таблицы 6 остается такой же как в текущем рабочем проекте HEVC. Однако, Таблица 6 вводит numAdditionalRPSSubSets, и ref_type_flag [i] в пределах цикла for(). Примерная семантика для этих дополнений предоставлена ниже:
[0136] В этом примере numAdditionalRPSSubSets задает дополнительные поднаборы RPS помимо поднаборов RPS краткосрочных опорных картинок и поднаборов RPS долгосрочных опорных картинок.
[0137] В этом примере ref_type_flag [i] задает флаг для любой картинки дополнительного поднабора i RPS. Для поднаборов RPS, содержащих краткосрочные опорные картинки, и поднаборов RPS, содержащих долгосрочные опорные картинки, этот флаг может быть логически выведен, чтобы быть равным 0.
[0138] RefTypeIdc может быть установлен в ref_type_flag для поднабора RPS.
[0139] Альтернативно, видео кодер 20 и видео декодер 30 не обязательно должны кодировать этот флаг, и могут логически вывести значение 1 для этого флага, для поднаборов RPS между видами.
[0140] Альтернативно, видео кодер 20 и видео декодер 30 могут вывести RefTypeIdc опорной картинки, чтобы быть равным 1, если опорная картинка вектора движения имеет тот же POC, как текущая картинка, и иначе быть равным 0.
[0141] Другие примеры могут быть подобными первому примеру выше (или другим примерам) со следующими дополнениями. В примере ниже, RefPicTypeFuncMV (mv) возвращает 0, если опорный индекс вектора движения mv указывает на временную опорную картинку, и возвращает 1, если опорный индекс вектора движения mv указывает на картинку в другом виде/уровне. Альтернативно, RefPicTypeFunc (pic) возвращает 0, если pic является краткосрочной опорной картинкой, и возвращает 1, если pic - долгосрочная картинка. RefPicTypeFuncMV (mv) возвращает 0, если опорный индекс вектора движения mv указывает на краткосрочную опорную картинку и возвращает 1, если опорный индекс вектора движения mv указывает на долгосрочную опорную картинку. Дополнительно следующие процессы были модифицированы для AMVP.
[0142] Процесс выведения для предсказания вектора движения яркости
Входными данными к этому процессу являются:
- местоположение яркости (xP, yP), задающее верхнюю левую выборку яркости текущего блока предсказания относительно верхней левой выборки текущей картинки,
- переменные, задающие ширину и высоту блока предсказания для яркости, nPSW и nPSH.
- опорный индекс текущего разделения refIdxLX единицы предсказания (с X, являющимся равным 0 или 1).
Выходными данными этого процесса являются:
- предсказание mvpLX вектора движения mvLX (с X, являющимся равным 0 или 1).
Предсказатель вектора движения mvpLX выводится в следующих упорядоченных этапах.
1. Процесс выведения для кандидатов предсказателя вектора движения от соседних разделений блока предсказания в подпункте 8.5.2.1.6 вызывается с местоположением яркости (xP, yP), шириной и высотой единицы предсказания nPSW и nPSH, и refIdxLX (с X, являющимся 0 или 1, соответственно) в качестве входных данных и флагами доступности availableFlagLXN и векторами движения mvLXN с N, замененными с помощью A, B в качестве выходных данных.
2. Если RefPicTypeFuncMV (mvLXA) не равно RefPicTypeFuncMV (mvpLX)), availableFlagLXA установлен равным 0, Если RefPicTypeFuncMV (mvLXB) не равен RefPicTypeFuncMV (mvpLX)), availableFlagLXB установлен равным 0.
3. Если и availableFlagLXA и availableFlagLXB равны 1, и mvLXA не равен mvLXB, availableFlagLXCol установлен равным 0, иначе процесс выведения для временного предсказания вектора движения яркости в подпункте 5 вызывается с местоположением яркости (xP, yP), шириной и высотой единицы предсказания nPSW и nPSH, и refIdxLX (с X, являющимся 0 или 1, соответственно) в качестве входных данных и с выходными данными, являющимся флагом доступности availableFlagLXCol и временным предсказателем вектора движения mvLXCol.
4. Список кандидатов предсказателей вектора движения, mvpListLX, построен следующим образом.
1. mvLXA, если availableFlagLXA равен 1
2. mvLXB, если availableFlagLXB равен 1
3. mvLXCol, если availableFlagLXCol равен 1
5. Когда mvLXA и mvLXB имеют одно и то же значение, mvLXB удаляется из списка. Переменная numMVPCandLX устанавливается в количество элементов в пределах mvpListLX, и maxNumMVPCand установлен в 2.
6. Список предсказателей вектора движения модифицируется следующим образом.
- Если numMVPCandLX меньше чем 2, следующее применяется.
mvpListLX [numMVPCandLX] [0]=0 (8-133)
mvpListLX [numMVPCandLX] [1]=0 (8-134)
numMVPCandLX = numMVPCandLX+1 (8-135)
- Иначе (numMVPCandLX равно или больше чем 2), все кандидаты предсказателя вектора движения mvpListLX [idx] с idx больше чем 1 удаляются из списка.
7. Вектор движения mvpListLX [mvp_lX_flag [xP, yP]] назначается на mvpLX.
[0143] Кроме того, следующие модификации могут применяться для TMVP. При проверке значений POC каждой опорной картинки во время TMVP, вместо того, чтобы проверять каждую картинку, это модифицируется так, чтобы проверять только картинки с RefPicTypeFunc (), равным 0. Когда RefPicTypeFunc () возвращает 0 для краткосрочных опорных картинок в одной альтернативе, это означает, что только краткосрочные опорные картинки проверяются.
[0144] Одна детальная реализация, которая может быть реализована видео кодером 20 и декодером видео 30, является следующей:
[0145] Процесс выведения для временного предсказания вектора движения яркости
Входными данными к этому процессу являются
- местоположение яркости (xP, yP), задающее верхнюю левую выборку яркости текущей единицы предсказания относительно верхней левой выборки текущей картинки,
- переменные, определяющие ширину и высоту единицы предсказания для яркости, nPSW и nPSH,
- опорный индекс текущего разделения refIdxLX (с X, являющимся 0 или 1) единицы предсказания.
Выходными данными этого процесса являются
- предсказание mvLXCol вектора движения,
- флаг availableFlagLXCol доступности.
Функция RefPicOrderCnt (picX, refIdx, LX) возвращает счет по порядку картинок PicOrderCntVal опорной картинки с индексом refIdx из списка LX опорных картинок картинки picX и задается следующим образом.
RefPicOrderCnt (picX, refIdx, LX)=PicOrderCnt (RefPicListLX (refIdx) картинки picX) (8-141)
В зависимости от значений slice_type, collocated_from_10_flag, и collocated_ref_idx, переменная colPic, задающая картинку, которая содержит совмещенное разделение, выводится следующим образом.
- Если slice_type равен B, и collocated_from_10_flag равен 0, переменная colPic определяет картинку, которая содержит совмещенное разделение как определено RefPicList1 [collocated_ref_idx].
- Иначе (slice_type равно B и collocated_from_10_flag равен 1, или slice_type равен P), переменная colPic задает картинку, которая содержит совмещенное разделение, как задано посредством RefPicList0 [collocated_ref_idx].
Переменная colPu и ее позиция (xPCol, yPCol) выводятся в следующих упорядоченных этапах:
1. Переменная colPu выводится следующим образом
yPRb = yP + nPSH (8-149)
- Если (yP>>Log2CtbSize) равно (yPRb>>Log2CtbSize), горизонтальный компонент позиции яркости правого основания текущей единицы предсказания определен посредством
xPRb=xP+nPSW (8-150)
и переменная colPu установлена как единица предсказания, охватывающая модифицированную позицию, заданную посредством ((xPRb>>4)<<4, (yPRb>>4)<<4) в colPic.
- Иначе ((yP>>Log2CtbSize) не равно (yPRb>>Log2CtbSize)), colPu отмечается как "недоступный".
2. Когда colPu закодирован в режиме внутреннего предсказания, или colPu отмечается как "недоступный", следующее применяется.
- Центральная позиция яркости текущей единицы предсказания определена посредством
xPCtr=(xP+(nPSW>>1) (8-151)
yPCtr=(yP+(nPSH>>1) (8-152)
- Переменная colPu устанавливается как единица предсказания, охватывающая модифицированную позицию, заданную посредством ((xPCtr>>4)<<4, (yPCtr>>4)<<4) в colPic.
3. (xPCol, yPCol) устанавливается равным верхней левой выборке яркости colPu относительно верхней левой выборки яркости colPic.
Функция LongTermRefPic (picX, refIdx, LX) задается следующим образом. Если опорная картинка с индексом refIdx из списка LX опорных картинок картинки picX была отмечена как "используется для долгосрочной ссылки" в то время, когда picX была текущей картинкой, LongTermRefPic (picX, refIdx, LX) возвращает 1; иначе LongTermRefPic (picX, refIdx, LX) возвращает 0.
Переменные mvLXCol и availableFlagLXCol выводятся следующим образом.
- Если одно из следующих условий верно, оба компонента mvLXCol устанавливаются равными 0, и availableFlagLXCol устанавливается равным 0.
- colPu кодируется в режиме внутреннего предсказания.
- colPu отмечается как "недоступный".
- pic_temporal_mvp_enable_flag равен 0.
- Иначе, вектор движения mvCol, опорный индекс refIdxCol, и опорный идентификатор списка listCol выводятся следующим образом.
- Если PredFlagL0 [xPCol] [yPCol] равен 0, mvCol, refIdxCol, и listCol устанавливаются равными MvL1 [xPCol] [yPCol], RefIdxL1 [xPCol] [yPCol], и L1, соответственно.
- Иначе (PredFlagL0 [xPCol] [yPCol] равен 1), следующее применяется.
- Если PredFlagL1 [xPCol] [yPCol] равен 0, mvCol, refIdxCol, и listCol устанавливаются равными MvL0 [xPCol] [yPCol], RefIdxL0 [xPCol] [yPCol], и L0, соответственно.
- Иначе (PredFlagL1 [xPCol] [yPCol] равен 1) выполняются следующие присвоения.
- Если PicOrderCnt (pic) каждой картинки pic с RefPicTypeFunc (pic), равным 0, (или “каждой краткосрочной картинки pic” в одной альтернативе) в каждом списке опорных картинок, меньше чем или равно PicOrderCntVal, mvCol, refIdxCol, и listCol устанавливается равными MvLX [xPCol] [yPCol], RefIdxLX [xPCol] [yPCol] и LX, соответственно, с X, являющимся значением X, с которым этот процесс вызывается.
- Иначе (PicOrderCnt (pic) по меньшей мере одной картинки pic по меньшей мере в одном списке опорных картинок больше чем PicOrderCntVal, mvCol, refIdxCol и listCol устанавливается равными MvLN [xPCol] [yPCol], RefIdxLN [xPCol] [yPCol] и LN, соответственно с N, равным значению collocated_from_l0_flag.
[0146] После кодирования с внутренним предсказанием или внешним предсказанием, используя единицы PU в CU, видео кодер 20 может вычислить остаточные данные для единиц TU в этой CU. Единицы PU могут содержать данные синтаксиса, описывающие способ или режим генерирования предсказывающих пиксельных данных в пространственной области (также называемой пиксельной областью), и единицы TU могут содержать коэффициенты в области преобразования после применения преобразования, например, дискретного косинусного преобразования (DCT), целочисленного преобразования, вейвлет преобразования, или концептуально подобного преобразования к остаточным видео данным. Остаточные данные могут соответствовать пиксельным разностям между пикселями незакодированной картинки и значениями предсказания, соответствующими этим единицам PU. Видео кодер 20 может формировать единицы TU, включающие в себя остаточные данные для CU, и затем преобразовать эти единицы TU, чтобы сформировать коэффициенты преобразования для CU.
[0147] После какого-либо преобразования, чтобы сформировать коэффициенты преобразования, видео кодер 20 может выполнять квантование коэффициентов преобразования. Квантование обычно относится к процессу, в котором коэффициенты преобразования квантуются, чтобы по возможности уменьшить величину данных, использованных для представления коэффициентов, обеспечивая дальнейшее сжатие. Процесс квантования может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Например, значение n-bit может быть округлено в меньшую сторону до m-битового значения во время квантования, где n больше чем m.
[0148] После квантования видео кодер может сканировать коэффициенты преобразования, формируя одномерный вектор из двумерной матрицы, включающей в себя квантованные коэффициенты преобразования. Сканирование может быть построен так, чтобы поместить более высокую энергию (и поэтому более низкую частоту) коэффициенты впереди массива и поместить коэффициенты более низкой энергии (и поэтому более высокой частоты) в конце массива. В некоторых примерах видео кодер 20 может использовать заранее заданный порядок сканирования, чтобы сканировать квантованные коэффициенты преобразования, чтобы сформировать преобразованный в последовательную форму вектор, который может быть энтропийно кодирован. В других примерах видео кодер 20 может выполнять адаптивное сканирование. После сканирования квантованных коэффициентов преобразования, чтобы сформировать одномерный вектор, видео кодер 20 может энтропийно кодировать одномерный вектор, например, согласно контекстно-адаптивному кодированию с переменной длиной кода (CAVLC), контекстно-адаптивному двоичному арифметическому кодированию (CABAC), основанному на синтаксисе контекстно-адаптивному двоичному арифметическому кодированию (SBAC), энтропийному кодированию с разделением интервала вероятности (PIPE) или другой методологии энтропийного кодирования. Видео кодер 20 может также энтропийно кодировать элементы синтаксиса, ассоциированные с закодированными видео данными для использования посредством декодера 30 видео при декодировании видео данных.
[0149] Чтобы выполнять CABAC, видео кодер 20 может назначить контекст в пределах контекстной модели для символа, который должен быть передан. Контекст может относиться к тому, например, являются ли соседние значения символа ненулевыми или нет. Чтобы выполнить CAVLC, видео кодер 20 может выбрать код с переменной длиной слова для символа, который должен быть передан. Кодовые слова в VLC могут быть построены таким образом, что относительно более короткие коды соответствуют более вероятным символам, в то время как более длинные коды соответствуют менее вероятным символам. Таким образом, использование VLC может достигнуть экономии битов, например, используя ключевые слова равной длины для каждого символа, который должен быть передан. Определение вероятности может быть основано на контексте, назначенном на символ.
[0150] Видео кодер 20 может также посылать данные синтаксиса, такие как основанные на блоке данные синтаксиса, основанные на кадре данные синтаксиса, и основанные на GOP данные синтаксиса, к декодеру видео 30, например, в заголовке кадра, заголовке блока, заголовке вырезки, или заголовке GOP. Данные синтаксиса GOP могут описывать количество кадров в соответствующей GOP, и данные синтаксиса кадра могут указывать режим кодирования/предсказания, использованный для кодирования соответствующего кадра.
[0151] Видео кодер 20 и видео декодер 30 каждый может быть реализован как любая из множества подходящих схем кодера или декодера, в качестве применимых, такой как один или более микропроцессоров, цифровых сигнальных процессоров (DSPs), специализированных интегральных схем (ASICs), программируемых пользователем вентильных матриц (FPGAs), схем дискретной логики, программного обеспечения, аппаратного обеспечения, программно-аппаратных средств или любых их комбинаций. Каждый видео кодер 20 и видео декодер 30 может быть включен в один или более кодеров или декодеров, любой из которых может интегрироваться как часть объединенного видео кодера/декодера (кодек). Устройство, включающее в себя видео кодер 20 и/или видео декодер 30 может содержать интегральную схему, микропроцессор, и/или устройство беспроводной связи, такое как сотовый телефон.
[0152] Таким образом, видео кодер 20 и видео декодер 30 представляют примеры видео кодировщика (например, видео кодера или декодера видео), конфигурируемого, чтобы определить первый тип для текущего вектора движения текущего блока данных видео, определить второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной. Кроме того, когда первый тип содержит диспаратный вектор движения, второй тип содержит диспаратный вектор движения, и предсказатель вектора движения - кандидат использован для предсказания текущего вектора движения, видео кодировщик может быть сконфигурирован, чтобы закодировать текущий вектор движения без масштабирования предсказателя вектора движения - кандидата.
[0153] ФИГ. 2 является блок-схемой, иллюстрирующей пример видео кодера 20, который может реализовать способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV. Видео кодер 20 может выполнять внутренее (intra) и внешнее (inter) кодирование блоков видео в пределах видео вырезок. Внутреннее кодирование полагается на пространственное предсказание, чтобы уменьшить или удалить пространственную избыточность в видео в пределах заданного видео кадра или картинки. Внешнее кодирование полагается на временное предсказание, чтобы уменьшить или удалить временную избыточность в видео в пределах смежных кадров или картинок видео последовательности. Внутренний режим (I режим) может относится к любому из нескольких основанных на пространственном кодировании режимов. Внешние режимы, такие как однонаправленное предсказание (P режим) или би-предсказание (B режим), могут относится к любому из нескольких основанных на временном кодировании режимов.
[0154] Как показано на ФИГ. 2, видео кодер 20 принимает текущий блок видео в пределах видео кадра, который должен быть закодирован. В примере согласно ФИГ. 2, видео кодер 20 включает в себя модуль 40 выбора режима, память 64 опорных картинок, сумматор 50, модуль 52 преобразования обработки, модуль 54 квантования, и модуль 56 энтропийного кодирования. Модуль 40 выбора режима, в свою очередь, включает в себя модуль 44 компенсации движения, модуль 42 оценки движения, модуль 46 внутреннего предсказания, и модуль 48 разделения. Для реконструкции блока видео, видео кодер 20 также включает в себя модуль 58 обратного квантования, модуль 60 обратного преобразования и сумматор 62. Фильтр удаления блочности (не показанный на ФИГ. 2) может также быть включен, чтобы фильтровать границы блока, чтобы удалить артефакты блочности из реконструированного видео. Если желательно, фильтр удаления блочности может обычно фильтровать вывод сумматора 62. Дополнительные фильтры (в контуре или после контура) могут также использоваться в дополнение к фильтру удаления блочности. Такие фильтры не показаны для краткости, но если желательно, могут фильтровать вывод сумматора 50 (как фильтр в контуре).
[0155] Во время процесса кодирования видео кодер 20 принимает видео кадр или вырезку, которая должна закодирована. Кадр или вырезка могут быть разделены на множественные блоки видео. Модуль 42 оценки движения и модуль 44 компенсации движения выполняют внешнее предсказывающее кодирование принятого блока видео относительно одного или более блоков в одном или более опорных кадрах, чтобы обеспечить временное предсказание. Модуль 46 внутреннего предсказания может альтернативно выполнять внутренне предсказывающее кодирование принятого блока видео относительно одного или более соседних блоков в одном и том же кадре или вырезке в качестве блока, который должен быть закодирован, чтобы обеспечить пространственное предсказание. Видео кодер 20 может выполнять множественные проходы кодирования, например, чтобы выбрать соответствующий режим кодирования для каждого блока данных видео.
[0156] Кроме того, модуль 48 разделения может разделить блоки видео данных на суб-блоки, на основании оценки предыдущих схем разделения в предыдущих проходах кодирования. Например, модуль 48 разделения может первоначально разделить кадр или вырезку в единицы LCU, и разделение каждую из единиц LCU в суб-единицы CU, на основании анализа скорость передачи - искажение (например, оптимизации скорости передачи - искажение). Модуль 40 выбора режима может далее сформировать структуру данных квадродерева, указывающую разделения LCU на суб-единицы CU. Единицы CU листовых узлов квадродерева могут включать в себя одну или более единиц PU и одну или более единиц TU.
[0157] Модуль 40 выбора режима может выбрать один из режимов кодирования, внутренний или внешний, например, на основании результатов ошибок, и выдает получающееся внутренне или внешне кодированный блок к сумматору 50, чтобы генерировать остаточные данные блока, и к сумматору 62, чтобы реконструировать закодированный блок для использования в качестве опорного кадра. Модуль 40 выбора режима также обеспечивает элементы синтаксиса, такие как вектора движения, индикаторы внутреннего режима, информация разделения, и другую такую информацию синтаксиса, к модулю 56 энтропийного кодирования.
[0158] Модуль 42 оценки движения и модуль 44 компенсации движения могут быть высоко интегрированными, но иллюстрированы отдельно в концептуальных целях. Оценка движения, выполненная модулем 42 оценки движения, является процессом генерирования векторов движения, который оценивают движение для блоков видео. Вектор движения, например, может указывать смещение PU блока видео в пределах текущего видео кадра или картинки относительно предсказывающего блока в пределах опорного кадра (или другой закодированной единицы) относительно текущего блока, закодированного в пределах текущего кадра (или другой закодированной единицы). Предсказывающий блок является блоком, который, как обнаруживают, близко соответствует блоку, который должен быть закодирован, в терминах пиксельной разности, которая может быть определена суммой абсолютной разности (SAD), суммой разности квадратов (SSD), или другими метриками разности. В некоторых примерах видео кодер 20 может вычислить значения для суб-целочисленных позиций пикселя опорных картинок, сохраненных в памяти 64 опорных картинок. Например, видео кодер 20 может интерполировать значения позиций пикселя в одну четверть, позиций пикселя в одну восьмую, или другие фракционные позиции пикселя опорной картинки. Поэтому, модуль 42 оценки движения может выполнять поиск движения относительно полных позиций пикселя и фракционных позиций пикселя и вывести вектор движения с фракционной пиксельной точностью.
[0159] Модуль 42 оценки движения вычисляет вектор движения для PU блока видео во внешне кодированной вырезке, сравнивая позицию PU с позицией предсказывающего блока опорной картинки. Опорная картинка может быть выбрана из первого списка опорных картинок (Список 0) или второго списка опорных картинок (Список 1), каждый из которых идентифицируют одну или более опорных картинок, сохраненных в памяти 64 опорных картинок. Модуль 42 оценки движения посылает вычисленный вектор движения в модуль 56 энтропийного кодирования и модуль 44 компенсации движения.
[0160] Компенсация движения, выполняемая модулем 44 компенсации движения, может вовлечь выборку или генерирование предсказывающего блока на основании вектора движения, определенного модулем 42 оценки движения. Снова, модуль 42 оценки движения и модуль 44 компенсации движения могут быть функционально интегрированными в некоторых примерах. После приема вектора движения для PU текущего блока видео модуль 44 компенсации движения может определять местоположение предсказывающего блока, на который вектор движения указывает в одном из списков опорных картинок. Сумматор 50 формирует остаточный блок видео посредством вычитания пиксельных значений предсказывающего блока от пиксельных значений текущего закодированного блока видео, формируя значения пиксельной разности, как описано ниже. В целом, модуль 42 оценки движения выполняет оценку движения относительно компонентов яркости, и модуль 44 компенсации движения вектора движения использования вычислили на основании компоненты яркости и для компонентов цветности и для компонентов яркости. Модуль 40 выбора режима может также генерировать элементы синтаксиса, ассоциированные с блоками видео и видео вырезкой для использования декодером 30 видео при декодировании блоков видео для видео вырезки.
[0161] В соответствии со способами настоящего раскрытия, когда модуль 40 выбора режима выбирает внешне предсказанный блок видео данных (например, PU) используя модуль 42 оценки движения и модуль 44 компенсации движения, видео кодер 20 может далее закодировать вектор движения, например, используя режим AMVP или слияния. Например, модуль 56 энтропийного кодирования может принять вектор движения от модуля 40 выбора режима и закодировать вектор движения. Модуль 56 энтропийного кодирования может энтропийно кодировать вектор движения, используя AMVP посредством выбора соседнего блока, из которого нужно извлечь предсказатель вектора движения и вычислить разность между вектором движения и предсказателем вектора движения (например, горизонтальную разность вектора движения и вертикальную разность вектора движения), затем энтропийно кодировать один или более элементов синтаксиса, представляющих разность(и).
[0162] В соответствии со способами настоящего раскрытия, модуль 56 энтропийного кодирования может установить предсказатель вектора движения - кандидат как недоступный для использования в AMVP (или режиме слияния), чтобы предсказать текущий вектор движения, когда предсказатель вектора движения - кандидат имеет отличный тип, чем текущий вектор движения. Установка предсказателя вектора движения - кандидата в качестве недоступного таким образом может быть выполнена даже после того, как другой процесс определил, что вектор движения кандидата был доступен, на основании других критериев. Например, если предсказатель вектора движения - кандидат является диспаратным вектором движения, и текущий вектор движения является временным вектором движения, модуль 56 энтропийного кодирования может установить предсказатель вектора движения - кандидат как недоступный для использования в качестве предсказателя для текущего вектора движения. Аналогично, если предсказатель вектора движения - кандидат является временным вектором движения, и текущий вектор движения является диспаратным вектором движения, модуль 56 энтропийного кодирования может установить предсказатель вектора движения - кандидат как недоступный для использования в качестве предсказателя для текущего вектора движения.
[0163] Модуль 56 энтропийного кодирования может использовать один или более различных способов, чтобы определить, имеют ли закодированный вектор движения и предсказатель вектора движения одинаковый тип вектора движения или различный тип вектора движения. В некоторых примерах модуль 56 энтропийного кодирования может определять, ссылается ли кодируемый вектор движения и предсказатель вектора движения - кандидат на опорные картинки, имеющие значения POC, которые отличаются от текущей закодированной картинки. Если один из вектора движения или предсказателя вектора движения - кандидата ссылается на опорную картинку, имеющую значение POC, которое отличается от текущей кодируемой картинки, и другой ссылается на опорную картинку, имеющую значение POC, которое является таким же как текущей закодированной картинки, модуль 56 энтропийного кодирования может определять, что вектор движения и предсказатель вектора движения - кандидат имеют различные типы векторов движения. В частности, вектор движения, который ссылается на опорную картинку, имеющую значение POC, которое является таким же как у текущей закодированной картинки, можно считать диспаратным вектором движения, тогда как вектор движения, который ссылается на опорную картинку, имеющую другое значение POC, чем текущая картинка, можно считать временным вектором движения.
[0164] В качестве другого примера, модуль 56 энтропийного кодирования может определять, ссылается ли текущий вектор движения на опорную картинку в текущем уровне, включая текущую кодируемую картинку, или другом уровне. Аналогично, модуль 56 энтропийного кодирования может определять, ссылается ли предсказатель вектора движения - кандидат на опорную картинку в текущем уровне или другом уровне. Если и текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на опорную картинку в текущем уровне или опорную картинку в другом уровне, модуль 56 энтропийного кодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат имеют один и тот же тип вектора движения. В частности, если текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на опорные картинки в одном или более различных уровнях, текущий вектор движения и предсказатель вектора движения - кандидат могут содержать диспаратные вектора движения. Если текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на опорные картинки в текущем уровне, текущий вектор движения и предсказатель вектора движения - кандидат могут содержать временные вектора движения. Если один из текущего вектора движения и предсказателя вектора движения - кандидата ссылаются на опорную картинку в текущем уровне, и другой ссылается на опорную картинку в другом уровне, модуль 56 энтропийного кодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат имеют различные типы векторов движения.
[0165] В качестве еще одного другого примера, модуль 56 энтропийного кодирования может определять, ссылается ли текущий вектор движения на долгосрочную опорную картинку или краткосрочную опорную картинку, и аналогично, ссылается ли предсказатель вектора движения - кандидат на долгосрочную опорную картинку или краткосрочную опорную картинку. Если и текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на один и тот же тип опорной картинки (то есть, оба ссылаются на долгосрочную опорную картинку, или оба ссылаются на краткосрочную опорную картинку), модуль 56 энтропийного кодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат - являются одного и того же типа вектора движения. С другой стороны, если один из текущего вектора движения и предсказателя вектора движения - кандидата ссылается на долгосрочную опорную картинку, и другой ссылается на краткосрочную опорную картинку, модуль 56 энтропийного кодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат являются различных типов векторов движения. Вектора движения, ссылающиеся на долгосрочную опорную картинку, могут содержать временные вектора движения, тогда как вектора движения, ссылающиеся на краткосрочную опорную картинку, могут содержать диспаратные вектора движения.
[0166] Как описано выше, модуль 56 энтропийного кодирования может определять, что вектор движения - кандидата отличного типа, чем текущий вектор движения, является недоступным для использования в качестве предсказателя вектора движения для текущего вектора движения. Таким образом, модуль 56 энтропийного кодирования может удалить таких предсказателей вектора движения - кандидатов из списка предсказателей вектора движения - кандидатов для текущего вектора движения, или пропустить добавление такого предсказателя вектора движения - кандидата к списку предсказателей вектора движения - кандидатов. В частности, модуль 56 энтропийного кодирования может установить значение переменной, ассоциированной с предсказателем вектора движения - кандидатом, чтобы указывать, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя вектора движения для текущего вектора движения. Кроме того, модуль 56 энтропийного кодирования может быть сконфигурирован, чтобы выбрать предсказатель вектора движения - кандидат, который является того же типа, как текущий вектор движения, чтобы закодировать текущий вектор движения, например, для которого переменная, ассоциированная с предсказателем вектора движения - кандидатом, имеет значение, указывающее, что предсказатель вектора движения - кандидат доступен для использования в качестве предсказателя вектора движения для текущего вектора движения. Модуль 56 энтропийного кодирования может закодировать текущий вектор движения, используя различные режимы кодирования вектора движения, такие как усовершенствованный предсказатель вектора движения (AMVP) или режим слияния.
[0167] В целом, модуль 56 энтропийного кодирования может масштабировать предсказатель вектора движения, используемый, чтобы предсказать текущий вектор движения, когда предсказатель вектора движения относится к другой опорной картинке, чем опорная картинка, на которую ссылается текущий вектор движения (например, когда значения POC опорных картинок различны). Более подробно, модуль 56 энтропийного кодирования может масштабировать временной предсказатель вектора движения на основании разности между значениями POC опорных картинок. При предсказании вектора движения, который является диспаратным вектором движения, используя предсказатель вектора движения, который является также диспаратным вектором движения, однако, модуль 56 энтропийного кодирования может запретить масштабирование предсказателя вектора движения.
[0168] Модуль 56 энтропийного кодирования может закодировать вектор движения посредством вычисления значения разности вектора движения между вектором движения и предсказателем вектора движения, например, предсказателем вектора движения того же типа, как кодируемый вектор движения. В целом, вектор движения может быть определен горизонтальным компонентом (или x-компонентом) и вертикальным компонентом (или y-компонентом). Модуль 56 энтропийного кодирования может вычислять MVDx (x-компонент разности вектора движения) как разность между x-компонентом закодированного вектора движения и x-компонентом предсказателя вектора движения. Аналогично, модуль 56 энтропийного кодирования может вычислить MVDy (y-компонент разности вектора движения) как разность между y-компонентом закодированного вектора движения и y-компонентом предсказателя вектора движения. В случае, когда вектор движения является временным вектором движения, модуль 56 энтропийного кодирования может вычислять значения разности вектора движения (MVDx и MVDy) относительно масштабированной версии предсказателя вектора движения (на основании разностей POC между опорными картинками, на которые ссылается закодированный вектор движения и предсказатель вектора движения). Модуль 56 энтропийного кодирования может затем энтропийно кодировать MVDx и MVDy, например, используя CABAC.
[0169] Модуль 46 внутреннего предсказания может внутренне предсказать текущий блок, как альтернатива внешнему предсказанию, выполненному модулем 42 оценки движения и модулем 44 компенсации движения, как описано выше. В частности, модуль 46 внутреннего предсказания может определять режим внутреннего предсказания для использования, чтобы закодировать текущий блок. В некоторых примерах модуль 46 внутреннего предсказания может закодировать текущий блок, используя различные режимы внутреннего предсказания, например, во время отдельных проходов кодирования, и модуль 46 внутреннего предсказания (или модуль 40 выбора режима, в некоторых примерах) может выбрать соответствующий режим внутреннего предсказания для использования из проверенных режимов.
[0170] Например, модуль 46 внутреннего предсказания может вычислить значения скорость передачи - искажение, используя анализ скорость передачи - искажение для различных проверенных режимов внутреннего предсказания, и выбрать режим внутреннего предсказания, имеющий лучшие характеристики скорость передачи - искажение среди проверенных режимов. Анализ скорость передачи - искажение обычно определяет величину искажения (или ошибку) между закодированным блоком и первоначальным, незакодированным блоком, который был закодирован, чтобы сформировать закодированный блок, а также скорость передачи в битах (то есть, количество битов), использованную для формирования кодированного блока. Модуль 46 внутреннего предсказания может вычислить отношения из искажений и скоростей передачи для различных закодированных блоков, чтобы определить, какой режим внутреннего предсказания показывает лучшее значение скорость передачи - искажение для блока.
[0171] После выбора режима внутреннего предсказания для блока модуль 46 внутреннего предсказания может предоставить информацию, указывающую выбранный режим внутреннего предсказания для блока, к модулю 56 энтропийного кодирования. Модуль 56 энтропийного кодирования может закодировать информацию, указывающую выбранный режим внутреннего предсказания. Видео кодер 20 может включать в переданные данные конфигурации потока битов, которые могут включать в себя множество таблиц индекса режима внутреннего предсказания, и множество модифицированных таблиц индексов режима внутреннего предсказания (также называемых таблицами отображения кодового слова), определения контекстов кодирования для различных блоков, и индикации самого вероятного режима внутреннего предсказания, таблицы индексов режима внутреннего предсказания, и модифицированные таблицы индексов режима внутреннего предсказания для использования для каждого из контекстов.
[0172] Видео кодер 20 формирует остаточный блок видео, вычитая данные предсказания из модуля 40 выбора режима из первоначального закодированного блока видео. Сумматор 50 представляет компонент или компоненты, которые выполняют эту операцию вычитания. Модуль 52 обработки преобразования применяет преобразование, такое как дискретное косинусное преобразование (DCT) или концептуально подобные преобразование, к остаточному блоку, формируя блок видео, содержащий остаточные значения коэффициентов преобразования. Модуль 52 обработки преобразования может выполнять другие преобразования, которые концептуально подобны DCT. Вейвлет преобразования, целочисленные преобразования, преобразования частотного поддиапазона или другие типы преобразования также могут использоваться.
[0173] В любом случае модуль 52 обработки преобразования применяет преобразование к остаточному блоку, формируя блок остаточных коэффициентов преобразования. Преобразование может преобразовать остаточную информацию из области пиксельных значений в область преобразования, такую как частотная область. Модуль 52 обработки преобразования может посылать результирующие коэффициенты преобразования в модуль 54 квантования. Модуль 54 квантования квантует коэффициенты преобразования, чтобы далее уменьшить частоту следования битов. Процесс квантования может уменьшить битовую глубину, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования может быть модифицирована, регулируя параметр квантования. В некоторых примерах модуль 54 квантования может затем выполнять сканирование матрицы, включающей в себя квантованные коэффициенты преобразования. Альтернативно, модуль 56 энтропийного кодирования может выполнять это сканирование.
[0174] После квантования модуль 56 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования. Например, модуль 56 энтропийного кодирования может выполнять контекстно-адаптивное кодирование с переменной длиной кода (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), основанное на синтаксисе контекстно-адаптивное двоичное арифметическое кодирование (SBAC), энтропийное кодирование с разделением интервала вероятности (PIPE) или другой способ энтропийного кодирования. В случае основанного на контексте энтропийного кодирования контекст может быть основан на соседних блоках. После энтропийного кодирования модулем 56 энтропийного кодирования кодированный поток битов может быть передан на другое устройство (например, видео декодер 30 ) или заархивирован для более поздней передачи или поиска.
[0175] Модуль 58 обратного квантования и модуль 60 обратного преобразования применяют обратное квантование и обратное преобразование, соответственно, чтобы реконструировать остаточный блок в пиксельной области, например, для более позднего использования в качестве опорного блока. Модуль 44 компенсации движения может вычислить опорный блок посредством суммирования остаточного блока с предсказывающим блоком одного из кадров из памяти 64 опорных картинок. Модуль 44 компенсации движения может также применить один или более фильтров интерполяции к реконструированному остаточному блоку, чтобы вычислить суб-целочисленные пиксельные значения для использования при оценке движения. Сумматор 62 суммирует реконструированный остаточный блок с блоком предсказания со скомпенсированным движением, сформированному модулем 44 компенсации движения, чтобы сформировать реконструированный блок видео для сохранения в памяти 64 опорных картинок. Реконструированный блок видео может использоваться модулем 42 оценки движения и модулем 44 компенсации движения в качестве опорного блока, чтобы внешне закодировать блок в последующем видео кадре.
[0176] Таким образом видео кодер 20 из ФИГ. 2 представляет пример кодера видео, конфигурируемого, чтобы определить первый тип для текущего вектора движения текущего блока данных видео, определить второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной. Кроме того, когда первый тип содержит диспаратный вектор движения, второй тип содержит диспаратный вектор движения, и предсказатель вектора движения - кандидат использован для предсказания текущего вектора движения, видео кодер может быть сконфигурирован, чтобы закодировать текущий вектор движения без масштабирования предсказателя вектора движения - кандидата.
[0177] ФИГ. 3 является блок-схемой, иллюстрирующей пример видео декодера 30, который может реализовать способы для кодирования векторов движения и для выполнения би-предсказания в HEVC и его расширениях, таких как расширения для множественных видов или 3DV. В примере согласно ФИГ. 3 видео декодер 30 включает в себя модуль 70 энтропийного декодирования, модуль 72 компенсации движения, модуль 74 внутреннего предсказания, модуль 76 обратного квантования, модуль 78 обратного преобразования, память 82 опорных картинок и сумматор 80. Видео декодер 30 в некоторых примерах может выполнять проход декодирования, в целом обратный проходу кодирования, описанному относительно видео кодера 20 (ФИГ. 2). Модуль 72 компенсации движения может генерировать данные предсказания на основании векторов движения, принятых от модуля 70 энтропийного декодирования, в то время как модуль 74 внутреннего предсказания может генерировать данные предсказания на основании индикаторов режима внутреннего предсказания, принятых от модуля 70 энтропийного декодирования.
[0178] Во время процесса декодирования видео декодер 30 принимает закодированный видео поток битов, который представляет блоки видео закодированной видео вырезки и ассоциированные элементы синтаксиса, от видео кодера 20. Модуль 70 энтропийного декодирования из видео декодер 30 энтропийно декодирует поток битов, чтобы генерировать квантованные коэффициенты, вектора движения или индикаторы режима внутреннего предсказания, и другие элементы синтаксиса. Модуль 70 энтропийного декодирования передает вектора движения и другие элементы синтаксиса к модулю 72 компенсации движения. Видео декодер 30 может принять элементы синтаксиса на уровне видео вырезки и/или уровне блока видео.
[0179] Когда видео вырезка закодирована как внутренне кодированная (I) вырезка, модуль 74 внутреннего предсказания может генерировать данные предсказания для блока видео текущей видео вырезки на основании сигнализированного режима внутреннего предсказания и данных от ранее декодированных блоков текущего кадра или картинки. Когда видео кадр закодирован как внешне кодированная (то есть, B, P или GPB) вырезка, модуль 72 компенсации движения формирует предсказывающие блоки для блока видео текущей видео вырезки на основании вектора движения и других элементов синтаксиса, принятых от модуля 70 энтропийного декодирования. Предсказывающие блоки могут быть сформированы из одной из опорных картинок в пределах одного из списков опорных картинок. Видео декодер 30 может конструировать списки опорного кадра, Список 0 и Список 1, используя способы конструирования по умолчанию, на основании опорных картинок, сохраненных в памяти 82 опорных картинок.
[0180] Модуль 72 компенсации движения определяет информацию предсказания для блока видео текущей видео вырезки, синтаксически разбирая вектора движения и другие элементы синтаксиса, и использует информацию предсказания, чтобы сформировать предсказывающие блоки для текущего декодируемого блока видео. Например, модуль 72 компенсации движения использует некоторые из принятых элементов синтаксиса, чтобы определить режим предсказания (например, внутреннее или внешнее предсказание), использованный для кодирования блоков видео для видео вырезки, тип вырезки внешнего предсказания (например, B вырезка, P вырезка, или вырезка GPB), информация конструирования для одного или более списков опорных картинок для вырезки, вектора движения для каждого внешне кодированного блока видео вырезки, статус внешнего предсказания для каждого внешне кодированного блока видео вырезки, и другую информацию, чтобы декодировать блоки видео в текущей видео вырезке.
[0181] Модуль 70 энтропийного декодирования может энтропийно декодировать вектора движения для P- и B-кодированных блоков. Например, модуль 70 энтропийного декодирования может декодировать вектора движения, используя режим AMVP или слияния. В частности, в соответствии со способами настоящего раскрытия, модуль 70 энтропийного декодирования может избежать использовать предсказатель вектора движения - кандидат, имеющий отличный тип, чем текущий декодируемый вектор движения, чтобы декодировать текущий вектор движения. Например, когда текущий вектор движения содержит диспаратный вектор движения, модуль 70 энтропийного декодирования может декодировать текущий вектор движения, используя предсказатель вектора движения, который является также диспаратным вектором движения. Аналогично, модуль 70 энтропийного декодирования может запретить масштабирование при декодировании текущего вектора движения, используя предсказатель вектора движения, который содержит диспаратный вектор движения. В качестве другого примера, когда текущий вектор движения содержит временный вектор движения, модуль 70 энтропийного декодирования может декодировать текущий вектор движения, используя предсказатель вектора движения, который является также временным вектором движения.
[0182] В соответствии со способами настоящего раскрытия модуль 70 энтропийного декодирования может установить предсказатель вектора движения - кандидат как недоступный для использования в AMVP (или режиме слияния), чтобы предсказать текущий вектор движения, когда предсказатель вектора движения - кандидат имеет отличный тип, чем текущий вектор движения. Например, если предсказатель вектора движения - кандидат является диспаратным вектором движения, и текущий вектор движения является временным вектором движения, модуль 70 энтропийного декодирования может установить предсказатель вектора движения - кандидат как недоступный для использования в качестве предсказателя для текущего вектора движения. Аналогично, если предсказатель вектора движения - кандидат является временным вектором движения, и текущий вектор движения является диспаратным вектором движения, модуль 70 энтропийного декодирования может установить предсказатель вектора движения - кандидат как недоступный для использования в качестве предсказателя для текущего вектора движения.
[0183] Модуль 70 энтропийного декодирования может использовать один или более различных способов, чтобы определить, является ли декодируемый вектор движения и предсказатель вектора движения одинакового типа вектора движения или различного типа вектора движения. В некоторых примерах модуль 70 энтропийного декодирования может определять, ссылается ли декодируемый вектор движения и предсказатель вектора движения - кандидат на опорные картинки, имеющие значения POC, которые отличаются от текущей декодируемой картинки. Если один из вектора движения или предсказателя вектора движения - кандидата ссылается на опорную картинку, имеющую значение POC, которое отличается от текущей декодируемой картинки, и другой ссылается на опорную картинку, имеющую значение POC, которое является таким же как текущей декодируемой картинкой, модуль 70 энтропийного декодирования может определять, что вектор движения и предсказатель вектора движения - кандидат имеют различные типы векторов движения. В частности, вектор движения, который ссылается на опорную картинку, имеющую значение POC, которое является таким же как текущей декодируемой картинкой, можно считать диспаратным вектором движения, тогда как вектор движения, который ссылается на опорную картинку, имеющую другое значение POC чем текущая картинка, можно считать временным вектором движения.
[0184] В качестве другого примера модуль 70 энтропийного декодирования может определять, ссылается ли текущий вектор движения на опорную картинку в текущем уровне, включающем в себя текущую декодируемую картинку, или другом уровне. Аналогично, модуль 70 энтропийного декодирования может определять, ссылается ли предсказатель вектора движения - кандидат на опорную картинку в текущем уровне или другом уровне. Если и текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на опорную картинку в текущем уровне или опорную картинку в другом уровне, модуль 70 энтропийного декодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат имеют один и тот же тип вектора движения. В частности, если текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на опорные картинки в одном или более различных уровнях, текущий вектор движения и предсказатель вектора движения - кандидат могут содержать диспаратные вектора движения. Если текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на опорные картинки в текущем уровне, текущий вектор движения и предсказатель вектора движения - кандидат могут содержать временные вектора движения. Если один из текущего вектора движения и предсказателя вектора движения - кандидата ссылается на опорную картинку в текущем уровне, и другой ссылается на опорную картинку в другом уровне, модуль 70 энтропийного декодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат имеют различные типы векторов движения.
[0185] В качестве еще одного другого примера, модуль 70 энтропийного декодирования может определять, ссылается ли текущий вектор движения на долгосрочную опорную картинку или краткосрочную опорную картинку, и аналогично, ссылается ли предсказатель вектора движения - кандидат на долгосрочную опорную картинку или краткосрочную опорную картинку. Если и текущий вектор движения и предсказатель вектора движения - кандидат ссылаются на один и тот же тип опорной картинки (то есть, оба ссылаются на долгосрочную опорную картинку, или оба ссылаются на краткосрочную опорную картинку), модуль 70 энтропийного декодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат имеют один и тот же тип вектора движения. С другой стороны, если один из текущего вектора движения и предсказателя вектора движения - кандидата ссылается на долгосрочную опорную картинку, и другой ссылаются на краткосрочную опорную картинку, модуль 70 энтропийного декодирования может определять, что текущий вектор движения и предсказатель вектора движения - кандидат имеют различные типы векторов движения. Вектора движения, ссылающиеся на долгосрочную опорную картинку, могут содержать временные вектора движения, тогда как вектора движения, ссылающиеся на краткосрочную опорную картинку, могут содержать диспаратные вектора движения.
[0186] Как описано выше, модуль 70 энтропийного декодирования может определять, что вектор движения кандидата другого типа, чем текущий вектор движения, недоступен для использования в качестве предсказателя вектора движения для текущего вектора движения. Таким образом, модуль 70 энтропийного декодирования может удалить такие предсказатели вектора движения - кандидатов из списка предсказателей вектора движения - кандидатов для текущего вектора движения, или пропустить добавление такого предсказателя вектора движения - кандидата к списку предсказателей вектора движения - кандидатов. Модуль 70 энтропийного декодирования может также установить переменную, ассоциированную с предсказателем вектора движения - кандидатом, указывающую, доступен ли вектор движения кандидата для использования в качестве предсказателя вектора движения для текущего вектора движения, на основании того, имеет ли предсказатель вектора движения - кандидат тот же тип как текущий вектор движения. Кроме того, модуль 70 энтропийного декодирования может быть сконфигурирован, чтобы выбрать предсказатель вектора движения - кандидат, который имеет одинаковый тип как текущий вектор движения, чтобы декодировать текущий вектор движения, то есть, имеет ли предсказатель вектора движения - кандидат значение ассоциированной переменной, указывающее, что предсказатель вектора движения - кандидат доступен для использования в качестве предсказателя вектора движения для текущего декодируемого вектора движения. Модуль 70 энтропийного декодирования может декодировать текущий вектор движения, используя другой вектор движения, режимы декодирования, такие как усовершенствованной предсказатель вектора движения (AMVP), или режим слияния.
[0187] Чтобы декодировать текущий вектор движения, модуль 70 энтропийного декодирования может выбрать один из множества предсказателей вектора движения - кандидатов (например, как обозначено данными синтаксиса, или согласно неявному процессу выбора). Когда выбранный предсказатель вектора движения является временным вектором движения, модуль 70 энтропийного декодирования может масштабировать выбранный предсказатель вектора движения на основании разностей POC между опорной картинкой, на которую предсказатель вектора движения ссылается, и опорной картинкой, на которую ссылается текущий вектор движения. Модуль 70 энтропийного декодирования может также декодировать элементы синтаксиса, представляющие значение MVDx (то есть, горизонтальный или x-компонент разности вектора движения) и значение MVDy (то есть, вертикальный или y-компонент разности вектора движения). Модуль 70 энтропийного декодирования может также суммировать значение MVDx с x-компонентой выбранного (и потенциально масштабированного) предсказателя вектора движения, чтобы воспроизвести x-компонент текущего вектора движения, и суммировать значение MVDy к y-компоненту выбранного (и потенциально масштабированного) предсказателя вектора движения, чтобы воспроизвести y-компонент текущего вектора движения. Модуль 70 энтропийного декодирования может обеспечить воспроизведенный (то есть, декодированный) вектор движения к модулю 72 компенсации движения.
[0188] Модуль 72 компенсации движения может использовать декодированный вектор движения, чтобы извлечь данные из ранее декодированной картинки, например, из памяти 82 опорных картинок. Модуль 72 компенсации движения может также выполнять интерполяцию на основании фильтров интерполяции. Модуль 72 компенсации движения может использовать фильтры интерполяции, которые используются видео кодером 20 во время кодирования блоков видео, чтобы вычислить интерполированные значения для суб-целочисленных пикселей опорных блоков. В этом случае модуль 72 компенсации движения может определять фильтры интерполяции, используемые видео кодером 20, из принятых элементов синтаксиса, и использовать фильтры интерполяции, чтобы сформировать предсказывающие блоки.
Y
,
[0189] Блок 76 обратного квантования обратно квантует, то есть, деквантует, квантованные коэффициенты преобразования, предоставленные в потоке битов и декодированные модулем 70 энтропийного декодирования. Процесс обратного квантования может включать в себя использование параметра QP квантования вычисленного декодером 30 видео для каждого блока видео в видео вырезке, чтобы определить степень квантования и, аналогично, степень обратного квантования, которое должно быть применено. Модуль 78 обратного преобразования применяет обратное преобразование, например, обратное DCT, обратное целочисленное преобразование, или концептуально подобный процесс обратного преобразования, к коэффициентам преобразования, чтобы сформировать остаточные блоки в пиксельной области.
[0190] После того, как модуль 72 компенсации движения генерирует предсказывающий блок для текущего блока видео на основании вектора движения и другие элементы синтаксиса, видео декодер 30 формирует декодированный блок видео, суммируя остаточные блоки от модуля 78 обратного преобразования с соответствующими предсказывающими блоками, генерируемыми модулем 72 компенсации движения. Сумматор 90 представляет компонент или компоненты, которые выполняют эту операцию суммирования. Если желательно, фильтр удаления блочности может также быть применен, чтобы фильтровать декодированные блоки, чтобы удалить артефакты блочности. Другие контурные фильтры (или в контуре кодирования или после контура кодирования) могут также быть использованы для сглаживания пиксельных переходами, или иначе улучшить качество видео. Декодированные блоки видео в заданном кадре или картинке затем сохраняются в памяти 82 опорных картинок, которая хранит опорные картинки, используемые для последующей компенсации движения. Память 82 опорных картинок также хранит декодированное видео для более позднего представления на устройстве отображения, таком как устройство 32 отображения из ФИГ. 1.
[0191] Видео декодер 30 может быть сконфигурирован, чтобы выполнять процесс декодирования в соответствии с одним или более способами настоящего раскрытия. В некоторых примерах для каждой картинки pic, флаг ConsImplicitFlag выводится как равный implicit_disabled_pic_flag [i] или implicit_disabled_pic_lX_flag [i] (с X, равным 0 для RefPicList0 или 1 для RefPicList1), когда implicit_disabled_pic_flag [i] или implicit_disabled_pic_lX_flag [i] соответствуют картинке pic. Альтернативно, когда целый поднабор RPS обозначен, чтобы быть ограниченным для неявного взвешенного предсказания, каждая картинка этого поднабора RPS имеет ConsImplicitFlag, равный 1, иначе, каждая картинка этого поднабора RPS может иметь ConsImplicitFlag, равный 0.
[0192] В качестве одного примера, видео декодер 30 может быть сконфигурирован, чтобы выполнять процесс взвешенного предсказания выборок. Входные данные к этому процессу могут включать в себя:
[0193] - местоположение (xB, yB), задающее верхнюю левую выборку текущей единицы предсказания относительно верхней левой выборки текущей единицы кодирования,
[0194] - ширину и высоту этой единицы предсказания, nPSW и nPSH,
[0195] - два массива (nPSW) x (nPSH) predSamplesL0 и predSamplesL1,
[0196] - флаги использования списка предсказания, predFlagL0 и predFlagL1,
[0197] - опорные индексы, refIdxL0 и refIdxL1,
[0198] - вектора движения, mvL0 и mvL1,
[0199] - битовую глубину компонента цветности, bitDepth.
[0200] Выходные данные этого процесса могут включать в себя:
[0201] - массив (nPSW) x (nPSH) predSamples значений выборки предсказания.
[0202] Видео декодер 30 может выводить переменные shift1, shift2, offset1 и offset2 следующим образом:
[0203] - Переменная shift1 может быть установлена равной (14 - bitDepth), и переменная shift2 может быть установлен равной (15 - bitDepth),
[0204] - Переменная offset1 может быть установлена равной 1<<(shift1−1), и переменная offset2 может быть установлена равной 1<<(shift2−1).
[0205] В вырезках P, если значение predFlagL0 равно 1, может применяться следующее:
[0206] - Если weighted_pred_flag равен 0, процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0207] - Иначе (weighted_pred_flag равно 1), процесс явного взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 WD6 HEVC, может быть вызван с теми же входными и выходными данными, как процесс, описанный в этом подпункте.
[0208] В вырезках B, если predFlagL0 или predFlagL1 равны 1, может применяться следующее:
[0209] - Если weighted_bipred_idc равен 0, процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0210] - Иначе, если weighted_bipred_idc равен 1 и если predFlagL0 или predFlagL1 равны 1, процесс явного взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0211] - Иначе, если weighted_bipred_idc равен 2, следующее может применяться:
[0212] - Если predFlagL0 равен 1 и predFlagL1, равно 1, процесс неявного взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0213] - Иначе (predFlagL0 или predFlagL1 равны 1, но не оба), процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0214] - Иначе (weighted_bipred_idc равно 3), следующее может применяться:
[0215] - Если predFlagL0 равен 1 и predFlagL1, равно 1, и оба, ConsImplicitFlag (RefPicListL0 (refIdxL0)) и ConsImplicitFlag (RefPicListL1 (refIdxL1)) равны 1, процесс неявного взвешенного предсказания выборок, как описано в подпункте 8.5.2.2.3.2 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0216] - Иначе (predFlagL0 или predFlagL1 равно 1, но не оба, равны 1), процесс взвешенного предсказания выборок по умолчанию, как описано в подпункте 8.5.2.2.3.1 WD6 HEVC, может быть вызван с теми же самыми входными и выходными данными, как процесс, описанный в этом подпункте.
[0217] Альтернативно, неявный способ, когда weighted_bipred_idc равно 2, может быть непосредственно изменен на то, что определено выше для weighted_bipred_idc равного 3.
[0218] Таким образом видео декодер 30 из ФИГ. 3 представляют пример декодера видео, конфигурируемого, чтобы определить первый тип для текущего вектора движения текущего блока данных видео, определить второй тип для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установить переменную, представляющую, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и декодировать текущий вектор движения на основании, по меньшей мере частично, значения этой переменной. Кроме того, когда первый тип содержит диспаратный вектор движения, второй тип содержит диспаратный вектор движения, и предсказатель вектора движения - кандидат использован для предсказания текущего вектора движения, декодер видео может быть сконфигурирован, чтобы закодировать текущий вектор движения без масштабирования предсказателя вектора движения - кандидата.
[0219] ФИГ. 4 является концептуальной диаграммой, иллюстрирующей пример шаблон предсказания MVC. В примере согласно ФИГ. 4, иллюстрированы восемь видов (имеющий ID вида “S0” - “S7”), и двенадцать временных местоположений (“T0” - “T11”) иллюстрированы для каждого вида. Таким образом, каждый ряд на ФИГ. 4 соответствует виду, в то время как каждая колонка указывает временное местоположение.
[0220] Хотя MVC имеет так называемый базовый вид, который является декодируемым декодерами H.264/AVC, и стерео пара вида может быть поддержана также посредством MVC, преимущество MVC состоит в том, что оно может поддерживать пример, который использует больше чем два вида в качестве входного 3D видео и декодирует это 3D видео, представленное множественными видами. Модуль воспроизведения клиента, имеющего декодер MVC, может ожидать контент 3D видео со множественными видами.
[0221] Кадры на ФИГ. 4 указаны в пересечении каждого ряда и каждой колонки на ФИГ. 4, используя затемненный блок, включающий в себя букву, обозначающую, кодирован ли внутренне соответствующий кадр (то есть, I-кадр), или кодирован внешне в одном направлении (то есть, как P-кадр) или во множественных направлениях (то есть, как B-кадр). В целом, предсказания обозначены стрелками, где указанный кадр использует объект - исходную точку для ссылки предсказания. Например, P-кадр вида S2 во временном местоположении T0 предсказывается из I-кадра вида S0 во временном местоположении T0.
[0222] Как с кодированием видео единственного вида, кадры последовательности видео кодирования видео с множественными видами могут быть закодированы с предсказанием относительно кадров в различных временных местоположениях. Например, b-кадр вида S0 во временном местоположении T1 имеет стрелку, указывающую на него из I-кадра вида S0 во временном местоположении T0, указывая, что b-кадр предсказан из I-кадра. Дополнительно, однако, в контексте кодирования видео с множественными видами кадры могут быть предсказаны между видами. То есть, компонент вида может использовать компоненты вида в других видах для ссылки. В MVC, например, предсказание между видами реализуется, как будто компонент вида в другом виде является опорой внешнего предсказания. Потенциальные опоры (ссылки) между видами сигнализируются в расширении MVC набора параметров последовательности (SPS) и могут быть модифицированы процессом построения списка опорных картинок, который обеспечивает гибкий порядок внешнего предсказания или ссылок предсказания между видами.
[0223] В расширении MVC H.264/AVC, в качестве примера, предсказание между видами поддерживается компенсацией диспаратного движения, которая использует синтаксис компенсации движения H.264/AVC, но позволяет картинке в другом виде использоваться в качестве опорной картинки. Кодирование двух видов может быть поддержано посредством MVC, которое называется обычно как стереоскопические виды. Одним из преимуществ MVC является то, что кодер MVC мог получить больше чем два вида в качестве входного 3D видео, и декодер MVC может декодировать такое представление множественных видов. Таким образом, средство воспроизведения с декодером MVC может ожидать содержимое 3D видео с более, чем двумя видами.
[0224] В MVC предсказание между видами разрешено среди картинок в одной и той же единице доступа (то есть, с одним и тем же моментом времени). Единица доступа обычно является единицей данных, включающей в себя все компоненты вида (например, все единицы NAL) для общего момента времени. Таким образом, в MVC, предсказание между видами разрешено среди картинок в одной и той же единице доступа. При кодировании картинки в одном из не базовых видов, картинка может быть добавлена в список опорных картинок, если она находится в другом виде, но с одинаковым моментом времени (например, одинаковыми значением POC, и таким образом, в одной и той же единице доступа). Опорная картинка предсказания между видами может быть помещена в любую позицию списка опорных картинок, аналогично тому как любая опорная картинка внешнего предсказания.
[0225] ФИГ. 4 обеспечивает различные примеры предсказания между видами. Кадры вида S1, в примере согласно ФИГ. 4, проиллюстрированы как предсказываемые из кадров в различных временных местоположениях вида S1, так же как предсказанные из кадров между видами кадров видов S0 и S2 в тех же самых временных местоположениях. Например, b-кадр вида S1 во временном местоположении T1 предсказан из каждого из B-кадров вида S1 во временных местоположениях T0 и T2, так же как b-кадры видов S0 и S2 во временном местоположении T1.
[0226] В примере согласно фиг. 4, заглавная буква “B” и строчные буквы “b” предназначены, чтобы указывать различные иерархические отношения между кадрами, а не различные методологии кодирования. В целом, кадры с заглавной буквой “B” относительно выше в иерархии предсказания, чем кадры со строчной буквой “b”. ФИГ. 4 также иллюстрирует изменения в иерархии предсказания, используя различные уровни затенения, где кадры с большей величиной затенения (то есть, относительно более темная) выше в иерархии предсказания, чем те кадры, имеющие меньше затенения (то есть, относительно светлее). Например, все I-кадры на ФИГ. 4 иллюстрированы с полным затенением, в то время как P-кадры имеют есть несколько более светлое затенение, и B-кадры (и строчные b-кадров) имеют различные уровни затенения друг относительно друга, но всегда светлее чем затенение P-кадров и I-кадров.
[0227] В целом, иерархия предсказания относится к индексам порядка видов, в которых кадры относительно выше в иерархии предсказания должны быть декодированы прежде, чем декодировать кадры, которые относительно ниже в иерархии, таким образом, чтобы кадры относительно выше в иерархии могли использоваться как опорные кадры во время декодирования кадров относительно ниже в иерархии. Индекс порядка вида является индексом, который указывает порядок декодирования компонентов вида в единице доступа. Индексы порядка вида подразумеваются в расширении MVC в SPS, как определено в Приложении H в H.264/AVC (поправка MVC). В SPS для каждого индекса i сигнализируется соответствующий view_id. В некоторых примерах декодирование компонентов вида должно следовать возрастающему порядку индекса порядка вида. Если все виды представлены, то индексы порядка вида находятся в последовательном порядке от 0 до num_views_minus_1.
[0228] Таким образом кадры, используемые как опорные кадры, могут быть декодированы прежде, чем декодированы кадры, которые закодированы со ссылками на опорные кадры. Индекс порядка вида является индексом, который указывает порядок декодирования компонентов вида в единице доступа. Для каждого индекса i порядка вида сигнализируется соответствующий view_id. Декодирование компонентов вида следует возрастающему порядку индексов порядка вида. Если все виды представлены, то набор индексов порядка вида может содержать последовательно упорядоченный набор от нуля до меньше, чем полное количество видов.
[0229] Для некоторых кадров на равных уровнях иерархии порядок декодирования может не иметь значения друг относительно друга. Например, I-кадр вида S0 во временном местоположении T0 используется в качестве опорного кадра для P-кадра вида S2 во временном местоположении T0, который в свою очередь используется в качестве опорного кадра для P-кадра вида S4 во временном местоположении T0. Соответственно, I-кадр вида S0 во временном местоположении T0, должен быть декодирован перед P-кадром вида S2 во временном местоположении T0, который должен быть декодирован перед P-кадром вида S4 во временном местоположении T0. Однако, между видами S1 и S3, порядок декодирования не имеет значения, так как виды S1 и S3 не полагаются на друг друга для предсказания, но вместо этого предсказываются только от видов, которые выше в иерархии предсказания. Кроме того, вид S1 может быть декодирован перед видом S4, пока вид S1 декодируется после видов S0 и S2.
[0230] Таким образом иерархическое упорядочение может быть использовано для описания видов S0-S7. Пусть нотация SA>SB означает, что вид SA должен быть декодирован перед видом SB. Используя эту нотацию S0>S2>S4>S6>S7, в примере согласно ФИГ. 4. Кроме того, в отношении примера на ФИГ. 4, S0>S1, S2>S1, S2>S3, S4>S3, S4>S5, и S6>S5. Любой порядок декодирования для видов, который не нарушает эти требования, возможен. Соответственно, много различных порядков декодирования возможны только с некоторыми ограничениями.
[0231] ФИГ. 5 является последовательностью операций, иллюстрирующей примерный способ для кодирования текущего блока в соответствии со способами настоящего раскрытия. Текущий блок может содержать текущую CU или часть текущей CU, например, текущую PU. Хотя описано относительно видео кодера 20 (ФИГ. 1 и 2), нужно подразумевать, что другие устройства могут быть сконфигурированы, чтобы выполнять способ, аналогичный таковому из ФИГ. 5.
[0232] В этом примере видео кодер 20 первоначально предсказывает текущий блок (150). Например, видео кодер 20 может вычислить одну или более единиц предсказания (единиц PU) для текущего блока. В этом примере предполагается, что видео кодер 20 внешне предсказывает текущий блок. Например, модуль 42 оценки движения может вычислить вектор движения для текущего блока, выполняя поиск движения ранее закодированных картинок, например, картинок между видами и временных картинок. Таким образом, модуль 42 оценки движения может сформировать временный вектор движения или диспаратный вектор движения, чтобы закодировать текущий блок.
[0233] Видео кодер 20 может затем закодировать вектор движения. В частности, модуль 56 энтропийного кодирования может определять список предсказателей вектора движения - кандидатов (152). Например, модуль 56 энтропийного кодирования может выбрать вектора движения одного или более соседних блоков в качестве предсказателей вектора движения - кандидатов. Видео кодер 20 может определять, что каждый из предсказателей вектора движения - кандидатов в списке доступен на основании критериев, отличных от типов для векторов движения. Модуль 56 энтропийного кодирования может затем определить, имеет ли любой из списка векторов движения кандидата отличный тип, чем текущий вектор движения. Модуль 56 энтропийного кодирования может затем удалить предсказатели вектора движения - кандидаты из списка предсказателей вектора движения - кандидатов, которые имеют типы, которые отличаются от типа для текущего вектора движения (154). В частности, модуль 56 энтропийного кодирования может установить переменную, указывающую, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя вектора движения на основании того, имеет ли предсказатель вектора движения - кандидат тип, который отличается от типа текущего закодированного предсказателя вектора движения. Таким образом видео кодер 20 может установить переменную в значение, указывающее, что предсказатель вектора движения - кандидат не доступен на основании наличия отличного типа, чем текущий вектор движения, даже когда вектор движения кандидата был ранее определен как доступный на основании других критериев.
[0234] Как описано выше, модуль 56 энтропийного кодирования может определять, имеет ли предсказатель вектора движения - кандидат тот же тип, как текущий вектор движения, используя один из множества различных способов. Например, модуль 56 энтропийного кодирования может определять, ссылается ли предсказатель вектора движения - кандидат на опорную картинку, имеющую то же значение POC, или другое значение POC, чем текущая закодированная картинка, и имеет ли опорная картинка, на которую ссылается текущий вектор движения, то же значение POC, или другое значение POC, чем текущая закодированная картинка. В качестве другого примера, модуль 56 энтропийного кодирования может определять, обращаются ли предсказатель вектора движения - кандидат и текущий вектор движения оба к опорным картинкам в том же уровне как текущая кодируемая картинка, или одном или более различных уровнях, чем уровень, включающий текущую закодированную картинку. В качестве еще одного другого примера, модуль 56 энтропийного кодирования может определять, обращаются ли предсказатель вектора движения - кандидат и текущий вектор движения оба к долгосрочным опорным картинкам или краткосрочным опорным картинкам.
[0235] После формирования списка предсказателей вектора движения - кандидатов, таким образом что все предсказатели вектора движения - кандидаты имеют тот же тип, как текущий вектор движения, модуль 56 энтропийного кодирования выбирает одного из предсказателей вектора движения - кандидатов для использования в качестве предсказателя вектора движения для текущего вектора движения (156). В частности, модуль 56 энтропийного кодирования выбирает одного из предсказателей вектора движения - кандидатов, для которых переменная, указывающая, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя вектора движения для текущего вектора движения. В случае необходимости модуль 56 энтропийного кодирования может масштабировать выбранный предсказатель вектора движения, например, если выбранный предсказатель вектора движения является временным вектором движения, ссылающимся на опорную картинку, имеющую значение POC, которое отличается от значения POC опорной картинки, на которую ссылается текущий вектор движения. Если выбранный вектор движения является диспаратным вектором движения, модуль 56 энтропийного кодирования может запретить масштабирование предсказателя вектора движения. Модуль 56 энтропийного кодирования затем вычисляет разность между текущим вектором движения и выбранным (и потенциально масштабированным) предсказателем вектора движения (158).
[0236] Видео кодер 20 может затем вычислить остаточный блок для текущего блока, например, чтобы сформировать единицу преобразования (TU) (160). Чтобы вычислить остаточный блок, видео кодер 20 может вычислить разность между первоначальным незакодированным блоком и предсказанным блоком для текущего блока. Видео кодер 20 может затем преобразовать и квантовать коэффициенты остаточного блока (162). Затем, видео кодер 20 может сканировать квантованные коэффициенты преобразования остаточного блока (164). Во время сканирования или после сканирования видео кодер 20 может энтропийно кодировать коэффициенты (166). Например, видео кодер 20 может закодировать коэффициенты, используя CAVLC или CABAC. Видео кодер 20 может затем вывести энтропийно кодированные данные этого блока (168).
[0237] Таким образом способ на ФИГ. 5 представляет пример способа, включающего в себя определение первого типа для текущего вектора движения текущего блока данных видео, определение второго типа для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установку переменной, представляющей, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и кодирование текущего вектора движения на основании, по меньшей мере частично, значения этой переменной.
[0238] ФИГ. 6 является последовательностью операций, иллюстрирующей примерный способ для декодирования текущего блока данных видео в соответствии со способами настоящего раскрытия. Текущий блок может содержать текущую CU или часть текущей CU (например, PU). Хотя описано относительно видео декодера 30 (ФИГ. 1 и 3), нужно подразумевать, что другие устройства может быть сконфигурированы, чтобы выполнять способ, подобный таковому из ФИГ. 6.
[0239] Первоначально видео декодер 30 принимает данные для коэффициентов преобразования и значений разности вектора движения текущего блока (200). Модуль 70 энтропийного декодирования энтропийно декодирует данные для коэффициентов и значений разности вектора движения (202). Модуль 70 энтропийного декодирования может затем определить список предсказателей вектора движения - кандидатов (204). Например, модуль 70 энтропийного декодирования может выбрать вектора движения одного или более соседних блоков в качестве предсказателей вектора движения - кандидатов. Видео декодер 30 может определять, что каждый из предсказателей вектора движения - кандидатов в списке доступен на основании критериев, отличных от типов для векторов движения. Модуль 70 энтропийного декодирования может затем определить, имеет ли любой список векторов движения кандидата отличный тип, чем текущий вектор движения. Модуль 70 энтропийного декодирования может затем удалить предсказателей вектора движения - кандидатов из списка предсказателей вектора движения - кандидатов, которые имеют типы, которые отличаются от типа для текущего вектора движения (206). В частности, модуль 70 энтропийного декодирования устанавливает переменную, указывающую, доступен ли предсказатель вектора движения - кандидат для использования в качестве предсказателя вектора движения на основании того, имеет ли предсказатель вектора движения - кандидат тип, который отличается от типа текущего закодированного предсказателя вектора движения. Таким образом видео декодер 30 может установить переменную в значение, указывающее, что предсказатель вектора движения - кандидат не доступен на основании наличия типа, отличного от текущего вектора движения, даже когда вектор движения кандидат был ранее определен как доступный на основании других критериев.
[0240] Как описано выше, модуль 70 энтропийного декодирования может определять, имеет ли предсказатель вектора движения - кандидат тот же тип как текущий вектор движения, используя один из множества различных способов. Например, модуль 70 энтропийного декодирования может определять, ссылается ли предсказатель вектора движения - кандидат на опорную картинку, имеющей то же самое значение POC, или другое значение POC, чем текущая декодируемая картинка, и ссылается ли текущий вектор движения также на опорную картинку, имеющей то же самое значение POC, или другое значение POC, чем текущая декодируемая картинка. В качестве другого примера, модуль 56 энтропийного кодирования может определять, обращаются ли предсказатель вектора движения - кандидат и текущий вектор движения оба к опорным картинкам в одном и том же уровне как текущая кодируемая картинка, или одном или более различным уровням, чем уровень, включающий в себя текущую закодированную картинку. В качестве еще одного другого примера, модуль 56 энтропийного кодирования может определять, обращаются ли предсказатель вектора движения - кандидат и текущий вектор движения оба к долгосрочным опорным картинкам или краткосрочным опорным картинкам.
[0241] Модуль 70 энтропийного декодирования затем выбирает одного из предсказателей вектора движения - кандидатов, который доступен (то есть, имеющий значение переменной, указывающее, что вектор движения кандидата доступен для использования в качестве предсказателя вектора движения для текущего вектора движения) в качестве предсказателя вектора движения для текущего вектора движения (208). В некоторых примерах модуль 70 энтропийного декодирования выбирает предсказателя вектора движения согласно неявному, заранее заданному, процессу тогда как в других примерах модуль 70 энтропийного декодирования декодирует элемент синтаксиса, указывающий - какой из списка векторов движения кандидата выбрать. Модуль 70 энтропийного декодирования затем математически объединяет декодированные значения разности вектора движения с предсказателем вектора движения, чтобы воспроизвести текущий вектор движения (210). Например, модуль 70 энтропийного декодирования может суммировать x-компонент разности вектора движения (MVDx) с x-компонентом выбранного предсказателя вектора движения, и y-компонент разности вектора движения (MVDy) с y-компонентом выбранного предсказателя вектора движения.
[0242] Видео декодер 30 может предсказать текущий блок, используя декодированный вектор движения (212). Видео декодер 30 может затем обратно сканировать воспроизведенные коэффициенты (214), чтобы создать блок квантованных коэффициентов преобразования. Видео декодер 30 может затем обратно квантовать и обратно преобразовывать коэффициенты, чтобы сформировать остаточный блок (216). Видео декодер 30 может в конечном счете декодировать текущий блок посредством комбинирования предсказанного блока и остаточного блока (218).
[0243] Таким образом, способ согласно ФИГ. 6 представляет пример способа, включающего в себя определение первого типа для текущего вектора движения текущего блока данных видео, определение второго типа для предсказателя вектора движения - кандидата соседнего блока к текущему блоку, установку переменной, представляющей, доступен ли предсказатель вектора движения - кандидат, в значение, указывающее, что предсказатель вектора движения - кандидат не доступен, когда первый тип отличается от второго типа, и декодирование текущего вектора движения на основании, по меньшей мере частично, значения этой переменной.
[0244] Должно быть понятно, что в зависимости от примера некоторые действия или события любого из способов, описанных здесь, могут быть выполнены в различной последовательности, могут быть добавлены, слиты, или не учтены в целом (например, не все описанные действия или события необходимы для практической реализации способов). Кроме того, в некоторых примерах действия или события могут быть выполнены одновременно, например, с помощью мульти-потоковой обработки, обработки с перерывами, или множественных процессоров, а не последовательно.
[0245] В одном или более примерах описанные функции могут быть реализованы в аппаратном обеспечении, программном обеспечении, программно-аппаратных средствах, или любой их комбинации. Если реализованы в программном обеспечении, функции могут быть сохранены на или переданы по как одна или более инструкций или код по считываемому компьютером носителю и выполнены основанным на аппаратном обеспечении блоком обработки. Считываемый компьютером носитель может включать в себя считываемый компьютером запоминающий носитель, который соответствует материальному носителю, такому как запоминающие носители данных, или коммуникационные носители, включая любой носитель, который облегчает передачу компьютерной программы от одного места к другому, например, согласно протоколу связи. Таким образом считываемый компьютером носитель обычно может соответствовать (1) материальным считываемым компьютером запоминающим носителям, которые являются невременными, или (2) коммуникационному носителю, такому как сигнал или несущая. Запоминающие носители данных могут быть любым доступным носителем, к которому могут получить доступ один или более компьютеров или один или более процессоров, чтобы извлечь инструкции, код и/или структуры данных для реализации способов, описанных в настоящем раскрытии. Компьютерный программный продукт может включать в себя считываемый компьютером носитель.
[0246] Посредством примера, а не ограничения, такие считываемые компьютером запоминающий носители могут содержать RAM, ROM, EEPROM, CD-ROM или другое запоминающее устройство на оптических дисках, запоминающее устройство на магнитных дисках, или другие магнитные запоминающие устройства, флэш-память, или любой другой носитель, который может быть использован для сохранения желаемого программного кода в форме инструкций или структур данных, и к которому может получить доступ компьютер. Кроме того, любое соединение должным образом называют считываемым компьютером носителем. Например, если инструкции переданы от вебсайта, сервера, или другого удаленного источника, используя коаксиальный кабель, волокно-оптический кабель, витую пару, цифровую абонентскую линию (DSL), или беспроводные технологии, такие как инфракрасное, радио-, и микроволновое излучение, то эти коаксиальный кабель, волокно-оптический кабель, витая пара, DSL, или беспроводные технологии, такие как инфракрасное, радио-, и микроволновое излучение включены в определение носителя. Нужно подразумевать, однако, что считываемые компьютером запоминающий носители и запоминающие носители данных не включают в себя соединения, несущие, сигналы, или другие временные носители, но вместо этого направлены на невременные, материальные запоминающие носители. Диск (disk) и диск (disc), как используется здесь, включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискета и диск Blu-ray, где диски (disks) обычно воспроизводят данные магнитно, в то время как диски (discs) воспроизводят данные оптически с помощью лазеров. Комбинации вышеупомянутого должны также быть включены в понятие считываемого компьютером носителя.
[0247] Инструкции могут быть выполнены один или более процессорами, такими как один или более цифровых сигнальных процессоров (DSP), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые полем логические матрицы (FPGA), или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин "процессор", как используется здесь, может относится к любой предшествующей структуре или любой другой структуре, подходящей для реализации способов, описанных здесь. Кроме того, в некоторых аспектах функциональные возможности, описанные здесь, могут быть предоставлены в раках специализированного аппаратного обеспечения и/или программных модулей, конфигурируемых для кодирования и декодирования, или соединенных в объединенный кодек. Кроме того, способы могут быть полностью реализованы в одной или более схемах или логических элементах.
[0248] Способы настоящего раскрытия могут быть реализованы в широком разнообразии устройств или устройств, включая беспроводную телефонную трубку, интегральную схему (IC) или набор IC (например, микропроцессорный набор). Различные компоненты, модули, или блоки описаны в настоящем раскрытии, чтобы подчеркнуть функциональные аспекты устройств, конфигурируемых, чтобы выполнять раскрытые способы, но не обязательно требовать реализации различными блоками аппаратного обеспечения. Вместо этого, как описано выше, различные блоки могут быть объединены в блок аппаратного обеспечения кодека или предоставлены коллекцией взаимодействующих блоков аппаратного обеспечения, включая один или более процессоров, как описано выше, в соединении с подходящим программным обеспечением и/или программно-аппаратными средствами.
[0249] Были описаны различные примеры. Эти и другие примеры попадают в рамки нижеследующей формулы изобретения.