СПОСОБ ОБРАБОТКИ ЗАПОЛНЕНИЯ ЧАСТЯМИ ПОДОБЛАСТЕЙ В ПОТОКЕ ВИДЕО
METHOD FOR PADDING PROCESSING BY PARTS OF SUB-AREAS IN A VIDEO STREAM

ПЕРЕКРЕСТНАЯ ССЫЛКА НА РОДСТВЕННУЮ ЗАЯВКУ
[1] Данная заявка испрашивает приоритет предварительной заявки на патент США № 62/903,635, поданной 20 сентября 2019 г., и заявки на патент США № 17/019,692, поданной 14 сентября 2020 г., которые полностью включены в настоящий документ.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
[2] Это изобретение в целом относится к области обработки данных и, в частности, к кодированию и декодированию видео.
УРОВЕНЬ ТЕХНИКИ
[3] Кодирование и декодирование видео с использованием интер-кадрового предсказания с компенсацией движения известно уже несколько десятилетий. Несжатое цифровое видео может состоять из серии изображений, причем каждое изображение имеет пространственный размер, например, 1920 x 1080 отсчетов яркости и связанных отсчетов цветности. Серия изображений может иметь фиксированную или переменную частоту изображений (неофициально также известную как частота кадров), например, 60 изображений в секунду или 60 Гц. Несжатое видео имеет значительные требования к битрейту. Например, для видео 1080p60 4:2:0 с частотой 8 бит на отсчет (разрешение 1920x1080 отсчетов яркости при частоте кадров 60 Гц) требуется полоса пропускания, близкая к 1,5 Гбит/с. Час такого видео требует более 600 ГБ дискового пространства.
[4] Одной из целей кодирования и декодирования видео может быть уменьшение избыточности входного видеосигнала посредством сжатия. Сжатие может помочь снизить вышеупомянутые требования к полосе пропускания или пространству для хранения, в некоторых случаях на два порядка или более. Могут использоваться как сжатие без потерь, так и сжатие с потерями, а также их комбинация. Сжатие без потерь относится к методам, при которых из сжатого исходного сигнала может быть восстановлена точная копия исходного сигнала. При использовании сжатия с потерями восстановленный сигнал может не быть идентичным исходному сигналу, но искажение между исходным и восстановленным сигналами достаточно мало, чтобы сделать восстановленный сигнал пригодным для предполагаемого приложения. В случае видео широко применяется сжатие с потерями. Допустимая степень искажения зависит от приложения; например, для пользователей определенных потребительских приложений потоковой передачи допустимы более высокие искажения, чем для пользователей приложений вещательного телевидения. Достижимая степень сжатия может отражать следующее: более высокое разрешаемое/допустимое искажение может привести к более высокой степени сжатия.
[5] Видеокодер и видеодекодер могут использовать методы из нескольких широких категорий, включая, например, компенсацию движения, преобразование, квантование и энтропийное кодирование, некоторые из которых будут представлены ниже.
[6] Концепция разделения кодированного битового потока видео на пакеты для транспортировки по пакетным сетям используется в течение десятилетий. Вначале стандарты и технологии кодирования видео были в большинстве своем оптимизированы для транспорта, ориентированного на ботов, и определяли потоки битов. Пакетирование происходило в интерфейсах системного уровня, указанных, например, в форматах полезной нагрузки транспортного протокола реального времени (RTP). С появлением возможности подключения к Интернету, подходящей для массового использования видео через Интернет, стандарты кодирования видео отразили этот видный вариант использования посредством концептуальной дифференциации уровня кодирования видео (VCL) и уровня сетевой абстракции (NAL). Блоки NAL были введены в H.264 в 2003 году и с тех пор сохранены в некоторых стандартах и технологиях кодирования видео с небольшими изменениями.
[7] Блок NAL во многих случаях может рассматриваться как наименьший объект, на который декодер может воздействовать, не обязательно декодируя все предыдущие блоки NAL кодированной видеопоследовательности. Таким образом, блоки NAL позволяют использовать определенные технологии устойчивости к ошибкам, а также определенные методы манипулирования потоками битов, включая сокращение потока битов с помощью сетевых элементов с поддержкой мультимедиа (MANE), таких как блоки селективной пересылки (SFU) или блоки многоточечного управления (MCU).
[8] На фиг. 1 изображены соответствующие части синтаксической диаграммы заголовков блоков NAL в соответствии с H.264 (101) и H.265 (102) в обоих случаях без какого-либо из их соответствующих расширений. В обоих случаях disabled_zero_bit - это нулевой бит, используемый для предотвращения эмуляции стартового кода в определенных средах системного уровня. Элемент синтаксиса nal_unit_type относится к типу данных, которые несет блок NAL, который может быть, например, одним из определенных типов слайсов, типов наборов параметров, сообщением дополнительной расширенной информации (SEI) и так далее. Заголовок блока NAL H.265 дополнительно содержит nuh_layer_id и nuh_temporal_id_plus1, которые указывают пространственный/SNR и временной уровень кодированного изображения, которому принадлежит блок NAL.
[9] Можно заметить, что заголовок блока NAL включает в себя только легко анализируемые кодовые слова фиксированной длины, которые не имеют никакой зависимости анализа от других данных в потоке битов, таких как, например, заголовки других блоков NAL, наборы параметров и так далее. Поскольку заголовки блоков NAL являются первыми октетами в блоке NAL, MANE может легко их извлекать, анализировать и воздействовать на них. Напротив, другие элементы синтаксиса высокого уровня, например заголовки слайсов или заголовком тайлов, менее доступны для MANE, поскольку они могут требовать сохранения контекста набора параметров и/или обработки кодовых точек переменной длины или арифметически кодированных кодовых точек.
[10] Кроме того, следует отметить, что заголовки блоков NAL, как показано на фиг.1, не включают в себя информацию, которая может ассоциировать блок NAL с кодированным изображением, которое состоит из множества блоков NAL (таких как, например, состоящее из нескольких тайлов или слайсов, по меньшей мере некоторые из которых упакованы в отдельные блоки NAL).
[11] Определенные транспортные технологии, такие как RTP (RFC 3550), стандарты системы MPEG, форматы файлов ISO и т. д., могут включать определенную информацию, часто в форме информации о времени, такой как время представления (в случае файлового формата MPEG и ISO) или время захвата (в случае RTP), которое может быть легко доступно для MANE и может помочь связать их соответствующие транспортные единицы с кодированными изображениями. Однако семантика этой информации может отличаться от одной технологии транспортировки/хранения к другой и может не иметь прямого отношения к структуре изображения, используемой при кодировании видео. Соответственно, эта информация может быть, в лучшем случае, эвристической, а также может не особенно хорошо подходить для определения того, принадлежат ли блоки NAL в потоке блоков NAL одному и тому же кодированному изображению.
РАСКРЫТИЕ СУЩНОСТИ ИЗОБРЕТЕНИЯ
[12] Варианты осуществления изобретения относятся к способу, системе и машиночитаемому носителю для кодирования видео. Согласно одному аспекту предложен способ кодирования видео. Способ может включать в себя декодирование кодированных элементов синтаксиса, соответствующих процессу циклического заполнения. По меньшей мере одно кодированное текущее изображение восстанавливается с использованием процесса циклического заполнения. Элементы синтаксиса указывают значение смещения для циклической обработки; или информацию о ширине левого и правого заполнения.
[13] Согласно другому аспекту предложена компьютерная система для кодирования видео. Компьютерная система может включать в себя один или более процессоров, один или более машиночитаемых элементов памяти, одно или более машиночитаемых материальных запоминающих устройств и программные инструкции, хранящиеся по меньшей мере на одном из одного или более запоминающих устройств для исполнения по меньшей мере одним из одного или более процессоров через по меньшей мере один из одного или более элементов памяти, посредством чего компьютерная система способна осуществлять способ. Способ может включать в себя декодирование кодированных элементов синтаксиса, соответствующих процессу циклического заполнения. По меньшей мере одно кодированное текущее изображение восстанавливается с использованием процесса циклического заполнения. Элементы синтаксиса указывают значение смещения для циклической обработки; или информацию о ширине левого и правого заполнения.
[14] Согласно еще одному аспекту предложен машиночитаемый носитель для кодирования видео. Машиночитаемый носитель может включать в себя одно или более машиночитаемых запоминающих устройств и программных инструкций, хранящихся по меньшей мере на одном из одного или более материальных запоминающих устройств, причем программные инструкции исполняются процессором. Программные инструкции выполняются процессором для выполнения способа, который может, соответственно, включать в себя кодированные элементы синтаксиса декодирования, соответствующие процессу циклического заполнения. По меньшей мере одно кодированное текущее изображение восстанавливается с использованием процесса циклического заполнения. Элементы синтаксиса указывают значение смещения для циклической обработки; или информацию о ширине левого и правого заполнения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[15] Эти и другие задачи, признаки и преимущества станут очевидными из следующего ниже подробного описания иллюстративных вариантов осуществления, которое следует читать вместе с прилагаемыми чертежами. Различные элементы чертежей показаны не в масштабе, поскольку иллюстрации приведены для ясности и упрощения понимания специалистом в данной области техники вместе с подробным описанием. На чертежах:
на фиг. 1 показана схематическая иллюстрация заголовков блоков NAL в соответствии с H.264 и H.265;
на фиг. 2 показана схематическая иллюстрация упрощенной блок-схемы системы связи согласно варианту осуществления;
на фиг. 3 показана схематическая иллюстрация упрощенной блок-схемы системы связи согласно варианту осуществления;
на фиг.4 показана схематическая иллюстрация упрощенной блок-схемы декодера согласно варианту осуществления;
на фиг.5 показана схематическая иллюстрация упрощенной блок-схемы кодера согласно варианту осуществления;
на фиг. 6 показана схематическая иллюстрация элементов синтаксиса для сигнализации смещения согласно варианту осуществления;
на фиг. 7 показана схематическая иллюстрация элементов синтаксиса для сигнализации ширины заполнения кодера согласно варианту осуществления;
на фиг. 8 показана схематическая иллюстрация упрощенной блок-схемы обработки заполнения каждой подобласти (тайла или субизображения) согласно варианту осуществления;
на фиг. 9 показана схематическая иллюстрация элементов синтаксиса для сигнализации смещения заполнения каждого субизображения согласно варианту осуществления;
на фиг. 10 показана схематическая иллюстрация элементов синтаксиса для унифицированной сигнализации смещения заполнения каждого субизображения согласно варианту осуществления; и
на фиг.11 показана схематическая иллюстрация компьютерной системы согласно варианту осуществления.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
[16] Подробные варианты осуществления заявленных структур и способов раскрыты в данном описании; однако можно понять, что раскрытые варианты осуществления являются лишь иллюстрацией заявленных структур и способов, которые могут быть воплощены в различных формах. Однако эти структуры и способы могут быть воплощены во многих различных формах, и их не следует рассматривать как ограниченные примерными вариантами осуществления, изложенными в данном документе. Скорее, данные примерные варианты осуществления представлены для того, чтобы данное описание было исчерпывающим и полным и полностью передавало объем правовой охраны для специалистов в данной области техники. В описании детали хорошо известных функций и методов могут быть опущены, чтобы избежать ненужного затруднения понимания представленных вариантов осуществления.
[17] Варианты осуществления в целом относятся к области обработки данных и, в частности, к кодированию и декодированию видео. Следующие описанные ниже примерные варианты осуществления предоставляют систему, способ и компьютерную программу для, среди прочего, восстановления кодированного текущего изображения с использованием процесса циклического заполнения на основе декодированных кодированных элементов синтаксиса. Следовательно, некоторые варианты осуществления могут улучшить область вычислений, позволяя кодировать элементы синтаксиса, которые будут использоваться при восстановлении сжатого изображения.
[18] Как указано выше, одной из целей кодирования и декодирования видео может быть уменьшение избыточности входного видеосигнала посредством сжатия. Сжатие может помочь снизить вышеупомянутые требования к полосе пропускания или пространству для хранения, в некоторых случаях на два порядка или более. Могут использоваться как сжатие без потерь, так и сжатие с потерями, а также их комбинация. Сжатие без потерь относится к методам, при которых из сжатого исходного сигнала может быть восстановлена точная копия исходного сигнала. При использовании сжатия с потерями восстановленный сигнал может не быть идентичным исходному сигналу, но искажение между исходным и восстановленным сигналами достаточно мало, чтобы сделать восстановленный сигнал пригодным для предполагаемого приложения. В случае видео широко применяется сжатие с потерями. Допустимая степень искажения зависит от приложения; например, для пользователей определенных потребительских приложений потоковой передачи допустимы более высокие искажения, чем для пользователей приложений вещательного телевидения. Достижимая степень сжатия может отражать следующее: более высокое разрешаемое/допустимое искажение может привести к более высокой степени сжатия. Однако, когда изображение разделено на одну или несколько подобластей (тайл, слайс или субизображение), граничная обработка каждой подобласти может влиять на эффективность кодирования и субъективное визуальное качество. Адаптивное управление граничной обработкой на каждой границе подобласти является ключевым фактором при обработке мультимедийных данных 360. Следовательно, может быть предпочтительно восстановить кодированное текущее изображение с использованием процесса заполнения с циклическим переходом на основе декодирования кодированных элементов синтаксиса.
[19] Аспекты описаны здесь со ссылкой на иллюстрации блок-схем и/или диаграмм способов, устройств (систем) и машиночитаемых носителей согласно различным вариантам осуществления. Следует понимать, что каждый блок иллюстраций блок-схем и/или диаграмм, а также комбинации блоков в иллюстрациях блок-схем и/или диаграмм могут быть реализованы с помощью машиночитаемых программных инструкций.
[20] Следующие описанные ниже примерные варианты осуществления предоставляют систему, способ и компьютерную программу, которая восстанавливает кодированное текущее изображение с использованием процесса циклического заполнения на основе декодированных кодированных элементов синтаксиса.
[21] На фиг.2 проиллюстрирована упрощенная блок-схема системы (200) связи согласно варианту осуществления настоящего изобретения. Система (200) может включать в себя по меньшей мере два терминала (210-220), соединенных между собой через сеть (250). Для однонаправленной передачи данных первый терминал (210) может кодировать видеоданные в локальном местоположении для передачи другому терминалу (220) через сеть (250). Второй терминал (220) может принимать кодированные видеоданные другого терминала из сети (250), декодировать кодированные данные и отображать восстановленные видеоданные. Однонаправленная передача данных может быть обычным явлением в приложениях обслуживания мультимедиа и т. п.
[22] На фиг.2 показана вторая пара терминалов (230, 240), обеспечивающая поддержку двунаправленной передачи кодированного видео, которая может происходить, например, во время видеоконференц-связи. Для двунаправленной передачи данных каждый терминал (230, 240) может кодировать видеоданные, захваченные в локальном местоположении, для передачи другому терминалу через сеть (250). Каждый терминал (230, 240) также может принимать кодированные видеоданные, переданные другим терминалом, может декодировать кодированные данные и может отображать восстановленные видеоданные на локальном устройстве отображения.
[23] На фиг.2 терминалы (210-240) могут быть изображены как серверы, персональные компьютеры и смартфоны, но принципы настоящего изобретения не могут быть ограничены этим. Варианты осуществления настоящего изобретения находят применение в портативных компьютерах, планшетных компьютерах, медиаплеерах и/или специализированном оборудовании для видеоконференц-связи. Сеть (250) представляет собой любое количество сетей, которые передают кодированные видеоданные между терминалами (210-240), включая, например, сети проводной и/или беспроводной связи. Сеть связи (250) может обмениваться данными в каналах с коммутацией каналов и/или с коммутацией пакетов. Репрезентативные сети включают в себя телекоммуникационные сети, локальные сети, глобальные сети и/или Интернет. Для целей настоящего описания архитектура и топология сети (250) могут быть несущественными для работы настоящего изобретения, если это не объясняется в данном документе ниже.
[24] На фиг.3 проиллюстрировано, в качестве примера применения для раскрытого объекта изобретения, размещение видеокодера и видеодекодера в потоковой среде. Раскрытый объект изобретения может быть в равной степени применим к другим приложениям с поддержкой видео, включая, например, видеоконференц-связь, цифровое телевидение, хранение сжатого видео на цифровых носителях, включая CD, DVD, карту памяти и т. п., и так далее.
[25] Система потоковой передачи может включать в себя подсистему (313) захвата, которая может включать в себя источник (301) видео, например цифровую камеру, создающую, например, поток (302) отсчетов несжатого видео. Данный поток (302) отсчетов, изображенный жирной линией, чтобы подчеркнуть большой объем данных по сравнению с кодированными битовыми потоками видео, может быть обработан кодером (303), подключенным к камере (301). Кодер (303) может включать в себя аппаратное обеспечение, программное обеспечение или их комбинацию для включения или реализации аспектов раскрытого объекта изобретения, как более подробно описано ниже. Кодированный битовый поток (304) видео, изображенный тонкой линией, чтобы подчеркнуть меньший объем данных по сравнению с потоком отсчетов, может храниться на сервере (305) потоковой передачи для будущего использования. Один или несколько клиентов потоковой передачи (306, 308) могут получить доступ к серверу потоковой передачи (305) для извлечения копий (307, 309) кодированного битового потока видеоданных (304). Клиент (306) может включать в себя видеодекодер (310), который декодирует входящую копию кодированного битового видеопотока (307) и создает исходящий поток (311) отсчетов видео, который может отображаться на дисплее (312) или другом устройстве визуализации (не изображено). В некоторых потоковых системах потоки (304, 307, 309) видеобитов могут кодироваться в соответствии с определенными стандартами кодирования/сжатия видео. Примеры этих стандартов включают Рекомендацию ITU-Т H.265. В стадии разработки находится стандарт кодирования видео, неофициально известный как универсальное кодирование видео или VVC. Раскрытый объект может использоваться в контексте VVC.
[26] Фиг.4 может быть функциональной блок-схемой видеодекодера (310) согласно варианту осуществления настоящего изобретения.
[27] Приемник (410) может принимать одну или более кодированных видеопоследовательностей, которые должны быть декодированы декодером (310); в том же или другом варианте осуществления - по одной кодированной видеопоследовательности за раз, где декодирование каждой кодированной видеопоследовательности не зависит от других кодированных видеопоследовательностей. Кодированная видеопоследовательность может быть принята из канала (412), который может быть аппаратным/программным соединением с устройством хранения, в котором хранятся кодированные видеоданные. Приемник (410) может принимать кодированные видеоданные с другими данными, например, кодированными аудиоданными и/или потоками вспомогательных данных, которые могут быть отправлены их соответствующим использующим объектам (не изображены). Приемник (410) может отделять кодированную видеопоследовательность от других данных. Для борьбы с дрожанием в сети между приемником (410) и энтропийным декодером/парсером (420) (далее «парсер») может быть подключена буферная память (415). Когда приемник (410) принимает данные от устройства хранения/пересылки с достаточной полосой пропускания и управляемостью или из изосинхронной сети, буфер (415) может не понадобиться или может быть небольшим. Для использования в пакетных сетях наилучшего качества, таких как Интернет, может потребоваться буфер (415), который может быть сравнительно большим и может быть предпочтительно адаптивного размера.
[28] Видеодекодер (310) может включать в себя парсер (420) для восстановления символов (421) из энтропийно кодированной видеопоследовательности. Категории этих символов включают в себя информацию, используемую для управления работой декодера (310), и потенциально информацию для управления устройством визуализации, таким как дисплей (312), который не является неотъемлемой частью декодера, но может быть подключен к нему, как это было показано на фиг.3. Управляющая информация для устройства (устройств) визуализации может быть в форме дополнительной информации улучшения (сообщения SEI) или фрагментов набора параметров информации о пригодности видео (VUI) (не изображены). Парсер (420) может выполнять парсинг/энтропийно декодировать принятую кодированную видеопоследовательность. Кодирование кодированной видеопоследовательности может осуществляться в соответствии с технологией или стандартом кодирования видео и может следовать принципам, хорошо известным специалистам в уровне техники, включая кодирование переменной длины, кодирование Хаффмана, арифметическое кодирование с контекстной чувствительностью или без нее и так далее. Парсер (420) может извлекать из кодированной видеопоследовательности набор параметров подгруппы по меньшей мере для одной из подгрупп пикселей в видеодекодере на основе по меньшей мере одного параметра, соответствующего группе. Подгруппы могут включать в себя группы изображений (GOP), изображения, тайлы, слайсы, макроблоки, единицы кодирования (CU), блоки, единицы преобразования (TU), единицы предсказания (PU) и так далее. Энтропийный декодер/парсер также может извлекать из кодированной видеопоследовательности информацию, такую как коэффициенты преобразования, значения параметров квантователя, векторы движения и так далее.
[29] Парсер (420) может выполнять операцию энтропийного декодирования/парсинга видеопоследовательности, принятой из буфера (415), чтобы создавать символы (421).
[30] Восстановление символов (421) может включать в себя множество различных модулей в зависимости от типа кодированного видеоизображения или его частей (таких как: интер и интра изображение, интер и интра блок) и других факторов. Какие модули задействованы и как, можно контролировать с помощью управляющей информации подгруппы, парсинг которой был выполнен из кодированной видеопоследовательности с помощью парсера (420). Поток такой информации управления подгруппой между парсером (420) и множеством модулей ниже не показан для ясности.
[31] Помимо уже упомянутых функциональных блоков, декодер 310 может быть концептуально подразделен на ряд функциональных модулей, как описано ниже. В практическом осуществлении, работающем в условиях коммерческих ограничений, многие из этих модулей тесно взаимодействуют друг с другом и могут быть, по меньшей мере частично, интегрированы друг в друга. Однако для целей описания раскрытого объекта изобретения уместно концептуальное подразделение на функциональные модули, приведенные ниже.
[32] Первым модулем является модуль (451) масштабирования/обратного преобразования. Модуль (451) масштабирования/обратного преобразования принимает квантованный коэффициент преобразования, а также управляющую информацию, включая то, какое преобразование использовать, размер блока, коэффициент квантования, матрицы масштабирования квантования и так далее, в виде символа(ов) (421) от парсера (420). Он может выводить блоки, содержащие значения отсчетов, которые могут быть введены в агрегатор (455).
[33] В некоторых случаях выходные отсчеты модуля (451) масштабирования/обратного преобразования могут относиться к интра-кодированному блоку; то есть к блоку, который не использует информацию предсказания из ранее восстановленных изображений, но может использовать информацию предсказания из ранее восстановленных частей текущего изображения. Такая информация предсказания может быть предоставлена модулем (452) интра-кадрового предсказания. В некоторых случаях модуль (452) интра-кадрового предсказания генерирует блок того же размера и формы, что и восстанавливаемый блок, используя окружающую уже восстановленную информацию, извлеченную из текущего (частично восстановленного) изображения (456). Агрегатор (455) в некоторых случаях добавляет для каждого отсчета информацию предсказания, сгенерированную модулем (452) интра- предсказания, к информации выходных отсчетов, предоставляемой модулем (451) масштабирования/обратного преобразования.
[34] В других случаях выходные отсчеты модуля (451) масштабирования/обратного преобразования могут относиться к интер-кодированному блоку и потенциально блоку с компенсацией движения. В таком случае модуль (453) предсказания с компенсацией движения может обращаться к памяти (457) опорных изображений, чтобы извлекать отсчеты, используемые для предсказания. После компенсации движения выбранных отсчетов в соответствии с символами (421), относящимися к блоку, эти отсчеты могут быть добавлены агрегатором (455) к выходу модуля масштабирования/обратного преобразования (в данном случае называемые остаточными отсчетами или остаточным сигналом), чтобы генерировать информацию о выходных отсчетах. Адреса в памяти опорных изображений, откуда модуль предсказания с компенсацией движения выбирает отсчеты предсказания, могут управляться векторами движения, доступными модулю предсказания с компенсацией движения в форме символов (421), которые могут иметь, например, компоненты X, Y и опорного изображения. Компенсация движения также может включать в себя интерполяцию значений отсчетов, извлеченных из памяти опорных изображений, когда используются точные векторы движения суботсчетов, механизмы предсказания вектора движения и так далее.
[35] Выходные отсчеты агрегатора (455) могут подвергаться различным методам петлевой фильтрации в модуле (456) петлевого фильтра. Технологии сжатия видео могут включать в себя технологии внутрипетлевой фильтрации, которые управляются параметрами, включенными в битовый поток кодированного видео и предоставляются модулю (456) петлевой фильтрации как символы (421) из парсера (420), но также могут реагировать на метаинформацию, полученную во время декодирования предыдущих (в порядке декодирования) частей кодированного изображения или кодированной видеопоследовательности, а также реагировать на ранее восстановленные и отфильтрованные посредством петлевой фильтрации значения отсчетов.
[36] Выходной сигнал модуля (456) петлевого фильтра может быть потоком отсчетов, который может быть выведен на устройство (312) визуализации, а также сохранен в памяти (456) опорных изображений для использования в будущем интер-кадровом предсказании.
[37] Определенные кодированные изображения после полного восстановления могут использоваться в качестве опорных изображений для будущего предсказания. После того, как кодированное изображение полностью восстановлено и кодированное изображение было идентифицировано как опорное изображение (например, парсером (420)), текущее опорное изображение (456) может стать частью буфера (457) опорных изображений, и свежая память текущих изображений может быть перераспределена перед началом восстановления следующего кодированного изображения.
[38] Видеодекодер 420 может выполнять операции декодирования согласно заранее определенной технологии сжатия видео, которая может быть задокументирована в стандарте, таком как ITU-T Rec. H.265. Кодированная видеопоследовательность может соответствовать синтаксису, заданному используемой технологией или стандартом сжатия видео, в том смысле, что она соответствует синтаксису технологии или стандарта сжатия видео, как указано в документе или стандарте технологии сжатия видео и, в частности, в их документе профилей. Также для соответствия может быть необходимым, чтобы сложность кодированной видеопоследовательности находилась в пределах границ, определенных уровнем технологии или стандарта сжатия видео. В некоторых случаях уровни ограничивают максимальный размер изображения, максимальную частоту кадров, максимальную частоту дискретизации восстановления (измеряемую, например, в мегаотсчетах в секунду), максимальный размер опорного изображения и так далее. Пределы, установленные уровнями, в некоторых случаях могут быть дополнительно ограничены с помощью спецификаций гипотетического эталонного декодера (HRD) и метаданных для управления буфером HRD, сигнализируемых в кодированной видеопоследовательности.
[39] В варианте осуществления приемник (410) может принимать дополнительные (избыточные) данные с кодированным видео. Дополнительные данные могут быть включены как часть кодированной видеопоследовательности(ей). Дополнительные данные могут использоваться видеодекодером (420) для правильного декодирования данных и/или для более точного восстановления исходных видеоданных. Дополнительные данные могут быть в форме, например, временных, пространственных слоев или слоев улучшения отношения сигнал/шум (SNR), избыточных слайсов, избыточных изображений, кодов прямого исправления ошибок и так далее.
[40] Фиг.5 может быть функциональной блок-схемой видеокодера (303) согласно варианту осуществления настоящего изобретения.
[41] Кодер (303) может принимать отсчеты видео от источника (301) видео (который не является частью кодера), который может захватывать видеоизображение(я) для кодирования кодером (303).
[42] Источник (301) видео может предоставлять исходную видеопоследовательность для кодирования кодером (303) в форме цифрового потока отсчетов видео, который может иметь любую подходящую битовую глубину (например: 8 бит, 10 бит, 12 бит, ...), любое цветовое пространство (например, BT.601 Y CrCB, RGB, …) и любую подходящую структуру отсчетов (например, Y CrCb 4:2:0, Y CrCb 4:4:4). В системе обслуживания мультимедиа источник (301) видео может быть запоминающим устройством, хранящим предварительно подготовленное видео. В системе видеоконференц-связи источник (303) видео может быть камерой, которая захватывает информацию о локальном изображении в виде видеопоследовательности. Видеоданные могут быть предоставлены как множество отдельных изображений, которые при последовательном просмотре передают движение. Сами изображения могут быть организованы как пространственный массив пикселей, в котором каждый пиксель может содержать один или более отсчетов в зависимости от используемой структуры отсчетов, цветового пространства и т. д. Специалист в данной области техники может легко понять взаимосвязь между пикселями и отсчетами. Описание ниже ориентировано на отсчеты.
[43] Согласно варианту осуществления кодер (303) может кодировать и сжимать изображения исходной видеопоследовательности в кодированную видеопоследовательность (543) в реальном времени или с любыми другими временными ограничениями, как того требует приложение. Обеспечение соответствующей скорости кодирования - одна из функций контроллера (550). Контроллер управляет другими функциональными модулями, как описано ниже, и функционально связан с этими модулями. Связь не изображена для ясности. Параметры, устанавливаемые контроллером, могут включать в себя параметры, относящиеся к управлению скоростью (пропуск изображения, квантователь, значение лямбда методов оптимизации скорость-искажение, …), размеру изображения, макету группы изображений (GOP), максимальному диапазону поиска вектора движения и так далее. Специалист в данной области техники может легко определить другие функции контроллера (550), поскольку они могут относиться к видеокодеру (303), оптимизированному для определенной конструкции системы.
[44] Некоторые видеокодеры работают в том, что специалист в данной области легко распознает как «петля кодирования». В качестве упрощенного описания петля кодирования может состоять из кодирующей части кодера (530) (далее «кодер источника») (ответственной за создание символов на основе входного изображения, которое должно быть кодировано, и опорного изображения(й)), и (локального) декодера (533), встроенного в кодер (303), который восстанавливает символы для создания данных отсчетов, которые (удаленный) декодер также может создать (поскольку любое сжатие между символами и кодированным битовым видеопотоком не имеет потерь в технологиях сжатия видео, рассматриваемых в раскрытом объекте). Этот восстановленный поток отсчетов вводится в память (534) опорных изображений. Поскольку декодирование потока символов приводит к результатам с точностью до бита, независимо от местоположения декодера (локально или удаленно), содержимое буфера опорных изображений также является точным до бита между локальным кодером и удаленным кодером. Другими словами, часть предсказания кодера «видит» в качестве отсчетов опорного изображения точно такие же значения отсчетов, которые декодер «видел» бы при использовании предсказания во время декодирования. Этот фундаментальный принцип синхронности опорного изображения (и результирующего дрейфа, если синхронность не может поддерживаться, например, из-за ошибок канала) хорошо известен специалисту в данной области техники.
[45] Работа «локального» декодера (533) может быть такой же, как у «удаленного» декодера (310), который уже был подробно описан выше со ссылкой на фиг.4. Кратко ссылаясь также на фиг.4, однако, поскольку символы доступны, и кодирование/декодирование символов в кодированную видеопоследовательность энтропийным кодером (545) и парсером (420) может осуществляться без потерь, части энтропийного декодирования декодера (310), включая канал (412), приемник (410), буфер (415) и парсер (420), не могут быть полностью реализованы в локальном декодере (533).
[46] На этом этапе можно сделать наблюдение, что любая технология декодирования, кроме парсинга/энтропийного декодирования, которая присутствует в декодере, также обязательно должна присутствовать в, по существу, идентичной функциональной форме в соответствующем кодере. По этой причине раскрытый объект изобретения фокусируется на работе декодера. Описание технологий кодирования может быть сокращено, поскольку они являются инверсией полностью описанных технологий декодирования. Только в некоторых областях требуется более подробное описание, которое приводится ниже.
[47] В качестве части своей работы кодер (530) источника может выполнять кодирование с предсказанием с компенсацией движения, которое кодирует входной кадр с предсказанием со ссылкой на один или более ранее кодированных кадров из видеопоследовательности, которые были обозначены как «опорные кадры». Таким образом, механизм (532) кодирования кодирует различия между блоками пикселей входного кадра и блоками пикселей опорного кадра(ов), которые могут быть выбраны в качестве эталона(ов) предсказания для входного кадра.
[48] Локальный видеодекодер (533) может декодировать кодированные видеоданные кадров, которые могут быть обозначены как опорные кадры, на основе символов, созданных кодером (530) источника. Операции механизма (532) кодирования могут быть предпочтительно процессами с потерями. Когда кодированные видеоданные могут быть декодированы в видеодекодере (не показан на фиг.5), восстановленная видеопоследовательность обычно может быть копией исходной видеопоследовательности с некоторыми ошибками. Локальный видеодекодер (533) копирует процессы декодирования, которые могут выполняться видеодекодером на опорных кадрах, и может вызывать сохранение восстановленных опорных кадров в кэше (534) опорных изображений. Таким образом, кодер (303) может локально хранить копии восстановленных опорных кадров, которые имеют общее содержимое, в качестве восстановленных опорных кадров, которые будут получены видеодекодером на дальнем конце (при отсутствии ошибок передачи).
[49] Предсказатель (535) может выполнять поиски с предсказанием для механизма (532) кодирования. То есть, для нового изображения, которое должно быть кодировано, предсказатель (535) может искать в памяти (534) опорных изображений данные отсчетов (в качестве кандидатов блоков опорных пикселей) или определенные метаданные, такие как векторы движения опорных изображений, формы блоков и так далее, которые могут служить подходящим эталоном предсказания для новых изображений. Предсказатель (535) может работать на основе блока отсчетов "блок-за-пикселем", чтобы найти соответствующие эталоны для прогнозирования. В некоторых случаях, как определено результатами поиска, полученными предиктором (535), входное изображение может иметь эталоны для предсказания, взятые из множества опорных изображений, сохраненных в памяти (534) опорных изображений.
[50] Контроллер (550) может управлять операциями кодирования видеокодера (530), включая, например, установку параметров и параметров субгруппы, используемых для кодирования видеоданных.
[51] Выходные сигналы всех вышеупомянутых функциональных модулей могут подвергаться энтропийному кодированию в энтропийном кодере (545). Энтропийный кодер переводит символы, сгенерированные различными функциональными модулями, в кодированную видеопоследовательность путем сжатия без потерь символов согласно технологиям, известным специалистам в данной области техники, таким как, например, кодирование Хаффмана, кодирование переменной длины, арифметическое кодирование и так далее.
[52] Передатчик (540) может буферизовать закодированные видеопоследовательности, созданные энтропийным кодером (545), чтобы подготовиться к передаче через канал (560) связи, который может быть аппаратным/программным соединением с запоминающим устройством, которое будет хранить закодированные видеоданные. Передатчик (540) может объединять кодированные видеоданные из видеокодера (530) с другими данными, подлежащими передаче, например, кодированными аудиоданными и/или потоками вспомогательных данных (источники не показаны).
[53] Контроллер (550) может управлять работой видеокодера (303). Во время кодирования контроллер (550) может назначить каждому кодированному изображению определенный тип кодированного изображения, что может повлиять на методы кодирования, которые могут быть применены к соответствующему изображению. Например, изображения часто могут быть отнесены к одному из следующих типов кадров:
[54] Интра-изображение (I-изображение) может быть таким, которое можно кодировать и декодировать без использования какого-либо другого кадра в последовательности в качестве источника предсказания. Некоторые видеокодеки допускают различные типы интра-изображений, включая, например, изображения с независимым обновлением декодера. Специалисту в области техники известны эти варианты I-изображений и их соответствующие применения и особенности.
[55] Изображение с предсказанием (P-изображение) может быть таким, которое может быть кодировано и декодировано с использованием интрапредсказания или интерпредсказания с использованием не более одного вектора движения и опорного индекса для предсказания значений отсчетов каждого блока.
[56] Изображение с двунаправленным предсказанием (B-изображение) может быть таким, которое может быть кодировано и декодировано с использованием интрапредсказания или интерпредсказания с использованием не более двух векторов движения и опорных индексов для предсказания значений отсчетов каждого блока. Аналогично, изображения с множественным предсказанием могут использовать более двух опорных изображений и связанных метаданных для восстановления одного блока.
[57] Исходные изображения обычно могут быть пространственно разделены на множество блоков отсчетов (например, блоки из 4x4, 8x8, 4x8 или 16x16 отсчетов каждый) и кодированы на поблочной основе. Блоки могут кодироваться с предсказанием со ссылкой на другие (уже кодированные) блоки, как определено назначением кодирования, применяемым к соответствующим изображениям блоков. Например, блоки I-изображений могут кодироваться без предсказания или они могут кодироваться с предсказанием со ссылкой на уже кодированные блоки одного и того же изображения (пространственное предсказание или интрапредсказание). Пиксельные блоки P-изображений могут кодироваться без предсказания, посредством пространственного предсказания или посредством временного предсказания со ссылкой на одно ранее кодированное опорное изображение. Блоки B-изображений могут кодироваться без предсказания, посредством пространственного предсказания или посредством временного предсказания со ссылкой на одно или два ранее кодированных опорных изображения.
[58] Видеокодер (303) может выполнять операции кодирования в соответствии с заранее определенной технологией или стандартом кодирования видео, такой как Рекомендация ITU-T H.265. В своей работе видеокодер (303) может выполнять различные операции сжатия, включая операции кодирования с предсказанием, которые используют временную и пространственную избыточность во входной видеопоследовательности. Кодированные видеоданные, следовательно, могут соответствовать синтаксису, заданному используемой технологией или стандартом кодирования видео.
[59] В варианте осуществления передатчик (540) может передавать дополнительные данные с кодированным видео. Видеокодер (530) может включать в себя такие данные как часть кодированной видеопоследовательности. Дополнительные данные могут содержать временные/пространственные слои/слои улучшения SNR, другие формы избыточных данных, такие как избыточные изображения и слайсы, сообщения дополнительной информации улучшения (SEI), фрагменты набора параметров информации о пригодности видео (VUI) и так далее.
[60] В варианте осуществления 360-градусное видео захватывается набором камер или устройством камеры с несколькими объективами. Камеры обычно охватывают все направления вокруг центральной точки камеры. Изображения одного и того же момента времени сшиваются, возможно, поворачиваются, проецируются и отображаются на изображение. Упакованные изображения кодируются как закодированные в кодированный битовый поток видео и передаются в потоковом режиме в соответствии с определенным форматом файла медиаконтейнера. Файл включает метаданные, такие как информация о проекции и упаковке.
[61] В варианте осуществления 360-градусное видео можно проецировать в 2D-видео с использованием равнопрямоугольной проекции (ERP). Проекция ERP может привести к появлению артефактов на стыках. Расширенный формат ERP (PERP) может эффективно уменьшить артефакты швов в реконструированных окнах просмотра, которые охватывают левую и правую границы изображения ERP. Однако заполнения и смешивания может быть недостаточно, чтобы полностью решить проблему со швом.
[62] В одном варианте осуществления для ERP или PERP может применяться набивка с горизонтальной геометрией, чтобы уменьшить артефакты шва. Процесс заполнения для PERP может быть таким же, как для ERP, за исключением того, что смещение может основываться на ширине незаполненной ERP вместо ширины изображения, чтобы учесть размер заполненных областей. Если опорный блок находится за пределами левой (правой) границы опорного изображения, он может быть заменен «закольцованным» опорным блоком, сдвинутым вправо (влево) на ширину ERP. Традиционное повторяющееся заполнение может использоваться в вертикальном направлении. Смешивание левой и правой областей с заполнением не входит в цикл в качестве операции постобработки.
[63] В варианте осуществления синтаксис для включения горизонтального геометрического заполнения опорных изображений для форматов ERP и PERP показан на фиг.6.
[64] sps_ref_wraparound_enabled_flag (602), равное 1, указывает, что для интер-кадрового предсказания используется компенсация горизонтального циклического движения. sps_ref_wraparound_enabled_flag, равное 0, указывает, что этот метод компенсации движения не применяется.
[65] ref_wraparound_offset (603) задает смещение в выборках яркости, используемых для вычисления горизонтальной позиции перехода. ref_wraparound_offset должен быть больше pic_width_in_luma_samples - 1, не должен быть больше pic_width_in_luma_samples и должен быть целым числом, кратным MinCbSizeY.
[66] В варианте осуществления синтаксис для включения горизонтального геометрического заполнения опорных изображений для форматов ERP и PERP показан на фиг.7.
[67] sps_ref_wraparound_enabled_flag (702), равное 1, указывает, что для интер-кадрового предсказания используется компенсация горизонтального циклического движения. sps_ref_wraparound_enabled_flag, равное 0, указывает, что этот метод компенсации движения не применяется.
[68] left_wraparound_padding_width (703) определяет ширину левой области заполнения в выборках яркости. ref_wraparound_offset должен быть больше или равен 0, не должен быть больше, чем pic_width_in_luma_samples / 2, и должен быть целым числом, кратным MinCbSizeY.
[69] right_wraparound_padding_width (704) определяет ширину правой области заполнения в выборках яркости. ref_wraparound_offset должен быть больше или равен 0, не должен быть больше, чем pic_width_in_luma_samples / 2, и должен быть целым числом, кратным MinCbSizeY.
[70] На фиг. 8 изображена функциональная блок-схема, иллюстрирующая этапы способа 900 кодирования видеоданных.
[71] На этапе 901 способ 900 включает в себя синтаксический анализ набора параметров.
[72] На этапе 902 способ 900 включает в себя декодирование информации разделения изображения.
[73] На этапе 903 способ 900 включает в себя определение, применяется ли заполнение к границам подобластей.
[74] На этапе 904 способ 900 включает в себя синтаксический анализ типа заполнения, если заполнение применяется к границам подобластей.
[75] На этапе 905 способ 900 включает в себя декодирование каждой подобласти без заполнения, если заполнение не применяется к границам подобластей.
[76] На этапе 906 способ 900 включает в себя определение, применено ли циклическое заполнение.
[77] На этапе 907 способ 900 включает в себя заполнение границ подобластей циклическим заполнением, если применяется циклическое заполнение.
[78] На этапе 908 способ 900 включает в себя заполнение границ подобластей нециклическим заполнением, если циклическое заполнение не применяется.
[79] В варианте осуществления значение циклического смещения может быть получено с помощью следующего процесса вывода:
if ref_wraparound_offset is present
wrapAroundOffset = ref_wraparound_offset
else if left_wraparound_padding_width and right_wraparound_padding_width are present
wrapAroundOffset = pic_width_in_luma_samples - ( left_wraparound_padding_width + right_wraparound_padding_width )
else
wrapAroundOffset = pic_width_in_luma_samples
[80] В варианте осуществления, чтобы обеспечить горизонтальное геометрическое заполнение опорных изображений для форматов ERP и PERP, процессы интерполяции выборок яркости и цветности могут быть изменены.
Clip3 (x, y, z) =
ClipH (o, W, x) =
[81] Процесс интерполяции отсчета яркости. Входные данные для этого процесса могут включать в себя местоположение яркости в единицах полного отсчета (xIntL , yIntL), местоположение яркости в единицах дробного отсчета (xFracL , yFracL) и массив эталонных отсчетов яркости refPicLXL.Выходы этого процесса могут включать в себя предсказанное значение отсчета яркости predSampleLXL.
[82] Переменные shift1, shift2 и shift3 выводятся следующим образом. Переменная shift1 устанавливается равной Min (4, BitDepthY - 8), переменная shift2 устанавливается равной 6, а переменная shift3 устанавливается равной Max (2, 14 - BitDepthY ). Переменная picW устанавливается равной pic_width_in_luma_samples, а переменная picH устанавливается равной pic_height_in_luma_samples. Переменная xOffset устанавливается равной wrapAroundOffset . Могут быть указаны коэффициенты фильтра интерполяции яркости fL [p] для каждой 1/16 дробной позиции p отсчета , равной xFracL или yFracL.
[83] Предсказанное значение отсчета яркости predSampleLXL выводится следующим образом. Если оба xFracLand yFracL равны 0, применяется следующее. Если sps_ref_wraparound_enabled_flag равно 0, значение predSampleLXL выводится как predSampleLXL = refPicLXL[ Clip3( 0, picW - 1, xIntL ) ][ Clip3( 0, picH - 1, yIntL ) ] << shift3. В противном случае значение predSampleLXL получается как: predSampleLXL = refPicLXL[ ClipH( xOffset, picW, xIntL ) ][ Clip3( 0, picH - 1, yIntL ) ] << shift3. В противном случае, если xFracL не равно 0, а yFracL равно 0, применяется следующее. Значение of yPosL получается как yPosL = Clip3( 0, picH - 1, yIntL
[84] Если sps_ref_wraparound_enabled_flag равно 0, значение predSampleLXL выводится следующим образом:
predSampleLXL = ( fL[ xFracL ][ 0 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL - 3 ) ][ yPosL ] +
fL[ xFracL ][ 1 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL - 2 ) ][ yPosL ] +
fL[ xFracL ][ 2 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL - 1 ) ][ yPosL ] +
fL[ xFracL ][ 3 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL ) ][ yPosL ] +
fL[ xFracL ][ 4 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL + 1 ) ][ yPosL ] +
fL[ xFracL ][ 5 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL + 2 ) ][ yPosL ] +
fL[ xFracL ][ 6 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL + 3 ) ][ yPosL ] +
fL[ xFracL ][ 7 ] * refPicLXL[ Clip3( 0, picW - 1, xIntL + 4 ) ][ yPosL ] ) >> shift1
[85] В противном случае значение predSampleLXL выводится следующим образом:
predSampleLXL = ( fL[ xFracL ][ 0 ] * refPicLXL[ ClipH( xOffset, picW, xIntL - 3 ) ][ yPosL ] +
fL[ xFracL ][ 1 ] * refPicLXL[ ClipH( xOffset, picW, xIntL - 2 ) ][ yPosL ] +
fL[ xFracL ][ 2 ] * refPicLXL[ ClipH( xOffset, picW, xIntL - 1 ) ][ yPosL ] +
fL[ xFracL ] [ 3 ] * refPicLXL[ ClipH( xOffset, picW, xIntL ) ][ yPosL ] +
fL[ xFracL ][ 4 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 1 ) ][ yPosL ] +
fL[ xFracL ][ 5 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 2 ) ][ yPosL ] +
fL[ xFracL ] [ 6 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 3 ) ][ yPosL ] +
fL[ xFracL ][ 7 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 4 ) ][ yPosL ] ) >> shift.
[86] В противном случае, если xFracL равен 0, а yFracL не равен 0, значение predSampleLXL выводится следующим образом. Если sps_ref_wraparound_enabled_flag равно 0, значениеx PosL выводится как xPosL = Clip3 (0,picW - 1, xIntL ).В противном случае значение xPosL получается как: xPosL = ClipH (xOffset, picW, xIntL ).
[87] Предсказанное значение выборки яркости predSampleLXL выводится следующим образом:
predSampleLXL = ( fL[ yFracL ][ 0 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL - 3 ) ] +
fL[ yFracL ][ 1 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL - 2 ) ] +
fL[ yFracL ][ 2 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL - 1 ) ] +
fL[ yFracL ][ 3 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL ) ] +
fL[ yFracL ][ 4 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 1 ) ] +
fL[ yFracL ][ 5 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 2 ) ] +
fL[ yFracL ] [ 6 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 3 ) ] +
fL[ yFracL ][ 7 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 4 ) ] ) >> shift1.
[88] В противном случае, если xFracL не равен 0, а yFracL не равен 0, значение predSampleLXL выводится следующим образом. Если sps_ref_wraparound_enabled_flag равно 0, образец массива temp [n] с n = 0 ..7, выводится следующим образом:
predSampleLXL = (
fL[ yFracL ][ 0 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL - 3 ) ] + fL[ yFracL ][ 1 ] * refPicLXL[ xPosL ]
[ Clip3 ( 0, picH - 1, yIntL - 2 ) ] + fL[ yFracL ][ 2 ] * refPicLXL[ xPosL ]
[ Clip3( 0, picH - 1, yIntL - 1 ) ] + fL[ yFracL ][ 3 ]
* refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL ) ] + fL[ yFracL ][ 4 ]
* refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 1 ) ] + fL[ yFracL ][ 5 ]
* refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 2 ) ] + fL[ yFracL ]
[ 6 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 3 ) ] + fL[ yFracL ]
[ 7 ] * refPicLXL[ xPosL ][ Clip3( 0, picH - 1, yIntL + 4 ) ] ) >> shift1.
[89] В противном случае образец массива temp [n] с n = 0 ..7, получается следующим образом:
yPosL = Clip3( 0, picH - 1, yIntL + n - 3 )
temp[ n ] = ( fL[ xFracL ][ 0 ] * refPicLXL[ ClipH( xOffset, picW, xIntL - 3 ) ][ yPosL ] +
fL[ xFracL ][ 1 ] * refPicLXL[ ClipH( xOffset, picW, xIntL - 2 ) ][ yPosL ] +
fL[ xFracL ][ 2 ] * refPicLXL[ ClipH( xOffset, picW, xIntL - 1 ) ][ yPosL ] +
fL[ xFracL ][ 3 ] * refPicLXL[ ClipH( xOffset, picW, xIntL ) ][ yPosL ] +
fL[ xFracL ][ 4 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 1 ) ][ yPosL ] +
fL[ xFracL ][ 5 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 2 ) ][ yPosL ] +
fL[ xFracL ][ 6 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 3 ) ][ yPosL ] +
fL[ xFracL ][ 7 ] * refPicLXL[ ClipH( xOffset, picW, xIntL + 4 ) ][ yPosL ] ) >> shift1.
[90] Предсказанное значение отсчета яркости predSampleLXL выводится следующим образом:
predSampleLXL = ( fL[ yFracL ][ 0 ] * temp[ 0 ] +
fL[ yFracL ][ 1 ] * temp[ 1 ] +
fL[ yFracL ][ 2 ] * temp[ 2 ] +
fL[ yFracL ][ 3 ] * temp[ 3 ] +
fL[ yFracL ][ 4 ] * temp[ 4 ] +
fL[ yFracL ][ 5 ] * temp[ 5 ] +
fL[ yFracL ] [ 6 ] * temp[ 6 ] +
fL[ yFracL ] [ 7 ] * temp[ 7 ] ) >> shift2.
[91] Процесс интерполяции отсчетов цветности. Входные данные для этого процесса могут включать местоположение цветности в единицах полного отсчета (xIntC, yIntC), местоположение цветности в единицах дробного отсчета 1/32 (xFracC, yFracC) и массив опорных отсчетов цветности refPicLXC. Выходы этого процесса могут включать в себя предсказанное значение отсчета яркости predSampleLXL.
[92] Переменные shift1, shift2 и shift3 выводятся следующим образом. Переменная shift1 устанавливается равной Min (4, BitDepthY - 8), переменная shift2 устанавливается равной 6, а переменная shift3 устанавливается равной Max (2, 14 - BitDepthY). Переменная picWC устанавливается равной pic_width_in_luma_samples / SubWidthC, а переменная picHC устанавливается равной pic_height_in_luma_samples / SubHeightC. Переменная xOffsetC устанавливается равной wrapAroundOffset / SubWidthC. Могут быть указаны коэффициенты фильтра интерполяции яркости fC [p] для каждой 1/32 дробной позиции p отсчета, равного xFracC или yFracC.
[93] Предсказанное значение отсчета цветности predSampleLXL выводится следующим образом. Если оба xFracC and yFracC равны 0, применяется следующее. Если sps_ref_wraparound_enabled_flag равно 0, значение predSampleLXC выводится как:
predSampleLXC =refPicLXC[Clip3 (0,picWC - 1,xIntC )] [Clip3 (0,picHC - 1,yIntC )] << shift3.
[94] В противном случае значение predSampleLXC получается как predSampleLXC =refPicLXC[ClipH (xOffsetC, picWC,xIntC )] [Clip3 (0,picHC - 1, yIntC) ] << shift3.-
[95] В противном случае, если xFracC не равно 0, а yFracC равно 0, применяется следующее. Значение yPosC is derived as yPosC = Clip3( 0, picHC - 1, yIntC ). Если sps_ref_wraparound_enabled_flag равно 0, значение predSampleLXC выводится как:
predSampleLXC = ( fC[ xFracC ][ 0 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC - 1 ) ][ yIntC ] +
fC[ xFracC ][ 1 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC ) ][ yIntC ] +
fC[ xFracC ][ 2 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC + 1 ) ][ yIntC ] +
fC[ xFracC ][ 3 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC + 2 ) ][ yIntC ] ) >> shift1.
[96] В противном случае значение predSampleLXC выводится как:
predSampleLXC = ( fC[ xFracC ][ 0 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC - 1 ) ][ yPosC ] +
fC[ xFracC ][ 1 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC ) ][ yPosC ] +
fC[ xFracC ][ 2 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC + 1 ) ][ yPosC ] +
fC[ xFracC ][ 3 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC + 2 ) ][ yPosC ] ) >> shift1.
[97] В противном случае, если xFracL равен 0, а yFracL не равен 0, значение predSampleLXL выводится следующим образом. Если sps_ref_wraparound_enabled_flag равно 0, значение xPosC выводится как:xPosC = Clip3 (0,picWC - 1, xIntC) . В противном случае значение xPosC получается как: xPosC = ClipH (xOffsetC,picWC,xIntC )
[98] Предсказанное значение отсчета цветности predSampleLXC получается следующим образом:
predSampleLXC = ( fC[ yFracC ][ 0 ] * refPicLXC[ xPosC ][ Clip3( 0, picHC - 1, yIntC - 1 ) ] + fC[ yFracC ][ 1 ] * refPicLXC[ xPosC ][ Clip3( 0, picHC - 1, yIntC ) ] + fC[ yFracC ][ 2 ] * refPicLXC[ xPosC ][ Clip3( 0, picHC - 1, yIntC +
1 ) ] + fC[ yFracC ][ 3 ] * refPicLXC[ xPosC ][ Clip3( 0, picHC - 1, yIntC + 2 ) ] ) >> shift1.predSampleLXC = (fC[yFracC ]
[0] * refPicLXC [xPosC] [ Clip3 (0,picHC - 1,yIntC - 1)] + fC[yFracC ] [1] *refPicLXC[xPosC ] [Clip3 ( 0,picHC - 1,yIntC )] +
fC [yFracC][2 ] * refPicLXC [xPosC] [ Clip3 (0,picHC - 1,yIntC + 1)] + fC[yFracC ] [3] *refPicLXC[xPosC ] [Clip3 (0 ,picHC - 1,yIntC + 2)]) >> shift1.
[99] В противном случае, если xFracL равен 0, а yFracL не равен 0, значение predSampleLXL выводится следующим образом. Если sps_ref_wraparound_enabled_flag равно 0, массив отсчета temp [n] с n = 0 ..3 выводится следующим образом:
yPosC = Clip3( 0, picHC - 1, yIntC + n - 1 )
temp[ n ] = ( fC[ xFracC ][ 0 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC - 1 ) ][ yPosC ] +
fC[ xFracC ][ 1 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC ) ][ yPosC ] +
fC[ xFracC ][ 2 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC + 1 ) ][ yPosC ] +
fC[ xFracC ][ 3 ] * refPicLXC[ Clip3( 0, picWC - 1, xIntC + 2 ) ][ yPosC ] ) >> shift1.
[100] В противном случае массив отсчета temp [n] с n = 0 ..3, выводится следующим образом:
yPosC = Clip3( 0, picHC - 1, yIntC + n - 1 )
temp[ n ] = ( fC [ xFracC ][ 0 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC - 1 ) ][ yPosC ] +
fC[ xFracC ][ 1 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC ) ][ yPosC ] +
fC[ xFracC ][ 2 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC + 1 ) ][ yPosC ] +
fC[ xFracC ][ 3 ] * refPicLXC[ ClipH( xOffsetC, picWC, xIntC + 2 ) ][ yPosC ] ) >> shift1.
[101] Предсказанное значение отсчета цветности predSampleLXC выводится следующим образом:
predSampleLXC = ( fC[ yFracC ][ 0 ] * temp[ 0 ] +
fC[ yFracC ][ 1 ] * temp[ 1 ] +
fC[ yFracC ][ 2 ] * temp[ 2 ] +
fC[ yFracC ] [ 3 ] * temp[ 3 ] ) >> shift2.
[102] В варианте осуществления, если sps_ref_wraparound_enabled_flag равно 0 или отсутствует, может применяться традиционное повторяющееся заполнение. В противном случае можно применить циклическое заполнение.
[103] В варианте осуществления циклическое заполнение может применяться как на горизонтальных, так и на вертикальных границах. Флаг в структуре синтаксиса высокого уровня может указывать на то, что циклическое заполнение применяется как по горизонтали, так и по вертикали.
[104] В варианте осуществления циклическое заполнение может применяться на границах тайлов или групп тайлов. Флаг в структуре синтаксиса высокого уровня может указывать на то, что циклическое заполнение применяется как по горизонтали, так и по вертикали.
[105] В варианте осуществления опорное изображение может быть идентично текущему изображению для предсказания с компенсацией движения. Циклическое заполнение может применяться на границе текущего изображения, когда текущее изображение является опорным.
[106] В варианте осуществления, когда изображение разделено на одно или несколько субизображений, которые представляют собой прямоугольную область из одного или нескольких слайсов, граница каждого субизображения может или не может обрабатываться как граница изображения. Обработка субизображения как изображения указывает на то, что граница каждого субизображения может быть заполнена для предсказания с компенсацией движения.
[107] Как показано на фиг. 9, в SPS (или любом другом наборе параметров) subpic_treated_as_pic_flag [i], равный 1, указывает, что i-е субизображение каждого кодированного изображения в CVS обрабатывается как изображение в процессе декодирования. subpic_treated_as_pic_flag [i], равный 0, указывает, что i-ое субизображение каждого кодированного изображения в CVS не обрабатывается как изображение в процессе декодирования. Если отсутствует, значение subpic_treated_as_pic_flag [i] предполагается равным 0.
[108] В том же варианте осуществления, когда subpic_treated_as_pic_flag [i] равен 1, что указывает, что i-е субизображение обрабатывается как изображение, сигнализируется флаг subpic_ref_wraparound_enabled_flag [i]. subpic_ref_wraparound_enabled_flag [i], равный 1. subpic_ref_wraparound_enabled_flag [i], равный 1, указывает, что горизонтальная компенсация движения с циклическим заполнением применяется при интер-кадровом предсказании на границе i-го субизображения каждого кодированного изображения. sps_ref_wraparound_enabled_flag [i], равное 0, указывает, что горизонтальная компенсация движения с циклическим заполнением не применяется на границе i-го субизображения каждого кодированного изображения.
[109] В том же варианте осуществления subpic_ref_wraparound_offset_minus1 [i] плюс 1 задает смещение i-го субизображения каждого кодированного изображения, используемого для вычисления горизонтальной позиции перехода в единицах отсчетов яркости MinCbSizeY.
[110] В том же варианте осуществления процесс интерполяционной фильтрации выглядит следующим образом. Процесс интерполяции отсчета яркости. Входные данные для этого процесса могут включать в себя расположение яркости в единицах полного отсчета (xIntL , yIntL), расположение яркости в единицах дробного отсчета (xFracL ,yFracL ), расположение яркости в единицах полного отсчета (xSbIntL,ySbIntL ), определяющее верхний левый отсчет граничного блока для заполнения опорного отсчета относительно верхнего левого отсчета яркости опорного изображения, массива опорных отсчетов яркости refPicLXL, индекс интерполяционного фильтра половинного отсчета hpelIfIdx, переменную sbWidth, определяющей ширину текущего подблока, переменную sbHeight, определяющая высоту текущего подблока, и местоположение яркости (xSb, ySb), определяющее верхний левый отсчет текущего подблока относительно верхнего левого отсчета яркости текущего изображения. Выходы этого процесса могут включать в себя предсказанное значение отсчета яркости predSampleLXL.
[111] Переменные shift1, shift2 и shift3 выводятся следующим образом. Переменная shift1 устанавливается равной Min (4, BitDepthY - 8), переменная shift2 устанавливается равной 6, а переменная shift3 устанавливается равной Max (2, 14 - BitDepthY ). Переменная picW устанавливается равной pic_width_in_luma_samples, а переменная picH устанавливается равной pic_height_in_luma_samples.
[112] Коэффициенты фильтра интерполяции яркости fL[p] для каждой 1/16 дробной позиции p отсчета, равного xFracL или yFracL, выводятся следующим образом. Если MotionModelIdc [xSb] [ySb] больше 0, а sbWidth и sbHeight оба равны 4, могут быть указаны коэффициенты фильтра интерполяции яркости fL [p]. В противном случае коэффициенты фильтра интерполяции яркости fL[p] указаны в таблице 8-11 в зависимости от hpelIfIdx.
[113] Положения яркости в единицах полного отсчета (xInti, yInti ) выводятся следующим образом для i = 0… 7. Если subpic_treated_as_pic_flag [SubPicIdx] равно 1, применяется следующее:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, subpic_ref_wraparound_enabled_flag[ SubPicIdx ] ClipH( ( subpic_ref_wraparound_offset_minus1[ SubPicIdx ] + 1 ) * MinCbSizeY, SubPicRightBoundaryPos, xIntL + i - 3 ) :
xIntL + i - 3 )
.yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL + i - 3 ).
[114] В противном случае (subpic_treated_as_pic_flag [SubPicIdx] равен 0) применяется следующее:
xInti = Clip3( 0, picW - 1, sps_ref_wraparound_enabled_flag
ClipH( ( sps_ref_wraparound_offset_minus1 + 1 ) * MinCbSizeY, picW, xIntL + i - 3 ) :
xIntL + i - 3 )
yInti = Clip3( 0, picH - 1, yIntL + i - 3 )
[115] Расположение яркости в единицах полной выборки дополнительно изменяется следующим образом для i = 0…7:
xInti = Clip3( xSbIntL - 3, xSbIntL + sbWidth + 4, xInti )
yInti = Clip3( ySbIntL - 3, ySbIntL + sbHeight + 4, yInti )
[116] Предсказанное значение отсчета яркости predSampleLXL выводится следующим образом. Если оба xFracLand yFracL равны 0 , значение predSampleLXL выводится как: predSampleLXL
= refPicLXL [xInt3][ yInt3]< < shift3.
[117] В противном случае, если xFracL не равно 0, а yFracL равно 0, значение predSampleLXL выводится как predSampleLXL =  > > shift1.
[118] В противном случае, если xFracL равно 0 , а yFracL не равно 0, значение predSampleLXL выводится как predSampleLXL =  > > shift1.
[119] В противном случае, если xFracL не равен 0, а yFracL не равен 0, значение predSampleLXL выводится следующим образом.
[120] Массив отсчета temp [n] с n = 0 ..7, получается как: temp [n] =  >> shift1.
[121] Предсказанное значение отсчета яркости predSampleLXL выводится как predSampleLXL=  >> shift2.
[122] В том же или ином варианте осуществления, как показано на фиг. 10, в SPS (или любом другом наборе параметров) all_subpic_treated_as_pic_flag, равный 1, указывает, что любое субизображение каждого кодированного изображения в CVS обрабатывается как изображение в процессе декодирования. subpic_treated_as_pic_flag [i], равный 0, указывает, что любое субизображение каждого кодированного изображения в CVS не обрабатывается как изображение в процессе декодирования.
[123] В том же варианте осуществления, когда all_subpic_treated_as_pic_flag [i] равен 1, сигнализируется флаг all_subpic_ref_wraparound_enabled_flag. all_subpic_ref_wraparound_enabled_flag, равный 1, указывает, что горизонтальная циклическая компенсация движения применяется при интер-кадровом предсказании на границе любого субизображения каждого кодированного изображения. all_sps_ref_wraparound_enabled_flag, равное 0, указывает, что горизонтальная циклическая компенсация движения не применяется на границе любого субизображения каждого кодированного изображения.
[124] В том же варианте осуществления all_subpic_ref_wraparound_offset_minus1 [i] плюс 1 задает смещение любого субизображения каждого кодированного изображения, используемого для вычисления горизонтальной позиции перехода в единицах отсчетов яркости MinCbSizeY. В том же варианте осуществления, когда subpic_treated_as_pic_flag [i] отсутствует, значение subpic_treated_as_pic_flag [i] предполагается равным all_subpic_treated_as_pic_flag.
[125] В том же варианте осуществления, когда subpic_ref_wraparound_enabled_flag [i] отсутствует, значение subpic _ref_wraparound_enabled_flag [i] предполагается равным all_subpic_ref_wraparound_enabled_flag.
[126] В том же варианте осуществления, когда присутствует subpic_ref_wraparound_offset_minus1 [i], значение subpic_ref_wraparound_offset_minus1 [i] предполагается равным all_subpic_ref_wraparound_offset_minus1.
[127] Методы процесса циклического заполнения, описанные выше, могут быть реализованы в виде компьютерного программного обеспечения с использованием машиночитаемых инструкций и физически сохранены на одном или более машиночитаемых носителях. Например, на фиг.11 показана компьютерная система 800, подходящая для реализации определенных вариантов осуществления раскрытого объекта изобретения.
[128] Компьютерное программное обеспечение может быть кодировано с использованием любого подходящего машинного кода или компьютерного языка, который может быть объектом сборки, компиляции, связывания или подобных механизмов для создания кода, содержащего инструкции, которые могут выполняться напрямую или посредством интерпретации, выполнения микрокода и и т. п., центральными процессорами компьютера (CPU), графическими процессорами (GPU) и т. п.
[129] Инструкции могут выполняться на компьютерах различных типов или их компонентах, включая, например, персональные компьютеры, планшетные компьютеры, серверы, смартфоны, игровые устройства, устройства Интернета вещей и т. п.
[130] Компоненты, показанные на фиг.11 для компьютерной системы 800, являются примерными по своей природе и не предназначены для предложения каких-либо ограничений в отношении объема использования или функциональных возможностей компьютерного программного обеспечения, реализующего варианты осуществления настоящего изобретения. Конфигурация компонентов также не должна интерпретироваться как имеющая какую-либо зависимость или требование, относящееся к любому одному или комбинации компонентов, проиллюстрированных в примерном варианте осуществления компьютерной системы 800.
[131] Компьютерная система 800 может включать в себя определенные устройства ввода с человеко-машинным интерфейсом. Такое устройство ввода с человеко-машинным интерфейсом может реагировать на ввод одним или более пользователями-людьми посредством, например, тактильного ввода (например, нажатия клавиш, смахивания, движения управляющей перчатки), звукового ввода (например, голоса, хлопков в ладоши), визуального ввода (например: жестов), обонятельного ввода (не изображен). Устройства с человеко-машинным интерфейсом также могут использоваться для захвата определенных носителей, не обязательно напрямую связанных с сознательным вводом человеком, таких как звук (например, речь, музыка, окружающий звук), изображения (например, сканированные изображения, фотографические изображения, полученные из камеры для неподвижных изображений), видео (например, двухмерное видео, трехмерное видео, включая стереоскопическое видео).
[132] Устройства ввода с человеческим интерфейсом могут включать в себя одно или несколько из (только одно из каждого изображенного): клавиатура 801, мышь 802, трекпад 803, сенсорный экран 810, перчатка 804 для передачи данных, джойстик 805, микрофон 806, сканер 807, камера 808.
[133] Компьютерная система 800 также может включать в себя определенные устройства вывода с человеко-машинным интерфейсом. Такие устройства вывода с человеко-машинным интерфейсом могут стимулировать чувства одного или более пользователей-людей посредством, например, тактильного вывода, звука, света и запаха/вкуса. Такие устройства вывода с человеко-машинным интерфейсом могут включать в себя тактильные устройства вывода (например, тактильную обратную связь от сенсорного экрана (810), управляющей перчатки 804 или джойстика (805), но также могут иметься устройства тактильной обратной связи, которые не служат в качестве устройств ввода), устройства вывода звука (например: динамики (809), наушники (не показаны)), устройства вывода изображения (например, экраны (810), включая ЭЛТ-экраны, ЖК-экраны, плазменные экраны, OLED-экраны, каждое из которых имеет или не имеет возможности ввода с сенсорного экрана, каждое с возможностью тактильной обратной связи или без нее - некоторые из которых могут быть способны выводить двухмерный визуальный вывод или более, чем трехмерный вывод с помощью таких средств, как стереографический вывод; очки виртуальной реальности (не изображены), голографические дисплеи и дымовые баки (не изображены)) и принтеры (не изображены).
[134] Компьютерная система (800) также может включать в себя доступные для человека устройства хранения и связанные с ними носители, такие как оптические носители, включая CD/DVD ROM/RW (820) с CD/DVD или подобные носители (821), флэш-накопитель (822), съемный жесткий диск или твердотельный накопитель (823), унаследованные магнитные носители, такие как лента и дискета (не показаны), специализированные устройства на основе ROM/ASIC/PLD, такие как защитные ключи (не показаны) и т.п.
[135] Специалисты в данной области также должны понимать, что термин «машиночитаемый носитель», используемый в связи с раскрытым в настоящем документе объектом изобретения, не охватывает среды передачи, несущие волны или другие временные сигналы.
[136] Компьютерная система 800 также может включать в себя интерфейс к одной или более коммуникационным сетям. Сети могут быть, например, беспроводными, проводными, оптическими. Кроме того, сети могут быть локальными, глобальными, городскими, автомобильными и промышленными, работающими в реальном времени, устойчивыми к задержкам и т. д. Примеры сетей включают в себя локальные сети, такие как Ethernet, беспроводные LAN, сотовые сети, включая GSM, 3G, 4G, 5G, LTE и т. п., проводные телевизионные или беспроводные глобальные цифровые сети, включая кабельное телевидение, спутниковое телевидение и наземное телевещание, автомобильное и промышленное оборудование, включая CAN-шину и т. д. Некоторым сетям обычно требуются внешние сетевые интерфейсные адаптеры, которые подключены к определенным портам данных общего назначения или периферийным шинам (849) (например, к портам USB компьютерной системы 800); другие обычно интегрированы в ядро компьютерной системы 800 путем присоединения к системной шине, как описано ниже (например, интерфейс Ethernet в компьютерную систему ПК или интерфейс сотовой сети в компьютерную систему смартфона). Используя любую из этих сетей, компьютерная система 800 может связываться с другими объектами. Такая связь может быть однонаправленной, только для приема (например, широковещательное телевидение), однонаправленной только для отправки (например, CAN-шина на определенные устройства с CAN-шиной) или двунаправленной, например, для других компьютерных систем, использующих локальную или глобальную цифровую сеть. В каждой из этих сетей и сетевых интерфейсов могут использоваться определенные протоколы и стеки протоколов, как описано выше.
[137] Вышеупомянутые устройства человеко-машинного интерфейса, доступные человеку устройства хранения и сетевые интерфейсы могут быть присоединены к ядру 840 компьютерной системы 800.
[138] Ядро (840) может включать в себя один или более центральных процессоров (CPU) (841), графических процессоров (GPU) (842), специализированных программируемых процессоров в виде программируемых пользователем вентильных матриц (FPGA) (843), аппаратных ускорителей (844) для определенных задач и т. д. Эти устройства, наряду с постоянной памятью (ROM) (845), памятью с произвольным доступом (846), внутренними запоминающими устройствами, такими как внутренние жесткие диски, не доступные пользователю, твердотельные накопители и т.п. (847), могут быть подключены через системную шину (848). В некоторых компьютерных системах системная шина 848 может быть доступна в виде одного или более физических разъемов для обеспечения возможности расширения за счет дополнительных CPU, GPU и т. п. Периферийные устройства могут быть подключены либо непосредственно к системной шине 848 ядра, либо через периферийную шину 849. Архитектура периферийной шины включает PCI, USB и т. п.
[139] CPU 841, GPU 842, FGPA 843 и ускорители 844 могут выполнять определенные инструкции, которые в комбинации могут составлять вышеупомянутый компьютерный код. Этот компьютерный код может храниться в ROM 845 или RAM 846. Переходные данные также могут храниться в RAM 846, тогда как постоянные данные могут храниться, например, во внутреннем ЗУ большой емкости 847. Быстрое хранение и извлечение на любое из запоминающих устройств могут быть доступны посредством использования кэш-памяти, которая может быть тесно связана с одним или более CPU 841, GPU 842, ЗУ 847 большой емкости, ROM 845, RAM 846 и т. п.
[140] Машиночитаемый носитель может содержать компьютерный код для выполнения различных операций, реализуемых компьютером. Носители и компьютерный код могут быть специально спроектированными и сконструированными для целей настоящего изобретения, или они могут быть хорошо известными и доступными для специалистов в области компьютерного программного обеспечения.
[141] В качестве примера, но не ограничения, компьютерная система, имеющая архитектуру 800 и, в частности, ядро 840, может обеспечивать функциональность за счет процессора(ов) (включая CPU, GPU, FPGA, ускорители и т.п.), исполняющего программное обеспечение, воплощенное на одном или нескольких материальных машиночитаемых носителях. Такие машиночитаемые носители могут быть носителями, связанными с доступным для пользователя ЗУ большой емкости, как описано выше, а также определенными запоминающими устройствами ядра 840, которые имеют невременную природу, такими как внутреннее ЗУ 847 большой емкости или ROM 845. Программное обеспечение, реализующее различные варианты осуществления настоящего изобретения, может храниться в таких устройствах и выполняться ядром 840. Машиночитаемый носитель может включать в себя одно или более запоминающих устройств или микросхем в соответствии с конкретными потребностями. Программное обеспечение может предписывать ядру 840 и, в частности, процессорам в нем (включая CPU, GPU, FPGA и т.п.) выполнять определенные процессы или определенные части конкретных процессов, описанных в данном документе, включая определение структур данных, хранящихся в RAM 846, и изменение таких структур данных в соответствии с процессами, определенными программным обеспечением. В дополнение или в качестве альтернативы, компьютерная система может обеспечивать функциональность в результате логики, встроенной в аппаратную схему или иным образом воплощенной в схеме (например, ускоритель 844), которая может работать вместо или вместе с программным обеспечением для выполнения определенных процессов или отдельных частей конкретных процессов, описанных в данном документе. Ссылка на программное обеспечение может включать в себя логику и наоборот, где это применимо. Ссылка на машиночитаемый носитель может включать в себя схему (например, интегральную схему (IC)), хранящую программное обеспечение для выполнения, схему, воплощающую логику для выполнения, или и то, и другое, где это применимо. Настоящее изобретение включает в себя любую подходящую комбинацию аппаратного и программного обеспечения.
[142] Хотя это описание раскрывает несколько примерных вариантов осуществления, существуют изменения, перестановки и различные заменяющие эквиваленты, которые попадают в объем изобретения. Таким образом, будет принято во внимание, что специалисты в данной области техники смогут разработать многочисленные системы и способы, которые, хотя явно не показаны или не описаны здесь, воплощают принципы изобретения и, таким образом, находятся в рамках его сущности и объема.