ЗЕРКАЛЬНОЕ ОТОБРАЖЕНИЕ БЛОКОВ И РЕЖИМ ПРОПУСКА В ИНТРА-ОСНОВАННОМ НА КОПИИ БЛОКА ПРЕДСКАЗАНИИ
BLOCK FLIPPING AND SKIP MODE IN INTRA BLOCK COPY PREDICTION

УРОВЕНЬ ТЕХНИКИ
[001] Инженеры используют сжатие (также называемое кодирование источника), чтобы уменьшать битрейт цифрового видео. Сжатие уменьшает стоимость хранения и передачи видеоинформации посредством преобразования информации в форму более низкого битрейта. Распаковка (также называемая декодирование) восстанавливает версию исходной информации из сжатой формы. "Кодек" является системой кодера/декодера.
[002] За последние два десятилетия, были приняты различные стандарты видеокодеков, включая сюда стандарты ITU-T H.261, H.262 (MPEG-2 или ISO/IEC 13818-2), H.263 и H.264 (MPEG-4 AVC или ISO/IEC 14496-10), стандарты MPEG-1 (ISO/IEC 11172-2) и MPEG-4 Visual (ISO/IEC 14496-2), и стандарт SMPTE 421M (VC-1). В более позднее время, был одобрен стандарт H.265/HEVC (ITU-T H.265 или ISO/IEC 23008-2). Расширения стандарта H.265/HEVC (например, для кодирования/декодирования масштабируемого видео, для кодирования/декодирования видео с более высокой точностью в терминах глубины битов отсчетов или частоты дискретизации цветности, для контента захвата экрана, или для многовидового кодирования/декодирования) в текущее время находятся в разработке. Стандарт видеокодека обычно определяет варианты выбора для синтаксиса кодированного битового видеопотока, параметров детализации в битовом потоке, когда конкретные признаки используются в кодировании и декодировании. Во многих случаях, стандарт видеокодека также обеспечивает подробности об операциях декодирования, которые декодер должен выполнять, чтобы достигать согласовывающихся результатов в декодировании. Помимо стандартов кодеков, различные коммерческие форматы кодеков определяют другие варианты выбора для синтаксиса кодированного битового видеопотока и соответствующих операций декодирования.
[003] Интра-копия блока ("BC") является режимом предсказания в разработке для расширений H.265/HEVC. Для режима интра-BC предсказания, значения отсчетов текущего блока в картинке предсказываются с использованием ранее восстановленных значений отсчетов в той же картинке. Вектор блока ("BV") указывает смещение от текущего блока к области в картинке, которая включает в себя ранее восстановленные значения отсчетов, используемые для предсказания. BV сигнализируется в битовом потоке. Интра-BC предсказание является формой интра-картиночного предсказания - интра-BC предсказание для блока в картинке не использует какие-либо значения отсчетов, другие, нежели значения отсчетов в той же картинке.
[004] Как в текущее время определено в стандарте H.265/HEVC и осуществлено в некотором эталонном программном обеспечении для стандарта H.265/HEVC, режим интра-BC предсказания имеет несколько проблем. В частности, кодирование блоков с предсказуемым смещением BC не обрабатывается эффективно, и интра-BC предсказание для контента с перевернутыми паттернами не обрабатывается эффективно.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[005] В итоге, подробное описание представляет новаторские решения в области кодирования или декодирования блоков с использованием интра-основанного на копии блока ("BC") предсказания. Например, некоторые из новаторских решений относятся к зеркальному отражению блоков, в котором интра-BC предсказанный блок зеркально отражен по отношению к опорной области, которая может указываться посредством значения вектора блока ("BV"). Другие новаторские решения относятся к сигнализации режима пропуска, в котором текущий интра-BC предсказанный блок использует сигнализированный дифференциал BV, но не имеет данных остатка. Во многих ситуациях, новаторские решения улучшают эффективность кодирования для интра-BC предсказанных блоков.
[006] Согласно первому аспекту новаторских решений, здесь описанных, кодер изображений или видео определяет область интра-BC предсказания для текущего блока (например, единицы кодирования, единицы предсказания) в картинке на основе опорной области в картинке. Область интра-BC предсказания зеркально отражена по отношению к опорной области. Например, область интра-BC предсказания зеркально отражена горизонтально по отношению к опорной области, вертикально по отношению к опорной области, или как горизонтально, так и вертикально по отношению к опорной области.
[007] Кодер кодирует текущий блок с использованием области интра-BC предсказания, и выводит кодированные данные в битовом потоке. Кодированные данные включают в себя индикацию в отношении того, отражена ли область интра-BC предсказания зеркально по отношению к опорной области. Например, индикация является одним или более синтаксическими элементами в битовом потоке, которые могут сигнализироваться для текущего блока или для большего блока, который включает в себя текущий блок. Синтаксический элемент (элементы) может быть флагом (флагами), при этом каждый флаг указывает решение для направления зеркального отражения. Синтаксический элемент (элементы) может совместно кодироваться с другим синтаксическим элементом или отдельно сигнализироваться в битовом потоке.
[008] Соответствующий декодер принимает кодированные данные в битовом потоке. Кодированные данные включают в себя индикацию в отношении того, отражена ли область интра-BC предсказания для текущего блока (например, единицы кодирования, единицы предсказания) в картинке зеркально по отношению к опорной области в картинке. Например, индикация является одним или более синтаксическими элементами в битовом потоке, которые могут сигнализироваться для текущего блока или для большего блока, который включает в себя текущий блок. Синтаксический элемент (элементы) могут быть флагами, при этом каждый флаг указывает решение для направления зеркального отражения. Синтаксический элемент (элементы) может совместно кодироваться с другим синтаксическим элементом или отдельно сигнализироваться.
[009] Декодер определяет область интра-BC предсказания для текущего блока на основе опорной области в картинке. Область интра-BC предсказания зеркально отражена (например, горизонтально и/или вертикально) по отношению к опорной области. Декодер декодирует текущий блок с использованием области интра-BC предсказания.
[010] Когда кодер или декодер определяет область интра-BC предсказания, которая зеркально отражена по отношению к ее опорной области, кодер или декодер может (a) определять опорную область, (b) зеркально отражать опорную область, и затем (c) назначать значения отсчетов в положениях зеркально отраженной опорной области значениям отсчетов в положениях области интра-BC предсказания. Или кодер, или декодер может (a) определять опорную область, (b) назначать значения отсчетов в положениях опорной области значениям отсчетов в положениях области интра-BC предсказания, и затем (c) зеркально отражать область интра-BC предсказания. Или кодер, или декодер может (a) определять опорную область, и затем (b) назначать значения отсчетов в положениях опорной области значениям отсчетов в соответствующих положениях области интра-BC предсказания, где соответствующие положения учитывают зеркальное отражение.
[011] В некоторых иллюстративных вариантах осуществления, кодированные данные включают в себя значение BV для текущего блока. Значение BV указывает смещение к опорной области в картинке. Во время кодирования значение BV может быть предсказанным значением BV, или значение BV может идентифицироваться в оценке BV и сигнализироваться с помощью дифференциала BV по отношению к предсказанному значению BV. Во время декодирования, значение BV может быть предсказанным значением BV, или значение BV может восстанавливаться посредством добавления дифференциала BV к предсказанному значению BV.
[012] Согласно другому аспекту новаторских решений, здесь описанных, кодер изображений или видео определяет значение BV для текущего блока (например, единицы кодирования, единицы предсказания) в картинке. Значение BV указывает смещение к опорной области в картинке. Кодер определяет дифференциал BV для текущего блока с использованием значения BV и предиктора BV (предсказанного значения BV) для текущего блока. Битовый поток может включать в себя значение индекса, которое указывает выбор кандидата-предиктора BV, из набора из множества кандидатов-предикторов BV, для использования в качестве предиктора BV. Или предиктор BV может выбираться некоторым другим способом. Кодер кодирует текущий блок с использованием интра-BC предсказания со значением BV. Кодер выводит в битовом потоке кодированные данные, включающие в себя флаг, указывающий, что текущий блок кодирован с использованием интра-BC предсказания в режиме пропуска. Так как текущий блок кодирован с использованием интра-BC предсказания в режиме пропуска, битовый поток включает в себя дифференциал BV для текущего блока, но не имеет данных остатка для текущего блока.
[013] В некоторых иллюстративных вариантах осуществления, если заданный блок (например, текущий блок, последующий блок) не кодирован с использованием интра-BC предсказания в режиме пропуска, другой флаг может указывать, кодирован ли заданный блок с использованием интра-BC предсказания в режиме без пропуска. Если не кодирован с использованием интра-BC предсказания в режиме без пропуска, заданный блок может быть кодирован в другом режиме, как, например, режиме интра-пространственного предсказания или интер-картиночном режиме, как указывается с помощью одного или более других синтаксических элементов.
[014] В некоторых иллюстративных вариантах осуществления, заданный блок (например, текущий блок, последующий блок), который интра-BC предсказан в режиме пропуска, имеет определенное значение для режима разделения. Это оказывает влияние на сигнализацию синтаксического элемента для режима разделения. Если заданный блок кодирован с использованием интра-BC предсказания в режиме без пропуска, битовый поток включает в себя синтаксический элемент, который указывает режим разделения для заданного блока. Если заданный блок кодирован с использованием интра-BC предсказания в режиме пропуска, однако, битовый поток не имеет синтаксического элемента, который указывает режим разделения для заданного блока, и режим разделения для заданного блока имеет определенное значение.
[015] В некоторых иллюстративных вариантах осуществления, заданный блок (например, текущий блок, последующий блок), который интра-BC предсказан в режиме пропуска, не имеет флага, который указывает присутствие или отсутствие данных остатка для заданного блока. Предполагается, что данные остатка для заданного блока отсутствуют в битовом потоке. Также, если заданный блок кодирован с использованием интра-BC предсказания в режиме без пропуска и режим разделения для заданного блока имеет определенное значение, битовый поток не имеет флага, который указывает присутствие или отсутствие данных остатка для заданного блока. В этом случае, предполагается, что данные остатка для заданного блока присутствуют в битовом потоке. В противном случае, если заданный блок кодирован с использованием интра-BC предсказания в режиме без пропуска и режим разделения для заданного блока не имеет определенного значения, битовый поток включает в себя флаг, который указывает присутствие или отсутствие данных остатка для заданного блока.
[016] Соответствующий декодер принимает из битового потока кодированные данные, включающие в себя флаг, указывающий, что текущий блок (например, единица кодирования, единица предсказания) в картинке кодирован с использованием интра-BC предсказания в режиме пропуска. Так как текущий блок кодирован с использованием интра-BC предсказания в режиме пропуска, битовый поток включает в себя дифференциал BV для текущего блока, но не имеет данных остатка для текущего блока. Декодер определяет значение BV для текущего блока с использованием дифференциала BV и предиктора BV (предсказанного значения BV) для текущего блока. Битовый поток может включать в себя значение индекса, которое указывает выбор кандидата-предиктора BV, из набора из множества кандидатов-предикторов BV, для использования в качестве предиктора BV. Или предиктор BV может выбираться некоторым другим способом. Значение BV указывает смещение к опорной области в картинке. Декодер декодирует текущий блок с использованием интра-BC предсказания со значением BV.
[017] Когда текущий блок кодирован с использованием интра-BC предсказания в режиме пропуска, область интра-BC предсказания для текущего блока может быть зеркально отражена по отношению к ее опорной области. Примеры операций зеркального отражения, направлений зеркального отражения, и сигнализации того, используется ли зеркальное отражение, подытожены выше.
[018] Новаторские решения для интра-BC предсказания могут осуществляться как часть способа, как часть вычислительного устройства, выполненного с возможностью выполнять способ, или как часть материальных считываемых компьютером носителей, хранящих исполнимые компьютером инструкции для предписания вычислительному устройству выполнять способ. Различные новаторские решения могут использоваться в комбинации или раздельно. В частности, зеркальное отражение блоков в интра-BC предсказании может использоваться совместно с режимом пропуска для интра-BC предсказанных блоков.
[019] Предшествующие и другие задачи, признаки, и преимущества изобретения станут более ясными из последующего подробного описания, которое продолжается со ссылкой на сопровождающие фигуры.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[020] Фиг. 1 является диаграммой иллюстративной вычислительной системы, в которой могут осуществляться некоторые описанные варианты осуществления.
[021] Фиг. 2a и 2b являются диаграммами иллюстративных сетевых сред, в которых могут осуществляться некоторые описанные варианты осуществления.
[022] Фиг. 3 является диаграммой иллюстративной системы кодера, совместно с которой могут осуществляться некоторые описанные варианты осуществления.
[023] Фиг. 4 является диаграммой иллюстративной системы декодера, совместно с которой могут осуществляться некоторые описанные варианты осуществления.
[024] Фиг. 5a и 5b являются диаграммами, иллюстрирующими иллюстративный кодер видео, совместно с которым могут осуществляться некоторые описанные варианты осуществления.
[025] Фиг. 6 является диаграммой, иллюстрирующей иллюстративный декодер видео, совместно с которым могут осуществляться некоторые описанные варианты осуществления.
[026] Фиг. 7a и 7b являются диаграммами, иллюстрирующими интра-BC предсказание для блока в картинке и предсказание BV для блока, соответственно.
[027] Фиг. 8a-8d, 9a-9c и 10a-10c являются диаграммами, иллюстрирующими зеркальное отражение опорных областей для блоков.
[028] Фиг. 11 и 12 являются блок-схемами последовательности операций, иллюстрирующими способы для кодирования и декодирования, соответственно, в которых область интра-BC предсказания зеркально отражена по отношению к опорной области.
[029] Фиг. 13 и 14 являются блок-схемами последовательности операций, иллюстрирующими способы для кодирования, которое включает в себя режим пропуска для интра-BC предсказанных блоков.
[030] Фиг. 15 и 16 являются блок-схемами последовательности операций, иллюстрирующими способы для декодирования, которое включает в себя режим пропуска для интра-BC предсказанных блоков.
[031] Фиг. 17a и 17b являются таблицей, показывающей синтаксическую структуру для единицы кодирования, согласно предыдущему подходу.
[032] Фиг. 18 является таблицей, показывающей новую синтаксическую структуру для единицы кодирования, которая может кодироваться как интра-BC предсказанный блок в режиме пропуска.
ПОДРОБНОЕ ОПИСАНИЕ
[033] Подробное описание представляет новаторские решения в области кодирования или декодирования блоков с использованием интра-основанного на копии блока ("BC") предсказания. Например, некоторые из новаторских решений относятся к зеркальному отражению блоков, в котором интра-BC предсказанный блок зеркально отражен по отношению к опорной области, которая может указываться посредством значения вектора блока ("BV"). Другие новаторские решения относятся к сигнализации режима пропуска, в котором текущий интра-BC предсказанный блок использует сигнализированный дифференциал BV, но не имеет данных остатка. Во многих ситуациях, новаторские решения улучшают эффективность кодирования для интра-BC предсказанных блоков.
[034] Хотя операции, здесь описанные, находятся в местах, описанных как выполняющиеся посредством кодера или декодера видео, во многих случаях операции могут выполняться посредством другого типа инструмента обработки мультимедиа (например, кодера или декодера изображений).
[035] Некоторые из новаторских решений, здесь описанных, проиллюстрированы со ссылкой на синтаксические элементы и операции, характерные для стандарта H.265/HEVC. Например, ссылка делается на черновую версию JCTVC-P1005 стандарта H.265/HEVC - "High Efficiency Video Coding (HEVC) Range Extensions Text Specification: Draft 6", JCTVC-P1005_v1, февраль 2014. Новаторские решения, здесь описанные, также могут осуществляться для других стандартов или форматов.
[036] Некоторые из новаторских решений, здесь описанных (например, зеркальное отражение блоков) описываются со ссылкой на интра-BC предсказание. Новаторские решения также могут применяться в других контекстах (например, зеркальном отражении блоков для опорных областей в компенсации движения).
[037] Более широко, являются возможными различные альтернативы для примеров, здесь описанных. Например, некоторые из способов, здесь описанных, могут изменяться посредством изменения порядка описанных действий способа, посредством разделения, повторения, или пропуска некоторых действий способа, и т.д. Различные аспекты раскрытой технологии могут использоваться в комбинации или раздельно. Разные варианты осуществления используют одно или более из описанных новаторских решений. Некоторые из новаторских решений, здесь описанных, направлены на одну или более из проблем, отмеченных в уровне техники. Обычно, заданный способ/инструмент не решает все такие проблемы.
I. ИЛЛЮСТРАТИВНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ
[038] Фиг. 1 иллюстрирует обобщенный пример подходящей вычислительной системы (100), в которой могут осуществляться несколько из описанных новаторских решений. Вычислительная система (100) не предназначена, чтобы предлагать какое-либо ограничение в отношении объема использования или функциональных возможностей, так как новаторские решения могут осуществляться в разнообразных вычислительных системах общего назначения или специального назначения.
[039] Со ссылкой на фиг. 1, вычислительная система (100) включает в себя один или более блоков (110, 115) обработки и память (120, 125). Блоки (110, 115) обработки исполняют исполнимые компьютером инструкции. Блок обработки может быть центральным блоком обработки ("CPU") общего назначения, процессором в специализированной интегральной схеме ("ASIC") или любым другим типом процессора. В многопроцессорной системе, множество блоков обработки исполняют исполнимые компьютером инструкции, чтобы увеличивать мощность обработки. Например, фиг. 1 показывает центральный блок (110) обработки также как блок обработки графики или блок совместной обработки (115). Материальная память (120, 125) может быть энергозависимой памятью (например, регистрами, кэшем, RAM), энергонезависимой памятью (например, ROM, EEPROM, флэш-памятью, и т.д.), или некоторой комбинацией упомянутых двух, доступной для блока (блоков) обработки. Память (120, 125) хранит программное обеспечение (180), осуществляющее одно или более новаторских решений для зеркального отражения блоков и/или режима пропуска в интра-BC предсказании, в форме исполнимых компьютером инструкций, подходящих для исполнения посредством блока (блоков) обработки.
[040] Вычислительная система может иметь дополнительные признаки. Например, вычислительная система (100) включает в себя хранилище (140), одно или более устройств (150) ввода, одно или более устройств (160) вывода, и одно или более соединений (170) передачи данных. Механизм взаимного соединения (не показан), такой как шина, контроллер, или сеть, взаимно соединяет компоненты вычислительной системы (100). Обычно, программное обеспечение операционной системы (не показано) обеспечивает операционную среду для другого программного обеспечения, исполняющегося в вычислительной системе (100), и координирует действия компонентов вычислительной системы (100).
[041] Материальное хранилище (140) может быть съемным или несъемным, и включает в себя магнитные диски, магнитные ленты или кассеты, CD-ROM, DVD, или любой другой носитель, который может использоваться, чтобы хранить информацию и к которому может осуществляться доступ внутри вычислительной системы (100). Хранилище (140) хранит инструкции для программного обеспечения (180), осуществляющего одно или более новаторских решений для зеркального отражения блоков и/или режима пропуска в интра-BC предсказании.
[042] Устройство (устройства) (150) ввода может быть сенсорным устройством ввода, таким как клавиатура, мышь, перо, или шаровой указатель, речевым устройством ввода, сканирующим устройством, или другим устройством, которое обеспечивает ввод в вычислительную систему (100). Для видео, устройство (устройства) (150) ввода может быть камерой, видеокартой, картой TV-тюнера, модулем захвата экрана, или аналогичным устройством, которое принимает видеовход в аналоговой или цифровой форме, или CD-ROM или CD-RW, которое считывает видеовход в вычислительную систему (100). Устройство (устройства) (160) вывода может быть устройством отображения, принтером, громкоговорителем, устройством записи CD, или другим устройством, которое обеспечивает вывод из вычислительной системы (100).
[043] Соединение (соединения) (170) передачи данных обеспечивает возможность связи по носителю передачи данных с другой вычислительной сущностью. Носитель передачи данных передает информацию, такую как исполнимые компьютером инструкции, аудио или видео ввод или вывод, или другие данные в модулированном сигнале данных. Модулированный сигнал данных является сигналом, который имеет одну или более из его характеристик установленными или измененными таким образом, чтобы кодировать информацию в сигнале. В качестве примера, и не ограничения, носители передачи данных могут использовать электрическую, оптическую, RF, или другую несущую.
[044] Новаторские решения могут быть описаны в общем контексте считываемых компьютером носителей. Считываемые компьютером носители являются любыми доступными материальными носителями, к которым может осуществляться доступ внутри вычислительной среды. В качестве примера, и не ограничения, с вычислительной системой (100), считываемые компьютером носители включают в себя память (120, 125), хранилище (140), и комбинации любых из вышеупомянутых.
[045] Новаторские решения могут быть описаны в общем контексте исполнимых компьютером инструкций, как, например, инструкций, включенных в программные модули, которые исполняются в вычислительной системе на целевом реальном или виртуальном процессоре. В общем, программные модули включают в себя процедуры, программы, библиотеки, объекты, классы, компоненты, структуры данных, и т.д., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Функциональные возможности программных модулей могут комбинироваться или разделяться между программными модулями, как требуется в различных вариантах осуществления. Исполнимые компьютером инструкции для программных модулей могут выполняться внутри локальной или распределенной вычислительной системы.
[046] Признаки "система" и "устройство" используются здесь взаимозаменяемо. Если контекст явным образом не указывает иное, никакой признак не имеет следствием какое-либо ограничение на тип вычислительной системы или вычислительного устройства. В общем, вычислительная система или вычислительное устройство может быть локальным или распределенным, и может включать в себя любую комбинацию аппаратного обеспечения специального назначения и/или аппаратного обеспечения общего назначения с программным обеспечением, осуществляющим функциональные возможности, здесь описанные.
[047] Раскрытые способы также могут осуществляться с использованием специализированного вычислительного аппаратного обеспечения, сконфигурированного с возможностью выполнять любой из раскрытых способов. Например, раскрытые способы могут осуществляться посредством интегральной схемы (например, ASIC (такой как цифровой сигнальный процессор ("DSP") ASIC, блок обработки графики ("GPU"), или программируемое логическое устройство ("PLD"), такое как программируемая пользователем вентильная матрица ("FPGA")), специально сконструированной или сконфигурированной, чтобы осуществлять любой из раскрытых способов.
[048] Для представления, подробное описание использует признаки, такие как "определять" и "использовать", чтобы описывать компьютерные операции в вычислительной системе. Эти признаки являются высокоуровневыми абстракциями для операций, выполняемых посредством компьютера, и не должны смешиваться с действиями, выполняемыми человеком. Фактические компьютерные операции, соответствующие этим признакам, изменяются в зависимости от варианта осуществления.
II. ИЛЛЮСТРАТИВНЫЕ СЕТЕВЫЕ СРЕДЫ
[049] Фиг. 2a и 2b показывают иллюстративные сетевые среды (201, 202), которые включают в себя кодеры (220) видео и декодеры (270) видео. Кодеры (220) и декодеры (270) соединены по сети (250) с использованием подходящего протокола связи. Сеть (250) может включать в себя сеть Интернет или другую компьютерную сеть.
[050] В сетевой среде (201), показанной на фиг. 2a, каждый инструмент (210) связи реального времени ("RTC") включает в себя как кодер (220), так и декодер (270) для двунаправленной передачи данных. Заданный кодер (220) может формировать вывод, согласующийся с вариантом или расширением стандарта H.265/HEVC, стандарта SMPTE 421M, стандарта ISO-IEC 14496-10 (также известного как H.264 или AVC), другого стандарта, или коммерческого формата, при этом соответствующий декодер (270) принимает кодированные данные от кодера (220). Двунаправленная передача данных может быть частью видео конференц-связи, телефонного видеовызова, или другим сценарием связи двух сторон или множества сторон. Хотя сетевая среда (201) на фиг. 2a включает в себя два инструмента (210) связи реального времени, сетевая среда (201) может вместо этого включать в себя три или более инструментов (210) связи реального времени, которые участвуют в связи множества сторон.
[051] Инструмент (210) связи реального времени управляет кодированием посредством кодера (220). Фиг. 3 показывает иллюстративную систему (300) кодера, которая может быть включена в инструмент (210) связи реального времени. Альтернативно, инструмент (210) связи реального времени использует другую систему кодера. Инструмент (210) связи реального времени также управляет декодированием посредством декодера (270). Фиг. 4 показывает иллюстративную систему (400) декодера, которая может быть включена в инструмент (210) связи реального времени. Альтернативно, инструмент (210) связи реального времени использует другую систему декодера.
[052] В сетевой среде (202), показанной на фиг. 2b, инструмент (212) кодирования включает в себя кодер (220), который кодирует видео для доставки в множество инструментов (214) проигрывания, которые включают в себя декодеры (270). Однонаправленная передача данных может обеспечиваться для системы видео наблюдения, системы наблюдения веб-камерами, модуля захвата экрана, представления конференц-связи удаленного рабочего стола или другого сценария, в котором видео кодируется и отправляется из одного местоположения в одно или более другие местоположения. Хотя сетевая среда (202) на фиг. 2b включает в себя два инструмента (214) проигрывания, сетевая среда (202) может включать в себя больше или меньше инструментов (214) проигрывания. В общем, инструмент (214) проигрывания осуществляет связь с инструментом (212) кодирования, чтобы определять поток видео для приема инструментом (214) проигрывания. Инструмент (214) проигрывания принимает поток, буферизует принятые кодированные данные для соответствующего периода, и начинает декодирование и проигрывание.
[053] Фиг. 3 показывает иллюстративную систему (300) кодера, которая может быть включена в инструмент (212) кодирования. Альтернативно, инструмент (212) кодирования использует другую систему кодера. Инструмент (212) кодирования также может включать в себя логику контроллера стороны сервера для управления соединениями с одним или более инструментами (214) проигрывания. Фиг. 4 показывает иллюстративную систему (400) декодера, которая может быть включена в инструмент (214) проигрывания. Альтернативно, инструмент (214) проигрывания использует другую систему декодера. Инструмент (214) проигрывания также может включать в себя логику контроллера стороны клиента для управления соединениями с инструментом (212) кодирования.
III. ИЛЛЮСТРАТИВНЫЕ СИСТЕМЫ КОДЕРА
[054] Фиг. 3 является блок-схемой иллюстративной системы (300) кодера, совместно с которой могут осуществляться некоторые описанные варианты осуществления. Система (300) кодера может быть инструментом кодирования общего назначения, выполненным с возможностью работы в любом из множества режимов кодирования, как, например, режиме кодирования с низкой задержкой для связи реального времени, режиме транскодирования, и режиме кодирования с более высокой задержкой для формирования мультимедиа для проигрывания из файла или потока, или она может быть инструментом кодирования специального назначения, адаптированным для одного такого режима кодирования. Система (300) кодера может быть выполнена с возможностью для кодирования конкретного типа контента (например, контента захвата экрана). Система (300) кодера может осуществляться как модуль операционной системы, как часть прикладной библиотеки или как изолированное приложение. В целом, система (300) кодера принимает последовательность видеокадров (311) источника от источника (310) видео и формирует кодированные данные в качестве вывода в канал (390). Кодированные данные, выводимые в канал, могут включать в себя контент, кодированный с использованием зеркального отражения блоков и/или режима пропуска в интра-BC предсказании, как здесь описано.
[055] Источник (310) видео может быть камерой, картой тюнера, запоминающими носителями, модулем захвата экрана, или другим источником цифрового видео. Источник (310) видео формирует последовательность видеокадров с частотой кадров, равной, например, 30 кадров в секунду. Как здесь используется, признак "кадр", в общем, указывает на исходные, кодированные или восстановленные данные изображения. Для видео с прогрессивным сканированием, кадр является кадром видео с прогрессивным сканированием. Для чередующегося видео, в иллюстративных вариантах осуществления, для кадра чередующегося видео чередование может устраняться до кодирования. Альтернативно, два комплементарных поля чередующегося видео кодируются вместе как одиночный видеокадр или кодируются как два отдельно кодированных поля. Помимо указания кадра видео с прогрессивным сканированием или кадра видео с чередующимся сканированием, признак "кадр" или "картинка" может указывать одиночное не спаренное видеополе, комплементарную пару видеополей, плоскость видеообъекта, которая представляет видеообъект в заданный момент времени, или область интереса в более большом изображении. Плоскость видеообъекта или область может быть частью большего изображения, которое включает в себя множество объектов или областей сцены.
[056] Прибывающий исходный кадр (311) сохраняется в области (320) памяти временного хранения исходных кадров, которая включает в себя множество областей (321, 322, ..., 32n) хранения буферов кадров. Буфер (321, 322, и т.д.) кадров хранит один исходный кадр в области (320) хранения исходных кадров. После того, как один или более из исходных кадров (311) были сохранены в буферах (321, 322, и т.д.) кадров, модуль (330) выбора кадров выбирает индивидуальный исходный кадр из области (320) хранения исходных кадров. Порядок, в котором кадры выбираются модулем (330) выбора кадров для ввода в кодер (340), может отличиться от порядка, в котором кадры формируются источником (310) видео, например, кодирование некоторых кадров может задерживаться в порядке, чтобы обеспечивать возможность сначала кодировать некоторые более поздние кадры и, таким образом, обеспечивать временное обратное предсказание. Перед кодером (340), система (300) кодера может включать в себя процессор предварительной обработки (не показан), который выполняет предварительную обработку (например, фильтрацию) выбранного кадра (331) до кодирования. Предварительная обработка может включать в себя преобразование цветового пространства в первичные (например, яркости) и вторичные (например, разности цветности в направлении к красному и в направлении к синему) компоненты и обработку повторной дискретизации (например, чтобы уменьшать пространственное разрешение компонент цветности) для кодирования. Обычно, до кодирования, видео преобразуется в цветовое пространство, такое как YUV, в котором значения отсчетов компоненты яркости (Y) представляют значения яркости или интенсивности, и значения отсчетов компонент цветности (U, V) представляют значения цветовой разности. Точные определения значений цветовой разности (и операции преобразования в/из цветового пространства YUV в другое цветовое пространство, такое как RGB) зависят от реализации. В общем, как здесь используется, признак YUV указывает любое цветовое пространство с компонентой яркости и одной или более компонентами цветности, включая сюда Y'UV, YIQ, Y'IQ и YDbDr, также как варианты, такие как YCbCr и YCoCg. Значения отсчетов цветности могут дополнительно дискретизироваться на более низкую частоту дискретизации цветности (например, для формата YUV 4:2:0), или значения отсчетов цветности могут иметь такое же разрешение, что и значения отсчетов яркости (например, для формата YUV 4:4:4). Или видео может кодироваться в другом формате (например, формате RGB 4:4:4).
[057] Кодер (340) кодирует выбранный кадр (331), чтобы формировать кодированный кадр (341), и также формирует сигналы (342) операций управления памятью ("MMCO") или информацию набора опорных картинок ("RPS"). RPS является набором кадров, которые могут использоваться для ссылки в компенсации движения для текущего кадра или любого последующего кадра. Если текущий кадр не является первым кадром, который был кодирован, при выполнении его обработки кодирования, кодер (340) может использовать один или более ранее кодированных/декодированных кадров (369), которые были сохранены в области (360) памяти временного хранения декодированных кадров. Такие сохраненные декодированные кадры (369) используются в качестве опорных кадров для интер-кадрового предсказания контента текущего исходного кадра (331). Информация (342) MMCO/RPS указывает декодеру, какие восстановленные кадры могут использоваться в качестве опорных кадров, и, следовательно, должна сохраняться в области хранения кадров.
[058] В общем, кодер (340) включает в себя множество модулей кодирования, которые выполняют задачи кодирования, как, например, разделение на мозаичные элементы, оценка интра-предсказания и предсказание, оценка движения и компенсация, частотные преобразования, квантование и энтропийное кодирование. Точные операции, выполняемые кодером (340), могут изменяться в зависимости от формата сжатия. Формат выходных кодированных данных может быть вариантом или расширением формата H.265/HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[059] Кодер (340) может разделять кадр на множество мозаичных элементов одного и того же размера или разных размеров. Например, кодер (340) разделяет кадр вдоль рядов мозаичных элементов и столбцов мозаичных элементов, которые, с границами кадра, определяют горизонтальные и вертикальные границы мозаичных элементов внутри кадра, где каждый мозаичный элемент является прямоугольной областью. Мозаичные элементы часто используются, чтобы обеспечивать варианты выбора для параллельной обработки. Кадр также может быть организован как один или более срезов, где срез может быть целым кадром или областью кадра. Срез может декодироваться независимо от других срезов в кадре, что улучшает устойчивость к ошибкам. Контент среза или мозаичного элемента дополнительно разделяется на блоки или другие наборы отсчетов в целях кодирования и декодирования.
[060] Для синтаксиса согласно стандарту H.265/HEVC, кодер разделяет контент кадра (или среза или мозаичного элемента) на единицы дерева кодирования. Единица дерева кодирования ("CTU") включает в себя значения отсчетов яркости, организованные как блок дерева кодирования ("CTB") яркости, и соответствующие значения отсчетов цветности, организованные как два блока CTB цветности. Размер единицы CTU (и ее блоков CTB) выбирается кодером, и может быть, например, 64×64, 32×32 или 16×16 значений отсчетов. CTU включает в себя одну или более единиц кодирования. Единица кодирования ("CU") имеет блок кодирования ("CB") яркости и два соответствующие блока CB цветности. Например, CTU с CTB яркости 64×64 и двумя блоками CTB цветности 64×64 (формат YUV 4:4:4) может разделяться на четыре единицы CU, при этом каждая CU включает в себя CB яркости 32×32 и два блока CB цветности 32×32, и при этом каждая CU возможно разделяется дополнительно на более малые единицы CU. Или в качестве другого примера, CTU с CTB яркости 64×64 и двумя блоками CTB цветности 32×32 (формат YUV 4:2:0) может разделяться на четыре единицы CU, при этом каждая CU включает в себя CB яркости 32×32 и два блока CB цветности 16×16, и при этом каждая CU возможно разделяется дополнительно на более малые единицы CU. Наименьший допустимый размер единицы CU (например, 8×8, 16×16) может сигнализироваться в битовом потоке.
[061] В общем, CU имеет режим предсказания, такой как интер или интра. CU включает в себя одну или более единиц предсказания в целях сигнализации информации предсказания (такой как подробности режима предсказания, значения смещения, и т.д.) и/или обработки предсказания. Единица предсказания ("PU") имеет блок предсказания ("PB") яркости и два блока PB цветности. Для интра-предсказанной CU, PU имеет такой же размер, что и CU, если CU не имеет наименьший размер (например, 8×8). В этом случае, CU может разделяться на четыре более малых единицы PU (например, каждая 4×4, если наименьший размер CU равняется 8×8) или PU может иметь наименьший размер CU, как указано посредством синтаксического элемента для CU. CU также имеет одну или более единиц преобразования для целей кодирования/декодирования остатка, где единица преобразования ("TU") имеет блок преобразования ("TB") и два блока TB цветности. PU в интра-предсказанной CU может содержать одиночную TU (равную в размере единице PU) или множество единиц TU. Кодер принимает решение в отношении того, как разделять видео на единицы CTU, единицы CU, единицы PU, единицы TU, и т.д.
[062] В вариантах осуществления H.265/HEVC, срез может включать в себя одиночный сегмент среза (независимый сегмент среза) или разделяться на множество сегментов срезов (независимый сегмент среза и один или более зависимых сегментов срезов). Сегмент среза является целым числом единиц CTU, упорядоченных последовательно в сканировании мозаичного элемента, содержащихся в одиночной единице уровня сетевой абстракции ("NAL"). Для независимого сегмента среза, заголовок сегмента среза включает в себя значения синтаксических элементов, которые применяются для независимого сегмента среза. Для зависимого сегмента среза, усеченный заголовок сегмента среза включает в себя несколько значений синтаксических элементов, которые применяются для этого зависимого сегмента среза, и значения других синтаксических элементов для зависимого сегмента среза выводятся из значений для предшествующего независимого сегмента среза в порядке декодирования.
[063] Как здесь используется, признак "блок" может указывать макроблок, единицу предсказания, единицу данных остатка, или CB, PB или TB, или некоторый другой набор значений отсчетов, в зависимости от контекста.
[064] Возвращаясь к фиг. 3, кодер представляет интра-кодированный блок исходного кадра (331) в терминах предсказания из других, ранее восстановленных значений отсчетов в кадре (331). Для интра-BC предсказания, модуль интра-картиночной оценки оценивает смещение блока по отношению к другим, ранее восстановленным значениям отсчетов (или в некоторых вариантах реализации, по отношению к исходным значениям отсчетов в кадре (331)). Опорная область интра-кадрового предсказания является областью отсчетов в кадре, которые используются, чтобы генерировать значения BC-предсказания для блока. Опорная область может указываться с помощью значения вектора блока ("BV") (определенного в оценке BV). Опорная область может быть зеркально отражена по отношению к области предсказания для блока, как здесь описано. Для интра-пространственного предсказания для блока, модуль интра-картиночной оценки оценивает экстраполяцию соседних восстановленных значений отсчетов в блок. Модуль интра-картиночной оценки может выводить информацию предсказания (такую как значения BV для интра-BC предсказания или режим предсказания (направление) для интра-пространственного предсказания), которая энтропийно кодируется. Модуль интра-кадрового предсказания применяет информацию предсказания, чтобы определять значения интра-предсказания.
[065] Кодер (340) представляет интер-кадрово кодированный, предсказанный блок исходного кадра (331) в терминах предсказания из опорных кадров. Модуль оценки движения оценивает движение блока по отношению к одному или более опорным кадрам (369). Когда используются множество опорных кадров, множество опорных кадров могут быть из разных временных направлений или одного и того же временного направления. Опорная область предсказания с компенсацией движения является областью отсчетов в опорном кадре (кадрах), которые используются, чтобы генерировать значения предсказания с компенсацией движения для блока отсчетов в текущем кадре. Опорная область может быть зеркально отражена по отношению к области предсказания для блока, как здесь описано. Модуль оценки движения выводит информацию движения, такую как информация вектора движения ("MV"), которая энтропийно кодируется. Модуль компенсации движения применяет векторы MV к опорным кадрам (369), чтобы определять значения предсказания с компенсацией движения для интер-кадрового предсказания.
[066] Кодер может определять различия (если есть какие-либо) между значениями предсказания блока (интра или интер) и соответствующими исходными значениями. Эти значения остатка предсказания дополнительно кодируются с использованием частотного преобразования, квантования и энтропийного кодирования. Например, кодер (340) устанавливает значения для параметра квантования ("QP") для картинки, мозаичного элемента, среза и/или другой части видео, и квантует коэффициенты преобразования соответствующим образом. Энтропийный кодер кодера (340) сжимает значения квантованных коэффициентов преобразования также как некоторую стороннюю информацию (например, информацию MV, значения индексов для предикторов BV, дифференциалы BV, значения QP, решения в отношении режимов, выборы параметров). Обычные способы энтропийного кодирования включают в себя экспоненциальное кодирование Голомба, кодирование Голомба-Райса, арифметическое кодирование, дифференциальное кодирование, кодирование Хаффмана, кодирование длин серий, кодирование последовательностей переменной длины с использованием кодов переменной длины ("V2V"), кодирование последовательностей переменной длины с использованием кодов фиксированной длины ("V2F"), кодирование Лемпеля-Зива ("LZ"), кодирование со словарем, энтропийное кодирование с разделением на вероятностные интервалы ("PIPE"), и комбинации вышеупомянутого. Энтропийный кодер может использовать разные способы кодирования для разных типов информации, может применять множество способов в комбинации (например, посредством применения кодирования Голомба-Райса, за которым следует арифметическое кодирование), и может выбирать из множества кодовых таблиц в пределах конкретного способа кодирования.
[067] Адаптивный фильтр устранения блочности включается в контур компенсации движения в кодере (340), чтобы сглаживать разрывы между рядами и/или столбцами границ блоков в декодированном кадре. Другая фильтрация (такая как фильтрация устранения окантовочных помех, адаптивная контурная фильтрация ("ALF"), или фильтрация адаптивного к отсчетам смещения ("SAO"); не показаны) может альтернативно или дополнительно применяться в качестве операций внутриконтурной фильтрации.
[068] Кодированные данные, сформированные кодером (340), включают в себя синтаксические элементы для различных уровней синтаксиса битового потока. Для синтаксиса согласно стандарту H.265/HEVC, например, набор параметров картинки ("PPS") является синтаксической структурой, которая содержит синтаксические элементы, которые могут быть ассоциированы с картинкой. PPS может использоваться для одиночной картинки, или PPS может повторно использоваться для множества картинок в последовательности. PPS обычно сигнализируется отдельно от кодированных данных для картинки (например, одна единица NAL для PPS, и одна или более других единиц NAL для кодированных данных для картинки). Внутри кодированных данных для картинки, синтаксический элемент указывает то, какой PPS использовать для картинки. Аналогично, для синтаксиса согласно стандарту H.265/HEVC, набор параметров последовательности ("SPS") является синтаксической структурой, которая содержит синтаксические элементы, которые могут быть ассоциированы с последовательностью картинок. Битовый поток может включать в себя одиночный SPS или множество наборов SPS. SPS обычно сигнализируется отдельно от других данных для последовательности, и синтаксический элемент в упомянутых других данных указывает то, какой SPS использовать.
[069] Кодированные кадры (341) и информация (342) MMCO/RPS (или информация, эквивалентная информации (342) MMCO/RPS, так как зависимости и структуры упорядочения для кадров являются уже известными в кодере (340)) обрабатываются посредством эмулятора (350) обработки декодирования. Эмулятор (350) обработки декодирования осуществляет некоторые из функциональных возможностей декодера, например, задачи декодирования для восстановления опорных кадров. Способом, совместимым с информацией (342) MMCO/RPS, эмулятор (350) обработки декодирования определяет, должен ли заданный кодированный кадр (341) восстанавливаться и сохраняться для использования в качестве опорного кадра в интер-кадровом предсказании последующих кадров, подлежащих кодированию. Если кодированный кадр (341) должен сохраняться, эмулятор (350) обработки декодирования моделирует обработку декодирования, которая бы проводилась декодером, который принимает кодированный кадр (341), и формирует соответствующий декодированный кадр (351). Таким способом, когда кодер (340) использует декодированный кадр (кадры) (369), которые были сохранены в области (360) хранения декодированных кадров, эмулятор (350) обработки декодирования также использует декодированный кадр (кадры) (369) из области (360) хранения как часть обработки декодирования.
[070] Область (360) памяти временного хранения декодированных кадров включает в себя множество областей (361, 362, ..., 36n) хранения буферов кадров. Способом, совместимым с информацией (342) MMCO/RPS, эмулятор (350) обработки декодирования управляет содержимым области (360) хранения, чтобы идентифицировать любые буферы (361, 362, и т.д.) кадров с кадрами, которые более не нужны кодеру (340) для использования в качестве опорных кадров. После моделирования обработки декодирования, эмулятор (350) обработки декодирования сохраняет вновь декодированный кадр (351) в буфере (361, 362, и т.д.) кадров, который был идентифицирован таким образом.
[071] Кодированные кадры (341) и информация (342) MMCO/RPS буферизуются во временной области (370) кодированных данных. Кодированные данные, которые агрегируются в области (370) кодированных данных, содержат, как часть синтаксиса элементарного кодированного битового видеопотока, кодированные данные для одной или более картинок. Кодированные данные, которые агрегируются в области (370) кодированных данных, также могут включать в себя метаданные мультимедиа, относящиеся к кодированным видеоданным (например, как один или более параметров в одном или более сообщениях дополнительной информации расширения ("SEI") или сообщениях информации удобства в использовании видео ("VUI")).
[072] Агрегированные данные (371) из временной области (370) кодированных данных обрабатываются посредством канального кодера (380). Канальный кодер (380) может пакетировать и/или мультиплексировать агрегированные данные для передачи или сохранения в качестве мультимедийного потока (например, согласно формату потока мультимедийной программы или транспортного потока, такому как ITU-T H.222.0 | ISO/IEC 13818-1, или формату транспортного протокола реального времени сети Интернет, такому как IETF RFC 3550), в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса потока передачи мультимедиа. Или канальный кодер (380) может организовывать агрегированные данные для сохранения в виде файла (например, согласно формату контейнера мультимедиа, такому как ISO/IEC 14496-12), в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса файла хранения мультимедиа. Или более широко, канальный кодер (380) может осуществлять один или более протоколов мультиплексирования мультимедийной системы или транспортных протоколов, в этом случае канальный кодер (380) может добавлять синтаксические элементы как часть синтаксиса протокола (протоколов). Канальный кодер (380) обеспечивает вывод в канал (390), который представляет хранилище, соединение передачи данных, или другой канал для вывода. Канальный кодер (380) или канал (390) также может включать в себя другие элементы (не показаны), например, для кодирования с прямой коррекцией ошибок ("FEC") и модуляции аналогового сигнала.
IV. ИЛЛЮСТРАТИВНЫЕ СИСТЕМЫ ДЕКОДЕРА
[073] Фиг. 4 является блок-схемой иллюстративной системы (400) декодера, совместно с которой могут осуществляться некоторые описанные варианты осуществления. Система (400) декодера может быть инструментом декодирования общего назначения, выполненным с возможностью работы в любом из множества режимов декодирования, как, например, режиме декодирования с низкой задержкой для связи реального времени и режиме декодирования с более высокой задержкой для проигрывания мультимедиа из файла или потока, или она может быть инструментом декодирования специального назначения, адаптированным для одного такого режима декодирования. Система (400) декодера может быть выполнена с возможностью для декодирования конкретного типа контента (например, контента захвата экрана). Система (400) декодера может осуществляться как модуль операционной системы, как часть прикладной библиотеки или как изолированное приложение. В целом, система (400) декодера принимает кодированные данные из канала (410) и формирует восстановленные кадры как вывод для назначения (490) вывода. Кодированные данные могут включать в себя контент, который был кодирован с использованием зеркального отражения блоков и/или режима пропуска в интра-BC предсказании, как здесь описано.
[074] Система (400) декодера включает в себя канал (410), который может представлять хранилище, соединение передачи данных, или другой канал для кодированных данных в качестве ввода. Канал (410) формирует кодированные данные, которые были кодированы в канале. Канальный декодер (420) может обрабатывать кодированные данные. Например, канальный декодер (420) депакетирует и/или демультиплексирует данные, которые были агрегированы для передачи или сохранения в виде мультимедийного потока (например, согласно формату потока мультимедийной программы или транспортного потока, такому как ITU-T H.222.0 | ISO/IEC 13818-1, или формату транспортного протокола реального времени сети Интернет, такому как IETF RFC 3550), в этом случае канальный декодер (420) может осуществлять синтаксический разбор синтаксических элементов, добавленных как часть синтаксиса потока передачи мультимедиа. Или канальный декодер (420) разделяет кодированные видеоданные, которые были агрегированы для сохранения в виде файла (например, согласно формату контейнера мультимедиа, такому как ISO/IEC 14496-12), в этом случае канальный декодер (420) может осуществлять синтаксический разбор синтаксических элементов, добавленных как часть синтаксиса файла хранения мультимедиа. Или, более широко, канальный декодер (420) может осуществлять один или более протоколов демультиплексирования мультимедийной системы или транспортных протоколов, в этом случае канальный декодер (420) может осуществлять синтаксический разбор синтаксических элементов, добавленных как часть синтаксиса протокола (протоколов). Канал (410) или канальный декодер (420) также может включать в себя другие элементы (не показаны), например, для декодирования с FEC и демодуляции аналогового сигнала.
[075] Кодированные данные (421), которые выводятся из канального декодера (420), сохраняются во временной области (430) кодированных данных до тех пор, когда будет принято достаточное количество таких данных. Кодированные данные (421) включают в себя кодированные кадры (431) и информацию (432) MMCO/RPS. Кодированные данные (421) в области (430) кодированных данных содержат, как часть синтаксиса элементарного кодированного битового видеопотока, кодированные данные для одной или более картинок. Кодированные данные (421) в области (430) кодированных данных также могут включать в себя метаданные мультимедиа, относящиеся к кодированным видеоданным (например, как один или более параметров в одном или более сообщениях SEI или сообщениях VUI).
[076] В общем, область (430) кодированных данных временно хранит кодированные данные (421) до тех пор, когда такие кодированные данные (421) используются декодером (450). В этот момент, кодированные данные для кодированного кадра (431) и информации (432) MMCO/RPS передаются из области (430) кодированных данных в декодер (450). По мере того, как декодирование продолжается, новые кодированные данные добавляются в область (430) кодированных данных и самые старые кодированные данные, остающиеся в области (430) кодированных данных, передаются в декодер (450).
[077] Декодер (450) декодирует кодированный кадр (431), чтобы формировать соответствующий декодированный кадр (451). Как надлежит, при выполнении своей обработки декодирования, декодер (450) может использовать один или более ранее декодированных кадров (469) в качестве опорных кадров для интер-кадрового предсказания. Декодер (450) считывает такие ранее декодированные кадры (469) из области (460) памяти временного хранения декодированных кадров. В общем, декодер (450) включает в себя множество модулей декодирования, которые выполняют задачи декодирования, такие как энтропийное декодирование, интра-кадровое предсказание, интер-кадровое предсказание с компенсацией движения, обратное квантование, обратные частотные преобразования, и слияние мозаичных элементов. Точные операции, выполняемые декодером (450), могут изменяться в зависимости от формата сжатия.
[078] Например, декодер (450) принимает кодированные данные для сжатого кадра или последовательности кадров и формирует вывод, включающий в себя декодированный кадр (451). В декодере (450), буфер принимает кодированные данные для сжатого кадра и, в соответствующее время, делает принятые кодированные данные доступными для энтропийного декодера. Энтропийный декодер осуществляет энтропийное декодирование подвергнутых энтропийному кодированию квантованных данных также как подвергнутой энтропийному кодированию сторонней информации, обычно применяя обращение энтропийного кодирования, выполненного в кодере. Модуль компенсации движения применяет информацию движения к одному или более опорным кадрам, чтобы формировать значения предсказания с компенсацией движения для любых интер-кодированных блоков кадра, который восстанавливается. Интер-кадровая опорная область может быть зеркально отражена по отношению к области предсказания для блока, как здесь описано. Модуль интра-кадрового предсказания может пространственно предсказывать значения отсчетов текущего блока из соседних, ранее восстановленных значений отсчетов или, для интра-BC предсказания, предсказывать значения отсчетов текущего блока с использованием ранее восстановленных значений отсчетов области интра-кадрового предсказания в кадре. Интра-кадровая опорная область может указываться с помощью значения BV. Опорная область может быть зеркально отражена по отношению к области предсказания для блока, как здесь описано. Декодер (450) также восстанавливает значения остатка предсказания. Модуль обратного квантования осуществляет обратное квантование энтропийно декодированных данных. Например, декодер (450) устанавливает значения для QP для картинки, мозаичного элемента, среза и/или другой части видео на основе синтаксических элементов в битовом потоке, и осуществляет обратное квантование коэффициентов преобразования соответствующим образом. Модуль обратного частотного преобразования преобразует квантованные, данные частотной области в данные пространственной области. Для интер-кадрово предсказанного блока, декодер (450) комбинирует восстановленные значения остатка предсказания со значениями предсказания с компенсацией движения. Декодер (450) может аналогичным образом комбинировать значения остатка предсказания со значениями предсказания из интра-предсказания. Адаптивный фильтр устранения блочности включен в контур компенсации движения в декодере (450) видео, чтобы сглаживать разрывы между рядами и/или столбцами границ блока в декодированном кадре (451). Другая фильтрация (такая как фильтрация устранения окантовочных помех, ALF, или фильтрация SAO; не показаны) может альтернативно или дополнительно применяться в качестве операций внутриконтурной фильтрации.
[079] Область (460) памяти временного хранения декодированных кадров включает в себя множество областей (461, 462, ..., 46n) хранения буферов кадров. Область (460) хранения декодированных кадров является примером буфера декодированных картинок. Декодер (450) использует информацию (432) MMCO/RPS, чтобы идентифицировать буфер (461, 462, и т.д.) кадров, в котором он может сохранить декодированный кадр (451). Декодер (450) сохраняет декодированный кадр (451) в этом буфере кадров.
[080] Секвенсер (480) вывода идентифицирует то, когда следующий кадр, подлежащий формированию в порядке вывода, является доступным в области (460) хранения декодированных кадров. Когда следующий кадр (481), подлежащий формированию в порядке вывода, является доступным в области (460) хранения декодированных кадров, он считывается секвенсером (480) вывода и выводится в назначение (490) вывода (например, устройство отображения). В общем, порядок, в котором кадры выводятся из области (460) хранения декодированных кадров секвенсером (480) вывода, может отличиться от порядка, в котором кадры декодируются декодером (450).
V. ИЛЛЮСТРАТИВНЫЕ КОДЕРЫ ВИДЕО
[081] Фиг. 5a и 5b являются блок-схемой обобщенного кодера (500) видео, совместно с которым могут осуществляться некоторые описанные варианты осуществления. Кодер (500) принимает последовательность видеокартинок, включающих в себя текущую картинку, в качестве входного видеосигнала (505) и формирует кодированные данные в кодированном битовом видеопотоке (595) в качестве вывода.
[082] Кодер (500) основывается на блоках и использует блочный формат, который зависит от реализации. Блоки могут дополнительно подразделяться на разных этапах, например, на этапах предсказания, частотного преобразования и/или энтропийного кодирования. Например, картинка может разделяться на блоки 64×64, блоки 32×32 или блоки 16×16, которые могут, в свою очередь, разделяться на более малые блоки значений отсчетов для кодирования и декодирования. В вариантах осуществления кодирования для стандарта H.265/HEVC, кодер разделяет картинку на единицы CTU (блоки CTB), единицы CU (блоки CB), единицы PU (блоки PB) и единицы TU (блоки TB).
[083] Кодер (500) сжимает картинки с использованием интра-картиночного кодирования и/или интер-картиночного кодирования. Многие из компонентов кодера (500) используются как для интра-картиночного кодирования, так и для интер-картиночного кодирования. Точные операции, выполняемые этими компонентами, могут изменяться в зависимости от типа информации, которая сжимается.
[084] Модуль (510) мозаичных элементов необязательно разделяет картинку на множество мозаичных элементов одного и того же размера или разных размеров. Например, модуль (510) мозаичных элементов разделяет картинку вдоль рядов мозаичных элементов и столбцов мозаичных элементов, которые, с границами картинки, определяют горизонтальные и вертикальные границы мозаичных элементов внутри картинки, где каждый мозаичный элемент является прямоугольной областью. В вариантах осуществления H.265/HEVC, кодер (500) разделяет картинку на один или более срезов, где каждый срез включает в себя один или более сегментов срезов.
[085] Общее управление (520) кодированием принимает картинки для входного видеосигнала (505) также как обратную связь (не показана) от различных модулей кодера (500). В целом, общее управление (520) кодированием обеспечивает сигналы управления (не показаны) в другие модули (такие как модуль (510) мозаичных элементов, модуль преобразования/модуль масштабирования/модуль квантования (530), модуль масштабирования/модуль обратного преобразования (535), модуль (540) интра-картиночной оценки, модуль (550) оценки движения и модуль переключения интра/интер), чтобы устанавливать и изменять параметры кодирования во время кодирования. В частности, общее управление (520) кодированием может принимать решение в отношении того, использовать ли и как аспекты интра-BC предсказания (например, режим пропуска, зеркальное отражение блоков) во время кодирования. Общее управление (520) кодированием также может оценивать промежуточные результаты во время кодирования, например, выполняя анализ отношения искажения к скорости передачи. Общее управление (520) кодированием формирует общие данные (522) управления, которые указывают решения, принимаемые во время кодирования, так что соответствующий декодер может принимать совместимые решения. Общие данные (522) управления обеспечиваются в модуль форматирования заголовков/энтропийный кодер (590).
[086] Если текущая картинка предсказывается с использованием интер-картиночного предсказания, модуль (550) оценки движения оценивает движение блоков значений отсчетов в текущей картинке входного видеосигнала (505) по отношению к одной или более опорным картинкам. Модуль (550) оценки движения может оценивать варианты выбора для зеркального отражения заданной опорной области для интер-картиночно кодированного блока, как описано ниже. Буфер (570) декодированных картинок буферизует одну или более восстановленных ранее кодированных картинок для использования в качестве опорных картинок. Когда используется множество опорных картинок, множество опорных картинок может быть из разных временных направлений или одного и того же временного направления. Модуль (550) оценки движения формирует в качестве сторонней информации данные (552) движения, такие как данные MV, значения индексов режимов слияния, данные выбора опорных картинок, и то, используется ли зеркальное отражение блоков. Данные (552) движения обеспечиваются в модуль форматирования заголовков/энтропийный кодер (590) также как модуль (555) компенсации движения.
[087] Модуль (555) компенсации движения применяет векторы MV к восстановленной опорной картинке (картинкам) из буфера (570) декодированных картинок. Модуль (555) компенсации движения формирует предсказания с компенсацией движения для текущей картинки. Когда используется зеркальное отражение блоков, модуль (555) компенсации движения может учитывать зеркальное отражение для области предсказания (для текущего блока) по отношению к ее опорной области, как описано ниже.
[088] В отдельном пути внутри кодера (500), модуль (540) интра-картиночной оценки определяет то, как выполнять интра-картиночное предсказание для блоков значений отсчетов текущей картинки входного видеосигнала (505). Текущая картинка может полностью или частично кодироваться с использованием интра-картиночного кодирования. С использованием значений восстановления (538) текущей картинки, для интра-пространственного предсказания, модуль (540) интра-картиночной оценки определяет то, как пространственно предсказывать значения отсчетов текущего блока в текущей картинке из соседних, ранее восстановленных значений отсчетов текущей картинки. Или для интра-BC предсказания с использованием значений BV, модуль (540) интра-картиночной оценки оценивает смещение значений отсчетов текущего блока для разных опорных областей-кандидатов внутри текущей картинки. Опорные области-кандидаты могут включать в себя восстановленные значения отсчетов или, в некоторых вариантах реализации в целях оценки BV, исходные значения отсчетов из входного видео. Модуль (540) интра-картиночной оценки может оценивать разные варианты выбора для зеркального отражения области интра-BC предсказания (для текущего блока) по отношению к соответствующим опорным областям-кандидатам, как описано ниже.
[089] Модуль (540) интра-картиночной оценки формирует в качестве сторонней информации данные (542) интра-предсказания, такие как информация, указывающая то, использует ли интра-предсказание пространственное предсказание или интра-BC предсказание, направление режима предсказания (для интра-пространственного предсказания), значения BV (для интра-BC предсказания), и то, используется ли зеркальное отражение блоков (для интра-BC предсказания). Данные (542) интра-предсказания обеспечиваются в модуль форматирования заголовков/энтропийный кодер (590) также как модуль (545) интра-картиночного предсказания.
[090] Согласно данным (542) интра-предсказания, модуль (545) интра-картиночного предсказания пространственно предсказывает значения отсчетов текущего блока в текущей картинке из соседних, ранее восстановленных значений отсчетов текущей картинки. Или для интра-BC предсказания, модуль (545) интра-картиночного предсказания предсказывает значения отсчетов текущего блока с использованием ранее восстановленных значений отсчетов опорной области интра-кадрового предсказания, которая указывается посредством значения BV для текущего блока. Для интра-BC предсказания, модуль (545) интра-картиночного предсказания может учитывать зеркальное отражение для области интра-BC предсказания (для текущего блока) по отношению к ее опорной области, как описано ниже. В некоторых случаях, значение BV может быть предиктором BV (предсказанным значением BV). В других случаях, значение BV может быть другим, нежели его предсказанное значение BV. Когда данные цветности для картинки имеют такое же разрешение, что и данные яркости (например, когда формат является форматом YUV 4:4:4 или форматом RGB 4:4:4), значение BV, которое применяется для блока цветности, может быть таким же, что и значение BV, применяемое для блока яркости. С другой стороны, когда данные цветности для картинки имеют уменьшенное разрешение по отношению к данным яркости (например, когда формат является форматом YUV 4:2:0), для значения BV, которое применяется для блока цветности, может уменьшаться масштаб и возможно оно округляется, чтобы осуществлять регулировку в отношении различия в разрешении цветности (например, посредством разделения вертикальной и горизонтальной компонент значения BV на два и усечения или округления их до целочисленных значений).
[091] Модуль переключения интра/интер выбирает то, будет ли предсказание (558) для заданного блока предсказанием с компенсацией движения или интра-картиночным предсказанием. Различие (если есть какое-либо) между блоком предсказания (558) и соответствующей частью исходной текущей картинки входного видеосигнала (505) обеспечивает значения остатка (518), для блока режима без пропуска. Во время восстановления текущей картинки, для блока режима без пропуска, восстановленные значения остатка комбинируются с предсказанием (558), чтобы формировать приближенное или точное восстановление (538) исходного контента из видеосигнала (505). (В сжатии с потерями, некоторая информация теряется из видеосигнала (505).)
[092] В модуле преобразования/модуле масштабирования/модуле квантования (530), модуль частотного преобразования преобразует видеоинформацию пространственной области в данные частотной области (то есть, спектральные, преобразованные). Для основанного на блоках кодирования видео, модуль частотного преобразования применяет дискретное косинусное преобразование ("DCT"), его целочисленную аппроксимацию, или другой тип прямого блочного преобразования (например, дискретное синусное преобразование или его целочисленную аппроксимацию) к блокам данных остатка предсказания (или данным значений отсчетов, если предсказание (558) является нулевым), формируя блоки коэффициентов частотного преобразования. Кодер (500) также может быть выполнен с возможностью указывать, что такой этап преобразования пропускается. Модуль масштабирования/модуль квантования масштабирует и квантует коэффициенты преобразования. Например, модуль квантования применяет скалярное квантование мертвой зоны к данным частотной области с размером шага квантования, который изменяется на основе от кадра к кадру, на основе от мозаичного элемента к мозаичному элементу, на основе от среза к срезу, на основе от блока к блоку, на основе конкретной частоты или на другой основе. Данные (532) квантованных коэффициентов преобразования обеспечиваются в модуль форматирования заголовков/энтропийный кодер (590).
[093] В модуле масштабирования/модуле обратного преобразования (535), модуль масштабирования/модуль обратного квантования выполняет обратное масштабирование и обратное квантование над квантованными коэффициентами преобразования. Модуль обратного частотного преобразования выполняет обратное частотное преобразование, формируя блоки восстановленных значений остатка предсказания или значений отсчетов. Для блока режима без пропуска, кодер (500) комбинирует восстановленные значения остатка со значениями предсказания (558) (например, значениями предсказания с компенсацией движения, значениями интра-картиночного предсказания), чтобы формировать восстановление (538). Для блока режима пропуска, кодер (500) использует значения предсказания (558) в качестве восстановления (538).
[094] Для интра-картиночного предсказания, значения восстановления (538) могут обеспечиваться назад в модуль (540) интра-картиночной оценки и модуль (545) интра-картиночного предсказания. Также значения восстановления (538) могут использоваться для предсказания с компенсацией движения последующих картинок. Значения восстановления (538) могут дополнительно фильтроваться. Управление (560) фильтрацией определяет то, как выполнять фильтрацию устранения блочности и фильтрацию SAO над значениями восстановления (538), для заданной картинки видеосигнала (505). Управление (560) фильтрацией формирует данные (562) управления фильтром, которые обеспечиваются в модуль форматирования заголовков/энтропийный кодер (590) и модуль слияния/фильтр (фильтры) (565).
[095] В модуле слияния/фильтре (фильтрах) (565), кодер (500) осуществляет слияние контента из разных мозаичных элементов в восстановленную версию картинки. Кодер (500) избирательно выполняет фильтрацию устранения блочности и фильтрацию SAO согласно данным (562) управления фильтром, чтобы адаптивно сглаживать разрывы между границами в кадрах. Другая фильтрация (такая как фильтрация устранения окантовочных помех или ALF; не показана) может альтернативно или дополнительно применяться. Границы мозаичных элементов могут избирательно фильтроваться или не фильтроваться вовсе, в зависимости от настроек кодера (500), и кодер (500) может обеспечивать синтаксис внутри кодированного битового потока, чтобы указывать, была ли такая фильтрация применена. Буфер (570) декодированных картинок буферизует восстановленную текущую картинку для использования в последующем предсказании с компенсацией движения.
[096] Модуль форматирования заголовков/энтропийный кодер (590) форматирует и/или энтропийно кодирует общие данные (522) управления, данные (532) квантованных коэффициентов преобразования, данные (542) интра-предсказания, данные (552) движения и данные (562) управления фильтром. Для данных (542) интра-предсказания, модуль форматирования заголовков/энтропийный кодер (590) может выбирать и энтропийно кодировать значения индексов предикторов BV (для интра-BC предсказания). Модуль форматирования заголовков/энтропийный кодер (590) также может энтропийно кодировать синтаксические элементы, указывающие то, используется ли зеркальное отражение блоков для интра-BC предсказания (или компенсации движения). В некоторых случаях, модуль форматирования заголовков/энтропийный кодер (590) также определяет дифференциалы BV для значений BV (по отношению к предикторам BV для значений BV), затем энтропийно кодирует дифференциалы BV, например, с использованием контекстно-адаптивного двоичного арифметического кодирования. В частности, для интра-BC предсказанного блока режима пропуска, сигнализируется дифференциал BV.
[097] Модуль форматирования заголовков/энтропийный кодер (590) обеспечивает кодированные данные в кодированном битовом видеопотоке (595). Формат кодированного битового видеопотока (595) может быть вариантом или расширением формата H.265/HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[098] В зависимости от реализации и требуемого типа сжатия, модули кодера могут добавляться, пропускаться, разделяться на множество модулей, комбинироваться с другими модулями, и/или заменяться на подобные модули. В альтернативных вариантах осуществления, кодеры с разными модулями и/или другими конфигурациями модулей выполняют один или более из описанных способов. Конкретные варианты осуществления кодеров обычно используют вариант или дополненную версию кодера (500). Соотношения, показанные между модулями внутри кодера (500), указывают общие потоки информации в кодере; другие соотношения не показаны ради простоты.
VI. ИЛЛЮСТРАТИВНЫЕ ДЕКОДЕРЫ ВИДЕО
[099] Фиг. 6 является блок-схемой обобщенного декодера (600), совместно с которым могут осуществляться некоторые описанные варианты осуществления. Декодер (600) принимает кодированные данные в кодированном битовом видеопотоке (605) и формирует вывод, включающий в себя картинки для восстановленного видео (695). Формат кодированного битового видеопотока (605) может быть вариантом или расширением формата H.265/HEVC, формата Windows Media Video, формата VC-1, формата MPEG-x (например, MPEG-1, MPEG-2, или MPEG-4), формата H.26x (например, H.261, H.262, H.263, H.264), или другого формата.
[0100] Декодер (600) основывается на блоках и использует блочный формат, который зависит от реализации. Блоки могут дополнительно подразделяться на разных этапах. Например, картинка может разделяться на блоки 64×64, блоки 32×32 или блоки 16×16, которые могут, в свою очередь, разделяться на более малые блоки значений отсчетов. В вариантах осуществления декодирования для стандарта H.265/HEVC, картинка разделяется на единицы CTU (блоки CTB), единицы CU (блоки CB), единицы PU (блоки PB) и единицы TU (блоки TB).
[0101] Декодер (600) распаковывает картинки с использованием интра-картиночного декодирования и/или интер-картиночного декодирования. Многие из компонентов декодера (600) используются как для интра-картиночного декодирования, так и для интер-картиночного декодирования. Точные операции, выполняемые этими компонентами, могут изменяться в зависимости от типа информации, которая распаковывается.
[0102] Буфер принимает кодированные данные в кодированном битовом видеопотоке (605) и делает принятые кодированные данные доступными для модуля синтаксического разбора/энтропийного декодера (610). Модуль синтаксического разбора/энтропийный декодер (610) осуществляет энтропийное декодирование подвергнутых энтропийному кодированию данных, обычно применяя обращение энтропийного кодирования, выполненного в кодере (500) (например, контекстно-адаптивное двоичное арифметическое декодирование). Как результат синтаксического разбора и энтропийного декодирования, модуль синтаксического разбора/энтропийный декодер (610) формирует общие данные (622) управления, данные (632) квантованных коэффициентов преобразования, данные (642) интра-предсказания, данные (652) движения и данные (662) управления фильтром. Для данных (642) интра-предсказания, модуль синтаксического разбора/энтропийный декодер (610) осуществляет энтропийное декодирование значений индексов предикторов BV (для интра-BC предсказания). Модуль синтаксического разбора/энтропийный декодер (610) также осуществляет энтропийное декодирование синтаксических элементов, указывающих то, используется ли зеркальное отражение блоков для интра-BC предсказания (или компенсации движения). В некоторых случаях, модуль синтаксического разбора/энтропийный декодер (610) также осуществляет энтропийное декодирование дифференциалов BV для значений BV (например, с использованием контекстно-адаптивного двоичного арифметического декодирования), затем комбинирует дифференциалы BV с соответствующими предикторами BV, чтобы восстанавливать значения BV. В частности, для интра-BC предсказанного блока режима пропуска, дифференциал BV подвергается синтаксическому разбору из битового потока и комбинируется с предиктором BV (например, указанным с помощью значения индекса предиктора BV), чтобы восстанавливать значение BV.
[0103] Общее управление (620) декодированием принимает общие данные (622) управления и обеспечивает сигналы управления (не показаны) в другие модули (такие как модуль масштабирования/модуль обратного преобразования (635), модуль (645) интра-картиночного предсказания, модуль (655) компенсации движения и модуль переключения интра/интер), чтобы устанавливать и изменять параметры декодирования во время декодирования.
[0104] Если текущая картинка предсказана с использованием интер-картиночного предсказания, модуль (655) компенсации движения принимает данные (652) движения, такие как данные MV, данные выбора опорной картинки, значения индексов режимов слияния и синтаксические элементы, указывающие то, используется ли зеркальное отражение блоков (для компенсации движения). Модуль (655) компенсации движения применяет векторы MV к восстановленной опорной картинке (картинкам) из буфера (670) декодированных картинок. Когда используется зеркальное отражение блоков, модуль (655) компенсации движения может учитывать зеркальное отражение для области предсказания (для текущего блока) по отношению к ее опорной области, как описано ниже. Модуль (655) компенсации движения формирует предсказания с компенсацией движения для интер-кодированных блоков в текущей картинке. Буфер (670) декодированных картинок сохраняет одну или более ранее восстановленных картинок для использования в качестве опорных картинок.
[0105] В отдельном пути внутри декодера (600), модуль (645) интра-кадрового предсказания принимает данные (642) интра-предсказания, такие как информация, указывающая, использует ли интра-предсказание пространственное предсказание или интра-BC предсказание, направление режима предсказания (для интра-пространственного предсказания), значения BV (для интра-BC предсказания) и синтаксические элементы, указывающие то, используется ли зеркальное отражение блоков (для интра-BC предсказания). Для интра-пространственного предсказания, с использованием значений восстановления (638) текущей картинки, согласно данным режима предсказания, модуль (645) интра-картиночного предсказания пространственно предсказывает значения отсчетов текущего блока в текущей картинке из соседних, ранее восстановленных значений отсчетов текущей картинки. Или для интра-BC предсказания с использованием значений BV, модуль (645) интра-картиночного предсказания предсказывает значения отсчетов текущего блока с использованием ранее восстановленных значений отсчетов опорной области интра-кадрового предсказания, которая указывается посредством значения BV для текущего блока. Для интра-BC предсказания, модуль (645) интра-картиночного предсказания может учитывать зеркальное отражение для области интра-BC предсказания (для текущего блока) по отношению к ее опорной области, как описано ниже.
[0106] Модуль переключения интра/интер выбирает то, является ли предсказание (658) для заданного блока предсказанием с компенсацией движения или интра-картиночным предсказанием. Например, при следовании синтаксису H.265/HEVC, модуль переключения интра/интер может управляться на основе одного или более синтаксических элементов, кодированных для CU в картинке, которая может содержать интра-предсказанные единицы CU и интер-предсказанные единицы CU. Для блока режима без пропуска, декодер (600) комбинирует предсказание (658) с восстановленными значениями остатка, чтобы формировать восстановление (638) контента из видеосигнала. Для блока режима пропуска, декодер (600) использует значения предсказания (658) в качестве восстановления (638).
[0107] Чтобы восстанавливать остаток для блока режима без пропуска, модуль масштабирования/модуль обратного преобразования (635) принимает и обрабатывает данные (632) квантованных коэффициентов преобразования. В модуле масштабирования/модуле обратного преобразования (635), модуль масштабирования/модуль обратного квантования выполняет обратное масштабирование и обратное квантование над квантованными коэффициентами преобразования. Модуль обратного частотного преобразования выполняет обратное частотное преобразование, формируя блоки восстановленных значений остатка предсказания или значений отсчетов. Например, модуль обратного частотного преобразования применяет обратное блочное преобразование к коэффициентам частотного преобразования, формируя данные значений отсчетов или данные остатка предсказания. Обратное частотное преобразование может быть обратным DCT, его целочисленной аппроксимацией, или другим типом обратного частотного преобразования (например, обратным дискретным синусным преобразованием или его целочисленной аппроксимацией).
[0108] Для интра-картиночного предсказания, значения восстановления (638) могут обеспечиваться назад в модуль (645) интра-картиночного предсказания. Для интер-картиночного предсказания, значения восстановления (638) могут дополнительно фильтроваться. В модуле слияния/фильтре (фильтрах) (665), декодер (600) осуществляет слияние контента из разных мозаичных элементов в восстановленную версию картинки. Декодер (600) избирательно выполняет фильтрацию устранения блочности и фильтрацию SAO согласно данным (662) управления фильтром и правилам для адаптации фильтра, чтобы адаптивно сглаживать разрывы между границами в кадрах. Другая фильтрация (такая как фильтрация устранения окантовочных помех или ALF; не показана) может альтернативно или дополнительно применяться. Границы мозаичных элементов могут избирательно фильтроваться или не фильтроваться вовсе, в зависимости от настроек декодера (600) или индикации синтаксиса внутри кодированных данных битового потока. Буфер (670) декодированных картинок буферизует восстановленную текущую картинку для использования в последующем предсказании с компенсацией движения.
[0109] Декодер (600) также может включать в себя фильтр постобработки. Фильтр (608) постобработки может включать в себя фильтрацию устранения окантовочных помех, адаптивную винеровскую фильтрацию, фильтрацию воспроизведения зерна пленки, фильтрацию SAO или другой тип фильтрации.
[0110] В зависимости от реализации и требуемого типа распаковки, модули декодера могут добавляться, пропускаться, разделяться на множество модулей, комбинироваться с другими модулями, и/или заменяться на подобные модули. В альтернативных вариантах осуществления, декодеры с разными модулями и/или другими конфигурациями модулей выполняют один или более из описанных способов. Конкретные варианты осуществления декодеров обычно используют вариант или дополненную версию декодера (600). Соотношения, показанные между модулями внутри декодера (600), указывают общие потоки информации в декодере; другие соотношения не показаны ради простоты.
VII. НОВАТОРСКИЕ РЕШЕНИЯ В ИНТРА-ОСНОВАННОМ НА КОПИИ БЛОКА ПРЕДСКАЗАНИИ
[0111] Этот раздел представляет признаки интра-основанного на копии блока ("BC") предсказания. Например, некоторые из признаков относятся к зеркальному отражению блоков, в котором область интра-BC предсказания зеркально отражена по отношению к опорной области, которая может указываться посредством значения вектора блока ("BV"). Другие признаки относятся к сигнализации режима пропуска, в котором текущий интра-BC предсказанный блок использует сигнализированный дифференциал BV, но не имеет данных остатка. Во многих ситуациях, эти признаки улучшают эффективность кодирования для интра-BC предсказанных блоков.
[0112] В частности, описанные новаторские решения могут улучшать производительность отношения искажения к скорости передачи при кодировании некоторого "искусственно" созданного видеоконтента, такого как контент захвата экрана. Контент захвата экрана обычно включает в себя повторяющиеся структуры (например, графику, текстовые символы), которые обеспечивают возможности для интра-BC предсказания для улучшения производительности. Контент захвата экрана обычно кодируется в формате (например, YUV 4:4:4 или RGB 4:4:4) с высоким разрешением дискретизации цветности, хотя он также может кодироваться в формате с более низким разрешением дискретизации цветности (например, YUV 4:2:0). Общие сценарии для кодирования/декодирования контента захвата экрана включают в себя конференц-связь удаленного рабочего стола и кодирование/декодирование графических наложений на естественное видео или другого видео "смешанного контента".
A. РЕЖИМ ИНТРА-BC ПРЕДСКАЗАНИЯ, ЗНАЧЕНИЯ BV И ПРЕДСКАЗАНИЕ BV - ВВЕДЕНИЕ
[0113] Для интра-BC предсказания, значения отсчетов текущего блока в картинке предсказываются с использованием значений отсчетов в той же картинке. Значение BV указывает смещение от текущего блока к области в картинке ("опорной области"), которая включает в себя значения отсчетов, используемые для предсказания. Опорная область обеспечивает предсказанные значения ("область интра-BC предсказания") для текущего блока. Значения отсчетов, используемые для предсказания, являются ранее восстановленными значениями отсчетов, которые являются, таким образом, доступными в кодере во время кодирования и в декодере во время декодирования. Значение BV может сигнализироваться в битовом потоке, и декодер может использовать значение BV, чтобы определять опорную область (которая была восстановлена в декодере) в картинке, чтобы использовать для предсказания. Интра-BC предсказание является формой интра-картиночного предсказания - интра-BC предсказание для блока в картинке не использует какие-либо значения отсчетов, другие, нежели значения отсчетов в той же картинке.
[0114] Фиг. 7a иллюстрирует интра-BC предсказание для текущего блока (760) в текущем кадре (710). Текущий блок может быть блоком кодирования ("CB") единицы кодирования ("CU"), блоком предсказания ("PB") единицы предсказания ("PU"), блоком преобразования ("TB") единицы преобразования ("TU") или другим блоком. Размер текущего блока может быть 64×64, 32×32, 16×16, 8×8 или некоторым другим размером. Более широко, размер текущего блока равняется m×n, где каждое из m и n является целым числом, и где m и n могут быть равны друг другу или могут иметь разные значения. Альтернативно, текущий блок может иметь некоторую другую форму (например, область кодированного видеообъекта с непрямоугольной формой).
0
0
1
1
1
0
1
0
[0115] BV (761) указывает смещение (или сдвиг) от текущего блока (760) к опорной области (780) в картинке, которая включает в себя значения отсчетов, используемые для предсказания. Опорная область (780), указанная посредством BV (761), иногда называется "соответствующий блок" для текущего блока (760). Соответствующий блок может быть идентичным текущему блоку (760), или он может быть приближением текущего блока (760). Предположим, что верхнее левое положение текущего блока находится в положении (x, y) в текущем кадре, и предположим, что верхнее левое положение опорной области находится в положении (x, y) в текущем кадре. BV указывает смещение (x-x, y-y). Например, если верхнее левое положение текущего блока находится в положении (256, 128), и верхнее левое положение опорной области находится в положении (176, 104), значение BV является (-80, -24). В этом примере, отрицательное горизонтальное смещение указывает положение слева от текущего блока, и отрицательное вертикальное смещение указывает положение выше текущего блока.
[0116] Интра-BC предсказание может улучшать эффективность кодирования посредством использования избыточности (такой как повторяющиеся паттерны внутри кадра) с использованием операций BC. Значения отсчетов текущего блока представляются с использованием значения BV вместо непосредственного кодирования значений отсчетов текущего блока. Даже если значения отсчетов текущего блока не точно соответствуют значениям отсчетов опорной области, указанной с помощью значения BV, разности могут быть незначительными (не заметными для восприятия). Или, если различия являются значительными, различия могут кодироваться как значения остатка, которые могут сжиматься более эффективно, чем исходные значения отсчетов для текущего блока.
[0117] Вместе, значения BV для блоков, кодированных с использованием интра-BC предсказания, могут потреблять значительное количество бит. Значения BV могут энтропийно кодироваться, чтобы уменьшать битрейт. Чтобы дополнительно уменьшать битрейт для значений BV, кодер может использовать предсказание значений BV. Значения BV часто демонстрируют избыточность - значение BV для заданного блока является часто аналогичным, или даже таким же как, значения BV предыдущих блоков в картинке. Для предсказания BV, значение BV для заданного блока предсказывается с использованием предиктора BV. Разность (или дифференциал BV) между значением BV для заданного блока и предиктором BV затем подвергается энтропийному кодированию. Обычно, дифференциал BV вычисляется для горизонтальной и вертикальной компонент значения BV и предиктора BV. Когда предсказание BV работает хорошо, дифференциалы BV имеют распределение вероятностей, которое поддерживает эффективное энтропийное кодирование. В одной черновой версии стандарта H.265/HEVC (JCTVC-P1005), предиктор BV является значением BV последней кодированной CU внутри текущей CTU (то есть, значением BV предыдущего интра-BC предсказанного блока внутри текущей CTU). Альтернативно, предиктор BV выбирается из множества доступных значений BV (например, в окрестности около текущего блока).
[0118] Фиг. 7b показывает BV (761) текущего блока (760) в кадре также как BV (751) предыдущего блока (750) в кадре (710). BV (751) предыдущего блока (750) используется в качестве предиктора BV для BV (761) текущего блока (760). Например, если значение BV равняется (-80, -24) и предиктор BV равняется (-80, -32), дифференциал BV, равный (0, 8), энтропийно кодируется.
[0119] Декодер принимает и осуществляет энтропийное декодирование подвергнутого энтропийному кодированию дифференциала BV для значения BV. Декодер также определяет предиктор BV для значения BV. Предиктор BV, определенный декодером, является таким же как предиктор BV, определенный кодером. Декодер комбинирует предиктор BV и декодирует дифференциал BV, чтобы восстанавливать значение BV.
B. ЗЕРКАЛЬНОЕ ОТРАЖЕНИЕ БЛОКОВ В ИНТРА-BC ПРЕДСКАЗАНИИ
[0120] В предыдущих подходах к интра-BC предсказанию, опорная область, указанная посредством значения BV, обеспечивает область интра-BC предсказания для текущего блока. То есть значения отсчетов опорной области являются интра-BC предсказанными значениями для текущего блока.
[0121] Согласно одному аспекту новаторских решений, здесь описанных, область интра-BC предсказания для текущего блока зеркально отражена по отношению к опорной области. Значение BV для текущего блока может указывать опорную область. Вместо использования опорной области напрямую в качестве области интра-BC предсказания для текущего блока, опорная область может зеркально отражаться горизонтально и/или вертикально. В частности, зеркальное отражение блоков может улучшать эффективность кодирования для текстовых символов контента захвата экрана.
1. ПРИМЕРЫ ЗЕРКАЛЬНОГО ОТРАЖЕНИЯ БЛОКОВ
[0122] Фиг. 8a-8d, 9a-9c и 10a-10c иллюстрируют примеры зеркального отражения блоков в интра-BC предсказании.
[0123] Фиг. 8a показывает текущий блок (860) в текущей картинке (810). Текущий блок (860) включает в себя текстовый символ p, как подробно указано на фиг. 8b. BV (861) для текущего блока (860) указывает смещение к опорной области (880) в текущей картинке (810). Опорная область (880) включает в себя текстовый символ d, как подробно указано на фиг. 8c. Без зеркального отражения, опорная область (880) является плохим предиктором для текущего блока (860). (Разности по отсчетам между текущим блоком (860) и опорной областью (880) являются существенными.)
[0124] Кодер и декодер могут использовать зеркальное отражение блоков в интра-BC предсказании, чтобы улучшать эффективность кодирования. Например, опорная область (880) может зеркально отражаться горизонтально и вертикально, как показано в зеркально отраженной опорной области (881) из фиг. 8d. В этом примере, когда опорная область (880) зеркально отражается горизонтально и вертикально, зеркально отраженная опорная область (881) в точности соответствует текущему блоку (860). (То есть, область интра-BC предсказания является идеальной для текущего блока (880), и остаток включает в себя только отсчеты нулевого значения.)
[0125] Аналогично, опорная область (880) может зеркально отражаться горизонтально. Например, если заданный блок включает в себя текстовый символ b, горизонтальное зеркальное отражение опорной области (880) может давать зеркально отраженную опорную область, которая точно соответствует заданному блоку. Или опорная область (880) может зеркально отражаться вертикально. Например, если заданный блок включает в себя текстовый символ q, вертикальное зеркальное отражение опорной области (880) может давать зеркально отраженную опорную область, которая точно соответствует заданному блоку.
[0126] С помощью зеркального отражения блоков, для многих шрифтов, блок, который включает в себя текстовый символ в наборе текстовых символов (например, наборе b, d, p и q, или наборе u и n), может точно предсказываться из опорной области, которая включает в себя другой текстовый символ в том же наборе текстовых символов. Для других шрифтов, блок, который включает в себя текстовый символ в наборе текстовых символов, может предсказываться приблизительно из опорной области, которая включает в себя другой текстовый символ в том же наборе текстовых символов. Более широко, зеркальное отражение блоков может улучшать эффективность кодирования для различных алфавитов текстовых символов или других паттернов в контенте экрана.
[0127] Таким образом, с помощью зеркального отражения блоков, блок, который включает в себя текстовый символ (или другой паттерн), может интра-BC предсказываться, даже если текстовый символ (или другой паттерн) ранее не появлялся в картинке, что может улучшать эффективность кодирования по сравнению с другими способами кодирования блока. Или, даже если текстовый символ (или другой паттерн) ранее появлялся в картинке, интра-BC предсказание может использовать зеркально отраженную опорную область, которая находится более близко к блоку, чем опорная область с идентичным текстовым символом (или другим паттерном). Значение BV для более близкой, зеркально отраженной области может кодироваться намного более эффективно, чем значение BV для более отдаленной опорной области. Например, для текущего блока, который включает в себя текстовый символ q, предположим, что первая опорная область-кандидат, которая включает в себя тот же символ q, может указываться с помощью значения BV (-280, -24), в то время как вторая опорная область-кандидат, которая включает в себя другой символ p, может указываться с помощью значения BV (-32, 0). Вторая опорная область-кандидат может зеркально отражаться горизонтально, чтобы точно соответствовать текущему блоку. Значение BV для второй опорной области-кандидата может кодироваться более эффективно (меньшее количество бит), чем значение BV для первой опорной области-кандидата, даже учитывая сигнализацию синтаксических элементов для указания зеркального отражения блоков.
[0128] Как показано на фиг. 9a-9c, блоки и опорные области могут включать в себя множество текстовых символов. Фиг. 9a показывает текущий блок (960), который включает в себя текстовые символы dl. Значение BV для текущего блока (960) указывает смещение к опорной области (980) в той же картинке. Опорная область (980) включает в себя текстовые символы lb, как подробно указано на фиг. 9b. Без зеркального отражения, опорная область (980) является плохим предиктором для текущего блока (960). Если опорная область (980) зеркально отражается горизонтально, однако, зеркально отраженная опорная область (981) в точности соответствует текущему блоку (960).
[0129] В предшествующих примерах, блоки и опорные области включают в себя текстовые символы целиком. Как показано на фиг. 10a-10c, блоки и опорные области могут вместо этого включать в себя одну или более частей текстового символа, символа или паттерна. Фиг. 10a показывает текущий блок (1060), который включает в себя часть текстового символа L. Значение BV для текущего блока (1060) указывает смещение к опорной области (1080) в той же картинке. Опорная область (1080) включает в себя часть текстового символа F, как подробно указано на фиг. 10b. Без зеркального отражения, опорная область (1080) является плохим предиктором для текущего блока (1060). Если опорная область (1080) зеркально отражается вертикально, однако, зеркально отраженная опорная область (1081) в точности соответствует текущему блоку (1060).
2. ИЛЛЮСТРАТИВНЫЕ ОПЕРАЦИИ ЗЕРКАЛЬНОГО ОТРАЖЕНИЯ
[0130] Когда используется зеркальное отражение блоков в интра-BC предсказании, область интра-BC предсказания для блока зеркально отражена по отношению к опорной области для блока. Операции зеркального отражения блоков могут осуществляться различными способами, в зависимости от реализации.
[0131] Согласно одному подходу к выполнению операций зеркального отражения блоков, при определении области интра-BC предсказания для текущего блока, кодер или декодер (a) определяет опорную область, (b) зеркально отражает опорную область, и затем (c) назначает значения отсчетов в соответствующих положениях зеркально отраженной опорной области значениям отсчетов в соответствующих положениях области интра-BC предсказания. Например, для блока 16×16, кодер или декодер определяет опорную область 16×16, указанную посредством значения BV для блока, затем зеркально отражает опорную область 16×16 горизонтально и/или вертикально. Это включает в себя создание копии опорной области 16×16, которая зеркально отражается. Затем, значения отсчетов в положениях зеркально отраженной опорной области назначаются значениям отсчетов в тех же положениях области интра-BC предсказания (например, значение отсчета в положении (0, 0) зеркально отраженной опорной области назначается значению отсчета в положении (0, 0) области интра-BC предсказания, значение отсчета в положении (0, 1) зеркально отраженной опорной области назначается значению отсчета в положении (0, 1) области интра-BC предсказания, и так далее).
[0132] Согласно другому подходу к выполнению операций зеркального отражения блоков, при определении области интра-BC предсказания для текущего блока, кодер или декодер (a) определяет опорную область, (b) назначает значения отсчетов в соответствующих положениях опорной области значениям отсчетов в соответствующих положениях области интра-BC предсказания, и затем (c) зеркально отражает область интра-BC предсказания. Например, для блока 16×16, кодер или декодер определяет опорную область 16×16, указанную посредством значения BV для блока. Значения отсчетов в положениях опорной области назначаются значениям отсчетов в тех же положениях области интра-BC предсказания (например, значение отсчета в положении (0, 0) опорной области назначается значению отсчета в положении (0, 0) области интра-BC предсказания, значение отсчета в положении (0, 1) опорной области назначается значению отсчета в положении (0, 1) области интра-BC предсказания, и так далее). Затем, кодер или декодер зеркально отражает интра-BC предсказание 16×16 горизонтально и/или вертикально. Это включает в себя создание копии интра-BC предсказания 16×16, которая зеркально отражается.
[0133] Согласно третьему подходу к выполнению операций зеркального отражения блоков, кодер и декодер избегают создания промежуточной копии опорной области или области интра-BC предсказания. При определении области интра-BC предсказания для текущего блока, кодер или декодер (a) определяет опорную область, и затем (b) назначает значения отсчетов в соответствующих положениях опорной области значениям отсчетов в соответствующих положениях области интра-BC предсказания, где соответствующие положения учитывают зеркальное отражение блоков.
Когда используется горизонтальное зеркальное отражение, первый столбец опорной области обеспечивает последний столбец области интра-BC предсказания, второй столбец опорной области обеспечивает второй с конца столбец области интра-BC предсказания, и так далее. Когда используется вертикальное зеркальное отражение, первый ряд опорной области обеспечивает последний ряд области интра-BC предсказания, второй ряд опорной области обеспечивает второй с конца ряд области интра-BC предсказания, и так далее. Когда горизонтальное и вертикальное зеркальное отражение используются вместе, положения опорной области могут проходиться в обратном порядке горизонтально и вертикально, при назначении значений отсчетов положениям области интра-BC предсказания. Например, для блока 16×16, кодер или декодер определяет опорную область 16×16, указанную посредством значения BV для блока. Значения отсчетов в положениях опорной области назначаются значениям отсчетов в соответствующих положениях области интра-BC предсказания в обратном порядке горизонтально и/или вертикально (например, значение отсчета в положении (0, 0) опорной области назначается значению отсчета в положении (15, 15) области интра-BC предсказания, значение отсчета в положении (0, 1) опорной области назначается значению отсчета в положении (15, 14) области интра-BC предсказания, и так далее).
3. ИЛЛЮСТРАТИВНАЯ СИГНАЛИЗАЦИЯ ДЛЯ ЗЕРКАЛЬНОГО ОТРАЖЕНИЯ БЛОКОВ
[0134] Когда зеркальное отражение блоков активировано для интра-BC предсказания, решение в отношении того, использовать или не использовать зеркальное отражение блоков, может сигнализироваться различными способами, в зависимости от реализации.
[0135] Зеркальное отражение блоков может активироваться для последовательности, картинки или другой единицы видео. Синтаксический элемент уровня последовательности (например, в SPS), синтаксический элемент уровня картинки (например, в PPS) или синтаксический элемент уровня заголовка среза (например, в заголовке сегмента среза) может указывать, активировано ли зеркальное отражение блоков или блокировано. Или зеркальное отражение блоков может активироваться для некоторых профилей или уровней кодирования и декодирования. Решение активировать зеркальное отражение блоков может делаться на основе от направления к направлению (например, только горизонтальное зеркальное отражение блоков, только вертикальное зеркальное отражение блоков, или как горизонтальное, так и вертикальное зеркальное отражение блоков). Если зеркальное отражение блоков активировано, используется дополнительный сигнал синтаксического элемента, когда и как осуществлять зеркальное отражение блоков.
[0136] Когда активировано только вертикальное зеркальное отражение, значение флага может указывать, используется ли вертикальное зеркальное отражение во время интра-BC предсказания. Когда активировано только горизонтальное зеркальное отражение, значение флага может указывать, используется ли горизонтальное зеркальное отражение во время интра-BC предсказания. Когда активированы как вертикальное зеркальное отражение, так и горизонтальное зеркальное отражение, два значения флагов могут указывать, используется ли зеркальное отражение во время интра-BC предсказания для горизонтального и вертикального зеркального отражения, при этом каждый флаг указывает решение для направления зеркального отражения. Или может использоваться одиночный синтаксический элемент с множеством значений (например, с возможными значениями, указывающими только вертикальное зеркальное отражение, только горизонтальное зеркальное отражение, как горизонтальное, так и вертикальное зеркальное отражение, или отсутствие зеркального отражения).
[0137] Синтаксические элементы (например, значения флагов), которые указывают, используется ли зеркальное отражение блоков для текущего блока, могут сигнализироваться в битовом потоке вместе с другими синтаксическими элементами для текущего блока. Например, синтаксический элемент (элементы) в отношении зеркального отражения блоков для PU сигнализируются для PU. Или синтаксические элементы, которые указывают, используется ли зеркальное отражение блоков для текущего блока, могут сигнализироваться в битовом потоке для большего блока, который включает в себя текущий блок. Например, синтаксический элемент (элементы) в отношении зеркального отражения блоков для одной или более единиц PU сигнализируются для CU, которая включает в себя PU (единицы PU). Альтернативно, синтаксические элементы, которые указывают, используется ли зеркальное отражение блоков для текущего блока, сигнализируются на некотором другом уровне в битовом потоке.
[0138] Синтаксические элементы, которые указывают, используется ли зеркальное отражение блоков для текущего блока, могут подвергаться энтропийному кодированию. Например, значение флага для текущего блока кодируется с использованием контекстно-адаптивного двоичного арифметического кодирования и декодируется с использованием контекстно-адаптивного двоичного арифметического декодирования. Альтернативно, может использоваться другая форма энтропийного кодирования, или синтаксические элементы могут сигнализироваться как значения фиксированной длины.
[0139] Синтаксический элемент (элементы), которые указывают, используется ли зеркальное отражение блоков для текущего блока, могут отдельно и условно сигнализироваться в битовом потоке. Например, значение флага, которое указывает, используется ли зеркальное отражение блоков или не используется, может сигнализироваться, если текущий блок является интра-BC предсказанным, но не сигнализироваться, если текущий блок не является интра-BC предсказанным. Или синтаксический элемент (элементы), которые указывают, используется ли зеркальное отражение блоков для текущего блока, могут совместно кодироваться с другим синтаксическим элементом в битовом потоке. Например, значение флага, которое указывает, используется ли зеркальное отражение блоков или не используется, может совместно кодироваться со значением флага, указывающим, является ли текущий блок интра-BC предсказанным.
4. ИЛЛЮСТРАТИВНОЕ КОДИРОВАНИЕ С ЗЕРКАЛЬНЫМ ОТРАЖЕНИЕМ БЛОКОВ В ИНТРА-BC ПРЕДСКАЗАНИИ
[0140] Фиг. 11 показывает иллюстративный способ (1100) для зеркального отражения блоков в интра-BC предсказании во время кодирования. Кодер изображений или кодер видео, такой как кодер, описанный со ссылкой на фиг. 3 или фиг. 5a-5b, может выполнять способ (1100).
[0141] Кодер определяет (1110) область интра-BC предсказания для текущего блока в картинке на основе опорной области в картинке. Текущий блок может быть PU, CU или другим блоком. Значение BV для текущего блока, идентифицированное в оценке BV, может указывать смещение к опорной области в картинке. Область интра-BC предсказания зеркально отражена по отношению к опорной области. Например, область интра-BC предсказания зеркально отражена горизонтально и/или вертикально по отношению к опорной области. Примеры подходов к выполнению операций зеркального отражения блоков описаны выше (см. раздел VII.B.2).
[0142] Кодер кодирует (1120) текущий блок с использованием области интра-BC предсказания и выводит (1130) кодированные данные в битовом потоке. Кодированные данные включают в себя индикацию в отношении того, отражена ли область интра-BC предсказания зеркально по отношению к опорной области. Например, индикация является одним или более синтаксическими элементами в битовом потоке. Примеры подходов к сигнализации того, используется ли зеркальное отражение блоков, описаны выше (см. раздел VII.B.3).
[0143] Кодер может аналогичным образом кодировать другие интра-BC предсказанные блоки на основе от блока к блоку для среза, мозаичного элемента или картинки, с или без зеркального отражения блоков.
5. ИЛЛЮСТРАТИВНОЕ ДЕКОДИРОВАНИЕ С ЗЕРКАЛЬНЫМ ОТРАЖЕНИЕМ БЛОКОВ В ИНТРА-BC ПРЕДСКАЗАНИИ
[0144] Фиг. 12 показывает иллюстративный способ (1200) для зеркального отражения блоков в интра-BC предсказании во время декодирования. Декодер изображений или декодер видео, такой как декодер, описанный со ссылкой на фиг. 4 или фиг. 6, может выполнять способ (1200).
[0145] Декодер принимает (1210) кодированные данные в битовом потоке. Кодированные данные включают в себя индикацию в отношении того, отражена ли область интра-BC предсказания для текущего блока в картинке зеркально по отношению к опорной области в картинке. Текущий блок может быть PU, CU или другим блоком. Например, индикация является одним или более синтаксическими элементами в битовом потоке.
Примеры подходов к сигнализации того, используется ли зеркальное отражение блоков, описаны выше (см. раздел VII.B.3).
[0146] Декодер определяет (1220) область интра-BC предсказания для текущего блока в картинке на основе опорной области в картинке. Значение BV для текущего блока может указывать смещение к опорной области. Область интра-BC предсказания зеркально отражена по отношению к опорной области. Например, область интра-BC предсказания зеркально отражена горизонтально и/или вертикально по отношению к опорной области. Примеры подходов к выполнению операций зеркального отражения блоков описаны выше (см. раздел VII.B.2). Декодер декодирует (1230) текущий блок с использованием области интра-BC предсказания.
[0147] Декодер может аналогичным образом декодировать другие интра-BC предсказанные блоки на основе от блока к блоку для среза, мозаичного элемента или картинки, с или без зеркального отражения блоков.
C. РЕЖИМ ПРОПУСКА ДЛЯ ИНТРА-BC ПРЕДСКАЗАНИЯ
[0148] В некоторых предыдущих подходах к интра-BC предсказанию, флаг для текущей CU указывает, кодирована ли CU в режиме интра-BC предсказания. Если это так, второй флаг для текущей CU указывает, имеет ли CU данные остатка. Этот способ сигнализации интра-BC предсказанных блоков, которые не имеют данные остатка, является неэффективным во многих сценариях кодирования/декодирования контента экрана.
[0149] Согласно другому аспекту новаторских решений, здесь описанных, кодер и декодер используют флаг, чтобы сигнализировать интра-BC предсказанный блок, который не имеет данных остатка. В режиме пропуска, интра-BC предсказанный блок использует значение BV, при этом дифференциал BV сигнализируется в битовом потоке, и не имеет данных остатка в битовом потоке. В частности, для контента захвата экрана, интра-BC предсказанные блоки без данных остатка являются обычными. Использование одиночного флага (в противоположность множеству флагов), чтобы сигнализировать интра-BC предсказанный блок без данных остатка, является эффективным в таких сценариях.
1. ИЛЛЮСТРАТИВНАЯ СИГНАЛИЗАЦИЯ ДЛЯ РЕЖИМА ПРОПУСКА ПРИ ИНТРА-BC ПРЕДСКАЗАНИИ
[0150] В иллюстративных вариантах осуществления, одиночный флаг в битовом потоке указывает, является ли текущий блок интра-BC предсказанным блоком в режиме пропуска. Если текущий блок не является интра-BC предсказанным блоком в режиме пропуска, второй флаг в битовом потоке указывает, является ли текущий блок интра-BC предсказанным блоком (не в режиме пропуска). Если текущий блок не является интра-BC предсказанным блоком, один или более других синтаксических элементов в битовом потоке указывают режим текущего блока (например, флаг для временного режима пропуска или нет, флаг для режима интра-пространственного предсказания или нет, флаг для интер-картиночного режима или нет, флаг для режима интра-пространственного предсказания или интер-картиночного режима). Если текущий блок является интра-BC предсказанным блоком в режиме пропуска, второй флаг и другие синтаксические элементы не присутствуют в битовом потоке для текущего блока.
[0151] Флаг, который указывает, является ли текущий блок интра-BC предсказанным блоком в режиме пропуска, сигнализируется на уровне блока. Текущий блок может быть CU размера 2N×2N. Например, для CU 16×16, N равняется 8. Альтернативно, текущий блок может быть PU или другим типом блока. Другие флаги и синтаксические элементы, указывающие режим текущего блока, также могут сигнализироваться на уровне блока в битовом потоке.
[0152] В некоторых иллюстративных вариантах осуществления, интра-BC предсказанный блок в режиме пропуска не имеет данных остатка, но включает в себя дифференциал BV в битовом потоке. Альтернативно, интра-BC предсказанный блок в режиме пропуска может использовать предсказанное значение BV (и, следовательно, не иметь дифференциал BV в битовом потоке).
2. ИЛЛЮСТРАТИВНОЕ КОДИРОВАНИЕ С РЕЖИМОМ ПРОПУСКА ПРИ ИНТРА-BC ПРЕДСКАЗАНИИ
[0153] Фиг. 13 показывает иллюстративный способ (1300) для кодирования интра-BC предсказанного блока в режиме пропуска. Кодер изображений или кодер видео, такой как кодер, описанный со ссылкой на фиг. 3 или фиг. 5a-5b, может выполнять способ (1300).
[0154] Кодер определяет (1310) значение BV для текущего блока (например, CU, PU) в картинке, например, с использованием оценки BV. Значение BV для текущего блока указывает смещение к опорной области в картинке. Кодер затем определяет (1320) дифференциал BV для текущего блока с использованием значения BV для текущего блока и предиктора BV для текущего блока. Предиктор BV может выбираться посредством правила, или кодер может выбирать предиктор BV из множества кандидатов-предикторов BV.
[0155] Кодер кодирует (1330) текущий блок с использованием интра-BC предсказания со значением BV. В иллюстративных вариантах осуществления, интра-BC предсказание может включать в себя определение области интра-BC предсказания для текущего блока с использованием опорной области, где область интра-BC предсказания зеркально отражена по отношению к опорной области. Область интра-BC предсказания может быть зеркально отражена горизонтально и/или вертикально по отношению к опорной области. Варианты выбора для выполнения операций зеркального отражения блоков и использования сигнализации зеркального отражения блоков описаны выше. Альтернативно, кодер не использует зеркальное отражение блоков в интра-BC предсказании.
[0156] Кодер выводит (1340) в битовом потоке кодированные данные. Кодированные данные включают в себя флаг, указывающий, что текущий блок кодирован с использованием интра-BC предсказания в режиме пропуска. Так как текущий блок является интра-BC предсказанным блоком в режиме пропуска, битовый поток включает в себя дифференциал BV для текущего блока, но не имеет данных остатка для текущего блока. Когда кодер выбирает предиктор BV из множества кандидатов-предикторов BV, битовый поток включает в себя значение индекса, которое указывает выбранный кандидат-предиктор BV для использования в качестве предиктора BV для текущего блока.
[0157] Фиг. 14 показывает иллюстративный способ (1400) для кодирования блоков в картинке с использованием интра-BC предсказания в режиме пропуска и/или других режимах. Кодер изображений или кодер видео, такой как кодер, описанный со ссылкой на фиг. 3 или фиг. 5a-5b, может выполнять способ (1400).
[0158] Сначала, кодер получает (1410) следующий блок и определяет (1420), кодировать ли блок с использованием интра-BC предсказания в режиме пропуска. Например, кодер оценивает, обеспечивает ли интра-BC предсказание достаточную эффективность кодирования для блока, и оценивает, включают ли в себя данные остатка какие-либо значительные значения. Альтернативно, кодер учитывает другие критерии.
[0159] Кодер может сигнализировать флаг в битовом потоке, который указывает, кодирован ли блок с использованием интра-BC предсказания в режиме пропуска. Для интра-BC предсказанного блока в режиме пропуска, кодер кодирует (1430) блок с помощью интра-BC предсказания в режиме пропуска с использованием операций, показанных на этапах (1310) по (1330) из фиг. 13, или с использованием другого подхода. Как интра-BC предсказанный блок в режиме пропуска, блок имеет дифференциал BV в битовом потоке, но не имеет данных остатка в битовом потоке.
[0160] В противном случае (блок не интра-BC предсказанный блок в режиме пропуска), кодер кодирует (1440) блок в другом режиме. Другой режим может быть режимом без пропуска при интра-BC предсказании, режимом интра-пространственного предсказания, интер-картиночным режимом или другим режимом. В этом случае, один или более других синтаксических элементов могут указывать режим блока. Например, после первого флага, который указывает, кодирован ли блок с использованием интра-BC предсказания в режиме пропуска, в зависимости от решения на этапе (1420), когда блок не кодирован с использованием интра-BC предсказания в режиме пропуска, второй флаг указывает, кодирован ли блок с использованием интра-BC предсказания в режиме без пропуска. Если блок не кодирован с использованием интра-BC предсказания в режиме без пропуска, один или более других синтаксических элементов указывают режим кодирования для блока. Например, флаг указывает, является ли режим предсказания блока интра-пространственным предсказанием или интер-картиночным предсказанием.
[0161] В некоторых иллюстративных вариантах осуществления, имеются дополнительные преимущества для использования флага, который указывает, является ли блок интра-BC предсказанным в режиме пропуска. В некоторых случаях, сигнализация синтаксического элемента, который указывает режим разделения (например, 2N×2N, 2N×N, N×2N или N×N) для интра-BC предсказанного блока, может избегаться. Например, если блок кодирован с использованием интра-BC предсказания в режиме без пропуска, кодер сигнализирует в битовом потоке синтаксический элемент, который указывает режим разделения для блока. С другой стороны, если блок кодирован с использованием интра-BC предсказания в режиме пропуска, кодер пропускает сигнализацию в битовом потоке синтаксического элемента, который указывает режим разделения для блока, и вместо этого предполагается, что режим разделения для блока имеет определенное значение (например, 2N×2N). Таким образом, в этих случаях, более ранний флаг, помечающий блок как интра-BC предсказанный в режиме пропуска, также сигнализирует, что режим разделения для блока имеет определенное значение.
[0162] Также, во многих случаях, сигнализация флага, который указывает присутствие или отсутствие данных остатка для блока, может избегаться. Конечно, если блок кодирован с использованием интра-BC предсказания в режиме пропуска, кодер пропускает сигнализацию в битовом потоке флага, который указывает присутствие или отсутствие данных остатка для блока. (Более ранний флаг, помечающий блок как интра-BC предсказанный в режиме пропуска, уже сигнализирует такую информацию.) Предполагается, что данные остатка для блока отсутствуют в битовом потоке.
[0163] Сигнализация флага, который указывает присутствие или отсутствие данных остатка, может избегаться в другом случае также. Конкретно, если блок кодирован с использованием интра-BC предсказания в режиме без пропуска, и режим разделения для блока имеет определенное значение (например, 2N×2N), кодер пропускает сигнализацию в битовом потоке флага, который указывает присутствие или отсутствие данных остатка для блока. В этом случае, предполагается, что данные остатка для блока присутствуют в битовом потоке. (Если режим разделения блока является определенным значением и блок не имеет данных остатка, блок является интра-BC предсказанным блоком в режиме пропуска, что будет указываться посредством более раннего флага.) В заключение, если блок кодирован с использованием интра-BC предсказания в режиме без пропуска, и режим разделения для блока не имеет определенного значения, кодер сигнализирует в битовом потоке флаг, который указывает присутствие или отсутствие данных остатка для блока.
[0164] Кодер определяет (1450), продолжать ли со следующим блоком в картинке. Если это так, кодер получает (1410) следующий блок и продолжает кодирование.
[0165] Кодер может повторять способ (1400) на основе от картинки к картинке, на основе от мозаичного элемента к мозаичному элементу, на основе от среза к срезу или на некоторой другой основе.
3. ИЛЛЮСТРАТИВНОЕ ДЕКОДИРОВАНИЕ С РЕЖИМОМ ПРОПУСКА ПРИ ИНТРА-BC ПРЕДСКАЗАНИИ
[0166] Фиг. 15 показывает иллюстративный способ (1500) для декодирования интра-BC предсказанного блока в режиме пропуска. Декодер изображений или декодер видео, такой как декодер, описанный со ссылкой на фиг. 4 или фиг. 6, может выполнять способ (1500).
[0167] Декодер принимает (1510) кодированные данные из битового потока. Кодированные данные включают в себя флаг, указывающий, что текущий блок (например, CU, PU) в картинке кодирован с использованием интра-BC предсказания в режиме пропуска. Так как текущий блок является интра-BC предсказанным блоком в режиме пропуска, битовый поток включает в себя дифференциал BV для текущего блока, но не имеет данных остатка для текущего блока.
[0168] Декодер определяет (1520) значение BV для текущего блока с использованием дифференциала BV для текущего блока и предиктора BV для текущего блока. Значение BV для текущего блока указывает смещение к опорной области в картинке. Предиктор BV может выбираться посредством правила. Или декодер может выбирать предиктор BV из множества кандидатов-предикторов BV, с использованием значения индекса в битовом потоке, чтобы выбирать, какой из кандидата-предиктора BV использовать в качестве предиктора BV для текущего блока.
[0169] Декодер декодирует (1530) текущий блок с использованием интра-BC предсказания со значением BV. В иллюстративных вариантах осуществления, интра-BC предсказание может включать в себя определение области интра-BC предсказания для текущего блока с использованием опорной области, где область интра-BC предсказания зеркально отражена по отношению к опорной области. Область интра-BC предсказания может быть зеркально отражена горизонтально и/или вертикально по отношению к опорной области. Варианты выбора для выполнения операций зеркального отражения блоков и сигнализации использования зеркального отражения блоков описаны выше. Альтернативно, декодер не использует зеркальное отражение блоков в интра-BC предсказании.
[0170] Фиг. 16 показывает иллюстративный способ (1600) для декодирования блоков в картинке с использованием интра-BC предсказания в режиме пропуска и/или других режимах. Декодер изображений или декодер видео, такой как декодер, описанный со ссылкой на фиг. 4 или фиг. 6, может выполнять способ (1600).
[0171] Сначала, декодер получает (1610) кодированные данные для следующего блока и определяет (1620), декодировать ли блок с использованием интра-BC предсказания в режиме пропуска. Например, декодер принимает и осуществляет синтаксический разбор флага в битовом потоке, который указывает, был ли блок кодирован с использованием интра-BC предсказания в режиме пропуска.
[0172] Для интра-BC предсказанного блока в режиме пропуска, декодер декодирует (1630) блок с помощью интра-BC предсказания в режиме пропуска с использованием операций, показанных на этапах (1520) и (1530) из фиг. 15, или с использованием другого подхода. Как интра-BC предсказанный блок в режиме пропуска, блок имеет дифференциал BV в битовом потоке, но не имеет данных остатка в битовом потоке.
[0173] В противном случае (блок не интра-BC предсказанный блок в режиме пропуска), декодер декодирует (1640) блок в другом режиме. Другой режим может быть режимом без пропуска при интра-BC предсказании, режимом интра-пространственного предсказания, интер-картиночным режимом или другим режимом. В этом случае, один или более других синтаксических элементов могут указывать режим блока. Например, после первого флага, который указывает, кодирован ли блок с использованием интра-BC предсказания в режиме пропуска, в зависимости от решения на этапе (1620), когда блок не кодирован с использованием интра-BC предсказания в режиме пропуска, второй флаг указывает, кодирован ли блок с использованием интра-BC предсказания в режиме без пропуска. Если блок не кодирован с использованием интра-BC предсказания в режиме без пропуска, один или более других синтаксических элементов указывают режим кодирования для блока. Например, флаг указывает, является ли режим предсказания блока интра-пространственным предсказанием или интер-картиночным предсказанием.
[0174] Как отмечено в предыдущем разделе, в некоторых иллюстративных вариантах осуществления, имеются дополнительные преимущества для использования флага, который указывает, является ли блок интра-BC предсказанным в режиме пропуска. Например, если блок кодирован с использованием интра-BC предсказания в режиме без пропуска, битовый поток включает в себя синтаксический элемент, который указывает режим разделения для блока. С другой стороны, если блок кодирован с использованием интра-BC предсказания в режиме пропуска, битовый поток не имеет синтаксического элемента, который указывает режим разделения для блока. Декодер выводит, что режим разделения для блока является определенным значением (например, 2N×2N).
[0175] Также, во многих случаях, сигнализация флага, который указывает присутствие или отсутствие данных остатка для блока, может избегаться. Конечно, если блок кодирован с использованием интра-BC предсказания в режиме пропуска, битовый поток не имеет флага, который указывает присутствие или отсутствие данных остатка для блока. Вместо этого, из более раннего флага, помечающего блок как интра-BC предсказанный в режиме пропуска, декодер выводит, что данные остатка для блока отсутствуют в битовом потоке.
[0176] Сигнализация флага, который указывает присутствие или отсутствие данных остатка, может избегаться в другом случае также. Конкретно, если блок кодирован с использованием интра-BC предсказания в режиме без пропуска, и режим разделения для блока имеет определенное значение (например, 2N×2N), битовый поток не имеет флага, который указывает присутствие или отсутствие данных остатка для блока. В этом случае, декодер выводит, что данные остатка для блока присутствуют в битовом потоке. В заключение, если блок кодирован с использованием интра-BC предсказания в режиме без пропуска, и режим разделения для блока не имеет определенного значения, битовый поток включает в себя флаг, который указывает присутствие или отсутствие данных остатка для блока.
[0177] Декодер определяет (1650), продолжать ли со следующим блоком в картинке. Если это так, декодер получает (1610) кодированные данные для следующего блока и продолжает декодирование.
[0178] Декодер может повторять способ (1600) на основе от картинки к картинке, на основе от мозаичного элемента к мозаичному элементу, на основе от среза к срезу или на некоторой другой основе.
4. ИЛЛЮСТРАТИВНЫЙ СИНТАКСИС ДЛЯ ЕДИНИЦ КОДИРОВАНИЯ
[0179] Фиг. 17a и 17b показывают синтаксическую структуру (1700) для единицы кодирования ("CU") согласно предыдущему подходу. Синтаксические элементы, показанные в синтаксической структуре (1700), определены в JCTVC-P1005. Здесь подытоживаются выбранные синтаксические элементы.
[0180] Синтаксический элемент intra_bc_flag может сигнализироваться для CU, когда активировано интра-BC предсказание (как указано с помощью intra_block_copy_enabled_flag). Синтаксический элемент intra_bc_flag определяет, кодирована ли CU в режиме интра-BC предсказания. Если его значение равно 1, CU кодирована в режиме интра-BC предсказания. Если его значение равно 0, CU не кодирована в режиме интра-BC предсказания. В этом случае (intra_bc_flag равняется 0), синтаксический элемент pred_mode_flag присутствует и указывает, кодирована ли CU в режиме интер-предсказания или режиме интра-пространственного предсказания.
[0181] Если блок является интра-BC предсказанным (и в малом количестве других случаев), битовый поток включает в себя синтаксический элемент part_mode для CU. Синтаксический элемент part_mode указывает режим разделения для CU (то есть, 2N×2N, 2N×N, N×2N, N×N).
[0182] Синтаксическая структура (1700) CU затем включает в себя значения BV для фрагментов (если CU является интра-BC предсказанной), информацию направления интра-предсказания (если CU является интра-пространственно предсказанной) или информацию единицы предсказания (если CU является интер-предсказанной). Затем, синтаксическая структура (1700) CU включает в себя синтаксический элемент rqt_root_cbf в некоторых случаях. В частности, синтаксический элемент rqt_root_cbf присутствует, если CU является интра-BC предсказанной. Синтаксический элемент rqt_root_cbf указывает, присутствует ли синтаксическая структура transform_tree() для CU. Синтаксическая структура transform_tree() предназначена для данных остатка для CU. Если rqt_root_cbf равняется 1, синтаксическая структура transform_tree() присутствует для CU. Если rqt_root_cbf равняется 0, синтаксическая структура transform_tree() не присутствует для CU. Когда rqt_root_cbf не присутствует, ее значение выводится как равное 1. Таким образом, как отмечалось ранее, в этом подходе, используются два флага (intra_bc_flag и rqt_root_cbf), чтобы указывать интра-BC предсказанный блок в режиме пропуска.
[0183] Фиг. 18 показывает новую синтаксическую структуру (1800) для единицы кодирования, которая может кодироваться как интра-BC предсказанный блок в режиме пропуска. Изменения по отношению к синтаксической структуре (1700), показанной на фиг. 17a и 17b, выделены на фиг. 18.
[0184] intra_bc_skip_flag может сигнализироваться для CU, когда активировано интра-BC предсказание (как указано с помощью intra_block_copy_enabled_flag). Синтаксический элемент intra_bc_skip_flag указывает, является ли CU интра-BC предсказанным блоком в режиме пропуска. Если CU является интра-BC предсказанной в режиме пропуска (intra_bc_skip_flag равняется 1), синтаксические элементы intra_bc_flag и pred_mode_flag пропускаются, как и синтаксический элемент rqt_root_cbf. Также, режим разделения для CU имеет определенное значение 2N×2N в этом случае.
[0185] С другой стороны, если синтаксический элемент intra_bc_skip_flag указывает, что CU не является интра-BC предсказанной в режиме пропуска (intra_bc_skip_flag равняется 0), синтаксический элемент intra_bc_flag присутствует. Синтаксический элемент intra_bc_flag определяет, кодирована ли CU в режиме интра-BC предсказания, как описано со ссылкой на фиг. 17a и 17b. Дополнительно, если intra_bc_flag равняется 0, синтаксический элемент pred_mode_flag присутствует и указывает, кодирована ли CU в режиме интер-предсказания или режиме интра-пространственного предсказания, как описано со ссылкой на фиг. 17a и 17b.
[0186] Если блок является интра-BC предсказанным в режиме без пропуска (то есть, intra_bc_flag равняется 1 и intra_bc_skip_flag равняется 0), битовый поток включает в себя синтаксический элемент part_mode для CU. Синтаксический элемент part_mode указывает режим разделения для CU (например, 2N×2N, 2N×N, N×2N, N×N). С другой стороны, если блок является интра-BC предсказанным в режиме пропуска, синтаксический элемент part_mode не сигнализируется в битовом потоке для CU. Вместо этого, выводится, что режим разделения имеет определенное значение, равное 2N×2N. Таким образом, для такого блока, intra_bc_skip_flag сигнализирует, что режим разделения для CU имеет определенное значение, равное 2N×2N, и отдельная сигнализация синтаксического элемента part_mode избегается.
[0187] В разделах, пропущенных на фиг. 18, синтаксическая структура (1800) затем включает в себя значения BV для фрагментов (если CU является интра-BC предсказанной), информацию направления интра-предсказания (если CU является интра-пространственно предсказанной) или информацию единицы предсказания (если CU является интер-предсказанной).
[0188] В заключение, синтаксическая структура (1800) включает в себя синтаксический элемент rqt_root_cbf в некоторых случаях. В частности, синтаксический элемент rqt_root_cbf присутствует, если CU является интра-BC предсказанной в режиме без пропуска, при условии, что режим разделения единицы CU не является определенным значением, равным 2N×2N. Когда присутствует, значение синтаксического элемента rqt_root_cbf указывает, присутствует ли синтаксическая структура transform_tree() для CU, как описано со ссылкой на фиг. 17a и 17b. С другой стороны, синтаксический элемент rqt_root_cbf не присутствует, (1) если CU является интра-BC предсказанной в режиме пропуска или (2) если CU является интра-BC предсказанной и режим разделения для CU является определенным значением, равным 2N×2N. Если CU является интра-BC предсказанной в режиме пропуска, значение rqt_root_cbf выводится как равное 0 (данные остатка не присутствуют для CU). В противном случае, если CU является интра-BC предсказанной и режим разделения для CU является определенным значением, равным 2N×2N, значение rqt_root_cbf выводится как равное 1 (данные остатка присутствуют для CU).
[0189] В виду многих возможных вариантов осуществления, к которым могут применяться принципы раскрытого изобретения, следует понимать, что проиллюстрированные варианты осуществления являются только предпочтительными примерами изобретения и не должны браться как ограничивающие объем изобретения. Скорее, объем изобретения определяется посредством последующей формулы изобретения. Мы, поэтому, в качестве нашего изобретения притязаем на все, что попадает в объем и сущность этой формулы изобретения.