Сигнализация параметров масштабируемости в битовом потоке видео
SIGNALING OF SCALABILITY PARAMETERS IN THE VIDEO BITSTREAM

Ссылка на родственную заявку
[1] Настоящее изобретение испрашивает приоритет предварительной заявки США №62/903,603, поданной 20 сентября 2019 г., и обычной заявки США №17/019,959, поданной 14 сентября 2020 г., полный объем которых включен в данный документ.
Область техники, к которой относится изобретение
[2] Представленное в данной заявке изобретение относится к кодированию и декодированию видео, а точнее к сигнализации масштабируемости в отношении пространства, качества и множества ракурсов в битовом потоке видео.
Уровень техники
[3] Известно кодирование и декодирование видео посредством предсказания между изображениями с компенсацией движения. Цифровое видео без сжатия может включать в себя последовательность изображений, каждое из которых имеет пространственный размер, например, 1920×1080 отсчетов яркости и связанных с ними отсчетов цветности. Последовательность изображений может иметь фиксированную или переменную частоту смены изображений (неформально также называемую частотой кадров), например, 60 изображений в секунду, или 60 Гц. Видео без сжатия предъявляет значительные требования к битовой скорости. Например, видео 1080р60 4:2:0 с 8 битами на отсчет (разрешение отсчетов яркости 1920×1080 при частоте кадров 60 Гц) требует полосы около 1,5 Гбит/с. Час такого видео требует объема памяти более 600 ГБ.
[4] Одной целью кодирования и декодирования видеосигнала может быть снижение избыточности во входном видеосигнале путем сжатия. Сжатие может способствовать смягчению вышеупомянутых требований к полосе или объему памяти, в ряде случаев на два порядка величины или более. Можно использовать как сжатие без потерь, так и сжатие с потерями, а также их комбинацию. Сжатие без потерь относится к методам реконструкции точной копии исходного сигнала из сжатого исходного сигнала. При использовании сжатия с потерями реконструированный сигнал может быть не идентичен исходному сигналу, но расхождение между исходным и реконструированным сигналами достаточно мало, чтобы реконструированный сигнал можно было использовать для намеченного применения. Сжатие с потерями широко применяется для видео. Допустимая степень искажения зависит от применения; например, пользователи некоторых заказных потоковых приложений могут мириться с более высокими искажениями, чем пользователи телевещательных приложений. При достижимой степени сжатия более высокое разрешенное/допустимое искажение может давать более высокую степень сжатия.
[5] Кодер и декодер видеосигнала может использовать методы из нескольких широких категорий, включающих в себя, например, компенсацию движения, преобразование, квантование и энтропийное кодирование. Некоторые из этих методов будут представлены ниже.
[6] Традиционно кодеры и декодеры видео работали с заданным размером изображения, который в большинстве случаев определялся и оставался постоянной величиной для кодированной видеопоследовательности (CVS), группы изображений (GOP) или схожего временного периода для группы изображений. Например, в MPEG-2 системные решения меняют горизонтальное разрешение (и, следовательно, размер изображения) в зависимости от таких факторов как активность сцены, но только при изображениях I, то есть, как правило, для группы изображений. Применяют передискретизацию опорных изображений для разных разрешений в кодированной видеопоследовательности, например в ITU-T Rec. Н.263, приложение Р. При этом размер изображения не меняется, пересчитываются только опорные изображения, что потенциально сказывается только на элементах применяемого изображения (в случае снижения разрешения) или только на элементах обрабатываемой сцены (при повышении разрешения). Далее, Н.263, приложение Q позволяет делать передискретизацию индивидуального макроблока с увеличением или сокращением вдвое (по каждому измерению). Опять же размер изображения остается неизменным. Размер макроблока фиксирован в Н.263, и, следовательно, его не нужно сигнализировать.
[7] Изменения размера предсказанных изображений стали общей тенденцией в современном видеокодировании. Например, VP9 позволяет передискретизировать опорное изображение и менять разрешение всего изображения. Аналогичные предложения, поступающие для VVC (например, в работе Гендри и соавторов "Адаптивное изменение разрешения (ARC) в VVC", документ группы Joint Video Team JVET-M0135-v1, Jan 9-19, 2019, включенный в данный документ в полном объеме), позволяют делать передискретизацию опорных изображений целиком для получения различных (более высоких или более низких) разрешений. В этом документе предлагалось кодировать различные потенциальные разрешения в наборе параметров последовательности со ссылкой на них посредством элементов синтаксиса каждого изображения в наборе параметров изображения.
Сущность изобретения
[8] Вариант осуществления предоставляет способ декодирования кодированного битового потока видео по меньшей мере одним процессором. Способ включает получение кодированной видеопоследовательности из кодированного битового потока видео; получение первого элемента синтаксиса с указанием количества уровней, включенных в кодированную видеопоследовательность; получение второго элемента синтаксиса с указанием, независимы ли все уровни, включенные в кодированную видеопоследовательность; получение третьего элемента синтаксиса с указанием режима вывода на основании первого элемента синтаксиса, указывающего, что уровней более одного, и второго элемента синтаксиса, указывающего, что не все уровни независимые; определение режима вывода на основании третьего синтаксического элемента; определение одного или более выходных уровней из множества уровней на основании режима вывода, который был определен; и вывод одного или более выходных уровней.
[9] Вариант осуществления предоставляет устройство декодирования кодированного битового потока видео. Устройство включает по меньшей мере одну память, конфигурированную для хранения программного кода и по меньшей мере один процессор, конфигурированный для считывания программного кода и работы в соответствии с командами программного кода. Программный код включает первый код получения, настроенный на получение кодированной видеопоследовательности из кодированного битового потока видео по меньшей мере одним процессором; второй код получения, настроенный на получение по меньшей мере одним процессором первого элемента синтаксиса, указывающего на количество уровней, включенных в кодированную видеопоследовательность; третий код получения, настроенный на получение по меньшей мере одним процессором второго элемента синтаксиса, указывающим, независимы ли все уровни, включенные в кодированную видеопоследовательность; четвертый код получения, настроенный на получение по меньшей мере одним процессором третьего синтаксического элемента, указывающего на режим вывода, на основании первого элемента синтаксиса, указывающего на наличие более одного уровня, и второго элемента синтаксиса, указывающего на то, что не все уровни независимы. Первый код определения настроен на определение режима вывода по меньшей мере одним процессором на основании третьего элемента синтаксиса. Второй код определения настроен на определение одного или более выходных уровней на основании режима вывода, который был определен. Код вывода настроен на вывод по меньшей мере одним процессором одного или более выходных уровней.
[10] Вариант осуществления предоставляет компьютерно-считываемый носитель информации, хранящий инструкции, содержащие одну или более инструкций, которые, при исполнении одним или более процессором устройства для декодирования битового потока кодированного видео, обеспечивают выполнение одним или более процессором следующих операций: получение кодированной видеопоследовательности из кодированного битового потока видео; получение первого элемента синтаксиса, указывающего на количество уровней, включенных в кодированную видеопоследовательность; получение второго элемента синтаксиса, указывающего, независимы ли все уровни, включенные в кодированную видеопоследовательность; получение третьего элемента синтаксиса, указывающего на режим вывода, на основании первого элемента синтаксиса, указывающего на то, что уровней более одного, и второго элемента синтаксиса, указывающего, что не все уровни являются независимыми; определение режима вывода на основании третьего элемента синтаксиса; определение одного или более выходных уровней из множества уровней на основании режима вывода, который был определен, и вывод одного или более выходных уровней.
Краткое описание чертежей
[11] Дополнительные особенности, характер и различные преимущества раскрытого изобретения будут понятны из нижеследующего подробного описания и прилагаемых чертежей, на которых:
[12] Фиг. 1 - схематичное изображение упрощенной блок-схемы системы связи в соответствии с вариантом осуществления.
[13] Фиг. 2 - схематичное изображение упрощенной блок-схемы системы связи в соответствии с вариантом осуществления.
[14] Фиг. 3 - схематичное изображение упрощенной блок-схемы декодера в соответствии с вариантом осуществления.
[15] Фиг. 4 - схематичное изображение упрощенной блок-схемы кодера в соответствии с вариантом осуществления.
[16] Фиг. 5 - схематичное изображение опций для сигнализации параметров ARC/RPR в соответствии с вариантом осуществления.
[17] Фиг. 6А-6В - примеры таблиц синтаксиса в соответствии с вариантом осуществления.
[18] Фиг. 7 - схематичное изображение зависимости уровней сигнализации в VPS согласно варианту осуществления.
[19] Фиг. 8 - схематичное изображение сигнализации списка форматов отображения в VPS согласно варианту осуществления.
[20] Фиг. 9 - схематичное изображение сигнализации указателя форматов отображения в VPS согласно варианту осуществления.
[21] Фиг. 10 - блок-схема примера процесса декодирования кодированного битового потока видео в соответствии с вариантом осуществления.
[22] Фиг. 11 - схематичное изображение компьютерной системы в соответствии с вариантом осуществления.
Подробное описание
[23] На фиг. 1 показана упрощенная блок-схема системы связи (100) согласно варианту осуществления настоящего изобретения. Система (100) может включать по меньшей мере два оконечных устройства (110, 120), объединенных сетью (150). При однонаправленной передаче данных первое оконечное устройство (ПО) может кодировать видеоданные на месте для передачи другому оконечному устройству (120) через сеть (150). Второе оконечное устройство (120) может принимать кодированные видеоданные другого оконечного устройства через сеть (150), декодировать кодированные данные и отображать восстановленные видеоданные. Однонаправленная передача данных может быть свойственна приложениям служб массовой информации и т.п.
[24] На фиг. 1 показана вторая пара оконечных устройств (130, 140) для двунаправленной передачи кодированных видеоданных, которые могут возникать, например, в ходе видеоконференцсвязи. Для двунаправленной передачи данных каждое оконечное устройство (130, 140) может кодировать видеоданные, полученные на месте для передачи другому оконечному устройству через сеть (150). Каждое оконечное устройство (130, 140) может также получать кодированные видеоданные, переданные другим оконечным устройством, декодировать кодированные данные и отображать восстановленные видеоданные на локальном устройстве отображения.
[25] На фиг. 1 оконечные устройства (110, 120, 130, 140) могут быть проиллюстрированы как серверы, персональные компьютеры и смартфоны, но это не ограничивает принципы настоящего изобретения. Варианты осуществления настоящего изобретения находят применение для портативных компьютеров, планшетных компьютеров, медиаплееров и/или специального оборудования для видеоконференцсвязи. Сеть (150) представляет любое количество сетей, которые переносят кодированные видеоданные между оконечными устройствами (110-140), включая, например, проводные и/или беспроводные сети связи. Сеть связи (150) позволяет обмениваться данными в режиме канальной коммутации и/или пакетной коммутации. Иллюстративные сети включают в себя телекоммуникационные сети, локальные сети, глобальные сети и/или интернет. В целях настоящего рассмотрения, архитектура и топология сети (150) могут не иметь отношения к настоящему изобретению, если конкретно не указаны ниже.
[26] На фиг. 2 показано, в порядке примера применения раскрытого изобретения, размещение видеокодера и видеодекодера в окружении потоковой передачи. Раскрытое изобретение может быть в равной степени применимо к другим применениям обработки видео, включая, например, видеоконференцсвязь, цифровое телевидение, хранение сжатого видео на цифровых носителях, в том числе CD, DVD, карте памяти и т.п.
[27] Система потоковой передачи может включать в себя подсистему захвата (213), которая может включать в себя источник видеосигнала (201), например, цифровую камеру, создающую, например, поток видеоизображений, не подвергнутых сжатию (202). Поток отсчетов (202), изображенный жирной линией, чтобы подчеркнуть большой объем данных по сравнению с кодированными видеоданными, может обрабатываться кодером (203), подключенным к камере (201). Кодер (203) может включать в себя оборудование, программное обеспечение или их комбинацию для обеспечения или реализации аспектов раскрытого изобретения, как более подробно описано ниже. Кодированные видеоданные (204), изображенные тонкой линией, чтобы подчеркнуть меньший объем данных по сравнению с потоком отсчетов, могут храниться на потоковом сервере (205) для использования в будущем. Один или более клиентов потоковой передачи (206, 208) могут осуществлять доступ к потоковому серверу (205) для извлечения копий (207, 209) кодированных видеоданных (204). Клиент (206) может включать в себя видеодекодер (210), декодирующий входящую копию кодированных видеоданных (207) и создает исходящий поток видеоизображений (211), который может визуализироваться на дисплее (212) или другом устройстве визуализации (не показано). В некоторых системах потоковой передачи, кодированные видеоданные (204, 207, 209) могут кодироваться согласно тем или иным стандартам кодирования/сжатия видео. Примеры этих стандартов включают в себя ITU-T Recommendation Н.265. Разрабатывается стандарт видеокодирования под неофициальным названием "универсальное видеокодирование" (VVC, Versatile Video Coding). Раскрытое изобретение может использоваться в контексте VVC.
[28] На фиг. 3 может быть изображена функциональная блок-схема видеодекодера (210), согласно варианту осуществления данного изобретения.
[29] Приемник (310) может принимать одну или более кодированных видеопоследовательностей для декодирования видеодекодером (210); в том же или другом варианте осуществления, по одной кодированной видеопоследовательности за раз, где декодирование каждой кодированной видеопоследовательности не зависит от других кодированных видеопоследовательностей. Кодированная видеопоследовательность может приниматься из канала (312), который может быть аппаратной/программной линией связи с запоминающим устройством, где хранятся кодированные видеоданные. Приемник (310) может принимать кодированные видеоданные с другими данными, например, кодированными аудиоданными и/или вспомогательными потоками данных, которые могут ретранслироваться на соответствующие использующие их объекты (не показаны). Приемник (310) может отделять кодированную видеопоследовательность от других данных. Для борьбы с джиттером сети, буферная память (315) может быть подключена между приемником (310) и энтропийным декодером / анализатором (320) (далее "анализатором"). Когда приемник (310) принимает данные от устройства хранения/ретрансляции с достаточной полосой и управляемостью или из изосинхронной сети, буферная память (315) может быть не нужна или может быть мала. Для использования в пакетных сетях наилучшей попытки, например, Интернете, буферная память (315) может требоваться, может быть сравнительно большой и может иметь предпочтительно адаптивный размер.
[30] Видеодекодер (210) может включать в себя анализатор (320) для реконструкции символов (321) из энтропийно кодированной видеопоследовательности. Категории этих символов включают в себя информацию, используемую для управления работой видеодекодера (210), и возможно информацию для управления устройством визуализации, например, отображающим экраном (212), который не является неотъемлемой частью декодера, но может быть подключен к нему, как показано на фиг. 3. Информация управления для устройств(а) визуализации может представлять собой сообщения информации дополнительного улучшения (SEI, Supplemental Enhancement Information) или фрагменты набора параметров информации пригодности видео (VUI, Video Usability Information) (не показаны). Анализатор (320) может анализировать / энтропийно декодировать принятую кодированную видеопоследовательность. Кодирование кодированной видеопоследовательности может осуществляться в соответствии с технологией или стандартом видеокодирования и может следовать различным хорошо известным принципам, в том числе кодированию с переменной длиной серии, кодированию по Хаффману, арифметическому кодированию с контекстной чувствительностью или без нее и т.д. Анализатор (320) может извлекать из кодированной видеопоследовательности набор параметров подгруппы для по меньшей мере одной из подгрупп пикселей в видеодекодере на основании по меньшей мере одного параметра, соответствующего группе. Подгруппы могут включать в себя группы изображений (GOP, Groups of Pictures), изображения, субизображения, тайлы, слайсы, блоки, макроблоки, единицы кодирования (CU, Coding Units), "кирпичи" (bricks), единицы преобразования (TU, Transform Units), единицы предсказания (PU, Prediction Units) и т.д. Тайл может указывать на прямоугольную область CU/CTU в определенной колонке и ряде тайлов в изображении. "Кирпич" может указывать прямоугольную область рядов CU/CTU в определенном тайле. Слайс может указывать на один или более "кирпичей" изображения, которые находятся в блоке NAL. Субизображение может указывать на прямоугольную область одного или более слайсов в изображении. Энтропийный декодер / анализатор также может извлекать из кодированной видеопоследовательности информацию, например, коэффициенты преобразования, значения параметров квантователя, векторы движения и т.д.
[31] Анализатор (320) может осуществлять операцию энтропийного декодирования / анализа видеопоследовательности, принятой из буферной памяти (315), для создания символов (321).
[32] Для реконструкции символов (321) могут использоваться несколько разных модулей в зависимости от типа кодированного видеоизображения или его частей (например: интер- и интра-изображения, интер- и интра-блока) и других факторов. Какие модули используются и как, может определяться информацией управления подгруппами, выделенной из кодированной видеопоследовательности анализатором (320). Поток такой информации управления подгруппами между анализатором (320) и множественными модулями для простоты в дальнейшем не показан.
[33] Помимо ранее упомянутых функциональных блоков, видеодекодер 210 может принципиально подразделяться на несколько функциональных модулей, как описано ниже. В практической реализации, работающей в условиях коммерческих ограничений, многие из этих модулей тесно взаимодействуют друг с другом и могут, по меньшей мере частично, встраиваться один в другой. Однако в целях описания раскрытого изобретения уместно принципиальное подразделение на нижеперечисленные функциональные модули.
[34] Первым модулем является модуль масштабирования/обратного преобразования (351). Модуль масштабирования / обратного преобразования (351) принимает квантованный коэффициент преобразования, а также информацию управления, включающую в себя используемое преобразование, размер блока, коэффициент квантования, матрицы масштабирования квантования и т.д. в качестве символа(ов) (321) от анализатора (320). Такой модуль может выводить блоки, содержащие значения отсчетов, которые можно вводить в агрегатор (355).
[35] В ряде случаев, выходные отсчеты блока масштабирования/обратного преобразования (351) могут относиться к внутренне-кодированному блоку; то есть к блоку, который не использует предсказанную информацию из ранее реконструированных изображений, но может использовать предсказанную информацию из ранее реконструированных частей текущего изображения. Такая предсказанная информация может обеспечиваться модулем предсказания (352) внутри изображения. В ряде случаев модуль предсказания внутри изображения (352) генерирует блок такого же размера и формы, как блок, подлежащий реконструкции, с использованием информации ранее реконструированного окружения, извлеченной из буфера текущего (частично реконструированного) изображения (358). Агрегатор (355) в ряде случаев добавляет, для каждого отсчета, информацию предсказания, сгенерированную модулем внутреннего предсказания (352), в информацию выходных отсчетов, обеспеченную модулем масштабирования / обратного преобразования (351).
[36] В других случаях выходные отсчеты модуля масштабирования/обратного преобразования (351) могут относиться к внешне кодированному блоку, возможно, с компенсацией движения. В таком случае, модуль предсказания с компенсацией движения (353) может осуществлять доступ к памяти опорных изображений (357) для извлечения отсчетов, используемых для предсказания. После применения компенсации движения к извлеченным отсчетам в соответствии с символами (321), относящимися к блоку, эти отсчеты могут добавляться агрегатором (355) к выходному сигналу модуля масштабирования/обратного преобразования (в этом случае именуемому остаточными отсчетами или остаточным сигналом) для генерации информации выходных отсчетов. Адреса в памяти опорных изображений, откуда модуль предсказания с компенсацией движения извлекает предсказанные отсчеты, могут регулироваться векторами движения, доступными модулю предсказания с компенсацией движения в форме символов (321), которые могут иметь, например, компоненты X, Y и опорного изображения. Компенсация движения также может включать в себя интерполяцию значений отсчетов, извлеченных из памяти опорных изображений, когда используются точные векторы движения под-отсчетов, механизмы предсказания векторов движения и т.д.
[37] К выходным отсчетам агрегатора (355) можно применять различные методы контурной фильтрации в модуле контурного фильтра (356). Технологии сжатия видео могут включать в себя технологии деблокирующего фильтра под управлением параметров, включенных в битовый поток кодированного видео, и становиться доступными модулю контурного фильтра (356) в качестве символов (321) от анализатора (320), но также могут реагировать на метаинформацию, полученную в ходе декодирования предыдущих (в порядке декодирования) частей кодированного изображения или кодированной видеопоследовательности, а также реагировать на ранее реконструированные и подвергнутые контурной фильтрации значения отсчетов.
[38] Модуль контурного фильтра (356) может выдавать поток отсчетов, который может поступать на устройство визуализации (212), а также сохраняться в памяти опорных изображений для использования в будущем предсказании между изображениями.
[39] Некоторые кодированные изображения, будучи полностью реконструированы, могут использоваться в качестве опорных изображений для будущего предсказания. Например, когда кодированное изображение полностью реконструировано, и кодированное изображение идентифицировано как опорное изображение (например, анализатором (320)), текущее опорное изображение (358) может становиться частью памяти опорных изображений (357), и свежая память текущего изображения может повторно выделяться до начала реконструкции следующего кодированного изображения.
[40] Видеодекодер 210 может осуществлять операции декодирования согласно заранее заданной технологии сжатия видео, например, по стандарту ITU-T Rec. Н.265. Кодированная видеопоследовательность может согласовываться с синтаксисом, заданным используемой технологией или стандартом сжатия видео, в том смысле, что кодированная видеопоследовательность может придерживаться как синтаксиса технологии или стандарта сжатия видео, согласно документу или стандарту технологии сжатия видео, в частности согласно профилям данного документа. Также для согласованности может быть необходимо, чтобы сложность кодированной видеопоследовательности оставалась в границах, заданных уровнем технологии или стандарта сжатия видео. В ряде случаев, уровни ограничивают максимальный размер изображения, максимальную частоту кадров, максимальную частоту отсчетов для реконструкции (измеряемую, например, в мегаотсчетах в секунду), максимальный размер опорного изображения и т.д. Пределы, установленные уровнями, в ряде случаев могут дополнительно ограничиваться спецификациями гипотетического эталонного декодера (HRD, Hypothetical Reference Decoder) и метаданными для управления буфером HRD, сигнализируемым в кодированной видеопоследовательности.
[41] Согласно варианту осуществления, приемник (310) может принимать дополнительные (избыточные) данные с кодированным видео. Дополнительные данные могут быть включены как часть кодированной(ых) видеопоследовательности(ей). Дополнительные данные могут использоваться видеодекодером (210) для правильного декодирования данных и/или более точной реконструкции исходных видеоданных. Дополнительные данные могут представлять собой, например, уровни улучшения во времени, пространстве или для отношения сигнал/шум (SNR, signal noise ratio), избыточные слайсы, избыточные изображения, коды прямой коррекции ошибок и т.д.
[42] На фиг. 4 изображена функциональная блок-схема видеокодера (203) согласно варианту осуществления настоящего изобретения.
[43] Видеокодер (203) может принимать отсчеты видео от источника видеосигнала (201) (который не входит в состав видеокодера), который может захватывать видеоизображение(я), подлежащее(ие) кодированию видеокодером (203).
[44] Источник видеосигнала (201) может обеспечивать исходную видеопоследовательность, подлежащую кодированию видеокодером (203), в форме потока отсчетов цифрового видео любой подходящей битовой глубины (например: 8 бит, 10 бит, 12 бит, …), любого цветового пространства (например, ВТ.601 Y CrCB, RGB, …) и любой подходящей структуры дискретизации (например, Y CrCb 4:2:0, Y CrCb 4:4:4). В системе службы массовой информации источником видеосигнала (201) может быть запоминающее устройство, где хранится ранее подготовленное видео. В системе видеоконференцсвязи источником видеосигнала (203) может быть камера, которая захватывает информацию локального изображения как видеопоследовательность. Видеоданные могут обеспечиваться как множество отдельных изображений, которые создают ощущение движения при наблюдении в последовательности. Сами изображения могут быть организованы как пространственный массив пикселей, где каждый пиксель может содержать один или более отсчетов в зависимости от используемых структуры дискретизации, цветового пространства и т.д. Специалисту в данной области техники нетрудно понять соотношение между пикселями и отсчетами. Нижеследующее описание касается отсчетов.
[45] Согласно варианту осуществления, видеокодер (203) может кодировать и сжимать изображения исходной видеопоследовательности в кодированную видеопоследовательность (443) в реальном времени или с учетом любых других временных ограничений, налагаемых применением. Установление надлежащей скорости кодирования является одной из функций контроллера (450). Контроллер (450) управляет другими функциональными модулями, как описано ниже, и функционально подключен к этим модулям. Подключение для простоты не показано. Параметры, установленные контроллером, могут включать в себя параметры, связанные регулировкой частоты (пропуск изображения, квантователь, значение лямбда, применяемое при оптимизации скорости-искажения, …), размер изображения, схему групп изображений (GOP, group of pictures), максимальную зону поиска вектора движения и т.д. Специалист в данной области техники может легко выявить другие функции контроллера (450), которые могут относиться к видеокодеру (203), оптимизированному под определенную системную разработку.
[46] Ряд видеокодеров выполнен с возможностью работать в петле кодирования, хорошо известной специалистам в данной области техники. В качестве очень упрощенного описания, петля кодирования может включать в себя кодирующий элемент кодера (430) ("кодер источника") (отвечающий за создание символов на основе входного изображения, подлежащего кодированию, и опорного(ых) изображения(ий)) и (локальный) декодер (433), встроенный в видеокодер (203), реконструирующий символы для создания данных отсчетов, как это делал бы (удаленный) декодер (поскольку любое сжатие между символами и битовым потоком кодированного видео происходит без потерь в технологиях сжатия видео, рассматриваемых в раскрытом изобретении). Реконструированный поток отсчетов поступает в память опорных изображений (434). Поскольку декодирование потока символов приводит к результатам, с точностью до бита, не зависящим от положения декодера (локального или удаленного), содержимое памяти опорных изображений также будет одинаковым с точностью до бита для локального кодера и удаленного кодера. Другими словами, предсказывающая часть кодера "видит" в качестве отсчетов опорного изображения точно такие же значения отсчетов, как "видел" бы декодер при использовании предсказания в ходе декодирования. Этот фундаментальный принцип синхронизма опорного изображения (и, в итоге, дрейф, если синхронизм не удается поддерживать, например, вследствие канальных ошибок) хорошо знаком специалисту в данной области техники.
[47] "Локальный" декодер (433) может действовать таким же образом, как "удаленный" декодер (210), подробно вышеописанный со ссылкой на фиг. 3. Однако, опять же, согласно фиг. 4, поскольку символы доступны, и кодирование/декодирование символов в кодированную видеопоследовательность энтропийным кодером (445) и анализатором (320) может осуществляться без потерь, части энтропийного декодирования видеодекодера (210), включающие канал (312), приемник (310), буферную память (315) и анализатор (320), могут не быть полностью реализованы в локальном декодере (433).
[48] При этом можно отметить, что любая технология декодирования, присутствующая в декодере, за исключением анализа/энтропийного декодирования, также обязательно должна присутствовать, по существу в идентичной функциональной форме в соответствующем кодере. По этой причине раскрытое изобретение сконцентрировано на работе декодера. Описание технологий кодирования может быть сокращено, поскольку они являются обратными подробно описанным технологиям декодированная. Только в некоторых областях требуется более детальное описание, которое приведено ниже.
[49] В ходе работы кодер (430) источника может осуществлять кодирование с предсказанием и компенсацией движения, при котором входное изображение кодируется с предсказанием на основании одного или более ранее кодированных изображений из видеопоследовательности, указанных как "опорные изображения". Таким образом, машина кодирования (432) кодирует различия между пиксельными блоками входного изображения и пиксельными блоками опорного(ых) изображения(й), которое(ые) может(ут) выбираться в качестве предсказанной(ых) ссылки(ок) на входное изображение.
[50] Локальный видеодекодер (433) может декодировать кодированные видеоданные изображений, которые могут быть указаны как опорные изображения на основе символов, созданных кодером (430) источника. Операции машины кодирования (432) могут быть преимущественно процессами с потерями. Когда кодированные видеоданные могут декодироваться в видеодекодере (не показан на фиг. 4), реконструированная видеопоследовательность обычно может представлять собой копию исходной видеопоследовательности с некоторыми ошибками. Локальный видеодекодер (433) дублирует процессы декодирования, которые могут осуществляться видеодекодером на опорных изображениях, и может предписывать сохранение реконструированных опорных изображений в кэш-памяти опорных изображений (434). Таким образом, видеокодер (203) может локально сохранять копии реконструированных опорных изображений, имеющие такое же содержимое, как реконструированные опорные изображения, которые будут получены видеодекодером на стороне приемника (в отсутствие ошибок передачи).
[51] Предсказатель (435) может осуществлять поиски предсказания для машины кодирования (432). Таким образом, для нового изображения, подлежащего кодированию, предсказатель (435) может искать в памяти опорных изображений (634) данные отсчетов (в качестве кандидатов на роль опорных пиксельных блоков) или те или иные метаданные, например, векторы движения опорного изображения, формы блоков и т.д., которые могут служить надлежащей ссылкой для предсказания новых изображений. Предсказатель (435) может работать на основе "блоки отсчетов - пиксельные блоки" в целях нахождения надлежащих ссылок для предсказания. В ряде случаев, согласно результатам поиска, полученных предсказателем (435), входное изображение может иметь ссылки для предсказания, извлеченные из множества опорных изображений, хранящихся в памяти опорных изображений (434).
[52] Контроллер (450) может управлять операциями кодирования видеокодера (430), включая, например, установление параметров и параметров подгруппы, используемых для кодирования видеоданных.
[53] Выходной сигнал всех вышеупомянутых функциональных модулей может подвергаться энтропийному кодированию в энтропийном кодере (445). Энтропийный кодер переводит символы, сгенерированные различными функциональными модулями, в кодированную видеопоследовательность путем сжатия символов без потерь, согласно технологиям, известным специалисту в данной области техники, например, кодирования по Хаффману, кодирования с переменной длиной серии, арифметического кодирования и т.д.
[54] Передатчик (440) может буферизовать кодированную видеопоследовательность, созданную энтропийным кодером (445), для подготовки к передаче через канал связи (460), который может быть аппаратной/программной линией связи с запоминающим устройством, где хранятся кодированные видеоданные. Передатчик (440) может объединять кодированные видеоданные от видеокодера (430) с другими данными, подлежащими передаче, например, с кодированными аудиоданными и/или вспомогательными потоками данных (источники не показаны).
[55] Контроллер (450) может управлять работой видеокодера (203). В ходе кодирования контроллер (450) может назначать каждому кодированному изображению тот или иной тип кодированного изображения, который может определять методы кодирования, применимые к соответствующему изображению. Например, изображениям часто могут назначаться следующие типы изображения:
[56] Интра-изображение (I-изображение), которое можно кодировать и декодировать без использования какого-либо другого изображения в последовательности как источник предсказания. Некоторые видеокодеки допускают разные типы интра-изображений, включая, например, изображения в формате независимого обновления декодера ("IDR", Independent Decoder Refresh). Специалисту в данной области техники известны разновидности I-изображений и их соответствующие варианты применения и особенности.
[57] Предсказанное изображение (Р-изображение), которое можно кодировать и декодировать с использованием внутреннего предсказания или внешнего предсказания с использованием не более одного вектора движения и опорного индекса для предсказания значений отсчетов каждого блока.
[58] Двунаправленно-предсказанное изображение (В-изображение), которое можно кодировать и декодировать с использованием внутреннего предсказания или внешнего предсказания с использованием не более двух векторов движения и опорных индексов для предсказания значений отсчетов каждого блока. Аналогично, мультипредсказанные изображения могут использовать более двух опорных изображений и связанные метаданные для реконструкции единого блока.
[59] Исходные изображения обычно допускают пространственное разделение на множество блоков отсчетов (например, блоки 4×4, 8×8, 4×8 или 16×16 отсчетов каждый) и кодирование на поблочной основе. Блоки могут кодироваться предиктивно со ссылкой на другие (ранее кодированные) блоки, определенные назначением кодирования, применяемым к соответствующим изображениям этих блоков. Например, блоки I-изображений могут кодироваться без предсказания или с предсказанием со ссылкой на ранее кодированные блоки того же изображения (пространственным предсказанием или внутренним предсказанием). Пиксельные блоки Р-изображений могут кодироваться без предсказания, посредством пространственного предсказания или временного предсказания со ссылкой на одно ранее кодированное опорное изображение. Блоки В-изображений могут кодироваться без предсказания, посредством пространственного предсказания или временного предсказания со ссылкой на одно или два ранее кодированных опорных изображения.
[60] Видеокодер (203) может осуществлять операции кодирования согласно заранее заданной технологии или стандарту видеокодирования, например, ITU-T Rec. Н.265. В своей работе видеокодер (203) может осуществлять различные операции сжатия, в том числе операции предиктивного кодирования, которые используют временные и пространственные избыточности во входной видеопоследовательности. Поэтому кодированные видеоданные могут согласовываться с синтаксисом, заданным используемой технологией или стандартом видеокодирования.
[61] Согласно варианту осуществления, передатчик (440) может передавать дополнительные данные с кодированным видео. Видеокодер (430) может включать такие данные как часть кодированной видеопоследовательности. Дополнительные данные могут содержать временные/пространственные/SNR уровни улучшения, другие формы избыточных данных, например, избыточные изображения и слайсы, сообщения SEI, фрагменты набора параметров VUI и т.д.
[62] В последнее время стал привлекать внимание метод агрегации сжатой области или извлечения многочисленных семантически независимых элементов изображений в одно видеоизображение. В частности, например, в контексте кодирования 360° или определенных приложений видеонаблюдения, многочисленные семантически независимые исходные изображения (например, шестикубовая поверхность кубической сцены в 360° или входящие изображения с камер при настройке наблюдения с нескольких камер) могут потребовать отдельных настроек адаптивного разрешения для обработки различных сцен в определенный момент времени. Другими словами, кодеры в определенный момент времени могут выбрать различные коэффициенты передискретизации для разных семантически независимых изображений, составляющих всю сцену видеонаблюдения или сцену в 360°. При сборке в единое изображение, это, в свою очередь, требует передискретизации опорного изображения и доступности сигнализации кодирования адаптивного разрешения для частей кодированного изображения.
[63] Далее будут представлены термины, которые будут упоминаться в оставшейся части данного документа.
[64] В ряде случаев субизображение представляет собой прямоугольную компоновку отсчетов, блоков, макроблоков, единиц кодирования или схожих семантически объединенных образований, которые могут быть кодированы самостоятельно в другом разрешении. Одно или более субизображений могут составлять изображение. Одно или более кодированных субизображений могут составлять кодированное изображение. Одно или более кодированных субизображений могут быть собраны в изображение, и одно или более субизображений могут быть извлечены из изображения. В некоторых средах одно или более кодированных субизображений можно собрать в сжатую область без перекодирования на уровне отсчетов в кодированном изображении, и в аналогичных или других случаях одно или более кодированных субизображений можно извлечь из кодированного изображения в сжатой области.
[65] Под передискретизацией опорного изображения (RPR, Reference Picture Resampling) или изменением адаптивного разрешения (ARC, Adaptive Resolution Change) имеются ввиду механизмы изменения разрешения изображения или субизображения в кодированной видеопоследовательности, например, посредством передискретизации опорного изображения. Далее параметры RPR/ARC обозначают контрольную информацию, которая необходима для изменения адаптивного разрешения и которая может включать, например, параметры фильтров, коэффициенты масштабирования, разрешений выходных и/или опорных изображений, различные флаги управления и т.д.
[66] В вариантах осуществления кодирование и декодирование можно проводить на едином семантически независимом кодированном видеоизображении. Перед описанием сути кодирования/декодирования многочисленных субизображений с независимыми параметрами RPR/ARC и скрытой дополнительной сложностью будут представлены опции сигнализации параметров RPR/ARC.
[67] Фиг. 5 демонстрирует несколько вариантов осуществления для сигнализации параметров RPR/ARC. У каждого варианта осуществления отмечаются определенные преимущества и недостатки с точки зрения эффективности кодирования, сложности и архитектуры. Для сигнализации параметров RPR/ARC стандарт или технология видеокодирования может выбрать один или более таких вариантов осуществления либо опций из предыдущей области техники. Варианты осуществления должны быть совместимы, и в принципе они могут быть взаимозаменяемы, исходя из потребностей приложения, стандартов применяемой технологии или выбора кодера.
[68] Классы параметров RPR/ARC могут включать:
[69] - коэффициенты увеличения/снижения разрешения в координатах X и Y по отдельности или в совокупности
[70] - коэффициенты увеличения/снижения разрешения с добавлением временного измерения, указывающим на увеличение/уменьшение ряда изображений с постоянной скоростью
[71] - любая из перечисленных выше групп коэффициентов может включать кодирование одного или более предположительно короткого синтаксического элемента, которые могут указывать на таблицу, содержащую коэффициент(ы).
[72] - разрешение в координатах X и Y, единицах отсчетов, блоках, макроблоках, единицах кодирования (CU) или любом другом подходящем элементе входного/выходного изображения, опорного изображения, кодированного изображения по отдельности или в совокупности. При наличии нескольких разрешений (например, одно разрешение для входного изображения, другое - для опорного изображения) в ряде случаев один набор значений может быть получен из другого набора значений. Это можно регулировать, например, с помощью флагов. Далее представлен более подробный пример.
[73] - "деформированные" (warping) координаты, наподобие координат, применяемых в Н.263 Приложение Р, опять же в подходящей детализации, как было представлено выше. Н.263 Приложение Р определяет один эффективный способ кодирования деформированных координат, но при этом также разрабатываются другие потенциально более эффективные способы. Например, обратимая переменная длина, где кодирование кодом Хаффмана деформированных координат Приложения Р заменяется двоичным кодированием подходящей длины, где длину двоичного кодового слова можно получить, например, из максимального размера изображения с возможным умножением на определенный множитель и смещением на определенное значение, чтобы "деформация" происходила за пределами максимального размера изображения.
[74] - параметры фильтров повышения/снижения разрешения. В вариантах осуществления применяется один фильтр для повышения/снижения разрешения. Однако в вариантах осуществления эффективнее будет придать гибкости фильтру, что может потребовать сигнализации параметров фильтра. Такие параметры можно выбирать через указатель перечня возможных конструкций фильтров. Фильтр может быть полностью задан (например, посредством перечня фильтровых коэффициентов и подходящих методов энтропийного кодирования), фильтр может быть неявно выбран через коэффициенты повышения/снижения разрешения, в соответствии с которыми осуществляется сигнализация по какому-либо вышеперечисленному механизму, и т.д.
[75] Далее описание предполагает кодирование фиксированного количества коэффициентов повышения/снижения разрешения (один и тот же коэффициент может применяться в координатах X и Y), обозначенного кодовым словом. Это кодовое слово может быть преимущественно кодировано с переменной длиной, например, посредством кода Ext-Golomb характерного для определенных элементов синтаксиса в характеристиках видеокодирования, например, в Н.264 и Н.265. Подходящее масштабирование значений коэффициентов повышения/снижения разрешения можно подобрать, например, согласно таблице 1:
[76] Множество подобных отображений можно моделировать согласно потребностям приложения и возможностям механизмов увеличения/снижения разрешения в технологии или стандарте сжатия видео. В таблице могут быть представлены и другие значения. Значения могут быть также представлены механизмами энтропийного кодирования, не включающими коды Ext-Golomb, например, двоичным кодированием. У таких механизмов могут быть определенные преимущества при рассмотрении коэффициентов передискретизации за пределами средств обработки видео (в основном кодера и декодера), например, посредством MANE. Необходимо отметить, что для случаев, когда не требуется смена разрешения, можно выбрать короткий код Ext-Golomb. В приведенной выше таблице этот код представлен одним битом. Для наиболее типичного случая такой код более эффективен по сравнению с двоичными кодами.
[77] Количество записей в таблице, а также их семантику можно настраивать, полностью или частично. Например, базу таблицы можно задать набором параметров на высоком уровне, например, набором параметров последовательности или декодера. В вариантах осуществления можно задать одну или более таких таблиц в технологии или стандарте кодирования видео. Таблицы также можно выбирать, например, посредством набора параметров декодера или последовательности.
[78] Далее мы описываем способ включения коэффициента увеличения/снижения разрешения (данные ARC), кодированного по указанной выше методике, в технологию видеокодирования или синтаксис стандарта. Подобные способы можно применять к одному или нескольким кодовым словам, которые управляют фильтрами увеличения/снижения разрешения. Далее представлены спорные ситуации, когда относительно большие объемы данных необходимы для фильтра или других структур данных.
[79] Фиг. 5А демонстрирует включение ARC данных (502) стандартом Н.263 Приложение Р в виде четырех деформированных координат в заголовок изображения (501), а точнее в расширение заголовка Н.263 PLUSPTYPE (503). Выбор такой структуры оправдан при а) наличии заголовка изображения и b) ожидании частого изменения ARC данных. Однако непроизводительная передача может оказаться довольно большой при сигнализации посредством Н.263, а коэффициенты масштабирования могут выходить за границы изображения, поскольку заголовок изображения может быть временным.
[80] В том же или других вариантах осуществления сигнализация параметров ARC может проходить по примеру, подробно представленному на фиг. 6А-6В. Фиг. 6А-6В изображают синтаксические схемы в типе отображения посредством обозначения, примерно в рамках программирования на С, которое применяется, например, в стандартах кодирования видео по меньшей мере с 1993 года. Строки, выделенные жирным шрифтом, обозначают синтаксические элементы в битовом потоке, обычные строки часто обозначают поток управления или настройку переменных.
[81] Согласно фиг. 6А, заголовок группы тайлов (601) в виде иллюстративной синтаксической структуры заголовка, применяемого к (возможно прямоугольному) субизображению может условно включать длину переменной, элемент синтаксиса dec_pic_size_idx в кодировке Exp-Golomb (602) (изображен жирным шрифтом). Наличие такого элемента синтаксиса в заголовке группы тайлов можно регулировать с применением адаптивного разрешения (603) - здесь значение флага не изображается жирным шрифтом. Это означает, что флаг находится в точке битового потока согласно схеме синтаксиса. Можно сигнализировать в любой высокоуровневой структуре синтаксиса, внутри или за пределами битового потока, применяется ли адаптивное разрешение для этого изображения или его частей. В представленном примере сигнализация осуществляется в наборе параметров последовательности, как показано ниже.
[82] На фиг. 6 В показан фрагмент набора параметров последовательности (610). Первый представленный элемент синтаксиса является переменной adaptive_pic_resolution_change_flag (611). При наличии этого элемента флаг может указывать применение адаптивного разрешения, которое, в свою очередь, может потребовать определенных данных управления. В примере подобные данные управления условно присутствуют на основании значения флага и утверждения if() в наборе параметров (612) и заголовке группы тайлов (601).
[83] При использовании адаптивного разрешения в этом примере кодируется выходное разрешение в единицах отсчетов (613). Позиция 613 относится к параметрам output_pic_width_in_luma_samples и output_pic_height_in_luma_samples, которые совместно могут определить разрешение изображения на выходе. В других ситуациях на любое значение можно устанавливать определенные ограничения в технологии или стандарте кодирования видео. Например, определение уровня может ограничивать количество выходных отсчетов, которое может быть произведением значений этих двух элементов синтаксиса. Также определенные технологии или стандарты кодирования видео, или внешние технологии или стандарты, например, стандарты системы, могут ограничивать количественный диапазон (например, одно или более измерений должно делиться на степень двойки) или соотношение сторон (например, ширина и высота должны быть в соотношении 4:3 или 16:9). Подобные ограничения, хорошо известные в данной области техники, могут вводиться для снижения нагрузки на аппаратные устройства или по другим причинам.
[84] В ряде приложений можно рекомендовать применение декодером определенного размера опорных изображений по команде кодера, а не принимать размер выходного изображения по умолчанию. В этом примере элемент синтаксиса reference_pic_size_present_flag (614) контролирует условные размеры опорных изображений (615) (опять же число относится к ширине и высоте).
[85] Наконец показана таблица возможных значений ширины и высоты декодируемого изображения. Такая таблица может быть представлена, например, табличным указателем (num_dec_pic_size_in_luma_samples_minus1) (616). Значение "minus1" может обозначать интерпретацию значения этого элемента синтаксиса. Например, если кодированное значение равно нулю, то в наличии будет одна табличная запись. Если значение равно пяти, то в таблице будет шесть записей. Далее для каждой "строки" таблицы ширина и высота декодированного изображения вводится в синтаксис (617).
[86] Представленные табличные записи (617) могут индексироваться посредством элемента синтаксиса dec_pic_size_idx (602) в заголовке группы тайлов, задавая тем самым различные размеры декодирования (по сути, коэффициенты масштабирования) для каждой группы тайлов.
[87] Определенные технологии или стандарты кодирования видео, например, VP9 поддерживают пространственное масштабирование посредством определенных форм передискретизации опорного изображения (сигнализируемых раскрытым изобретением совершенно иначе) в связке со временным масштабированием для включения пространственного масштабирования. В частности, у определенных опорных изображений можно повышать разрешение с помощью ARC технологий для формирования базы пространственного уровня улучшения. Эти изображения с повышенным разрешением можно улучшить посредством стандартных механизмов предсказания при высоком разрешении, чтобы добавить детали.
[88] Представленные в этом документе варианты осуществления можно применять в подобной среде. В ряде случаев, в том же или другом варианте осуществления, значение заголовка блока NAL, например, поле временного ID, можно использовать для указания не только временного, но и пространственного уровня. Такой подход имеет определенные преимущества для определенных конструкций системы: например, при существующих блоках выборочной переадресации (SFU, Selected Forwarding Unit), созданных и оптимизированных для выборочной переадресации временного уровня на основе заголовка блока NAL, значение временного ID может использоваться без изменений для масштабируемых сред. Для этого необходимо масштабирование между размером кодированного изображения и временным уровнем, указанным полем временного ID в заголовке блока NAL.
[89] При передискретизации опорного изображения (RPR) или адаптивном изменении разрешения (ARC) дополнительной нагрузкой для поддержки масштабируемости может стать незначительное изменение синтаксиса высокого уровня (HLS). В вариантах осуществления предсказание между уровнями осуществляется в масштабируемой системе для улучшения эффективности кодирования уровней улучшения. Помимо пространственных и временных предсказаний с компенсацией движения, доступных в кодеке с одним уровнем, предсказание между уровнями может использовать видеоданные передискретизации реконструированного опорного изображения из опорного уровня для предсказания текущего уровня улучшения. Далее, процесс передискретизации для предсказания между уровнями можно выполнять на блочном уровне посредством модификации существующего процесса интерполяции для компенсации движения. В вариантах осуществления дополнительный процесс передискретизации для поддержки масштабирования может быть не нужен. Варианты осуществления относятся к элементам синтаксиса высокого уровня для поддержки масштабирования пространства/качества посредством RPR.
[90] В том же или другом варианте осуществления, согласно фиг. 7, элемент синтаксиса vps_max_layers_minus1 (703) плюс 1 может обозначать максимально допустимое количество уровней в каждом CVS со ссылкой на VPS (701). Переменная vps_all_independent_layers_flag (704), равная единице, может означать, что все уровни в CVS кодируются независимо без применения предсказания между уровнями. Переменная vps_all_independent_layers_flag (704), равная нулю, может означать, что один или более уровней в CVS могут применять предсказание между уровнями. При несоблюдении этого условия значение vps_all_independent_layers_flag можно считать равным единице. Когда переменная vps_all_independent_layers_flag равна единице, значение переменной vps_independent_layer_flag[i] (706) можно считать равным единице. Когда переменная vps_all_independent_layers_flag равна нулю, значение vps_independent_layer_flag[0] можно считать равным единице.
[91] Согласно фиг. 7, переменная vps_independent_layer_flag[i] (706) равная единице может означать, что уровень с указателем i не использует предсказания между уровнями. Переменная vps_independent_layer_flag[i] равная нулю может означать, что уровень с указателем i может применять предсказание между уровнями, и что переменная vps_layer_dependency_flag[i] присутствует в VPS. Переменная vps_direct_dependency_flag[i][j] (707) равная нулю может означать, что уровень с указателем j не является прямым опорным уровнем для уровня с указателем i. Переменная vps_direct_dependency_flag[i][j] равная единице может означать, что уровень с указателем j является прямым опорным уровнем для уровня с указателем i. Когда переменная vps_direct_dependency_flag[i][j] не присутствует для i и j в диапазоне от 0 до vps_max_layers_minus1 включительно, то ее значение можно считать равным нулю. Переменную DirectDependentLayerIdx[i][j], обозначающую прямой зависимый уровень j уровня i, можно получить следующим образом:
for(i=1; i<vps_max_layers_minus1; i--)
if(!vps_independent_layer_flag[i])
for(j=i, k=0; j>=0; j--)
if(vps_direct_dependency_flag[i][j])
DirectDependentLayerIdx[i][k++]=j
[92] Переменную GeneralLayerIdx[i], обозначающую указатель уровня с переменной nuhlayerid равной vps_layer_id[i], можно получить следующим образом:
for(i=0; i<=vps_max_layers_minus1; i++)
GeneralLayerIdx[vps_layer_id[i]]=i
[93] В том же или другом варианте осуществления, согласно фиг. 7, когда переменная vps_max_layers_minus1 больше нуля и значение vps_all_independent_layers_flag равно нулю, сигнализируются переменная vps_output_layers_mode и vps_output_layer_flags[i]. Переменная vps_output_layers_mode (708) равная нулю может означать, что выходным является только высший уровень. Переменная vps_output_layers_mode равная единице может означать, что все уровни являются выходными. Переменная vps_output_layers_mode равная двум может означать, что все выходные уровни являются уровнями с переменной vps_output_layer_flag[i] (709) равной единице. Значение переменной vps_output_layers_mode может быть в районе от 0 до 2 включительно. Значение 3 переменной vps_output_layers_mode резервируется для применения стандартами ITU-T | ISO/IEC в будущем. При несоблюдении этого условия значение vps_output_layers_mode можно считать равным единице. Переменная vps_output_layer_flag[i] равная единице может означать, что уровень i подлежит выводу. Переменная vps_output_layer_flag[i] равная нулю может означать, что уровень i не подлежит выводу. Список OutputLayerFlag[i], при котором значение 1 может означать, что уровень i подлежит выводу, а значение 0 может означать, что уровень i не выходной, можно получить следующим образом:
OutputLayerFlag[vps_max_layers_minus1]=1
for(i=0; i<vps_max_layers_minus1; i++)
if(vps_output_layers_mode==0)
OutputLayerFlag[i]=0
else if(vps_output_layers_mode==1)
OutputLayerFlag[i]=1
else if(vps_output_layers_mode==2)
OutputLayerFlag[i]=vps_output_layer_flag[i]
[94] В том же или другом варианте осуществления, согласно фиг. 8, переменная vps_num_rep_formats_minus1 плюс 1 может обозначать количество синтаксических структур rep_format() в VPS. Значение vps_num_rep_formats_minus1 может быть в районе от 0 до 255 включительно. Переменная vps_rep_format_idx[i] задавать указатель (в списке синтаксических структур rep_format() в VPS) синтаксической структуры, применяемой к уровню с переменной GeneralLayerIdx[nuh_layer_id] равной i. Значение vps_rep_format_idx[i] может быть в районе от 0 до vps_num_rep_formats_minus1 включительно. Количество битов, применяемых для отображения vps_rep_format_idx[i] составляет Ceil(Log2(vps_num_rep_formats_minus1+1)). Переменные pic_width_max_vps_in_luma_samples, pic_height_max_vps_in_luma_samples, chroma_format_vps_idc, separate_colour_plane_vps_flag, bit_depth_vps_luma_minus8 и bit_depth_vps_chroma_minus8 применяются для получения значений синтаксических элементов SPS pic_width_max_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8 и bit_depth_chroma_minus8 соответственно для каждого SPS, относящегося к VPS. Переменная pic_width_max_vps_in_luma_samples не может быть равна 0 и может быть целым числом кратным max(8, MinCbSizeY). Переменная pic_height_max_vps_in_luma_samples не может быть равна 0 и может быть целым числом кратным max(8, MinCbSizeY). Значение переменной chroma_format_vps_idc может быть в районе от 0 до 3 включительно. Переменная bit_depth_vps_chroma_minus8 может быть в районе от 0 до 8 включительно.
[95] Переменная subpics_vps_present_flag равная единице указывает, что параметры субизображений присутствуют в синтаксисе VPS RBSP. Переменная subpics_present_flag равная нулю указывает, что параметры субизображений не присутствуют в синтаксисе VPS RBSP. Переменные syntax, max_subpics_vps_minus1, subpic_grid_vps_col_width_minus1, subpic_grid_vps_row_height_minus1, subpic_grid_vps_row_height_minus1, subpic_grid_vps_idx[i][j], subpic_treated_as_pic_vps_flag[i] и loop_filter_across_subpic_enabled_vps_flag[i] применяются для получения значений элементов синтаксиса SPS max_subpics_minus1, subpic_grid_col_width_minus1 subpic_grid_row_height_minus1, subpic_grid_row_height_minus1, subpic_grid_idx[i][j], subpic_treated_as_pic_flag[i] и loop_filter_across_subpic_enabled_flag[i] соответственно для каждого SPS, относящегося к VPS.
[96] В том же или другом варианте осуществления, согласно фиг. 9, переменная use_rep_format_flag равная единице может означать присутствие переменной sps_rep_format_idx. Переменная use_rep_format_flag равная нулю может означать отсутствие переменной sps_rep_format_idx и присутствие следующих переменных в SPS: pic_width_max_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8, max_subpics_minus1, subpic_grid_col_width_minus1 subpic_grid_row_height_minus1, subpic_grid_row_height_minus1, subpic_grid_idx[i][j], subpic_treated_as_pic_flag[i] и loop_filter_across_subpic_enabled_flag[i]. Переменная sps_rep_format_idx может означать, что синтаксические структуры sps_rep_format_idx-th rep_format() в упоминаемых VPS применяются к уровням, относящимся к этому SPS. При наличии переменные pic_width_max_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8, max_subpics_minus1, subpic_grid_col_width_minus1 subpic_grid_row_height_minus1, subpic_grid_row_height_minus1, subpic_grid_idx[i][j], subpic_treated_as_pic_flag[i] и loop_filter_across_subpic_enabled_flag[i] предполагаются равными значениям pic_width_max_vps_in_luma_samples, pic_height_max_vps_in_luma_samples, chroma_format_vps_idc, separate_colour _plane_vps_flag, bit_depth_vps_luma_minus8, bit_depth_vps_chroma_minus8, max_subpics_vps_minus1, subpic_grid_vps_col_width_minus1 subpic_grid_vps_row_height_minus1, subpic_grid_vps_row_height_minus1, subpic_grid_vps_idx[i][j], subpic_treated_as_pic_vps_flag[i] и loop_filter_across_subpic_enabled_vps_flag[i] в синтаксических структурах sps_rep_format_idx-th rep_format() в ссылочном VPS. Переменная subpics_present_flag равная единице указывает, что параметры субизображения присутствуют в синтаксисе SPS RBSP. Переменная subpics_present_flag равная нулю указывает, что параметры субизображения отсутствуют в синтаксисе SPS RBSP. Переменная max_subpics_minus1 плюс 1 может обозначать максимальное количество субизображений, которые могут присутствовать в CVS. Переменная max_subpics_minus1 может быть в районе от 0 до 254. Переменная subpic_grid_col_width_minus1 плюс 1 может обозначать ширину каждого элемента идентификационной решетки субизображения в блоках из четырех отсчетов. Длина элемента синтаксиса составляет Ceil(Log2(pic_width_max_in_luma_samples / 4)) битов.
[97] Переменная NumSubPicGridCols может быть получена следующим образом: NumSubPicGridCols=(
pic_width_max_in_luma_samples + subpic grid col width minus1*4+3)/
(subpic_grid_col_width_minus1*4+4)
[98] Переменная subpic_grid_row_height_minus1 плюс 1 может обозначать высоту каждого элемента идентификационной решетки субизображения в блоках из четырех отсчетов. Длина элемента синтаксиса составляет
Ceil(Log2(pic_height_max_in_luma_samples / 4)) битов.
[99] Переменную NumSubPicGridRows можно получить следующим образом: NumSubPicGridRows=(
pic_height_max_in_luma_samples + subpic_grid_row_height_minus1*4+3) / (subpic_grid_row_height_minus1*4+4)
[100] Переменная subpic_grid_idx[i][j] может обозначать указатель субизображения положения решетки (i, j). Длина синтаксического элемента составляет
Ceil(Log2(max_subpics_minus1+1)) битов.
[101] Переменные SubPicTop[subpic_grid_idx[i][j]],
SubPicLeft[subpic_grid_idx[i][j]], SubPicWidth[subpic_grid_idx[i][j]],
SubPicHeight[subpic_grid_idx[i][j]], и NumSubPics можно получить следующим образом:
NumSubPics=0
for(i=0; i.<NumSubPicGridRows; i++) {
for(j=0; j<NumSubPicGridCols; j++) {
if(i=0)
SubPicTop[subpic_grid_idx[i][j]]=0
else if(subpic_grid_idx[i][j] !=subpic_grid_idx[i-1][j]) {
SubPicTop[subpic_grid_idx[i][j]]=i
SubPicHeight[subpic_grid_idx[i-1][j]]=
i - SubPicTop[subpic_grid_idx[i-1][j]]
}
if(j=0)
SubPicLeft[subpic_grid_idx[i][j]]=0
else if (subpic_grid_idxf i][j] !=subpic_grid_idx[i][j-1]) {
SubPicLeft[subpic_grid_idx[i][j]]=j
SubPicWidth[subpic_grid_idx[i][j]]=
j - SubPicLeft[subpic_grid_idx[i][j-1]]
}
if (i==NumSubPicGridRows-1)
SubPicHeightf subpic_grid_idx[i][j]]=
i - SubPicTop[subpic_grid_idx[i-1][j]]+1
if (j=NumSubPicGridRows-1)
SubPicWidth[subpic_grid_idx[i][j]]=
j - SubPicLeft[subpic_grid_idx[i][j-1]]+1
if(subpic_grid_idx[i][j]>NumSubPics)
NumSubPics=subpic_grid_idx[i][j]
}
}
[102] Переменная subpic_treated_as_pic_flag[i] равная единице может обозначать, что субизображение i каждого кодированного изображения в CVS обрабатывается как изображение в процессе декодирования, исключающего операции контурной фильтрации. Переменная subpic_treated_as_pic_flag[i] равная нулю может обозначать, что субизображение i каждого кодированного изображения в CVS не обрабатывается как изображение в процессе декодирования, исключающего операции контурной фильтрации. При несоблюдении данного условия значение переменной subpic_treated_as_pic_flag[i] можно считать равным нулю.
[103] Переменная loop_filter_across_subpic_enabled_flag[i] равная единице может обозначать, что операции контурной фильтрации можно выполнять по границам субизображения i каждого кодированного изображения в CVS. Переменная loop_filter_across_subpic_enabled_flag[i] равная нулю может обозначать, что операции контурной фильтрации не выполняются по границам субизображения i каждого кодированного изображения в CVS. При несоблюдении данного условия значение переменной loop_filter_across_subpic_enabled_pic_flag[i] можно считать равным единице.
[104] Фиг. 10 - блок-схема примера процесса 1000 для декодирования битового потока кодированного видео. В некоторых вариантах осуществления один или более блоков обработки фиг. 10 можно выполнить посредством декодера 210. В некоторых вариантах осуществления один или более блоков обработки фиг. 10 можно выполнить другим устройством или группой устройств без или с декодером 210, например, кодером 203.
[105] Согласно фиг. 10, процесс 1000 может включать получение кодированной видеопоследовательности из битового потока кодированного видео (блок 1001).
[106] Далее, согласно фиг. 10, процесс 1000 может включать получение первого элемента синтаксиса, указывающего на количество уровней, включенных в кодированную видеопоследовательность, и второго элемента синтаксиса, указывающего, являются ли все уровни, включенные в кодированную видеопоследовательность, независимыми уровнями (блок 1002).
[107] Далее, согласно фиг. 10, процесс 1000 может включать следующее определение на основании первого элемента синтаксиса: превышает ли количество уровней, включенных в CVS, один уровень (блок 1003).
[108] Далее, согласно фиг. 10, на основании первого элемента синтаксиса, указывающего, что количество уровней, включенных в CVS не превышает одного уровня (НЕТ на блоке 1003), процесс 1000 может перейти к блоку 1004, в котором один уровень определяется как выходной уровень, а затем к блоку 1010, в котором выходной уровень подлежит выводу.
[109] Далее, согласно фиг. 10, на основании первого элемента синтаксиса, указывающего, что количество уровней, включенных в CVS, превышает один уровень (ДА на блоке 1003), процесс 1000 может перейти к блоку 1005.
[110] Далее, согласно фиг. 10, процесс 1000 может включать следующее определение на основании второго элемента синтаксиса: являются ли все уровни, включенные в кодированную видеопоследовательность, независимыми уровнями (блок 1005).
[111] Далее, согласно фиг. 10, процесс 1000 может перейти к блоку 1006, в котором все уровни определены как выходные, а затем к блоку 1010, в котором все уровни выводят, на основании второго элемента синтаксиса, указывающего на независимость всех уровней, включенных в кодированную видеопоследовательность (ДА на блоке 1005).
[112] Далее, согласно фиг. 10, на основании второго элемента синтаксиса, указывающего, что не все уровни, включенные в кодированную
видеопоследовательность, являются независимыми (НЕТ на блоке 1003), процесс 1000 может перейти к блоку 1007.
[113] Далее, согласно фиг. 10, процесс 1000 может включать получение третьего элемента синтаксиса, указывающего на режим вывода (блок 1007).
[114] Далее, согласно фиг. 10, процесс 1000 может включать определение режима вывода на основании третьего элемента синтаксиса (блок 1008).
[115] Далее, согласно фиг. 10, процесс 1000 может включать определение одного или более выходных уровней из множества уровней на основании режима вывода, который был определен (блок 1009).
[116] Далее, согласно фиг. 10, процесс 1000 может включать вывод одного или более выходных уровней (блок 1010).
[117] В варианте осуществления, основанном на третьем элементе синтаксиса, указывающем, что режим вывода является первым режимом, один или более выходных уровней могут включать только высший уровень из множества уровней.
[118] В варианте осуществления, основанном на третьем элементе синтаксиса, указывающим, что режим вывода является вторым режимом, один или более выходных уровней могут включать множество уровней.
[119] В варианте осуществления процесс 1000 может также включать получение четвертого элемента синтаксиса, указывающего, что соответствующий уровень из множества уровней должен быть выходным, где (на основании третьего элемента синтаксиса, указывающего на то, что режим вывода является третьим режимом) один или более выходных уровней могут включать этот соответствующий уровень.
[120] В варианте осуществления первый, второй и третий элементы синтаксиса могут быть сигнализированы в наборе параметров видео (VPS).
[121] В варианте осуществления VPS может также включать пятый элемент синтаксиса, указывающий множество сигнализируемых в VPS форматов изображения, и шестой элемент синтаксиса, указывающий на индекс формата изображения из множества форматов изображения, который должен быть применен к уровню из множества уровней.
[122] В варианте осуществления VPS может также включать седьмой элемент синтаксиса, указывающий, сигнализируются ли параметры субизображения в VPS.
[123] В варианте осуществления набор параметров последовательности (SPS) со ссылкой на VPS может включать восьмой элемент синтаксиса, указывающий на включение девятого элемента синтаксиса в SPS. Девятый элемент синтаксиса указывает на индекс формата изображения из множества форматов изображения, сигнализируемого в VPS, который должен быть применен к уровню из множества уровней.
[124] В варианте осуществления SPS может также включать шестой элемент синтаксиса, указывающий, сигнализируются ли параметры субизображения в SPS.
[125] Несмотря на то, что фиг. 10 демонстрирует примеры блоков процесса 1000, в ряде случаев процесс 1000 может также включать дополнительные блоки, меньшее количество блоков, различные блоки или иную компоновку блоков по сравнению с фиг. 10. Одновременно можно обрабатывать два или более блоков процесса 1000 в качестве дополнения или альтернативы.
[126] Далее, предложенные способы можно выполнять обрабатывающей схемой (например, одним или несколькими процессорами, а также одной или несколькими интегральными схемами). В одном примере один или более процессоров выполняют программу, хранящуюся на компьютерно-считываемом носителе информации для реализации одного или более предложенных способов.
[127] Вышеописанные способы могут быть реализованы в виде компьютерного программного обеспечения, использующего компьютерно-считываемые инструкции и физически хранящегося на одном или более компьютерно-считываемых носителях. Например, на фиг. 11 показана компьютерная система 1100, пригодная для реализации некоторых вариантов осуществления раскрытого изобретения.
[128] Компьютерное программное обеспечение может кодироваться с использованием любого подходящего машинного кода или компьютерного языка, который может подвергаться ассемблированию, компиляции, редактированию связей или аналогичной обработке для создания кода, содержащего инструкции, которые могут выполняться напрямую, или посредством интерпретации, выполнения микрокода и т.п., одним или более компьютерными центральными процессорами (CPU, central processing units), графическими процессорами (GPU, Graphics Processing Units) и т.п.
[129] Инструкции могут выполняться на компьютерах различных типов или их компонентах, включая, например, персональные компьютеры, планшетные компьютеры, серверы, смартфоны, игровые устройства, устройства интернета вещей и т.п.
[130] Компоненты компьютерной системы 1100, показанные на фиг. 11, носят иллюстративный характер и не призваны налагать какое-либо ограничение на объем применения или функциональные возможности компьютерного программного обеспечения, реализующего варианты осуществления настоящего изобретения. Конфигурацию компонентов также не следует интерпретировать как имеющую какую-либо зависимость или требование в связи с любым одним или комбинацией компонентов, показанных в иллюстративном варианте осуществления компьютерной системы 1100.
[131] Компьютерная система (1100) может включать в себя некоторые устройства ввода интерфейса человеком. Такое устройство ввода может отвечать за ввод одним или более пользователями посредством, например, тактильного ввода (например, нажатий на клавиши, махов, движений информационной перчатки), аудио-ввода (например, голосового, хлопков), визуального ввода (например, жестов), обонятельного ввода (не показан). Устройства интерфейса также могут использоваться для захвата некоторых информационных носителей, не обязательно напрямую связанных с осознанным вводом человеком, например, звука (например, речи, музыки, внешнего звука), изображений (например, отсканированных изображений, фотографических изображений, полученных от камеры неподвижных изображений), видео (например, двухмерного видео, трехмерного видео, включающего в себя стереоскопическое видео).
[132] Устройства входного человеческого интерфейса могут включать в себя одно или более устройств (по одному из изображенных): клавиатуру 1101, мышь 1102, сенсорную панель 1103, сенсорный экран 1110 и подключенный к нему графический адаптер 1150, джойстик 1105, микрофон 1106, сканер 1107, камеру 1108.
[133] Компьютерная система 1100 также может включать в себя некоторые устройства вывода интерфейса с человеком. Такие устройства вывода могут стимулировать органы чувств одного или более пользователей посредством, например, тактильного вывода, звука, света и запаха/вкуса. Такие устройства вывода могут включать в себя устройства тактильного вывода (например, тактильной обратной связи посредством сенсорного экрана 1110, цифровой перчатки или джойстика 1105, но также могут быть устройствами тактильной обратной связи, которые не служат устройствами ввода), устройства вывода аудио (например: громкоговорители 1109, наушники (не показаны)), устройства визуального вывода (например, экраны 1110, в том числе CRT-экраны, LCD-экраны, плазменные экраны, OLED-экраны, каждый с возможностями сенсорного экранного ввода или без них, каждый с возможностями тактильной обратной связи или без них, некоторые из которых способны к двухмерному визуальному выводу или более чем трехмерному выводу посредством, например, стереографического вывода; очков виртуальной реальности (не показаны), голографических дисплеев и дымовых баков (не показаны)) и принтеры (не показаны).
[134] Компьютерная система 1100 также может включать в себя доступные человеку запоминающие устройства и связанные с ними носители, например, оптические носители, включающие в себя CD/DVD ROM/RW 1120 с носителями CD/DVD 1121 и т.п., карты флэш-памяти 1122, сменный жесткий диск или твердотельный диск 1123, традиционные магнитные носители, например, ленту и флоппи-диск (не показан), специализированные устройства на основе ROM/ASIC/PLD, например, защитные аппаратные ключи (не показаны) и т.п.
[135] Специалисты в данной области техники также должны понимать, что термин "компьютерно-считываемые носители", используемый в связи с раскрытым здесь изобретением, не охватывает среды передачи, несущие волны или другие кратковременные сигналы.
[136] Компьютерная система 1100 также может включать в себя интерфейс к одной или более сетям связи 1155. Сети связи могут быть, например, беспроводными, проводными, оптическими. Сети связи могут быть, дополнительно, локальными, глобальными, городскими, транспортными и промышленными, реального времени, допускающими задержку и т.д. Примеры сетей связи включают в себя локальные сети, например, Ethernet, беспроводные LAN, сотовые сети, в том числе GSM, 3G, 4G, 5G, LTE и т.п., глобальные цифровые сети проводного или беспроводного телевидения, в том числе кабельное телевидение, спутниковое телевидение и наземное телевещание, транспортные и промышленные включают в себя CANBus и т.д. Некоторые сети обычно требуют внешних адаптеров сетевого интерфейса (1154), которые подключены к некоторым портам данных общего назначения или периферийным шинам (1149) (например, USB-порты компьютерной системы 1100; другие обычно встраиваются в ядро компьютерной системы 1100 путем подключения к системной шине, как описано ниже (например, интерфейс Ethernet в компьютерную систему PC или интерфейс сотовой сети в компьютерную систему смартфона). Используя любую из этих сетей, компьютерная система 1100 может осуществлять связь с другими объектами. Такая связь может быть однонаправленной с возможностью только приема (например, телевещания), однонаправленной с возможностью только передачи (например, CANbus к некоторым устройствам CANbus) или двунаправленной, например, к другим компьютерным системам с использованием локальной или глобальной цифровой сети. Некоторые протоколы и стеки протоколов могут использоваться в каждой из этих сетей и вышеописанных сетевых интерфейсах (1154).
[137] Вышеупомянутые устройства человеческого интерфейса, доступные человеку запоминающие устройства и сетевые интерфейсы могут подключаться к ядру 1140 компьютерной системы 1100.
[138] Ядро 1140 может включать в себя один или более центральных процессоров (CPU) 1141, графические процессоры (GPU) 1142, специализированные программируемые модули обработки в форме вентильных матриц, программируемых пользователем (FPGA, Field Programmable Gate Areas) 1143, аппаратные ускорители 1144 для некоторых задач и т.д. Эти устройства, совместно с постоянной памятью (ROM) 1145, оперативной памятью 1146, внутренним хранилищем данных большой емкости, например, внутренними жесткими дисками, недоступными пользователю, SSD и т.п. 1147, могут соединяться посредством системной шины 1148. В некоторых компьютерных системах системная шина 1148 может быть доступна в форме одного или более физических разъемов для обеспечения расширений за счет дополнительных CPU, GPU и т.п. Периферийные устройства могут подключаться либо напрямую к системной шине ядра 1148, либо через периферийную шину 1149. Архитектуры периферийной шины включают в себя PCI, USB и т.п.
[139] CPU 1141, GPU 1142, FPGA 1143 и ускорители 1144 могут выполнять некоторые инструкции, которые совместно могут составлять вышеупомянутый компьютерный код. Этот компьютерный код может храниться в ROM 1145 или RAM 1146. Переходные данные также могут храниться в RAM 1146, тогда как постоянные данные могут храниться, например, во внутреннем хранилище данных большой емкости 1147. Быстрое сохранение и извлечение из любого запоминающего устройства может обеспечиваться за счет использования кэш-памяти, которая может быть тесно связана с одним или более CPU 1141, GPU 1142, хранилищем данных большой емкости 1147, ROM 1145, RAM 1146 и т.п.
[140] На компьютерно-считываемых носителях может храниться компьютерный код для осуществления различных компьютерно-реализуемых операций. Носители и компьютерный код могут быть специально созданы в целях настоящего изобретения или могут относиться к хорошо известным и доступным специалистам в области компьютерного программного обеспечения.
[141] В порядке примера, но не ограничения, компьютерная система, имеющая архитектуру 1100, и, в частности, ядро 1140 может обеспечивать функциональные возможности благодаря выполнению процессором(ами) (включающим(и) в себя CPU, GPU, FPGA, ускорители и т.п.) программного обеспечения, воплощенного в одном или более материальных компьютерно-считываемых носителях. Такие компьютерно-считываемые носители могут быть носителями, связанными с доступным пользователю хранилищем данных большой емкости, представленным выше, а также некоторым хранилищем ядра 1140, носящим долговременный характер, например, внутренним хранилищем данных большой емкости 1147 или ROM 1145. Программное обеспечение, реализующее различные варианты осуществления настоящего изобретения, может храниться в таких устройствах и выполняться ядром 1140. Компьютерно-считываемый носитель может включать в себя одно или более запоминающих устройств или микросхем, в соответствии с конкретными нуждами. Программное обеспечение может предписывать ядру 1140 и, в частности, его процессорам (включая CPU, GPU, FPGA и т.п.) выполнять конкретные процессы или конкретные части описанных здесь конкретных процессов, включая задание структур данных, хранящихся в RAM 1146, и модификацию таких структур данных согласно процессам, заданным программным обеспечением. Дополнительно или альтернативно, компьютерная система может обеспечивать функциональные возможности благодаря логике, зашитой или иным образом воплощенной в схеме (например, ускоритель 1144), который может действовать вместо или совместно с программным обеспечением для выполнения конкретных процессов или конкретных частей описанных здесь конкретных процессов. Ссылка на программное обеспечение может охватывать логику, и наоборот, когда это уместно. Ссылка на компьютерно-считываемые носители может охватывать схему (например, интегральную схему (IC, integrated circuit)), где хранится программное обеспечение для выполнения, схему, воплощающую логику для выполнения, или обе из них, когда это уместно. Настоящее изобретение охватывает любую подходящую комбинацию оборудования и программного обеспечения.
[142] Хотя здесь описано несколько иллюстративных вариантов осуществления, возможны изменения, перестановки и различные эквиваленты для замены, которые находятся в объеме изобретения. Таким образом, специалисты в данной области техники могут предложить многочисленные системы и способы, которые, хотя в явном виде здесь не показаны и не описаны, воплощают принципы изобретения и, таким образом, соответствуют его сущности и объему.