ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
[0001] Настоящее изобретение относится в общем к видеокодированию, и конкретно относится к конфигурированию наборов выходных слоев (OLS) в многоуровневых битовых потоках для поддержки пространственной масштабируемости и масштабируемости по отношению сигнала к шуму (SNR).
УРОВЕНЬ ТЕХНИКИ
[0002] Объем видеоданных, необходимых для представления даже относительно короткого видео, может быть значительным, что может привести к трудностям, когда эти данные должны передаваться в потоковом режиме или иным образом передаваться по сети связи с ограниченной пропускной способностью. Таким образом, видеоданные, как правило, сжимаются перед их передачей через современные телекоммуникационные сети. Размер видео также может представлять проблему, если видео хранится на запоминающем устройстве, поскольку ресурсы памяти могут быть ограничены. Устройства сжатия видео часто используют программное и/или аппаратное обеспечение в источнике для кодирования видеоданных перед передачей или хранением, тем самым уменьшая количество данных, необходимых для представления цифровых видеоизображений. Сжатые данные затем принимаются устройством декомпрессии видео получателя, которое декодирует видеоданные. С ограниченными сетевыми ресурсами и постоянно растущими потребностями в видео более высокого качества, желательны улучшенные методики сжатия и декомпрессии, которые улучшают степень сжатия с минимальными потерями качества изображения или вообще без таких потерь.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
[0003] В варианте осуществления изобретение включает в себя способ, реализуемый декодером, причем способ содержит: прием посредством приемника декодера битового потока, содержащего один или более слоев кодированных изображений и набор параметров видео (VPS), при этом VPS включает в себя идентификационный код режима набора выходных слоев (OLS) (ols_mode_idc), указывающий, что общее количество OLS, заданных VPS, равно количеству слоев, заданных VPS; определение процессором декодера выходного слоя на основе ols_mode_idc в VPS; и декодирование процессором декодера кодированного изображения из выходного слоя для создания декодированного изображения.
[0004] Для поддержки масштабируемости могут использоваться слои изображений. Например, видео можно кодировать во множество слоев. Слой может быть кодирован без обращения к другим слоям. Такой слой называется слоем одновременной передачи. Соответственно, слой одновременной передачи может быть декодирован без обращения к другим слоям. В качестве другого примера? слой может быть кодирован с использованием прогнозирования между слоями. Это позволяет кодировать текущий слой, включая только различия между текущим слоем и опорным слоем. Например, текущий слой и опорный слой могут содержать одну и ту же видеопоследовательность, кодированную путем изменения характеристики, такой как отношение сигнала к шуму (SNR), размер изображения, частота кадров и т.д. Некоторые системы видеокодирования выполнены с возможностью декодирования и вывода только самого верхнего кодированного слоя, обозначенный идентификатором (ID) слоя, вместе с одним или более указанными более нижними слоями. Это может представлять проблему для масштабируемости, поскольку декодер может не желать декодировать самый верхний слой. Это приводит к ошибке при попытке масштабирования видео в таких системах. Это может быть серьезной проблемой, поскольку необходимость того, чтобы декодеры всегда поддерживали самый верхний слой, приводит к тому, что система не может осуществлять масштабирование в промежуточные слои на основе различных требований к оборудованию и сети.
[0005] Настоящий пример включает в себя механизм, который использует OLS для поддержки масштабируемости. Это включает в себя как пространственную масштабируемость, так и масштабируемость по SNR. В настоящем примере используется синтаксический элемент ols_mode_idc для использования в сочетании с OLS. Синтаксический элемент ols_mode_idc может содержаться в VPS и может быть установлен в ноль для указания, что общее количество OLS в видеопоследовательности равно общему количеству слоев, указанных в VPS, что i-й OLS включает в себя слои от нулевого до i включительно, и что для каждого OLS выводится только самый верхний слой. Это поддерживает масштабируемость, поскольку декодер может быстро определить, что, например, третий OLS содержит нулевой - третий слои, и что третий слой следует декодировать на основе нулевого - второго слоев с и выходных данных. Соответственно, декодер может принимать только слои, необходимые для декодирования принятого самого верхнего слоя, и принятый самый верхний слой может быть декодирован и отображен. Таким образом, общее количество кодированных слоев может не влиять на процесс декодирования, и можно избежать ошибки. Таким образом, раскрытые механизмы увеличивают функциональные возможности кодера и/или декодера. Кроме того, раскрытые механизмы могут уменьшать размер битового потока и, следовательно, уменьшать использование процессора, памяти и/или сетевых ресурсов как в кодере, так и в декодере. В конкретном варианте осуществления ols_mode_idc обеспечивает экономию битов в кодированных битовых потоках, которые содержат множество OLS, между которыми совместно используется много данных, тем самым обеспечивая экономию на серверах обработки и обеспечивая экономию пропускной способности для передачи таких битовых потоков.
[0006] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой ols_mode_idc указывает, что i-й OLS включает в себя слои с индексами слоев от нуля до i включительно.
[0007] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой ols_mode_idc указывает, что для каждого OLS только самый верхний слой в каждом OLS является выходным слоем.
[0008] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой ols_mode_idc равен нулю.
[0009] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой VPS включает максимальное количество слоев VPS минус один (vps_max_layers_minus1), которое указывает количество слоев, указанное VPS, которое представляет собой максимально допустимое количество слоев в каждой кодированной видеопоследовательности (CVS), относящейся к VPS.
[0010] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой общее количество OLS (TotalNumOlss) равно vps_max_layers_minus1 плюс один, когда ols_mode_idc равен нулю или когда ols_mode_idc равен единице.
[0011] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой количество слоев в i-м OLS (NumLayersInOls[i]) и идентификатор слоя (ID) в OLS (LayerIdInOLS[i][j]), указывающий значение идентификатора слоя заголовка модуля слоя сетевой абстракции (NAL) (nuh_layer_id) j-го слоя в i-м OLS, выводятся следующим образом:
NumLayersInOls[0]=1 LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i<TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]
} else if(ols_mode_idc=0 | | ols_mode_idc=1) {
NumLayersInOls[i]=i+1
for(j=0; j<NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг каждого слоя OLS, указывающий, содержит ли хотя бы один OLS более одного слоя.
[0012] В варианте осуществления изобретение включает в себя способ, реализуемый кодером, причем способ содержит: кодирование процессором кодера битового потока, содержащего один или более слоев кодированных изображений; кодирование процессором в битовый поток VPS, при этом VPS включает в себя ols_mode_idc, указывающий, что общее количество OLS, указанное VPS, равно количеству слоев, указанному VPS; и сохранение посредством памяти, соединенной с процессором, битового потока для передачи в декодер.
[0013] Слои изображений могут использоваться для поддержки масштабируемости. Например, видео можно кодировать во множество слоев. Слой может быть кодирован без обращения к другим слоям. Такой слой называется слоем одновременной передачи. Соответственно, слой одновременной передачи может быть декодирован без обращения к другим слоям. В качестве другого примера, слой может быть кодирован с использованием прогнозирования между слоями. Это позволяет кодировать текущий слой, включая только различия между текущим слоем и опорным слоем. Например, текущий слой и опорный слой могут содержать одну и ту же видеопоследовательность, кодированную путем изменения характеристики, такой как SNR, размер изображения, частота кадров и т.д. Некоторые системы видеокодирования выполнены с возможностью декодирования и вывода только самого верхнего кодированного слоя, обозначенного ID слоя, вместе с одним или более указанными более низкими слоями. Это может представлять проблему для масштабируемости, поскольку декодер может не желать декодировать самый верхний слой. Это приводит к ошибке при попытке масштабирования видео в таких системах. Это может быть серьезной проблемой, поскольку требование того, чтобы декодеры всегда поддерживали самый верхний слой, приводит к тому, что система не может осуществлять масштабирование в промежуточные слои на основе различных требований к аппаратному обеспечению и сети.
[0014] Настоящий пример включает в себя механизм, в котором для поддержки масштабируемости используется OLS. Это включает в себя как пространственную масштабируемость, так и масштабируемость SNR. В настоящем примере используется синтаксический элемент ols_mode_idc для использования в сочетании с OLS. Синтаксический элемент ols_mode_idc может содержаться в VPS и может быть установлен равным нулю для указания того, что общее количество OLS в видеопоследовательности равно общему количеству слоев, указанных в VPS, что i-й OLS включает в себя слои от нулевого до i включительно, и что для каждого OLS выводится только самый верхний слой. Это поддерживает масштабируемость, поскольку декодер может быстро определить, что, например, третий OLS содержит нулевой - третий слои, и что третий слой следует декодировать на основе нулевого - второго слоев с и выходных данных. Соответственно, декодер может принимать только слои, необходимые для декодирования принятого самого верхнего слоя, и принятый самый верхний слой может быть декодирован и отображен. Таким образом, общее количество кодированных слоев может не влиять на процесс декодирования, и можно избежать ошибки. Таким образом, раскрытые механизмы увеличивают функциональные возможности кодера и/или декодера. Кроме того, раскрытые механизмы могут уменьшать размер битового потока и, следовательно, уменьшать использование ресурсов процессора, памяти и/или сети как в кодере, так и в декодере. В конкретном варианте осуществления ols_mode_idc обеспечивает экономию битов в кодированных битовых потоках, которые содержат множество OLS, между которыми совместно используется много данных, тем самым обеспечивая экономию на серверах обработки и обеспечивая экономию пропускной способности для передачи таких битовых потоков.
[0015] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой ols_mode_idc указывает, что i-й OLS включает в себя слои с индексами слоев от нуля до i включительно.
[0016] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой ols_mode_idc указывает, что для каждого OLS только самый верхний слой в каждом OLS является выходным слоем.
[0017] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой ols_mode_idc равен нулю.
[0018] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой VPS включает в себя vps_max_layers_minus1, который указывает количество слоев, указанное VPS, которое является максимально допустимым количеством слоев в каждой CVS, относящейся к VPS.
[0019] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой TotalNumOlss равен vps_max_layers_minus1 плюс один, когда ols_mode_idc равен нулю или когда ols_mode_idc равен единице.
[0020] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой NumLayersInOls[i] и LayerIdInOLS[i][j], определяющие значение nuh_layer_id j-го слоя в i-м OLS, выводятся следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i<TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]
} else if(ols_mode_idc=0 | | ols_mode_idc=1) {
NumLayersInOls[i]=i+1 for(j=0; j<NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг OLS, указывающий, содержит ли по меньшей мере один OLS более одного слоя.
[0021] В одном варианте осуществления изобретение включает в себя устройство видеокодирования, содержащее: процессор, приемник, соединенный с процессором, память, соединенную с процессором, и передатчик, соединенный с процессором, при этом процессор, приемник, память и передатчик выполнены с возможностью осуществления способа по любому из предыдущих аспектов.
[0022] В варианте осуществления изобретение включает в себя постоянный машиночитаемый носитель, содержащий компьютерный программный продукт для использования устройством видеокодирования, причем компьютерный программный продукт содержит выполняемые компьютером инструкции, сохраненные на постоянном машиночитаемом носителе таким образом, что при выполнении процессором они предписывают устройству видеокодирования выполнять способ по любому из предыдущих аспектов.
[0023] В одном варианте осуществления изобретение включает в себя декодер, содержащий: средство приема для приема битового потока, содержащего один или более слоев кодированных изображений, и VPS, при этом VPS включает в себя ols_mode_idc, указывающий, что общее количество OLS, указанное VPS, равно количеству слоев, указанному VPS; средство определения для определения выходного слоя на основе ols_mode_idc в VPS; средство декодирования для декодирования кодированного изображения из выходного слоя для получения декодированного изображения; и средство перенаправления для перенаправления декодированного изображения для отображения в качестве части декодированной видеопоследовательности.
[0024] Для поддержки масштабируемости могут использоваться слои изображений. Например, видео можно кодировать в несколько слоев. Слой может быть кодирован без обращения к другим слоям. Такой слой называется слоем одновременной передачи. Соответственно, слой одновременной передачи может быть декодирован без обращения к другим слоям. В качестве другого примера, слой может быть кодирован с использованием прогнозирования между слоями. Это позволяет кодировать текущий слой, включая только различия между текущим слоем и опорным слоем. Например, текущий слой и опорный слой могут содержать одну и ту же видеопоследовательность, кодированную путем изменения характеристики, такой как SNR, размер изображения, частота кадров и т.д. Некоторые системы видеокодирования выполнены с возможностью декодирования и вывода только самого верхнего кодированного слоя, обозначенного идентификатором слоя, вместе с одним или более указанными более низкими слоями. Это может представлять проблему для масштабируемости, поскольку декодер может не желать декодировать самый верхний слой. Это приводит к ошибке при попытке масштабирования видео в таких системах. Это может быть серьезной проблемой, поскольку необходимость того, чтобы декодеры всегда поддерживали самый верхний слой, приводит к тому, что система не может осуществлять масштабирование в промежуточные слои на основе различных требований к аппаратному обеспечению и сети.
[0025] Настоящий пример включает в себя механизм, который использует OLS для поддержки масштабируемости. Он включает в себя как пространственную масштабируемость, так и масштабируемость по SNR. В настоящем примере используется синтаксический элемент ols_mode_idc для использования в сочетании с OLS. Синтаксический элемент ols_mode_idc может содержаться в VPS и может быть установлен равным нулю для указания того, что общее количество OLS в видеопоследовательности равно общему количеству слоев, указанных в VPS, что i-й OLS включает слои от нулевого до i включительно, и что для каждого OLS выводится только самый верхний слой. Это поддерживает масштабируемость, поскольку декодер может быстро определить, что, например, третий OLS содержит нулевой - третий слои и что третий слой следует декодировать на основе нулевого - второго слоев и выходных данных. Соответственно, декодер может принимать только слои, необходимые для декодирования принятого самого верхнего слоя, и принятый самый верхний слой может быть декодирован и отображен. Таким образом, общее количество кодированных слоев может не влиять на процесс декодирования, и можно избежать ошибки. Таким образом, раскрытые механизмы увеличивают функциональные возможности кодера и/или декодера. Кроме того, раскрытые механизмы могут уменьшать размер битового потока и, следовательно, уменьшать использование процессора, памяти и/или сетевых ресурсов как в кодере, так и в декодере. В конкретном варианте осуществления ols_mode_idc обеспечивает экономию битов в кодированных битовых потоках, которые содержат множество OLS, между которыми совместно используется много данных, таким образом обеспечивая экономию на серверах обработки и обеспечивая экономию пропускной способности для передачи таких битовых потоков.
[0026] При необходимости, в любом из предыдущих аспектов другая реализация аспекта обеспечивает декодер дополнительно выполнен с возможностью выполнения способа по любому из предыдущих аспектов.
[0027] В варианте осуществления изобретение включает в себя кодер, содержащий: средство кодирования для: кодирования битового потока, содержащего один или более слоев кодированных изображений; и кодирования в битовый поток VPS, при этом VPS включает в себя ols_mode_idc, указывающий, что общее количество OLS, указанное VPS, равно количеству слоев, указанному VPS; и средство хранения для сохранения битового потока для передачи на декодер.
[0028] Слои изображений могут использоваться для поддержки масштабируемости. Например, видео можно кодировать во множество слоев. Слой может быть кодирован без обращения к другим слоям. Такой слой называется слоем одновременной передачи. Соответственно, слой одновременной передачи может быть декодирован без обращения к другим слоям. В качестве другого примера слой может быть кодирован с использованием прогнозирования между слоями. Это позволяет кодировать текущий слой, включая только различия между текущим слоем и опорным слоем. Например, текущий слой и опорный слой могут содержать одну и ту же видеопоследовательность, кодированную путем изменения характеристики, такой как SNR, размер изображения, частота кадров и т.д. Некоторые системы видеокодирования выполнены с возможностью декодирования и вывода только самого верхнего кодированного слоя, обозначенного ID слоя, вместе с одним или более указанными более низкими слоями. Это может представлять проблему для масштабируемости, поскольку декодер может не желать декодировать самый верхний слой. Это приводит к ошибке при попытке масштабирования видео в таких системах. Это может быть серьезной проблемой, поскольку требование, чтобы декодеры всегда поддерживали самый верхний слой, приводит к тому, что система не может осуществлять масштабирование в промежуточные слои на основе различных требований к аппаратному обеспечению и сети.
[0029] Настоящий пример включает в себя механизм, который использует OLS для поддержки масштабируемости. Это включает в себя как пространственную масштабируемость, так и масштабируемость по SNR. В настоящем примере используется синтаксический элемент ols_mode_idc для использования в сочетании с OLS. Синтаксический элемент ols_mode_idc может содержаться в VPS и может быть установлен равным нулю для указания, что общее количество OLS в видеопоследовательности равно общему количеству слоев, указанных в VPS, что i-й OLS включает в себя слои от нулевого до i включительно, и что для каждого OLS выводится только самый верхний слой. Это поддерживает масштабируемость, поскольку декодер может быстро определить, что, например, третий OLS содержит нулевой - третий слои, и что третий слой следует декодировать на основе нулевого - второго слоев и выходных данных. Соответственно, декодер может принимать только слои, необходимые для декодирования принятого самого верхнего слоя, и принятый самый высокий слой может быть декодирован и отображен. Таким образом, общее количество кодированных слоев может не влиять на процесс декодирования, и можно избежать ошибки. Таким образом, раскрытые механизмы увеличивают функциональные возможности кодера и/или декодера. Кроме того, раскрытые механизмы могут уменьшать размер битового потока и, следовательно, уменьшать использование процессора, памяти и/или сетевых ресурсов как в кодере, так и в декодере. В конкретном варианте осуществления ols_mode_idc обеспечивает экономию битов в кодированных потоках битов, которые содержат множество OLS, между которыми совместно используется много данных, тем самым обеспечивая экономию на серверах обработки и обеспечивая экономию пропускной способности для передачи таких битовых потоков.
[0030] При необходимости, в любом из предыдущих аспектов предусмотрена другая реализация аспекта, в которой кодер дополнительно выполнен с возможностью выполнения способа по любому из предыдущих аспектов.
[0031] Для ясности любой из вышеупомянутых вариантов осуществления изобретения может быть объединен с любым одним или более другими вышеприведенными вариантами осуществления изобретения для создания нового варианта осуществления в пределах объема настоящего изобретения.
[0032] Эти и другие признаки будут более понятны из нижеследующего подробного описания, рассматриваемого вместе с сопровождающими чертежами и формулой изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0033] Для более полного понимания данного изобретения теперь обратимся на нижеследующему краткому описанию, рассматриваемому в связи с сопровождающими чертежами и подробным описанием, в которых аналогичные ссылочные позиции представляют аналогичные элементы.
[0034] Фиг. 1 - блок-схема примерного способа кодирования видеосигнала.
[0035] Фиг. 2 - принципиальная схема примерной системы кодирования и декодирования (кодека) для видеокодирования.
[0036] Фиг. 3 - принципиальная схема, иллюстрирующая примерный видеокодер.
[0037] Фиг. 4 - принципиальная схема, иллюстрирующая примерный видеодекодер.
[0038] Фиг. 5 - принципиальная схема, иллюстрирующая примерную видеопоследовательность с множеством слоев, выполненную с возможностью прогнозирования между слоями.
[0039] Фиг. 6 - принципиальная схема, иллюстрирующая примерную видеопоследовательность с OLS, конфигурированными для пространственной масштабируемости и/или масштабируемости по SNR.
[0040] Фиг. 7 - принципиальная схема, иллюстрирующая пример битового потока, включающего в себя OLS, конфигурированные для масштабируемости.
[0041] Фиг. 8 - принципиальная схема примерного устройства кодирования видео.
[0042] Фиг. 9 - блок-схема примерного способа кодирования видеопоследовательности с помощью OLS, конфигурированных для масштабируемости.
[0043] Фиг. 10 - блок-схема примерного способа декодирования видеопоследовательности, включающей в себя OLS, конфигурированный для масштабируемости.
[0044] Фиг. 11 - принципиальная схема примерной системы для кодирования видеопоследовательности с помощью OLS, конфигурированных для масштабируемости.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
[0045] Прежде всего следует понимать, что хотя ниже представлена иллюстративная реализация одного или более вариантов осуществления, раскрытые системы и/или способы могут быть реализованы с использованием любого числа технологий, известных в настоящее время или уже существующих. Изобретение никоим образом не должно быть ограничено иллюстративными реализациями, чертежами и технологиями, проиллюстрированными ниже, в том числе примерными конструкциями и реализациями, проиллюстрированными и описанными в настоящем документе, но может быть изменено в пределах объема прилагаемой формулы изобретения вместе с полным объемом ее эквивалентов.
[0046] Нижеследующие термины определяются следующим образом, если они не используются в данном документе в противоположном контексте. В частности, нижеследующие определения предназначены для обеспечения дополнительной ясности настоящего изобретения. Однако термины могут быть описаны различным образом в различных контекстах. Соответственно, нижеследующие определения следует рассматривать в качестве дополнения и не следует рассматривать их как ограничивающие любые другие определения в описании, приведенном в настоящем документе для таких терминов.
[0047] Битовый поток представляет собой последовательность битов, включающую в себя видеоданные, которые сжаты для передачи между кодером и декодером. Кодер представляет собой устройство, которое выполнено с возможностью использования процессов кодирования для сжатия видеоданных в битовый поток. Декодер представляет собой устройство, которое выполнено с возможностью использования процессов декодирования для восстановления видеоданных из битового потока. Изображение представляет собой массив выборок яркости и/или массив выборок цветности, которые образуют кадр или его поле. Для ясности описания изображение, которое кодируется или декодируется, может называться текущим изображением.
[0048] Блок слоя сетевой абстракции (NAL) представляет собой синтаксическую структуру, содержащую данные в форме полезной нагрузки необработанной последовательности байтов (RBSP), указание типа данных и при необходимости содержащую перемежающиеся байты предотвращения эмуляции. Блок NAL слоя кодирования видео (VCL) представляет собой блок NAL, кодированный таким образом, чтобы содержать видеоданные, такие как кодированную серию последовательных макроблоков изображения. Блок NAL, не относящийся к VCL, представляет собой блок NAL, который содержит данные, не относящиеся к видео, такие как синтаксис и/или параметры, которые поддерживают декодирование видеоданных, выполнение проверки соответствия или другие операции. Слой представляет собой набор блоков NAL VCL, которые имеют определенную характеристику (например, общее разрешение, частоту кадров, размер изображения и т.д.), и связанных блоков NAL, не относящихся к VCL. Блоки VCL NAL слоя могут совместно использовать конкретное значение идентификатора слоя заголовка блока NAL (nuh_layer_id). Кодированное изображение представляет собой кодированное представление изображения, состоящее из блоков NAL VCL с конкретным значением идентификатора слоя заголовка блока NAL (nuh_layer_id) в блоке доступа (AU), и содержащее все блоки дерева кодирования (CTU) изображения. Декодированное изображение представляет собой изображение, полученное путем применения процесса декодирования к кодированному изображению. Кодированная видеопоследовательность (CVS) представляет собой последовательность AU, которая включает в себя в порядке декодирования один или более AU начала кодированной видеопоследовательности (CVSS) и, при необходимости, еще один AU, который не является AU CVSS. AU CVSS представляет собой AU, включающий в себя блок прогнозирования (PU) для каждого слоя, указанного набором параметров видео (VPS), причем кодированное изображение в каждом PU является начальным изображением для видеопоследовательности CVS/кодированного слоя (CLVS).
[0049] Набор выходных слоев (OLS) представляет собой набор слоев, для которого один или более слоев указаны в качестве выходных слоев. Выходной слой представляет собой слой, предназначенный для вывода (например, на дисплей). Самый верхний слой представляет собой слой в OLS, который имеет самый большой идентификатор (ID) слоя среди всех слоев в OLS. В некоторых примерных режимах OLS самым верхним слоем всегда может быть выходной слой. Набор параметров видео (VPS) представляет собой блок данных, содержащий параметры, относящиеся ко всему видео. Прогнозирование между слоями представляет собой механизм кодирования текущего изображения в текущем слое посредством обращения к опорному изображению в опорном слое, причем текущее изображение и опорное изображение включены в один и тот же AU, а опорный слой включает в себя меньший nuh_layer_id, чем текущий слой.
[0050] Идентификационный код режима OLS (ols_mode_idc) представляет собой синтаксический элемент, который указывает информацию, относящуюся к количеству OLS, слоям OLS и выходным слоям в OLS. Максимальное количество слоев VPS минус один (vps_max_layers_minus1) представляет собой синтаксический элемент, который сигнализирует о количестве слоев, указанном VPS, и, следовательно, о максимальном количестве слоев, разрешенных в соответствующем CVS. Каждый слой является флагом OLS (each_layer_is_an_ols_flag) и представляет собой синтаксический элемент, который сигнализирует, содержит ли каждый OLS в битовом потоке один слой. Общее количество OLS (TotalNumOLss) представляет собой переменную, указывающую общее количество OLS, указанное VPS. Количество слоев в i-м OLS (NumLayersInOLS[i]) представляет собой переменную, которая указывает количество слоев в конкретном OLS, обозначаемом значением индекса OLS, равным i. Идентификатор слоя в OLS (LayerIdInOLS[i][j]) представляет собой переменную, которая определяет значение nuh_layer_id j-го слоя в i-м OLS, обозначаемое индексом слоя j и индексом OLS i. vps_layer_id[i] представляет собой синтаксический элемент, который указывает идентификатор слоя для i-го слоя.
[0051] В настоящем документе используются следующие аббревиатуры: блок дерева кодирования (CTB), единица дерева кодирования (CTU), блок кодирования (CU), кодированная видеопоследовательность (CVS), объединенная группа экспертов по видео (JVET), набор мозаичных элементов с ограничением движения (MCTS), максимальная единица передачи (MTU), слой абстракции сети (NAL), набор выходных слоев (OLS), подсчет порядка изображений (POC), полезная нагрузка последовательности необработанных байтов (RBSP), набор параметров последовательности (SPS), набор параметров видео (VPS), и универсальное кодирование видео (VVC).
[0052] Для уменьшения размера видеофайлов с минимальной потерей данных может использоваться множество технологий сжатия видео. Например, методы сжатия видео могут включать в себя выполнение пространственного (например, внутри изображения) и/или временного (например, между изображениями) прогнозирования для уменьшения или устранения избыточности данных в видеопоследовательностях. Для кодирования видео на основе блоков серия последовательных макроблоков видео (например, видеоизображение или часть видеоизображения) может быть разделена на видеоблоки, которые также могут называться блоками дерева, блоками дерева кодирования (CTB), единицами дерева кодирования (CTU), блоками кодирования (CU) и/или узлами кодирования. Видеоблоки в кодируемой внутри изображения (I) серии последовательных макроблоков изображения кодируются с использованием пространственного прогнозирования по отношению к опорным выборкам в соседних блоках в том же изображении. Видеоблоки в серии последовательных макроблоков изображения однонаправленного прогнозирования (P) или двунаправленного прогнозирования (B) с кодированием между изображениями могут кодироваться посредством использования пространственного прогнозирования по отношению к опорным выборкам в соседних блоках в том же изображении или временного прогнозирования по отношению к опорным выборкам в других опорных изображениях. Изображения могут называться кадрами и/или изображениями, а опорные изображения могут называться опорными кадрами и/или опорными изображениями. Результатом пространственного или временного прогнозирования является блок прогнозирования, представляющий блок изображения. Остаточные данные представляют собой разности пикселей между исходным блоком изображения и блоком прогнозирования. Соответственно, кодируемый между изображениями блок кодируется согласно вектору движения, который указывает на блок опорных выборок, образующих блок прогнозирования, и остаточным данным, указывающим разность между кодируемым блоком и блоком прогнозирования. Кодируемый внутри изображения блок кодируется согласно режиму кодирования внутри изображения и остаточным данным. Для дополнительного сжатия остаточные данные могут быть преобразованы из пиксельной области в область преобразования. Результатом этого являются остаточные коэффициенты преобразования, которые могут быть квантованы. Квантованные коэффициенты преобразования могут быть изначально размещены в двумерном массиве. Квантованные коэффициенты преобразования могут сканироваться для создания одномерного вектора коэффициентов преобразования. Для достижения еще большего сжатия может быть применено энтропийное кодирование. Такие технологии сжатия видео более подробно описаны ниже.
[0053] Для обеспечения того, что кодированное видео может быть точно декодировано, видео кодируется и декодируется согласно соответствующим стандартам кодирования видео. Стандарты кодирования видео включают в себя H.261 Сектора стандартизации (ITU-T) Международного союза электросвязи (ITU), Часть 2 Экспертной группы по движущимся изображениям (MPEG)-1 Международной организации по стандартизации/Международной электротехнической комиссии (ISO/IEC), H.262 ITU-T, или Часть 2 MPEG-2, ISO/IEC, H.263 ITU-T, Часть 2 ISO/IEC MPEG-4, Усовершенствованное кодирование видео (AVC) MPEG-4, также известное как H.264 ITU-T, или Часть 10 MPEG-4 ISO/IEC, и Высокоэффективное кодирование видео (HEVC), также известное как H.265 ITU-T, или Часть 2 MPEG-H. AVC включает в себя такие расширения, как Масштабируемое кодирование видео (SVC), Многоракурсное кодирование видео (MVC) и Многоракурсное кодирование видео плюс глубина (MVC+D), и трехмерное (3D) AVC (3D-AVC). HEVC включает такие расширения, как масштабируемое HEVC (SHVC), многоракурсное HEVC (MV-HEVC) и 3D HEVC (3D-HEVC). Совместная группа экспертов по видео (JVET) ITU-T и ISO/IEC приступила к разработке стандарта видеокодирования, называемого Универсальным видеокодированием (VVC). VVC включен в WD, который включает в себя JVET-O2001-v14.
[0054] Слои изображений могут использоваться для поддержки масштабируемости. Например, видео можно кодировать во множество слоев. Слой может быть кодирован без обращения к другим слоям. Такой слой называется слоем одновременной передачи. Соответственно, слой одновременной передачи может быть декодирован без обращения к другим слоям. В качестве другого примера, слой может быть кодирован с использованием прогнозирования между слоями. Это позволяет кодировать текущий слой, включая только различия между текущим слоем и опорным слоем. Например, текущий слой и опорный слой могут содержать одну и ту же видеопоследовательность, кодированную путем изменения характеристики, такой как отношение сигнала к шуму (SNR), размер изображения, частота кадров и т.д.
[0055] Некоторые системы видеокодирования выполнены с возможностью декодирования и вывода только самого верхнего кодированного слоя, обозначенного идентификатором (ID) слоя, вместе с одним или более указанными более низкими слоями. Это может представлять проблему для масштабируемости, поскольку декодер может не желать декодировать самый верхний слой. В частности, декодер обычно запрашивает самый верхний слой, который может поддерживать декодер, но обычно декодер не может декодировать слой, который выше запрошенного слоя. В качестве конкретного примера, декодер может желать принять и декодировать третий слой из пятнадцати кодированных слоев. Третий слой может быть отправлен в декодер без четвертого - пятнадцатого слоев, поскольку такие слои не нужны для декодирования третьего слоя. Но декодер может быть не в состоянии должным образом декодировать и отобразить третий слой, потому что самый верхний слой (слой пятнадцать) отсутствует, а видеосистеме предписано всегда декодировать и отображать самый верхний слой. Это приводит к ошибке при попытке масштабирования видео в таких системах. Это может быть серьезной проблемой, поскольку необходимость того, чтобы декодеры всегда поддерживали самый верхний слой, приводит к тому, что система не может осуществлять масштабирование до промежуточных слоев на основе различных требований к аппаратному обеспечению и сети.
[0056] В настоящем документе раскрыта система, которая использует для поддержки масштабируемости наборы выходных слоев (OLS). Это включает в себя как пространственную масштабируемость, так и масштабируемость по отношению сигнала к шуму (SNR). Пространственная масштабируемость позволяет кодировать видеопоследовательность в слои таким образом, что слои помещаются в OLS так, чтобы каждый OLS содержал достаточно данных для декодирования видеопоследовательности до соответствующего размера выходного экрана. Таким образом, пространственная масштабируемость может включать в себя набор слоев для декодирования видео для экрана смартфона, набор слоев для декодирования видео для большого экрана телевизора и наборы слоев для экрана средних размеров. Масштабируемость по SNR позволяет кодировать видеопоследовательность по слоям таким образом, чтобы слои помещались в OLS, чтобы каждый OLS содержал достаточно данных для декодирования видеопоследовательности с другим SNR. Таким образом, масштабируемость по SNR может включать в себя набор слоев, которые могут быть декодированы для видео низкого качества, видео высокого качества и различных промежуточных уровней качества видео в зависимости от сетевых условий. Настоящее изобретение использует синтаксический элемент кода идентификации режима OLS (ols_mode_idc) для использования вместе с OLS. Синтаксический элемент ols_mode_idc может содержаться в наборе параметров видео (VPS) и может быть установлен равным нулю для указания, что общее количество OLS в видеопоследовательности равно общему количеству слоев, указанных в VPS, что i-й OLS включает в себя слои от нуля до i включительно, и для каждого OLS выводится только самый верхний слой. Это поддерживает масштабируемость, поскольку декодер может быстро определить, что, например, третий OLS содержит нулевой - третий слои, и что третий слой следует декодировать на основе нулевого - второго слоев и выходных данных. Соответственно, декодер может принимать только слои, необходимые для декодирования принятого самого верхнего слоя, и принятый самый верхний слой может быть декодирован и отображен. Таким образом, общее количество кодированных слоев может не влиять на процесс декодирования, и можно избежать ошибки. Таким образом, раскрытые механизмы увеличивают функциональные возможности кодера и/или декодера. Кроме того, раскрытые механизмы могут уменьшать размер битового потока и, следовательно, уменьшать использование процессора, памяти и/или сетевых ресурсов как в кодере, так и в декодере.
[0057] Фиг. 1 представляет собой блок-схему примерного рабочего способа 100 кодирования видеосигнала. В частности, в кодере кодируется видеосигнал. Процесс кодирования сжимает видеосигнал, используя различные механизмы для уменьшения размера видеофайла. Меньший размер файла позволяет передавать сжатый видеофайл пользователю, уменьшая при этом связанное с этим потребление ресурсов полосы пропускания. Затем декодер декодирует сжатый видеофайл для восстановления исходного видеосигнала для отображения конечному пользователю. Процесс декодирования как правило является зеркальным отражением процесса кодирования, что позволяет декодеру последовательно восстанавливать видеосигнал.
[0058] На этапе 101 видеосигнал вводится в кодер. Например, видеосигнал может представлять собой несжатый видеофайл, сохраненный в памяти. В качестве другого примера, видеофайл может быть захвачен устройством захвата видео, таким как видеокамера, и кодирован для поддержки потоковой передачи видео в режиме реального времени. Видеофайл может включать в себя как аудиокомпонент, так и видеокомпонент.Видеокомпонент содержит последовательность кадров изображений, которые при последовательном просмотре создают визуальное впечатление движения. Кадры содержат пиксели, которые выражены с точки зрения света, что называется в данном документе компонентами яркости (или выборками яркости), и цвета, что называется компонентами цветности (или выборками цветности). В некоторых примерах кадры могут также содержать значения глубины для поддержки трехмерного просмотра.
[0059] На этапе 103 видео разделяется на блоки. Разделение включает в себя подразделение пикселей в каждом кадре на квадратные и/или прямоугольные блоки для сжатия. Например, при высокоэффективном кодировании видео (HEVC, High Efficiency Video Coding) (также известном как H.265 и Часть 2 MPEG-H) кадр может быть сначала разделен на единицы дерева кодирования (CTU), которые представляют собой блоки заданного размера (например, шестьдесят четыре пикселя на шестьдесят четыре пикселя). CTU содержат выборки как яркости, так и цветности. Могут использоваться деревья кодирования для разделения CTU на блоки и последующего рекурсивного подразделения блоков до тех пор, пока не будут достигнуты конфигурации, которые поддерживают дальнейшее кодирование. Например, компоненты яркости кадра могут подразделяться до тех пор, пока отдельные блоки не будут содержать относительно однородные значения освещения. Кроме того, компоненты цветности кадра могут подразделяться до тех пор, пока отдельные блоки не будут содержать относительно однородные значения цвета. Соответственно, механизмы разделения различаются в зависимости от содержимого видеокадров.
[0060] На этапе 105 используются различные механизмы сжатия для сжатия блоков изображения, полученных разделением на этапе 103. Например, может быть использовано прогнозирование между изображениями и/или прогнозирование внутри изображения. Прогнозирование между изображениями предназначено для получения преимущества от того факта, что объекты в общей сцене имеют тенденцию появляться в последовательных кадрах. Соответственно, блок, представляющий объект в опорном кадре, не нужно повторно описывать в смежных кадрах. Более конкретно, объект, такой как стол, может оставаться в постоянном положении в течение множества кадров. Следовательно, стол описан один раз, и смежные кадры могут вновь обращаться к опорному кадру. Для сопоставления объектов во множестве кадров могут использоваться механизмы сопоставления образов. Кроме того, движущиеся объекты могут быть представлены во множестве кадров, например, из-за движения объекта или движения камеры. В качестве конкретного примера, видео может показывать автомобиль, который движется по экрану в течение множества кадров. Для описания такого движения могут быть использованы векторы движения. Вектор движения представляет собой двумерный вектор, который обеспечивает смещение из координат объекта в кадре в координаты объекта в опорном кадре. Таким образом, прогнозирование между изображениями может кодировать блок изображения в текущем кадре в виде набора векторов движения, указывающих смещение от соответствующего блока в опорном кадре.
[0061] Прогнозирование внутри изображения кодирует блоки в общем кадре. Прогнозирование внутри изображения получает преимущество от того факта, что компоненты яркости и цветности имеют тенденцию к кластеризации в кадре. Например, фрагмент зелени на участке дерева имеет тенденцию располагаться рядом с аналогичными фрагментами зелени. Прогнозирование внутри изображения использует множество направленных режимов прогнозирования (например, тридцать три в HEVC), планарный режим и режим постоянного тока (DC). Направленные режимы указывают, что текущий блок является аналогичным/одинаковым с выборками соседнего блока в соответствующем направлении. Планарный режим указывает, что последовательность блоков вдоль строки/столбца (например, плоскости) может быть интерполирована на основе соседних блоков на краях строки. Планарный режим по существу указывает на плавный переход света/цвета по строке/столбцу, используя относительно постоянный наклон при изменении значений. Режим DC используется для сглаживания границ и указывает, что блок является аналогичным/одинаковым со средним значением, ассоциированным с выборками всех соседних блоков, ассоциированных с угловыми направлениями направленных режимов прогнозирования. Соответственно, блоки прогнозирования внутри изображения могут представлять блоки изображения в виде значений различных реляционных режимов прогнозирования вместо фактических значений. Кроме того, блоки прогнозирования между изображениями могут представлять блоки изображения в виде значений векторов движения вместо фактических значений. В любом случае в некоторых случаях блоки прогнозирования могут не точно представлять блоки изображения. Любые различия сохраняются в остаточных блоках. Для дальнейшего сжатия файла к остаточным блокам могут быть применены преобразования.
[0062] На этапе 107 могут применяться различные технологии фильтрации. В HEVC фильтры применяются по схеме фильтрации внутри цикла. Основанное на блоках прогнозирование, рассмотренное выше, может привести к формированию в декодере ступенчатых изображений. Кроме того, схема основанного на блоках прогнозирования может кодировать блок, а затем восстановить кодированный блок для последующего использования в качестве опорного блока. Схема фильтрации внутри цикла итеративно применяет к блокам/кадрам фильтры шумоподавления, фильтры деблокирования, адаптивные циклические фильтры и фильтры адаптивного к выборке смещения (SAO). Эти фильтры смягчают такие артефакты блочности, чтобы можно было точно восстановить кодированный файл. Кроме того, эти фильтры смягчают артефакты в восстановленных опорных блоках, так что артефакты с меньшей вероятностью создают дополнительные артефакты в последующих блоках, которые кодируются на основе этих восстановленных опорных блоков.
[0063] После разделения, сжатия и фильтрации видеосигнала полученные данные кодируются в битовый поток на этапе 109. Битовый поток включает в себя данные, рассмотренные выше, а также любые данные сигнализации, необходимые для поддержки надлежащего восстановления видеосигнала в декодере. Например, такие данные могут включать в себя данные разделения, данные прогнозирования, остаточные блоки и различные флаги, обеспечивающие декодеру инструкции по кодированию. Битовый поток может быть сохранен в памяти для передачи на декодер по запросу. Также битовый поток может широковещательно и/или многоадресно передаваться на множество декодеров. Создание битового потока является итеративным процессом. Соответственно, этапы 101, 103, 105, 107 и 109 могут осуществляться непрерывно и/или одновременно в отношении множества кадров и блоков. Порядок, показанный на Фиг. 1, представлен для ясности и простоты описания и не предназначен для ограничения процесса кодирования видео определенным порядком.
[0064] Декодер принимает битовый поток и начинает процесс декодирования на этапе 111. В частности, декодер использует схему энтропийного декодирования для преобразования битового потока в соответствующие синтаксические данные и видеоданные. Декодер использует синтаксические данные из битового потока для определения разделов для кадров на этапе 111. Разделение должно совпадать с результатами разделения на блоки на этапе 103. Теперь будет описано энтропийное кодирование, используемое на этапе 111. Во время процесса сжатия кодер принимает множество решений, например выбирает схемы разделения на блоки из множества возможных вариантов на основе пространственного расположения значений во входном изображении(ях). Для сигнализации точных выборов может использоваться большое число элементов разрешения. В контексте данного документа, элемент разрешения представляет собой двоичное значение, которое рассматривается как переменная (например, битовое значение, которое может изменяться в зависимости от контекста). Энтропийное кодирование позволяет кодеру отбрасывать любые варианты, которые явно не подходят для конкретного случая, оставляя набор допустимых вариантов. Затем каждому допустимому варианту назначается кодовое слово. Длина кодовых слов основана на числе допустимых вариантов (например, один элемент разрешения для двух вариантов, два элемента разрешения для трех-четырех вариантов и т.д.). Затем кодер кодирует кодовое слово для выбранного варианта. Эта схема уменьшает размер кодовых слов, поскольку кодовые слова настолько велики, насколько это необходимо, чтобы однозначным образом указывать выбор из небольшого поднабора допустимых вариантов, в отличие от однозначного указания выбора из потенциально большого набора из всех возможных вариантов. Затем декодер декодирует выбор, определяя набор допустимых вариантов аналогично кодеру. Посредством определения набора допустимых вариантов декодер может считывать кодовое слово и определять выбор, сделанный кодером.
[0065] На этапе 113 декодер выполняет декодирование блоков. Более конкретно, декодер применяет обратные преобразования для формирования остаточных блоков. Затем декодер применяет остаточные блоки и соответствующие блоки прогнозирования для восстановления блоков изображения согласно разделению. Блоки прогнозирования могут включать в себя как блоки прогнозирования внутри изображения, так и блоки прогнозирования между изображениями, формируемые кодером на этапе 105. Затем восстановленные блоки изображения размещаются в кадры восстанавливаемого видеосигнала согласно данным разделения, определенным на этапе 111. Синтаксис для этапа 113 также может сигнализироваться в битовом потоке посредством энтропийного кодирования, как описано выше.
[0066] На этапе 115 для кадров восстановленного видеосигнала выполняется фильтрация способом, аналогичным этапу 107 в кодере. Например, к кадрам могут быть применены фильтры шумоподавления, фильтры деблокирования, адаптивные циклические фильтры и фильтры SAO для удаления артефактов блочности. После фильтрации кадров видеосигнал может выводиться на дисплей на этапе 117 для просмотра конечным пользователем.
[0067] Фиг. 2 представляет собой схематичное представление примерной системы 200 кодирования и декодирования (кодека) для кодирования видео. В частности, система 200 кодека обеспечивает функциональные возможности для поддержки реализации рабочего способа 100. Система 200 кодека обобщена таким образом, чтобы представить компоненты, применяемые как в кодере, так и в декодере. Система 200 кодека принимает и разделяет видеосигнал, как описано в отношении этапов 101 и 103 в рабочем способе 100, в результате чего получается разделенный видеосигнал 201. Затем система 200 кодека сжимает разделенный видеосигнал 201 в кодированный битовый поток, действуя в качестве кодера, как описано в отношении этапов 105, 107 и 109 в способе 100. Действуя в качестве декодера, система 200 кодека формирует выходной видеосигнал из битового потока, как описано в отношении этапов 111, 113, 115 и 117 в рабочем способе 100. Система 200 кодека включает в себя компонент 211 общего управления кодером, компонент 213 масштабирования и квантования преобразования, компонент 215 оценки внутри изображения, компонент 217 прогнозирования внутри изображения, компонент 219 компенсации движения, компонент 221 оценки движения, компонент 229 масштабирования и обратного преобразования, компонент 227 анализа для управления фильтрами, компонент 225 фильтров внутри цикла, компонент 223 буфера декодированных изображений и компонент 231 форматирования заголовка и контекстно-адаптивного двоичного арифметического кодирования (CABAC). Такие компоненты соединены, как показано. На Фиг. 2 сплошные линии указывают перемещение данных, подлежащих кодированию, а пунктирные линии указывают перемещение управляющих данных, которые управляют работой других компонентов. В кодере могут присутствовать все компоненты системы 200 кодека. Декодер может включать в себя поднабор компонентов системы 200 кодека. Например, декодер может включать в себя компонент 217 прогнозирования внутри изображения, компонент 219 компенсации движения, компонент 229 масштабирования и обратного преобразования, компонент 225 фильтров внутри цикла и компонент 223 буфера декодированных изображений. Теперь будут описаны эти компоненты.
[0068] Разделенный видеосигнал 201 представляет собой захваченную видеопоследовательность, которая была разделена на блоки пикселей посредством дерева кодирования. Дерево кодирования использует различные режимы разбиения для подразделения блока пикселей на более мелкие блоки пикселей. Затем эти блоки могут быть дополнительно подразделены на более мелкие блоки. Блоки могут называться узлами в дереве кодирования. Более крупные родительские узлы разбиваются на более мелкие дочерние узлы. Число раз, которое подразделяется узел, называется глубиной узла/дерева кодирования. Полученные разделением блоки в некоторых случаях могут быть включены в единицы кодирования (CU). Например, CU может быть частью CTU, которая содержит блок яркости, блок(-и) разности цветности красного (Cr) и блок(-и) разности цветности синего (Cb) вместе с соответствующими синтаксическими инструкциями для CU. Режимы разбиения могут включать двоичное дерево (BT), троичное дерево (TT) и квадратичное дерево (QT), используемые для разделения узла на два, три или четыре дочерних узла, соответственно, имеющих различные формы в зависимости от используемых режимов разбиения. Разделенный видеосигнал 201 перенаправляется в компонент 211 общего управления кодером, компонент 213 масштабирования и квантования преобразования, компонент 215 оценки внутри изображения, компонент 227 анализа для управления фильтрами и компонент 221 оценки движения для сжатия.
[0069] Компонент 211 общего управления кодером выполнен с возможностью принятия решений, связанных с кодированием изображений видеопоследовательности в битовый поток в соответствии с ограничениями по применению. Например, компонент 211 общего управления кодером управляет оптимизацией скорости передачи битов/размера битового потока в зависимости от качества восстановления. Такие решения могут приниматься на основе доступности пространства хранения/полосы пропускания и запросов в отношении разрешения изображения. Компонент 211 общего управления кодером также управляет использованием буфера с учетом скорости передачи, чтобы смягчить проблемы недостаточного заполнения и переполнения буфера. Чтобы справиться с этими проблемами, компонент 211 общего управления кодером управляет разделением, прогнозированием и фильтрацией посредством других компонентов. Например, компонент 211 общего управления кодером может динамически повышать сложность сжатия для увеличения разрешения и увеличения использования полосы пропускания или снижать сложность сжатия для уменьшения разрешения и использования полосы пропускания. Следовательно, компонент 211 общего управления кодером управляет другими компонентами системы 200 кодека, обеспечивая баланс между качеством восстановления видеосигнала и вопросами скорости передачи битов. Компонент 211 общего управления кодером создает управляющие данные, которые управляют работой других компонентов. Управляющие данные также перенаправляются в компонент 231 форматирования заголовка и CABAC для их кодирования в битовом потоке, чтобы сигнализировать параметры для декодирования в декодере.
[0070] Разделенный видеосигнал 201 также отправляется в компонент 221 оценки движения и компонент 219 компенсации движения для прогнозирования между изображениями. Кадр или серия последовательных макроблоков разделенного видеосигнала 201 могут быть разбиты на множество видеоблоков. Компонент 221 оценки движения и компонент 219 компенсации движения выполняют кодирование с прогнозированием между изображениями для принятого видеоблока относительно одного или более блоков в одном или более опорных кадрах для обеспечения временного прогнозирования. Система 200 кодека может выполнять множество проходов кодирования, например, для выбора надлежащего режима кодирования для каждого блока видеоданных.
[0071] Компонент 221 оценки движения и компонент 219 компенсации движения могут быть в высокой степени интегрированы, но они проиллюстрированы по отдельности в концептуальных целях. Оценка движения, выполняемая компонентом 221 оценки движения, представляет собой процесс формирования векторов движения, которые оценивают движение для видеоблоков. Вектор движения, например, может указать смещение кодируемого объекта относительно блока прогнозирования. Блок прогнозирования является блоком, для которого обнаружено, что он точно соответствует блоку, который подлежит кодированию, с точки зрения разности пикселей. Блок прогнозирования также может называться опорным блоком. Такая разность пикселей может быть определена суммой абсолютных разностей (SAD), суммой квадратов разностей (SSD) или другими показателями разности. HEVC использует несколько кодируемых объектов, включая CTU, блоки дерева кодирования (CTB) и CU. Например, CTU можно разбить на CTB, которые затем можно разбить на CB для включения в CU. CU может быть кодирована как блок прогнозирования (PU), содержащий данные прогнозирования, и/или блок преобразования (TU), содержащий преобразованные остаточные данные для CU. Компонент 221 оценки движения формирует векторы движения, PU и TU с использованием анализа по скорости и искажению в рамках процесса оптимизации по скорости и искажению. Например, компонент 221 оценки движения может определять множество опорных блоков, множество векторов движения и т.д. для текущего блока/кадра и может выбирать опорные блоки, векторы движения и т.д., имеющие наилучшие характеристики по скорости и искажению. Наилучшие характеристики по скорости и искажению обеспечивают баланс качества восстановления видео (например, объем потерь данных при сжатии) с эффективностью кодирования (например, размер окончательного кодирования).
[0072] В некоторых примерах система 200 кодека может вычислять значения для субцелочисленных положений пикселей опорных изображений, сохраненных в компоненте 223 буфера декодированных изображений. Например, система 200 кодека может интерполировать значения положений в одну четверть пикселя, положений в одну восьмую пикселя или других дробных положений пикселей опорного изображения. Следовательно, компонент 221 оценки движения может выполнять поиск движения относительно полных положений пикселей и дробных положений пикселей и выводить вектор движения с точностью до дробных пикселей. Компонент 221 оценки движения вычисляет вектор движения для PU видеоблока в кодируемой между изображениями серии последовательных макроблоков путем сравнения положения PU с положением блока прогнозирования опорного изображения. Компонент 221 оценки движения выводит вычисленный вектор движения в качестве данных движения в компонент 231 форматирования заголовка и CABAC для кодирования и в качестве движения для компонента 219 компенсации движения.
[0073] Компенсация движения, выполняемая компонентом 219 компенсации движения, может включать в себя получение или формирование блока прогнозирования на основе вектора движения, определенного компонентом 221 оценки движения. Опять же, в некоторых примерах компонент 221 оценки движения и компонент 219 компенсации движения могут быть функционально объединены. После приема вектора движения для PU текущего блока видео компонент 219 компенсации движения может находить блок прогнозирования, на который указывает вектор движения. Затем формируется остаточный видеоблок путем вычитания значений пикселей блока прогнозирования из значений пикселей текущего кодируемого видеоблока, таким образом формируя значения разности пикселей. В общем случае компонент 221 оценки движения выполняет оценку движения относительно компонентов яркости, а компонент 219 компенсации движения использует векторы движения, вычисленные на основе компонентов яркости, как для компонентов цветности, так и для компонентов яркости. Блок прогнозирования и остаточный блок перенаправляются в компонент 213 масштабирования и квантования преобразования.
[0074] Разделенный видеосигнал 201 также отправляется в компонент 215 оценки внутри изображения и компонент 217 прогнозирования внутри изображения. Как и в случае с компонентом 221 оценки движения и компонентом 219 компенсации движения, компонент 215 оценки внутри изображения и компонент 217 прогнозирования внутри изображения могут быть в высокой степени объединены, но в концептуальных целях они проиллюстрированы отдельно. Компонент 215 оценки внутри изображения и компонент 217 прогнозирования внутри изображения осуществляют прогнозирование внутри изображения для текущего блока относительно блоков в текущем кадре, в качестве альтернативы прогнозированию между изображениями, выполняемому компонентом 221 оценки движения и компонентом 219 компенсации движения между кадрами, как описано выше. В частности, компонент 215 оценки внутри изображения определяет режим прогнозирования внутри изображения для использования для кодирования текущего блока. В некоторых примерах компонент 215 оценки внутри изображения выбирает надлежащий режим прогнозирования внутри изображения для кодирования текущего блока из множества проверяемых режимов прогнозирования внутри изображения. Выбранные режимы прогнозирования внутри изображения затем перенаправляются в компонент 231 форматирования заголовка и CABAC для кодирования.
[0075] Например, компонент 215 оценки внутри изображения вычисляет значения скорости и искажения, используя анализ по скорости и искажению для различных испытываемых режимов прогнозирования внутри изображения, и выбирает режим прогнозирования внутри изображения, имеющий лучшие характеристики скоростного искажения среди испытываемых режимов. Анализ по скорости и искажению обычно определяет величину искажения (или ошибки) между кодированным блоком и исходным некодированным блоком, который был кодирован для получения упомянутого кодированного блока, а также скорость передачи битов (например, число битов), используемую для получения упомянутого кодированного блока. Компонент 215 оценки внутри изображения вычисляет отношения по искажению и скорости для различных кодированных блоков для определения, какой режим прогнозирования внутри изображения демонстрирует наилучшее значение скорости и искажения для блока. Кроме того, компонент 215 оценки внутри изображения может быть выполнен с возможностью кодирования блоков глубины карты глубины с использованием режима моделирования глубины (DMM) на основе оптимизации по скорости и искажению (RDO).
[0076] Компонент 217 прогнозирования внутри изображения может формировать остаточный блок из блока прогнозирования на основе выбранных режимов прогнозирования внутри изображения, определенных компонентом 215 оценки внутри изображения, если он реализован в кодере, или считывать остаточный блок из битового потока, если он реализован в декодере. Остаточный блок включает в себя разность значений между блоком прогнозирования и исходным блоком, представленную в виде матрицы. Затем остаточный блок перенаправляется в компонент 213 масштабирования и квантования преобразования. Компонент 215 оценки внутри изображения и компонент 217 прогнозирования внутри изображения могут работать как над компонентами яркости, так и над компонентами цветности.
[0077] Компонент 213 масштабирования и квантования преобразования выполнен с возможностью дополнительного сжатия остаточного блока. Компонент 213 масштабирования и квантования преобразования применяет к остаточному блоку преобразование, такое как дискретное косинусное преобразование (DCT), дискретное синусное преобразование (DST) или концептуально аналогичное преобразование, создавая видеоблок, содержащий остаточные значения коэффициентов преобразования. Также могут быть использованы вейвлет-преобразования, целочисленные преобразования, преобразования поддиапазонов или другие типы преобразований. Преобразование может переводить остаточную информацию из области значений пикселей в область преобразования, такую как частотная область. Компонент 213 масштабирования и квантования преобразования также выполнен с возможностью обеспечения масштабируемости преобразованной остаточной информации, например на основе частоты. Такое масштабирование включает в себя применение к остаточной информации коэффициента масштабирования таким образом, что информация разных частот квантуется с разными степенями детализации, что может повлиять на конечное визуальное качество восстановленного видео. Компонент 213 масштабирования и квантования преобразования также выполнен с возможностью квантования коэффициентов преобразования для дальнейшего снижения скорости передачи битов. Процесс квантования может уменьшать битовую глубину, связанную с некоторыми или всеми коэффициентами. Степень квантования может быть изменена посредством регулирования параметра квантования. В некоторых примерах компонент 213 масштабирования и квантования преобразования может далее выполнять сканирование матрицы, включающей в себя квантованные коэффициенты преобразования. Квантованные коэффициенты преобразования перенаправляются в компонент 231 форматирования заголовка и CABAC для кодирования в битовый поток.
[0078] Компонент 229 масштабирования и обратного преобразования применяет операцию, обратную по отношению к операции компонента 213 масштабирования и квантования преобразования для поддержки оценки движения. Компонент 229 масштабирования и обратного преобразования применяет обратное масштабирование, преобразование и/или квантование для восстановления остаточного блока в пиксельной области, например, для последующего использования в качестве опорного блока, который может стать блоком прогнозирования для другого текущего блока. Компонент 221 оценки движения и/или компонент 219 компенсации движения могут вычислять опорный блок путем прибавления остаточного блока обратно к соответствующему блоку прогнозирования для использования при оценке движения более позднего блока/кадра. К восстановленным опорным блокам применяются фильтры для смягчения артефактов, создаваемых при масштабировании, квантовании и преобразовании. Иначе такие артефакты могли бы вызвать неточное прогнозирование (и создать дополнительные артефакты) при прогнозировании последующих блоков.
[0079] Компонент 227 анализа для управления фильтрами и компонент 225 фильтров внутри цикла применяют фильтры к остаточным блокам и/или к восстановленным блокам изображения. Например, преобразованный остаточный блок из компонента 229 масштабирования и обратного преобразования может быть объединен с соответствующим блоком прогнозирования из компонента 217 прогнозирования внутри изображения и/или компонента 219 компенсации движения для восстановления исходного блока изображения. Затем к восстановленному блоку изображения могут быть применены фильтры. В некоторых примерах фильтры могут быть применены к остаточным блокам. Как и в случае с другими компонентами на Фиг. 2, компонент 227 анализа для управления фильтрами и компонент 225 фильтров внутри цикла в высокой степени объединены и могут быть реализованы вместе, но представлены по отдельности в концептуальных целях. Фильтры, применяемые к восстановленным опорным блокам, применяются к определенным пространственным областям и включают в себя множество параметров для регулирования того, как применяются такие фильтры. Компонент 227 анализа для управления фильтрами анализирует восстановленные опорные блоки для определения того, где должны применяться такие фильтры, и устанавливает соответствующие параметры. Такие данные перенаправляются в компонент 231 форматирования заголовка и CABAC в качестве данных управления фильтром для кодирования. Компонент 225 фильтров внутри цикла применяет такие фильтры на основе данных управления фильтром. Фильтры могут включать в себя деблокирующий фильтр, фильтр шумоподавления, фильтр SAO и адаптивный циклический фильтр. Такие фильтры могут применяться в пространственной/пиксельной области (например, к восстановленному блоку пикселей) или в частотной области, в зависимости от примера.
[0080] При работе в качестве кодера фильтрованный восстановленный блок изображения, остаточный блок и/или блок прогнозирования сохраняются в компоненте 223 буфера декодированных изображений для последующего использования при оценке движения, как описано выше. При работе в качестве декодера компонент 223 буфера декодированных изображений сохраняет и перенаправляет восстановленные и фильтрованные блоки на дисплей в качестве части выводимого видеосигнала. Компонент 223 буфера декодированных изображений может представлять собой любое запоминающее устройство, способное сохранять блоки прогнозирования, остаточные блоки и/или восстановленные блоки изображения.
[0081] Компонент 231 форматирования заголовка и CABAC принимает данные от различных компонентов системы 200 кодека и кодирует такие данные в кодированный битовый поток для передачи на декодер. В частности, компонент 231 форматирования заголовка и CABAC формирует различные заголовки для кодирования управляющих данных, таких как общие управляющие данные и данные управления фильтром. Кроме того, все из данных прогнозирования, включающих в себя данные движения и прогнозирования внутри изображения, а также остаточных данных в форме данных квантованных коэффициентов преобразования, кодируются в битовом потоке. Окончательный битовый поток включает в себя всю информацию, необходимую декодеру для восстановления исходного разделенного видеосигнала 201. Такая информация может также включать в себя таблицы индексов режимов прогнозирования внутри изображения (также называемые таблицами отображения кодовых слов), определения контекстов кодирования для различных блоков, указания наиболее вероятных режимов прогнозирования внутри изображения, указание информации разделения и т.д. Такие данные могут быть кодированы с использованием энтропийного кодирования. Например, информация может быть кодирована с использованием контекстно-адаптивного кодирования с переменной длиной (CAVLC), CABAC, основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), энтропийного кодирования с вероятностным интервалом разделения (PIPE) или другой технологии энтропийного кодирования. После энтропийного кодирования кодированный битовый поток может быть передан на устройство (например, видеодекодер) или архивирован для последующей передачи или извлечения.
[0082] Фиг. 3 представляет собой блок-схему, иллюстрирующую примерный видеокодер 300. Видеокодер 300 может использоваться для реализации функций кодирования системы 200 кодека и/или реализации этапов 101, 103, 105, 107 и/или 109 рабочего способа 100. Кодер 300 разделяет входной видеосигнал, в результате чего получается разделенный видеосигнал 301, который по существу аналогичен разделенному видеосигналу 201. Затем разделенный видеосигнал 301 сжимается и кодируется в битовый поток компонентами кодера 300.
[0083] В частности, разделенный видеосигнал 301 перенаправляется в компонент 317 прогнозирования внутри изображения для прогнозирования внутри изображения. Компонент 317 прогнозирования внутри изображения может быть по существу аналогичен компоненту 215 оценки внутри изображения и компоненту 217 прогнозирования внутри изображения. Разделенный видеосигнал 301 также перенаправляется в компонент 321 компенсации движения для прогнозирования между изображениями на основе опорных блоков в компоненте 323 буфера декодированных изображений. Компонент 321 компенсации движения может быть по существу аналогичен компоненту 221 оценки движения и компоненту 219 компенсации движения. Блоки прогнозирования и остаточные блоки из компонента 317 прогнозирования внутри изображения и компонента 321 компенсации движения перенаправляются в компонент 313 преобразования и квантования для преобразования и квантования остаточных блоков. Компонент 313 преобразования и квантования может быть по существу аналогичен компоненту 213 масштабирования и квантования преобразования. Преобразованные и квантованные остаточные блоки и соответствующие блоки прогнозирования (вместе со связанными управляющими данными) перенаправляются в компонент 331 энтропийного кодирования для кодирования в битовый поток. Компонент 331 энтропийного кодирования может быть по существу аналогичен компоненту 231 форматирования заголовка и CABAC.
[0084] Преобразованные и квантованные остаточные блоки и/или соответствующие блоки прогнозирования также перенаправляются из компонента 313 преобразования и квантования в компонент 329 обратного преобразования и квантования для восстановления в опорные блоки для использования компонентом 321 компенсации движения. Компонент 329 обратного преобразования и квантования может быть по существу аналогичен компоненту 229 масштабирования и обратного преобразования. Фильтры внутри цикла в компоненте 325 фильтров внутри цикла также применяются к остаточным блокам и/или восстановленным опорным блокам, в зависимости от примера. Компонент 325 фильтров внутри цикла может быть по существу аналогичен компоненту 227 анализа для управления фильтрами и компоненту 225 фильтров внутри цикла. Компонент 325 фильтров внутри цикла может включать в себя множество фильтров, как описано в отношении компонента 225 фильтров внутри цикла. Затем отфильтрованные блоки сохраняются в компоненте 323 буфера декодированных изображений для использования в качестве опорных блоков компонентом 321 компенсации движения. Компонент 323 буфера декодированных изображений может быть по существу аналогичен компоненту 223 буфера декодированных изображений.
[0085] Фиг. 4 представляет собой блок-схему, иллюстрирующую примерный видеодекодер 400. Видеодекодер 400 может использоваться для реализации функций декодирования системы 200 кодека и/или реализации этапов 111, 113, 115, и/или 117 рабочего способа 100. Декодер 400 принимает битовый поток, например, от кодера 300, и формирует реконструированный выходной видеосигнал на основе битового потока для отображения конечному пользователю.
[0086] Битовый поток принимается компонентом 433 энтропийного декодирования. Компонент 433 энтропийного декодирования выполнен с возможностью реализации схемы энтропийного декодирования, такой как декодирование CAVLC, CABAC, SBAC, PIPE или другие технологии энтропийного декодирования. Например, компонент 433 энтропийного декодирования может использовать информацию заголовка для обеспечения контекста для интерпретации дополнительных данных, кодированных как кодовые слова в битовом потоке. Декодированная информация включает в себя любую информацию, требуемую для декодирования видеосигнала, такую как общие управляющие данные, данные управления фильтром, информация разделения, данные движения, данные прогнозирования и квантованные коэффициенты преобразования из остаточных блоков. Квантованные коэффициенты преобразования перенаправляются в компонент 429 обратного преобразования и квантования для восстановления в остаточные блоки. Компонент 429 обратного преобразования и квантования может быть аналогичен компоненту 329 обратного преобразования и квантования.
[0087] Восстановленные остаточные блоки и/или блоки прогнозирования перенаправляются в компонент 417 прогнозирования внутри изображения для восстановления в блоки изображения на основе операций прогнозирования внутри изображения. Компонент 417 прогнозирования внутри изображения может быть по существу аналогичен компоненту 215 оценки внутри изображения и компоненту 217 прогнозирования внутри изображения. В частности, компонент 417 прогнозирования внутри изображения использует режимы прогнозирования для установления положения опорного блока в кадре и применяет остаточный блок к результату для восстановления блоков изображения с прогнозированием внутри изображения. Восстановленные блоки изображения с прогнозированием внутри изображения и/или остаточные блоки и соответствующие данные прогнозирования между изображениями перенаправляются в компонент 423 буфера декодированных изображений через компонент 425 фильтров внутри цикла, которые могут быть по существу аналогичны компоненту 223 буфера декодированных изображений и компоненту 225 фильтров внутри цикла, соответственно. Компонент 425 фильтров внутри цикла фильтрует восстановленные блоки изображения, остаточные блоки и/или блоки прогнозирования, и такая информация сохраняется в компоненте 423 буфера декодированных изображений. Восстановленные блоки изображения из компонента 423 буфера декодированных изображений перенаправляются в компонент 421 компенсации движения для прогнозирования между изображениями. Компонент 421 компенсации движения может быть по существу аналогичен компоненту 221 оценки движения и/или компоненту 219 компенсации движения. В частности, компонент 421 компенсации движения использует векторы движения из опорного блока для формирования блока прогнозирования и применяет остаточный блок к результату для восстановления блока изображения. Получаемые в результате восстановленные блоки также можно перенаправить через компонент 425 фильтров внутри цикла в компонент 423 буфера декодированных изображений. Компонент 423 буфера декодированных изображений продолжает сохранять дополнительные восстановленные блоки изображения, которые могут быть восстановлены в кадры посредством информации разделения. Такие кадры также могут быть помещены в последовательность. Последовательность выводится на дисплей в виде восстановленного выходного видеосигнала.
[0088] Фиг. 5 представляет собой схематичное представление, иллюстрирующее примерную многослойную видеопоследовательность 500, выполненную с возможностью прогнозирования 521 между слоями. Многослойная видеопоследовательность 500 может кодироваться кодером, таким как система 200 кодека и/или кодер 300, и декодироваться декодером, таким как система 200 кодека и/или декодер 400, например, в соответствии со способом 100. Многослойная видеопоследовательность 500 включена для изображения примерного применения слоев в кодированной видеопоследовательности. Многоуровневая видеопоследовательность 500 представляет собой любую видеопоследовательность, которая использует множество слоев, таких как слой N 531 и слой N+1 532.
[0089] Например, многослойная видеопоследовательность 500 может использовать прогнозирование 521 между слоями. Прогнозирование 521 между слоями применяется между изображениями 511, 512, 513 и 514 и изображениями 515, 516, 517 и 518 в разных слоях. В показанном примере изображения 511, 512, 513 и 514 являются частью слоя 532 N+1, а изображения 515, 516, 517 и 518 являются частью слоя 531 N. Слой, такой как слой 531 N и/или слой 532 N+1, представляет собой группу изображений, все из которых связаны с аналогичным значением характеристики, такой как аналогичный размер, качество, разрешение, отношение сигнала к шуму, возможности и т.п.Слой может быть формально определен как набор блоков NAL VCL и связанных блоков NAL, не относящихся к VCL, которые совместно используют один и тот же nuh_layer_id. Блок NAL VCL представляет собой блок NAL, кодированный для содержания видеоданных, таких как кодированная серия последовательных макроблоков изображения. Блок NAL, не относящийся к VCL, представляет собой блок NAL, который содержит данные, не относящиеся к видео, такие как синтаксис и/или параметры, которые поддерживают декодирование видеоданных, выполнение проверки соответствия или другие операции.
[0090] В показанном примере слой 532 N+1 связан с большим размером изображения, чем слой 531 N. Соответственно, изображения 511, 512, 513 и 514 в слое 532 N+1 имеют больший размер изображения (например, большую высоту и ширину и, следовательно, большее число выборок), чем изображения 515, 516, 517 и 518 в слое 531 N в этом примере. Однако такие изображения могут быть разделены между слоем 532 N+1 и слоем 531 N по другим характеристикам. Хотя показаны только два слоя, слой 532 N+1 и слой 531 N, набор изображений может быть разделен на любое количество слоев на основе связанных характеристик. Слой 532 N+1 и слой 531 N также могут быть обозначены идентификатором слоя. Идентификатор слоя представляет собой элемент данных, который связан с изображением и указывает, что изображение является частью указанного слоя. Соответственно, каждое изображение 511-518 может быть связано с соответствующим идентификатором слоя для указания, какой из слоя 532 N+1 или слоя 531 N включает в себя соответствующее изображение. Например, идентификатор слоя может включать в себя идентификатор слоя заголовка блока NAL (nuh_layer_id), который представляет собой элемент синтаксиса, указывающий идентификатор слоя, который включает в себя блок NAL (например, который включает в себя серии последовательных макроблоков и/или параметры изображений в слое). Слою, связанному с более низким качеством/размером битового потока, такому как слой 531 N, обычно назначается ID более низкого слоя, и он называется более низким слоем. Кроме того, слою, связанному с более высоким качеством/размером битового потока, такому как слой 532 N+1, обычно назначается ID более высокого слоя, и он называется более высоким слоем.
[0091] Изображения 511-518 в разных слоях 531-532 выполнены с возможностью отображения в качестве альтернативы. В качестве конкретного примера, декодер может декодировать и отображать в текущее время отображения изображение 515, если требуется изображение меньшего размера, или декодер может декодировать и отображать в текущее время отображения изображение 511, если требуется изображение большего размера. Таким образом, изображения 511-514 в более верхнем слое 532 N+1 содержат по существу те же данные изображения, что и соответствующие изображения 515-518 в более низком слое 531 N (несмотря на различие в размере изображения). В частности, изображение 511 содержит по существу те же данные изображения, что и изображение 515, изображение 512 содержит по существу те же данные изображения, что и изображение 516, и т.д.
[0092] Изображения 511-518 могут быть кодированы посредством обращения к другим изображениям 511-518 в том же слое 531 N или 532 N+1. Кодирование изображения с обращением к другому изображению в том же слое приводит к прогнозированию 523 между изображениями. Прогнозирование 523 между изображениями изображено сплошными стрелками. Например, изображение 513 может быть кодировано с использованием прогнозирования 523 между изображениями с использованием одного или двух изображений 511, 512 и/или 514 в слое 532 N+1 в качестве опорного изображения, причем одно изображение используется для однонаправленного прогнозирования между изображениями и/или два изображения используются для двунаправленного прогнозирования между изображениями. Кроме того, изображение 517 может быть кодировано с использованием прогнозирования 523 между изображениями с использованием одного или двух изображений 515, 516 и/или 518 в слое 531 N в качестве опорного изображения, причем одно изображение используется для однонаправленного прогнозирования между изображениями и/или два изображения используются для двунаправленного прогнозирования между изображениями. Если изображение используется в качестве опорного для другого изображения в том же слое при выполнении прогнозирования 523 между изображениями, это изображение может называться опорным изображением. Например, изображение 512 может быть опорным изображением, используемым для кодирования изображения 513 в соответствии с прогнозированием 523 между изображениями. Прогнозирование 523 между изображениями также может называться прогнозированием внутри изображения в контексте многослойного изображения. Таким образом, прогнозирование 523 между изображениями представляет собой механизм кодирования выборок текущего изображения посредством обращения к указанным выборкам в опорном изображении, которое отличается от текущего изображения, причем опорное изображение и текущее изображение находятся в одном слое.
[0093] Изображения 511-518 также могут быть кодированы посредством обращения к другим изображениям 511-518 в других слоях. Этот процесс известен как прогнозирование 521 между слоями и изображен пунктирными стрелками. Прогнозирование 521 между слоями представляет собой механизм кодирования выборок текущего изображения посредством обращения к указанным выборкам в опорном изображении, причем текущее изображение и опорное изображение находятся в разных слоях и, следовательно, имеют разные идентификаторы слоя. Например, изображение в нижнем слое 531 N может использоваться в качестве опорного изображения для кодирования соответствующего изображения в более высоком слое 532 N+1. В качестве конкретного примера, изображение 511 может быть кодировано с обращением к изображению 515 в соответствии с прогнозированием 521 между слоями. В таком случае изображение 515 используется как опорное изображение между слоями. Опорное изображение является между слоями опорным изображением, используемым для прогнозирования 521 между слоями. В большинстве случаев прогнозирование 521 между слоями ограничено таким образом, что текущее изображение, такое как изображение 511, может использовать только опорное изображение (изображения) между слоями, которые включены в один и тот же AU и находятся в более низком слое, например изображение 515. AU представляет собой набор изображений, связанных с конкретным временем вывода в видеопоследовательности, и, следовательно, AU может включать в себя до одного изображения на слой. Когда доступно множество слоев (например, более двух), прогнозирование 521 между слоями может кодировать текущее изображение на основе множества опорных изображений между слоями в более низких слоях, чем текущее изображение.
[0094] Видеокодер может использовать многоуровневую видеопоследовательность 500 для кодирования изображений 511-518 посредством множества различных сочетаний и/или чередований прогнозирования 523 между изображениями и прогнозирования 521 между слоями. Например, изображение 515 может быть кодировано в соответствии с внутренним прогнозированием. Затем изображения 516-518 могут быть кодированы в соответствии с прогнозированием 523 между изображениями с использованием изображения 515 в качестве опорного изображения. Кроме того, изображение 511 может быть кодировано в соответствии с прогнозированием 521 между слоями с использованием изображения 515 в качестве опорного изображения между слоями. Затем изображения 512-514 могут быть кодированы в соответствии с прогнозированием 523 между изображениями с использованием изображения 511 в качестве опорного изображения. Таким образом, для различных механизмов кодирования опорное изображение может служить как опорным изображением для одного слоя, так и опорным изображением между слоями. Путем кодирования изображений более высокого слоя 532 N+1 на основе изображений более низкого слоя 531 N, более высокий слой 532 N+1 может избежать использования внутреннего прогнозирования, которое имеет гораздо более низкую эффективность кодирования, чем прогнозирование 523 между изображениями и прогнозирование 521 между слоями. При этом низкая эффективность кодирования внутреннего прогнозирования может быть ограничена самыми малыми изображениями / изображениями самого низкого качества и, следовательно, ограничена кодированием наименьшего количества видеоданных. Изображения, используемые в качестве опорных изображений и/или опорных изображений между слоями, могут быть указаны в записях списка(ов) опорных изображений, содержащихся в структуре списка опорных изображений.
[0095] Для выполнения таких операций такие слои, как слой 531 N и слой 532 N+1 могут быть включены в OLS 525. OLS 525 представляет собой набор слоев, для которых в качестве выходного слоя указаны один или более слоев. Выходной слой представляет собой слой, предназначенный для вывода (например, на дисплей). Например, слой 531 N может быть включен исключительно для поддержки прогнозирования 521 между слоями и может никогда не выводиться. В таком случае слой 532 N+1 декодируется на основе слоя 531 N и выводится. В таком случае OLS 525 включает в себя слой 532 N+1 в качестве выходного слоя. OLS 525 может содержать множество слоев в различных сочетаниях. Например, выходной слой в OLS 525 может быть кодирован в соответствии с прогнозированием 521 между слоями на основе одного, двух или многих нижних слоев. Кроме того, OLS 525 может содержать более одного выходного слоя. Следовательно, OLS 525 может содержать один или более выходных слоев и любые вспомогательные слои, необходимые для восстановления выходных слоев. Многослойная видеопоследовательность 500 может быть кодирована с использованием множества различных OLS 525, каждая из которых использует различные комбинации слоев.
[0096] В качестве конкретного примера, для поддержки масштабируемости может использоваться прогнозирование 521 между слоями. Например, видео может быть кодировано в базовом слое, таком как слой 531 N, и нескольких улучшающих слоях, таких как слой 532 N+1, слой N+2, слой N+3 и т.д., которые кодированы согласно прогнозированию 521 между слоями. Видеопоследовательность может быть кодирована в отношении нескольких масштабируемых характеристик, таких как отношение сигнала к шуму (SNR), частота кадров, размер изображения и т.д. Затем можно создать OLS 525 для каждой допустимой характеристики. Например, OLS 525 для первого разрешения может включать только слой 531 N, OLS 525 для второго разрешения может включать в себя слой 531 N и слой 532 N+1, OLS для третьего разрешения может включать в себя слой 531 N, слой 532 N+1, слой N+2 и т.д. Таким образом, OLS 525 может передаваться, чтобы позволить декодеру декодировать любую желаемую версию многоуровневой видеопоследовательности 500 на основании из сетевых условий, ограничений по аппаратному обеспечению и т.д.
[0097] Фиг. 6 представляет собой принципиальную схему, иллюстрирующую примерную видеопоследовательность 600 с OLS, выполненными с возможностью обеспечения пространственной масштабируемости и/или масштабируемости по SNR. Видеопоследовательность 600 является конкретным примером многослойной видеопоследовательности 500. Таким образом, видеопоследовательность 600 может быть кодирована кодером, таким как система 200 кодека и/или кодер 300, и декодирована декодером, таким как система 200 кодека и/или декодер 400, например, в соответствии со способом 100. Видеопоследовательность 600 полезна с точки зрения масштабируемости.
[0098] Примерная видеопоследовательность 600 включает в себя OLS 620, OLS 621 и OLS 622, которые могут быть по существу аналогичны OLS 525. При том, что изображены три OLS, может использоваться любое количество OLS. Обращение к каждому из OLS 620, 621 и 622 содержится в индексе OLS, и они включают в себя один или более слоев. В частности, OLS 620, 621 и 622 включают в себя слой 630, слои 630 и 631 и слои 630, 631 и 632, соответственно. Слои 630, 631 и 632 могут быть по существу аналогичны слою 531 N и слою 532 N+1. Обращение к слоям 630, 631 и 632 содержится в индексе слоев. Видеопоследовательность 600 включает в себя количество слоев, равное количеству OLS. В частности, OLS 620 с самым низким индексом OLS содержит слой 630 с самым низким индексом слоя. Каждый другой OLS включает все слои предыдущего OLS с более низким индексом OLS плюс один. Например, OLS 621 имеет более высокий индекс OLS, чем OLS 620, и содержит слои 630 и 631, которые представляют собой все слои OLS 620 плюс один. Аналогичным образом, OLS 622 имеет более высокий индекс OLS, чем OLS 621, и содержит слои 630, 631 и 632, которые являются всеми слоями OLS 621 плюс один. Эта последовательность может продолжаться до тех пор, пока не будут достигнуты слой с самым высоким индексом слоя и OLS с самым высоким индексом OLS.
[0099] Кроме того, слой 630 является базовым слоем. Все другие слои 631 и 632 являются слоями улучшения, которые кодируются в соответствии с прогнозированием между слоями на основе всех слоев с более низкими индексами слоя. В частности, слой 630 является базовым слоем и не кодируется в соответствии с прогнозированием между слоями. Слой 631 представляет собой слой улучшения, который кодируется в соответствии с прогнозированием между слоями на основе слоя 630. Кроме того, слой 632 представляет собой слой улучшения, который кодируется в соответствии с прогнозированием между слоями на основе слоев 630 и 631. В результате OLS 620 содержит слой 630 с SNR самого низкого качества и/или с наименьшим размером изображения. Поскольку OLS 620 не использует прогнозирования между слоями, OLS 620 может быть полностью декодирован без обращения к какому-либо слою кроме 630. OLS 621 содержит слой 631, который имеет более высокое качество по SNR и/или размер изображения, чем слой 630, и слой 631 может быть полностью декодирован в соответствии с прогнозированием между слоями, поскольку OLS 621 также содержит слой 630. Аналогичным образом, OLS 622 содержит слой 632, который имеет более высокое качество SNR и/или размер изображения, чем слои 630 и 631, и слой 632 может быть полностью декодирован в соответствии с прогнозированием между слоями, поскольку OLS 622 также содержит слои 630 и 631. Соответственно, видеопоследовательность 600 кодируется для масштабирования до любого предварительно выбранного SNR и/или размера изображения путем отправки соответствующего OLS 622, 621 или 620 в декодер. Если используется более чем OLS 622, 621 и 620, видеопоследовательность 600 может масштабироваться до больших значений качества изображения по SNR и/или размеров изображений.
[0100] Соответственно, видеопоследовательность 600 может поддерживать пространственную масштабируемость. Пространственная масштабируемость позволяет кодировать видеопоследовательность 600 в слои 630, 631 и 632 таким образом, что слои 630, 631 и 632 помещаются в OLS 620, 621 и 622, так что каждый OLS 620, 621 и 622 содержит данные, достаточные для декодирования видеопоследовательности 600 до соответствующего размера выходного экрана. Таким образом, пространственная масштабируемость может включать в себя набор слоев (например, слой 630) для декодирования видео для экрана смартфона, набор слоев для декодирования видео для большого экрана телевизора (например, слои 630, 631 и 632), и наборы слоев (например, слои 630 и 631) для промежуточных размеров экрана. Масштабируемость по SNR позволяет кодировать видеопоследовательность 600 в слои 630, 631 и 632 таким образом, что слои 630, 631 и 632 помещаются в OLS 620, 621 и 622, так что каждый OLS 620, 621 и 622 содержит достаточных данных для декодирования видеопоследовательности 600 с другим SNR. Таким образом, масштабируемость по SNR может включать в себя набор слоев (например, слой 630), которые могут быть декодированы для видео низкого качества, видео высокого качества (например, слои 630, 631 и 632) и видео с различными промежуточными значениями качества (например, слои 630 и 631) для поддержки различных сетевых условий.
[0101] Настоящее изобретение обеспечивает эффективную сигнализацию, позволяющую правильно и эффективно использовать видеопоследовательность 600. Например, видеопоследовательность 600 может быть обозначена в соответствии с синтаксическим элементом ols_mode_idc. Например, синтаксический элемент ols_mode_idc может идентифицировать видеопоследовательность 600 как нулевой режим OLS. Следовательно, синтаксический элемент ols_mode_idc может быть установлен на ноль и сигнализирован в битовом потоке для указания того, что используется видеопоследовательность 600. Соответственно, декодер может принять любой OLS и определить на основе ols_mode_idc, что полученный слой с наивысшим индексом слоя является выходным слоем для принятого OLS и что выходной слой может быть декодирован с помощью прогнозирования между слоями на основе другого нижние слои в OLS.
[0102] Фиг. 7 представляет собой принципиальную схему, иллюстрирующую пример битового потока 700, включающего в себя OLS, выполненные с обеспечением возможности масштабируемости. Например, битовый поток 700 может быть сформирован системой 200 кодека и/или кодером 300 для декодирования системой 200 кодека и/или декодером 400 согласно способу 100. Кроме того, битовый поток 700 может включать в себя кодированную многослойную видеопоследовательность 500 и/или видеопоследовательность 600.
[0103] Битовый поток 700 включает в себя VPS 711, один или более наборов параметров последовательности (SPS) 713, множество наборов параметров изображения (PPS) 715, множество заголовков 717 серий последовательных макроблоков и данные 720 изображения. VPS 711 содержит данные, относящиеся ко всему битовому потоку 700. Например, VPS 711 может содержать связанные с данными OLS, слои и/или подслои, используемые в битовом потоке 700. SPS 713 содержит данные последовательности, общие для всех изображений в кодированной видеопоследовательности, содержащейся в битовом потоке 700. Например, каждый слой может содержать одну или более кодированных видеопоследовательностей, и каждая кодированная видеопоследовательность может содержать обращение к SPS 713 для соответствующих параметров. Параметры в SPS 713 могут включать в себя размер изображения, битовую глубину, параметры инструмента кодирования, ограничения скорости передачи и т.д. Следует отметить, что, хотя каждая последовательность относится к SPS 713, в некоторых примерах один SPS 713 может содержать данные для множества последовательностей. PPS 715 содержит параметры, которые применяются ко всему изображению. Следовательно, каждое изображение в видеопоследовательности может содержать обращение к PPS 715. Следует отметить, что хотя каждое изображение относится к PPS 715, в некоторых примерах один PPS 715 может содержать данные для множества изображений. Например, множество аналогичных изображений могут быть кодированы согласно аналогичным параметрам. В таком случае один PPS 715 может содержать данные для таких аналогичных изображений. PPS 715 может указывать инструменты кодирования, доступные для серий последовательных макроблоков в соответствующих изображениях, параметры квантования, смещения и т.д.
[0104] Заголовок 717 серии последовательных макроблоков содержит параметры, характерные для каждой серии 727 последовательных макроблоков в изображении 725. 717. Следовательно, может быть один заголовок серии 727 последовательных макроблоков на серию последовательных макроблоков. Заголовок 717 серии последовательных макроблоков может содержать информацию о типе серии последовательных макроблоков, POC, списки опорных изображений, веса прогнозирования, точки входа мозаичного элемента, параметры деблокировки и т.д. Следует отметить, что в некоторых примерах битовый поток 700 может также включать в себя заголовок изображения, который представляет собой синтаксическую структуру, содержащую параметры, применимые ко всем сериям 727 последовательных макроблоков в одном изображении. По этой причине заголовок изображения и заголовок 717 серии последовательных макроблоков могут использоваться взаимозаменяемо в некоторых контекстах. Например, некоторые параметры могут быть перемещены между заголовком 717 серии последовательных макроблоков и заголовком изображения в зависимости от того, являются ли такие параметры общими для всех серий 727 последовательных макроблоков в изображении 725.
[0105] Данные 720 изображения содержат видеоданные, кодированные согласно прогнозированию между изображениями и/или прогнозированию внутри изображения, а также соответствующие преобразованным и квантованным остаточным данным. Например, данные 720 изображения могут включать в себя слои 723 изображений 725. Слои 723 могут быть организованы в OLS 721. OLS 721 может быть по существу аналогичен OLS 525, 620, 621 и/или 622. В частности, OLS 721 представляет собой набор слоев для 723, один или более слоев 723 которого заданы как выходные слои. Например, битовый поток 700 может быть кодирован таким образом, чтобы он включал в себя несколько OLS 721 с кодированием видео с разными разрешениями, частотами кадров, размерами изображения 725 и т.д. По запросу декодера процесс извлечения подпотока битов может удалить из битового потока 700 все, кроме запрошенного OLS 721. Затем кодер может передать в декодер битовый поток 700, содержащий только запрошенный OLS 721 и, следовательно, только видео, которое соответствует запрошенным критериям.
[0106] Слой 723 может быть по существу подобен слою 531 N, слою 532 N+1 и/или слоям 631, 632 и/или 633. Слой 723 обычно представляет собой набор кодированных изображений 725. Слой 723 может быть формально определен как набор единиц NAL VCL, которые при декодировании имеют общую указанную характеристику (например, общее разрешение, частоту кадров, размер изображения и т.д.). Изображение 725 может быть кодировано как набор единиц NAL VCL. Слой 723 также включает в себя ассоциированные блоки NAL, отличные от VCL, для поддержки декодирования блоков NAL VCL. Блоки NAL VCL слоя 723 могут совместно использовать конкретное значение nuh_layer_id, которое является примерным идентификатором слоя. Слой 723 может быть слоем одновременной передачи, который кодирован без прогнозирования между слоями, или слоем 723, который кодирован в соответствии с прогнозированием между слоями на основе других слоев.
[0107] Изображение 725 представляет собой массив выборок яркости и/или массив выборок цветности, которые образуют кадр или его поле. Например, изображение 725 может быть кодированным изображением, которое может быть выведено для отображения или использовано для поддержки кодирования другого изображения (изображений) 725, подлежащих выводу. Изображение 725 может включать в себя набор блоков NAL VCL. Изображение 725 содержит одну или более серий 727 последовательных макроблоков. Серия 727 последовательных макроблоков может быть определена как целое число полных мозаичных элементов или целое число последовательных строк полной единицы дерева кодирования (CTU) (например, в пределах мозаичного элемента) изображения 725, которые содержатся исключительно в одном блоке NAL, в частности, в блок NAL VCL. Серии 727 последовательных макроблоков дополнительно делятся на CTU и/или блоки дерева кодирования (CTB). CTU представляет собой группу выборок заданного размера, которые могут быть разделены деревом кодирования. CTB является подмножеством CTU и содержит компоненты яркости или компоненты цветности CTU. CTU/CTB дополнительно разбиваются на блоки кодирования на основе деревьев кодирования. Затем блоки кодирования можно кодировать согласно механизмам прогнозирования.
[0108] Настоящее изобретение включает в себя механизмы для поддержки пространственной масштабируемости и/или масштабируемости по SNR, например, в соответствии с видеопоследовательностью 600. Например, VPS 711 может содержать ols_mode_idc 735. ols_mode_idc 735 представляет собой синтаксический элемент, который указывает информацию, относящуюся к количеству OLS 721, слоям 723 OLS 721 и выходным слоям 723 в OLS 721. Выходной слой 723 представляет собой любой слой, который предназначен для вывода декодером, а не используется исключительно для кодирования на основе опорных изображений. ols_mode_idc 735 может быть установлен в один или два для кодирования других типов видео. ols_mode_idc 735 может быть установлен равным нулю для поддержки пространственной масштабируемости и/или масштабируемости по SNR. Например, ols_mode_idc 735 может быть установлен равным нулю для указания, что общее количество OLS 721 в видеопоследовательности равно общему количеству слоев 723, указанных в VPS 711, что i-й OLS 721 включает в себя слои от нуля до i включительно, и что для каждого OLS 721 выводится только самый верхний слой. Этот ряд условий может описывать видеопоследовательность 600 с любым количеством OLS 721. Преимущество использования ols_mode_idc 735 заключается в том, что ols_mode_idc 735 обеспечивает экономию битов. Декодер в прикладной системе обычно получает только один OLS. Однако ols_mode_idc 735 также обеспечивает экономию битов в кодированных потоках битов, которые содержат множество OLS, между которыми совместно используется много данных, таким образом обеспечивая экономию на серверах обработки и обеспечивая экономию пропускной способности для передачи таких потоков битов.
[0109] В некоторых примерах VPS 711 также включает в себя синтаксический элемент 737 максимального количества слоев VPS минус один (vps_max_layers_minus1). vps_max_layers_minus1 737 представляет собой синтаксический элемент, который сигнализирует о количестве слоев 723, указанном VPS 711, и, следовательно, о максимальном количестве слоев 723, разрешенных в соответствующей кодированной видеопоследовательности в битовом потоке 700. ols_mode_idc 735 может обращаться к синтаксическому элементу vps_max_layers_minus1 737. Например, ols_mode_idc 735 может указывать, что общее количество OLS 721 равно количеству слоев 723, указанному vps_max_layers_minus1 737.
[0110] Кроме того, VPS 711 может включать в себя флаг 733 each_layer_is_an_ols_flag. each_layer_is_an_ols_flag 733 представляет собой элемент синтаксиса, который сигнализирует, содержит ли каждый OLS 721 в битовом потоке 700 один слой 723. Например, каждый OLS 721 может содержать один слой одновременной передачи, если масштабируемость не используется. Соответственно, флаг 733 each_layer_is_an_ols_flag может быть установлен (например, равным нулю) для указания, что одна или более OLS 721 содержат более одного слоя 723 для поддержки масштабируемости. Таким образом, флаг 733 each_layer_is_an_ols_flag может использоваться для поддержки масштабируемости. Например, декодер может проверить флаг 733 each_layer_is_an_ols_flag для определения, что некоторые из OLS 721 включают в себя более одного слоя 723. Если each_layer_is_an_ols_flag 733 установлен в ноль и если ols_mode_idc 735 установлен в ноль (или единицу, что используется для другого режима), общее количество OLS (TotalNumOlss) может быть установлено равным vps_max_layers_minus1 737. TotalNumOlss представляет собой переменную, используемую как декодером, так и гипотетическим эталонным декодером (HRD) в кодере. TotalNumOlss представляет собой переменную, используемую для хранения количества OLS 721 на основе данных в битовом потоке 700. Затем TotalNumOlss можно использовать для декодирования в декодере или проверки ошибок битового потока 700 в HRD в кодере.
[0111] VPS 711 также может включать в себя синтаксический элемент 731 идентификатора слоя VPS (vps_layer_id[i]). vps_layer_id[i] 731 представляет собой массив, в котором хранятся ID слоя (например, nuh_layer_id) для каждого слоя. Соответственно, vps_layer_id[i] 731 указывает ID слоя для i-го слоя.
[0112] Декодер или HRD могут быть способны использовать данные в VPS 711 для определения конфигурации OLS 721 и слоев 723. В конкретном примере количество слоев в i-м OLS (NumLayersInOls[i]) и идентификатор слоя в OLS (LayerIdInOLS[i][j]), указывающий значение nuh_layer_id j-го слоя в i-м OLS получаются следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i<TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]
} else if(ols_mode_idc=0 | | ols_mode_idc=1) {
NumLayersInOls[i]=i+1 for(j=0; j<NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг каждого слоя OLS, указывающий, содержит ли по меньшей мере один OLS более одного слоя.
[0113] Данные в VPS 711 могут использоваться для поддержки слоев 723, масштабируемых по SNR и/или пространственно масштабируемых. Слои 723 могут быть кодированы и включены в OLS 721. Кодер может передавать битовый поток 700, включающий запрошенный OLS 721 и VPS 711, на декодер. Затем декодер может использовать информацию в VPS 711 для правильного декодирования слоев 723 в OLS 721. Этот подход поддерживает эффективность кодирования, поддерживая масштабируемость. В частности, декодер может быстро определить количество слоев 723 в OLS 721, определить выходной слой в OLS 721 и определить слои 723, которые должны быть декодированы для поддержки декодирования выходного слоя в соответствии с прогнозированием между слоями. Соответственно, декодер может принимать только слои 723, необходимые для декодирования самого высокого принятого слоя, и может быть декодирован и отображен самый высокий принятый слой. Таким образом, общее количество кодированных слоев 723 может не влиять на процесс декодирования, и можно избежать одной или более ошибок, как описано выше. Таким образом, раскрытые механизмы увеличивают функциональные возможности кодера и/или декодера. Кроме того, раскрытые механизмы могут уменьшать размер битового потока и, следовательно, уменьшать использование процессора, памяти и/или сетевых ресурсов как в кодере, так и в декодере.
[0114] Теперь предшествующая информация будет более подробно описана ниже. Многослойное видеокодирование также называют масштабируемым видеокодированием или масштабируемым видеокодированием. Масштабируемость при кодировании видео может поддерживаться с помощью технологий многослойного кодирования. Многослойный битовый поток содержит базовый слой (BL) и один или более улучшающих слоев (EL). Примеры масштабируемости включают в себя пространственную масштабируемость, масштабируемость по качеству/отношению сигнала к шуму (SNR), масштабируемость для множества видов, масштабируемость по частоте кадров и т.д. Если используется технология многослойного кодирования, изображение или его часть могут быть кодированы без использования опорного изображения (прогнозирование внутри изображения), могут быть кодированы путем обращения к опорным изображениям, которые находятся в том же слое (прогнозирование между изображениями), и/или может быть кодировано путем обращения к опорным изображениям, которые находятся в другом(их) слое(ях) (прогнозирование между слоями). Опорное изображение, используемое для прогнозирования между слоями для текущего изображения, называется опорным изображением между слоями (ILRP). Фиг. 5 иллюстрирует пример многослойного кодирования для пространственной масштабируемости, в котором изображения в разных слоях имеют разное разрешение.
[0115] Некоторые семейства видеокодирования обеспечивают поддержку масштабируемости в профиле(ях), отделенном(ых) от профиля(ей) для однослойного кодирования. Масштабируемое кодирование видео (SVC) представляет собой масштабируемое расширение расширенного кодирования видео (AVC), обеспечивающее поддержку пространственной, временной и качественной масштабируемости. Для SVC в каждом макроблоке (MB) в изображениях EL сигнализируется флаг для указания, прогнозируется ли EL MB с использованием совмещенного блока из нижнего слоя. Прогнозирование из совмещенного блока может включать в себя текстуру, векторы движения и/или режимы кодирования. Реализации SVC не могут непосредственно повторно использовать в своей конструкции неизмененные реализации AVC. Синтаксис макроблока EL SVC и процесс декодирования отличаются от синтаксиса и процесса декодирования AVC.
[0116] Масштабируемый HEVC (SHVC) представляет собой расширение HEVC, обеспечивающее поддержку пространственной масштабируемости и масштабируемости качества. Многовидовое HEVC (MV-HEVC) представляет собой расширение HEVC, обеспечивающее поддержку масштабируемости для множества видов. 3D HEVC (3D-HEVC) представляет собой расширение HEVC, обеспечивающее поддержку кодирования 3D видео, которое является более совершенным и эффективным, чем MV-HEVC. Временная масштабируемость может быть включена как неотъемлемая часть одноуровневого кодека HEVC. В многоуровневом расширении HEVC декодированные изображения, используемые для прогнозирования между слоями, поступают только из одного и того же AU и обрабатываются как долгосрочные опорные изображения (LTRP). Таким изображениям назначаются опорные индексы в списке (списках) опорных изображений вместе с другими временными опорными изображениями в текущем слое. Прогнозирование между слоями (ILP) достигается на уровне блока прогнозирования (PU) путем установки значения опорного индекса для обращения к опорному изображению(ям) между слоями в списке(ах) опорных изображений. Пространственная масштабируемость изменяет опорное изображение или его часть, если ILRP имеет пространственное разрешение, отличное от текущего кодируемого или декодируемого изображения. Передискретизация опорного изображения может быть реализована либо на уровне изображения, либо на уровне блока кодирования.
[0117] VVC также может поддерживать многослойное кодирование видео. Битовый поток VVC может включать в себя множество слоев. Все слои могут быть независимыми друг от друга. Например, каждый слой может быть кодирован без использования прогнозирования между слоями. В этом случае слои также называются слоями одновременной передачи. В некоторых случаях некоторые слои кодируются с использованием ILP. Флаг в VPS может указывать, являются ли слои слоями одновременной передачи или используют ли некоторые слои ILP. Если некоторые слои используют ILP, отношения зависимости слоев между слоями также сигнализируются в VPS. В отличие от SHVC и MV-HEVC, VVC может не указывать OLS. OLS включает в себя указанный набор слоев, в котором один или более слоев в наборе слоев указаны как выходные слои. Выходной слой является выходным слоем OLS. В некоторых реализациях VVC для декодирования и вывода может быть выбран только один слой, если слои являются слоями одновременной передачи. В некоторых реализациях VVC для декодирования указывается весь битовый поток, включая все слои, если любой слой использует ILP. Кроме того, определенные слои среди слоев указываются как выходные слои. Выходные слои могут быть указаны как составляющие только самый верхний слой, все слои или самый верхний слой плюс набор указанных более низких слоев.
[0118] Вышеприведенные аспекты содержат определенные проблемы. В некоторых системах видеокодирования, если используется прогнозирование между слоями, для декодирования указывается весь битовый поток и все слои, а определенные слои среди слоев указываются как выходные слои. Выходные слои могут быть указаны как составляющие только самый верхний слой, все слои или самый верхний слой плюс набор указанных более низких слоев. Для простоты описания проблемы можно использовать два слоя с верхним слоем, который использует нижний слой в качестве опорного для прогнозирования между слоями. Для пространственной масштабируемости и/или масштабируемости по SNR система должна указывать на использование только нижнего слоя (декодирование и вывод только нижнего слоя). Система также должна указывать на использование обоих слоев (декодирование обоих слоев и вывод более высокого слоя). К сожалению, это невозможно в некоторых системах кодирования видео.
[0119] В общем случае, в настоящем описании описаны подходы для простой и эффективной сигнализации наборов выходных слоев (OLS) для пространственной масштабируемости и масштабируемости по SNR. Описание технологий основано на VVC JVET ITU-T и ISO/IEC. Однако данные технологии также применимы к многоуровневому кодированию видео, основанному на других спецификациях видеокодека.
[0120] Одна или более из вышеупомянутых проблем могут быть решены следующим образом. В частности, данное изобретение включает в себя простой и эффективный способ сигнализации OLS для пространственной масштабируемости и масштабируемости по SNR. Система видеокодирования может использовать VPS для указания того, что некоторые слои используют ILP, что общее количество OLS, указанное VPS, равно количеству слоев, что i-й OLS включает в себя слои с индексами слоев от 0 до i включительно, и что для каждого OLS выводится только самый верхний слой в OLS.
[0121] Пример реализации вышеописанных механизмов выглядит следующим образом. Ниже приведен пример синтаксиса набора параметров видео.
[0122] Пример семантики набора параметров видео выглядит следующим образом. RBSP VPS должен быть доступен для процесса декодирования до того, как к нему будет выполнено обращение, он должен быть включен по меньшей мере в одну единицу доступа с TemporalId, равным нулю, или обеспечен через внешние механизмы, а единица NAL VPS, содержащая RBSP VPS, должна иметь nuh_layer_id, равный vps_layer_id[0]. Все блоки NAL VPS с определенным значением vps_video_parameter_set_id в CVS должны иметь одинаковое содержимое. vps_video_parameter_set_id обеспечивает идентификатор VPS для обращения посредством других синтаксических элементов. Параметр vps_max_layers_minus1 плюс 1 указывает максимально допустимое количество слоев в каждом CVS, относящемся к VPS. Параметр vps_max_sub_layers_minus1 плюс 1 определяет максимальное количество временных подуровней, которые могут присутствовать в каждом CVS, относящемся к VPS. Значение vps_max_sub_layers_minus1 должно быть в диапазоне от нуля до шести включительно.
[0123] Флаг vps_all_independent_layers_flag может быть установлен равным единице для указания, что все слои в CVS кодируются независимо без использования прогнозирования между слоями. Флаг vps_all_independent_layers_flag может быть установлен равным нулю для указания, что один или более слоев в CVS могут использовать прогнозирование между слоями. Если флаг отсутствует, предполагается, что значение vps_all_independent_layers_flag равно единице. Если vps_all_independent_layers_flag равен единице, предполагается, что значение vps_independent_layer_flag[i] равно единице. Если vps_all_independent_layers_flag равен нулю, предполагается, что значение vps_independent_layer_flag[0] равно единице. vps_layer_id[i] указывает значение nuh_layer_id i-го слоя. Для любых двух неотрицательных целых значений m и n, когда m меньше n, значение vps_layer_id[m] должно быть меньше, чем vps_layer_id[n]. Параметр vps_independent_layer_flag[i] может быть установлен равным единице для указания, что слой с индексом i не использует прогнозирование между слоями. Параметр vps_independent_layer_flag[i] может быть установлен равным нулю для указания, что слой с индексом i может использовать прогнозирование между слоями, а vps_layer_dependency_flag[i] присутствует в VPS. Если флаг отсутствует, предполагается, что значение vps_independent_layer_flag[i] равно единице.
[0124] Флаг vps_direct_dependency_flag[i][j] может быть установлен равным нулю для указания, что слой с индексом j не является непосредственным опорным слоем для слоя с индексом i. Флаг vps_direct_dependency_flag[i][j] может быть установлен равным единице для указания, что слой с индексом j является непосредственным опорным слоем для слоя с индексом i. Если vps_direct_dependency_flag[i][j] отсутствует для i и j в диапазоне от нуля до vps_max_layers_minus1 включительно, считается, что vps_direct_dependency_flag[i][j] равен 0. Переменная 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
[0125] Переменная GeneralLayerIdx[i], указывающая индекс слоя слоя с nuh_layer_id, равным vps_layer_id[i], выводится следующим образом:
for(i=0; i<=vps_max_layers_minus1; i++)
GeneralLayerIdx[vps_layer_id[i]]=i
[0126] Флаг each_layer_is_an_ols_flag может быть установлен равным единице для указания, что каждый набор выходных слоев содержит только один слой, и каждый слой в битовом потоке сам по себе является набором выходных слоев, причем единственный включенный слой является единственным выходным слоем. Флаг each_layer_is_an_ols_flag может быть установлен равным нулю для указания, что набор выходных слоев может содержать более одного слоя. Если vps_max_layers_minus1 равен нулю, предполагается, что значение each_layer_is_an_ols_flag равно единице. В противном случае, если vps_all_independent_layers_flag равен нулю, предполагается, что значение each_layer_is_an_ols_flag равно нулю.
[0127] ols_mode_idc может быть установлен равным нулю для указания, что общее количество OLS, указанное VPS, равно vps_max_layers_minus1+1, i-й OLS включает слои с индексами слоев от нуля до i включительно, и только для каждого OLS выводится самый высокий слой в OLS. ols_mode_idc может быть установлен равным единице для указания, что общее количество OLS, указанное VPS, равно vps_max_layers_minus1+1, i-й OLS включает в себя слои с индексами слоев от нуля до i включительно, и для каждого OLS выводятся все слои в OLS. ols_mode_idc может быть установлен равным двум для указания, что общее количество OLS, указанное VPS, передается в явном виде, и для каждого OLS выводятся самый высокий слой и явно сигнализируемый набор нижних слоев в OLS. Значение ols_mode_idc должно быть в диапазоне от нуля до двух включительно. Значение параметра ols_mode_idc, равное трем, зарезервировано. Если vps_all_independent_layers_flag равен единице, а each_layer_is_an_ols_flag равен нулю, предполагается, что значение ols_mode_idc равно двум.
[0128] num_output_layer_sets_minus1 плюс 1 указывает общее количество OLS, указанное VPS, когда ols_mode_idc равно двум. Переменная TotalNumOlss, указывающая общее количество OLS, указанных VPS, получается следующим образом:
if(vps_max_layers_minus1=0)
TotalNumOlss=1
else if(each_layer_is_an_ols_flag | | ols_mode_idc=0 | | ols_mode_idc=1)
TotalNumOlss=vps_max_layers_minus1+1
else if(ols_mode_idc=2) TotalNumOlssus=_num_output
[0129] Layer_included_flag[i][j] указывает, включен ли j-й слой (например, слой с nuh_layer_id, равным vps_layer_id[j]) в i-й OLS, если ols_mode_idc равен двум. Layer_included_flag[i][j] может быть установлен равным единице для указания, что j-й слой включен в i-й OLS. Layer_included_flag[i][j] может быть установлен равным нулю для указания, что j-й слой не включен в i-й OLS.
[0130] Переменная NumLayersInOls[i], указывающая количество слоев в i-м OLS, и переменная LayerIdInOls[i][j], указывающая значение nuh_layer_id j-го слоя в i-м OLS, могут быть получены следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i<TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]}
else if(ols_mode_idc=0 | | ols_mode_idc=1) {
NumLayersInOls[i]=i+1
for(j=0; j<NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]}
else if(ols_mode_idc=2) {
for(k=0, j=0; k<=vps_max_layers_minus1; k++)
if(layer_included_flag[i][k])
LayerIdInOls[i][j++]=vps_layer_id [k]
NumLayersInOls [i]=j
}
}
[0131] Переменная OlsLayeIdx[i][j], указывающая индекс слоя OLS слоя с nuh_layer_id, равным LayerIdInOls[i][j], может быть получена следующим образом:
for(i=0, i<TotalNumOlss; i++)
for j=0; j<NumLayersInOls[i]; j++)
OlsLayeIdx[i][LayerIdInOls[i][j]]=j
[0132] Самый нижний слой в каждой OLS должен быть независимым слоем. Другими словами, для каждого i в диапазоне от нуля до TotalNumOlss - 1 включительно значение vps_independent_layer_flag[GeneralLayerIdx[LayerIdInOls[i][0]]] должно быть равно единице. Каждый слой может быть включен по меньшей мере в одну OLS, указанную VPS. Другими словами, для каждого слоя с определенным значением nuh_layer_id (например, nuhLayerId равен одному из vps_layer_id[k] для k в диапазоне от 0 до vps_max_layers_minus1 включительно) должна быть по меньшей мере одна пара значений i и j, в которой i находится в диапазоне от 0 до TotalNumOlss - 1 включительно, а j находится в диапазоне NumLayersInOls[i] - 1 включительно, так что значение LayerIdInOls[i][j] равно nuhLayerId. Любой слой в OLS должен быть выходным слоем OLS или опорным слоем (непосредственно или опосредованно) для выходного слоя OLS.
[0133] Параметр vps_output_layer_flag[i][j] указывает, выводится ли j-й слой в i-м OLS, если ols_mode_idc равен двум. Флаг vps_output_layer_flag[i] может быть установлен равным единице для указания, что выводится j-й слой в i-м OLS. Флаг vps_output_layer_flag[i] может быть установлен равным нулю для указания, что j-й слой в i-м OLS не выводится. Если vps_all_independent_layers_flag равен единице, а each_layer_is_an_ols_flag равен нулю, можно сделать вывод, что значение vps_output_layer_flag[i] равно единице.
[0134] Переменная OutputLayerFlag[i][j], для которой значение единица указывает, что выводится j-й слой в i-м OLS, а значение ноль указывает, что j-й слой в i-м OLS не выводится, можно вывести следующим образом:
for(i=0, i<TotalNumOlss; i++) {
OutputLayerFlag[i][NumLayersInOls[i] - 1]=1
for(j=0; j<NumLayersInOls[i] - 1; j++)
if(ols_mode_idc[i]=0)
OutputLayerFlag[i][j]=0
else if(ols_mode_idc[i]=1)
OutputLayerFlag[i][j]=1
else if(ols_mode_idc[i]=2)
OutputLayerFlag[i][j]=vps_output_layer_flag[i][j]
}
[0135] 0-й OLS содержит только самый нижний слой (например, слой с nuh_layer_id, равным vps_layer_id[0]), а для 0-го OLS выводится единственный включенный слой. Флаг vps_constraint_info_present_flag может быть установлен равным единице для указания, что в VPS присутствует синтаксическая структура general_constraint_info(). Флаг vps_constraint_info_present_flag может быть установлен равным нулю для указания, что в VPS отсутствует синтаксическая структура general_constraint_info(). Биты vps_reserved_zero_7 должны быть равны нулю в соответствующих битовых потоках. Другие значения для vps_reserved_zero_7bits зарезервированы. Декодеры должны игнорировать значение vps_reserved_zero_7bits.
[0136] Флаг general_hrd_params_present_flag может быть установлен равным единице для указания, что в синтаксической структуре RBSP SPS присутствуют синтаксические элементы num_units_in_tick и time_scale и синтаксическая структура general_hrd_parameters(). Флаг general_hrd_params_present_flag может быть установлен равным нулю для указания, что в синтаксической структуре RBSP SPS отсутствуют синтаксические элементы num_units_in_tick и time_scale и синтаксическая структура general_hrd_parameters(). num_units_in_tick представляет собой количество единиц времени на часах, работающих на частоте time_scale в герцах (Гц), что соответствует одному приращению (называемому тактом) счетчика тактов. num_units_in_tick должен быть больше нуля. Такт часов в секундах равен отношению num_units_in_tick к time_scale. Например, если частота кадров видеосигнала составляет двадцать пять Гц, time_scale может быть равен 27000000, а num_units_in_tick может быть равен 1080000, и, следовательно, такт часов может быть равен 0,04 секунды.
[0137] Time_scale представляет собой количество единиц времени, проходящих за одну секунду. Например, система координат времени, которая измеряет время с помощью часов в двадцать семь мегагерц (МГц), имеет time_scale 27000000. Значение time_scale должно быть больше нуля. Флаг vps_extension_flag может быть установлен равным нулю для указания, что в структуре синтаксиса RBSP VPS нет синтаксических элементов vps_extension_data_flag. Флаг vps_extension_flag может быть установлен равным единице для указания, что в структуре синтаксиса RBSP VPS присутствуют синтаксические элементы vps_extension_data_flag. Флаг vps_extension_data_flag может иметь любое значение. Наличие и значение флага vps_extension_data_flag не влияют на соответствие декодера профилям. Соответствующие декодеры должны игнорировать все элементы синтаксиса vps_extension_data_flag.
[0138] Фиг. 8 представляет собой принципиальную схему примерного устройства 800 кодирования видео. Устройство 800 кодирования видео подходит для реализации раскрытых примеров/вариантов осуществления, которые описаны в данном документе. Устройство 800 кодирования видео содержит нисходящие порты 820, восходящие порты 850 и/или блоки приемопередатчиков (Tx/Rx) 810, включая передатчики и/или приемники. Устройство 800 кодирования видео также включает в себя процессор 830, включающий в себя логический блок и/или центральный процессор (CPU), для обработки данных и память 832 для сохранения данных. Устройство 800 видеокодирования может также содержать электрические, оптико-электрические (OE) компоненты, электро-оптические (EO) компоненты и/или компоненты беспроводной связи, соединенные с выходными портами 850 и/или входными портами 820 для обмена данными через электрические, оптические или беспроводные сети. Устройство 800 кодирования видео может также включать в себя устройства 860 ввода и/или вывода (I/O) для передачи данных пользователю и от пользователя. Устройства 860 I/O могут включать в себя устройства вывода, такие как дисплей, для отображения видеоданных, динамики для вывода аудиоданных и т.д. Устройства 860 I/O могут также включать в себя устройства ввода, такие как клавиатура, мышь, шаровой манипулятор и т.д., и/или соответствующие интерфейсы для взаимодействия с такими устройствами вывода.
[0139] Процессор 830 реализуется посредством аппаратного обеспечения и программного обеспечения. Процессор 830 может быть реализован в виде одного или более ядер (например, в форме многоядерного процессора), микросхем CPU, программируемых пользователем вентильных матриц (FPGA), специализированных интегральных схем (ASIC) и цифровых сигнальных процессоров (DSP). Процессор 830 осуществляет связь с нисходящими портами 820, Tx/Rx 810, восходящими портами 850 и памятью 832. Процессор 830 содержит модуль 814 кодирования. Модуль 814 кодирования реализует описанные в данном документе варианты осуществления, такие как способы 100, 900 и 1000, которые могут использовать многослойную видеопоследовательность 500, видеопоследовательность 600 и/или битовый поток 700. Модуль 814 кодирования может также реализовывать любой другой способ/механизм, описанный в данном документе. Кроме того, модуль 814 кодирования может реализовать систему 200 кодека, кодер 300 и/или декодер 400. Например, модуль 814 кодирования может использоваться для кодирования видеопоследовательности в слои и/или OLS для поддержки масштабируемости по SNR и/или пространственной масштабируемости. Например, модуль 814 кодирования может кодировать и/или декодировать синтаксический элемент ols_mode_idc в/из VPS в битовом потоке. Синтаксический элемент ols_mode_idc может указывать, что общее количество OLS в видеопоследовательности равно общему количеству слоев, указанных в VPS, что i-й OLS включает в себя слои от 0 до i включительно, и что для каждого OLS только выводится самый верхний слой. Следовательно, модуль 814 кодирования может использовать синтаксический элемент ols_mode_idc для указания/определения того, что может быть декодирован и отображен только самый верхний принятый слой, и что все остальные принятые слои должны быть декодированы для поддержки декодирования самого верхнего принятого слоя. Таким образом, модуль 814 кодирования побуждает устройство 800 кодирования видео обеспечивать дополнительные функциональные возможности и/или эффективность кодирования при кодировании видеоданных. Таким образом, модуль 814 кодирования улучшает функциональность устройства 800 кодирования видео, а также решает проблемы, относящиеся к области техники кодирования видео. Кроме того, модуль 814 кодирования осуществляет перевод устройства 800 кодирования видео в другое состояние. В качестве альтернативы, модуль 814 кодирования может быть реализован в виде инструкций, сохраненных в памяти 832 и выполняемых процессором 830 (например, в виде компьютерного программного продукта, сохраненного на постоянном носителе).
[0140] Память 832 содержит память одного или более типов, например диски, ленточные накопители, твердотельные накопители, постоянное запоминающее устройство (ROM), оперативное запоминающее устройство (RAM), флэш-память, троичное запоминающее устройство с адресацией по содержимому (TCAM), статическое оперативное запоминающее устройство (SRAM) и т.д. Память 832 может использоваться в качестве устройства хранения данных при переполнении, для хранения программ, когда такие программы выбраны для выполнения, и для хранения инструкций и данных, которые считываются во время выполнения программы.
[0141] Фиг. 9 представлена блок-схема примерного способа 900 кодирования видеопоследовательности с помощью OLS, выполненных с возможностью масштабируемости, например, многослойной видеопоследовательности 500 и/или видеопоследовательности 600 в битовом потоке 700. Способ 900 может быть использован кодером, таким как система 200 кодека, кодер 300 и/или устройство 800 кодирования видео при выполнении способа 100.
[0142] Способ 900 может начинаться, когда кодер принимает видеопоследовательность и решает кодировать эту видеопоследовательность как масштабируемую видеопоследовательность в наборе слоев и OLS, например, на основе пользовательского ввода. Видеопоследовательность может быть кодирована для поддержки масштабируемости по SNR, пространственной масштабируемости, масштабируемости в соответствии с другими описанными здесь характеристиками, или их сочетаний. На этапе 901 кодер может кодировать битовый поток, содержащий один или более слоев кодированных изображений. В частности, кодер может кодировать базовый слой с самым низким ID слоя и различные слои улучшения с возрастающими ID слоя. Каждый слой улучшения с ID слоя j может быть кодирован в соответствии с прогнозированием между слоями на основе базового слоя и любых слоев улучшения с ID слоя меньше j. Слои также могут быть организованы в OLS с ID OLS, которые могут обозначаться буквой i, чтобы различать их с ID слоев j. Например, для каждого слоя может быть один OLS. Таким образом, OLS с ID OLS, равным i, может включать в себя выходной слой с ID слоя j, где i равен i. OLS с идентификатором OLS, равным i, может также включать в себя все слои с ID слоев от нуля до j-1 включительно. Например, OLS с ID OLS, равным пяти, может включать в себя нулевой - пятый слои, причем пятый слой является выходным слоем.
[0143] На этапе 903 кодер кодирует VPS в битовый поток. VPS включает синтаксический элемент ols_mode_idc. ols_mode_idc может быть установлен для указания, что общее количество OLS, указанное VPS, равно количеству слоев, указанному VPS. Кроме того, ols_mode_idc может быть установлен для указания, что i-й OLS включает в себя слои с индексами слоев от нуля до i и/или j (например, в этом случае i равно j) включительно. ols_mode_idc также может быть установлен для указания, что для каждого OLS выходным слоем является только самый верхний слой в каждом OLS. Например, ols_mode_idc может быть установлен в один из нескольких режимов. Описанный выше режим может сигнализироваться, если ols_mode_idc установлен в ноль. В некоторых примерах VPS может также включать в себя vps_max_layers_minus1, который определяет количество слоев, указанных VPS. Это также является максимально допустимым количеством слоев в каждой CVS, относящейся к VPS. ols_mode_idc может обращаться к vps_max_layers_minus1.
[0144] Например, видеопоследовательность может быть декодирована в декодере и/или в гипотетическом эталонном декодере в кодере для целей проверки стандартов. При декодировании видеопоследовательности общее количество переменных OLS (TotalNumOlss) для видеопоследовательности может быть установлено равным vps_max_layers_minus1 плюс единица, если each_layer_is_an_ols_flag в VPS установлен на ноль, если ols_mode_idc установлен в ноль или если ols_mode_idc установлен в единицу. В качестве конкретного примера, количество слоев в i-м OLS (NumLayersInOls[i]) и идентификатор слоя в OLS (LayerIdInOLS[i][j]), указывающий значение nuh_layer_id j-го слоя в i-ом OLS можно получить следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i<TotalNumOlss; i++) { if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]}
else if(ols_mode_idc=0 | | ols_mode_idc=1) {
NumLayersInOls[i]=i+1
for(j=0; j<NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг OLS, указывающий, содержит ли хотя бы один OLS более одного слоя.
[0145] На этапе 905 кодер может сохранить битовый поток для передачи декодеру. Например, декодер может знать о доступных OLS (например, посредством связи и/или других протоколов, таких как динамическая адаптивная потоковая передача по протоколу передачи гипертекста (DASH)). Декодер может выбрать и запросить OLS с наивысшим идентификатором, который может быть правильно декодирован/отображен декодером. Например, в случае пространственной масштабируемости декодер может запросить OLS с размером изображения, связанным с экраном, подключенным к декодеру. В случае масштабируемости по SNR декодер может запросить OLS с самым высоким ID, который может быть декодирован в свете текущих сетевых условий (например, в свете доступной полосы пропускания связи). Затем кодер и/или промежуточный кэш или сервер содержимого могут передать OLS и связанный(е) слой(и) в декодер для декодирования. Таким образом кодер может создать видеопоследовательность, масштабирование которой может увеличиваться или уменьшаться в зависимости от потребностей декодера.
[0146] На Фиг. 10 представлена блок-схема примерного способа 1000 декодирования видеопоследовательности, включающей в себя OLS, выполненную с возможностью масштабируемости, такой как многослойная видеопоследовательность 500 и/или видеопоследовательность 600 в битовом потоке 700. Способ 1000 может быть использован декодером, таким как система 200 кодека, декодер 400 и/или устройство 800 кодирования видео при выполнении способа 100.
[0147] Способ 1000 может начинаться, когда декодер начинает прием битового потока, содержащего OLS с набором слоев масштабируемой видеопоследовательности, например, в результате применения способа 900. Видеопоследовательность может быть кодирована для поддержки масштабируемости по SNR, пространственной масштабируемости, масштабируемости в соответствии с другими описанными в данном документе характеристиками или их сочетаниями. На этапе 1001 декодер может принять битовый поток, содержащий один или более слоев кодированных изображений и VPS. Слои могут быть включены в OLS. Например, слои могут включать в себя базовый слой с наименьшим ID слоя и различные слои улучшения с возрастающими ID слоя. Каждый слой улучшения с ID слоя j может быть кодирован в соответствии с прогнозированием между слоями на основе базового слоя и любых слоев улучшения с ID слоя меньше j. OLS может включать в себя ID OLS, который может обозначаться буквой i, чтобы отличать его от ID слоя j. Например, в кодированном битовом потоке может быть один OLS на слой. Таким образом, OLS с ID OLS, равным i, может включать в себя выходной слой с идентификатором слоя j, где i равен i. OLS, принятый с ID OLS i, может также включать в себя все слои с ID слоев от нуля до j-1 включительно. Например, полученный OLS с ID OLS, равным пяти, может включать в себя нулевой - пятый слои, причем пятый слой является выходным слоем. Конфигурация OLS и слоев может указываться VPS.
[0148] Например, VPS включает в себя синтаксический элемент ols_mode_idc. ols_mode_idc может быть установлен для указания, что общее количество OLS, указанное VPS, равно количеству слоев, указанному VPS. Кроме того, ols_mode_idc может быть установлен для указания, что i-й OLS включает в себя слои с индексами слоев от нуля до i и/или j (например, в этом случае i равно j) включительно. ols_mode_idc также может быть установлен для указания, что для каждого OLS только самый верхний слой в каждом OLS является выходным слоем. Например, ols_mode_idc может быть установлен в один из нескольких режимов. Описанный выше режим может сигнализироваться, если ols_mode_idc установлен в ноль. В некоторых примерах VPS может также включать в себя vps_max_layers_minus1, который определяет количество слоев, указанных VPS. Это также является максимально допустимым количеством слоев в каждой CVS, относящейся к VPS. ols_mode_idc может обращаться к vps_max_layers_minus1.
[0149] На этапе 1003 декодер может определить выходной слой на основе ols_mode_idc в VPS. Например, при декодировании видеопоследовательности переменная общего количества OLS (TotalNumOlss) для видеопоследовательности может быть установлена равной vps_max_layers_minus1 плюс один, если каждый_слой_is_an_ols_flag в VPS установлен на ноль, если ols_mode_idc установлен на ноль, или если ols_mode_idc установлен в единицу. В качестве конкретного примера, количество слоев в i-м OLS (NumLayersInOls[i]) и идентификатор слоя в OLS (LayerIdInOLS[i][j]), указывающий значение nuh_layer_id j-го слоя в i-ом OLS можно получить следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i<TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]}
else if(ols_mode_idc=0 | | ols_mode_idc=1) {
NumLayersInOls[i]=i+1
for(j=0; j<NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг OLS, указывающий, содержит ли по меньшей мере один OLS более одного слоя. Этот процесс позволяет декодеру определить конфигурацию OLS, а также ID выходного слоя и ID поддерживающих слоев.
[0150] Как только ID выходного слоя и ID поддерживающих слоев известны, декодер может начать декодирование кодированных изображений в выходном слое на основе поддерживающих слоев с использованием прогнозирования между слоями. На этапе 1005 декодер может декодировать кодированное изображение из выходного слоя для создания декодированного изображения. На этапе 1007 декодер может направить декодированное изображение для отображения как часть декодированной видеопоследовательности.
[0151] Например, декодер может знать о доступных OLS (например, посредством связи и/или других протоколов, таких как динамическая адаптивная потоковая передача по протоколу передачи гипертекста (DASH)). Декодер может выбрать и запросить OLS с наивысшим ID, который может быть правильно декодирован/отображен декодером. Например, в случае пространственной масштабируемости декодер может запросить OLS с размером изображения, связанным с экраном, соединенным с декодером. В случае масштабируемости по SNR декодер может запросить наивысший ID OLS, который может быть декодирован в свете текущих сетевых условий (например, в свете доступной полосы пропускания связи). Затем кодер и/или промежуточный кэш или сервер содержимого могут передать OLS и связанный(е) слой(и) в декодер для декодирования. Таким образом кодер может создать видеопоследовательность, масштабирование которой может увеличиваться или уменьшаться в зависимости от потребностей декодера. Затем декодер может декодировать запрошенную видеопоследовательность при приеме, используя способ 1000.
[0152] Фиг. 11 является принципиальной схемой примерной системы 1100 для кодирования видеопоследовательности с помощью OLS, выполненных с возможностью обеспечения масштабируемости, например, многоуровневой видеопоследовательности 500 и/или видеопоследовательности 600 в битовом потоке 700. Система 1100 может быть реализована посредством кодера и декодера, такого как система 200 кодека, кодер 300, декодер 400 и/или устройство 800 видеокодирования. Кроме того, система 1100 может использоваться при реализации способов 100, 900 и/или 1000.
[0153] Система 1100 включает в себя видеокодер 1102. Видеокодер 1102 содержит модуль 1105 кодирования для кодирования битового потока, содержащего один или более слоев кодированных изображений. Модуль 1105 кодирования дополнительно предназначен для кодирования в битовый поток VPS, при этом VPS включает в себя ols_mode_idc, указывающий, что общее количество OLS, указанное VPS, равно количеству слоев, указанному VPS. Видеокодер 1102 дополнительно содержит модуль 1106 хранения для сохранения битового потока для передачи на декодер. Видеокодер 1102 дополнительно содержит передающий модуль 1107 для передачи битового потока на видеодекодер 1110. Видеокодер 1102 может быть дополнительно выполнен с возможностью выполнения любого из этапов способа 900.
[0154] Система 1100 также включает в себя видеодекодер 1110. Видеодекодер 1110 содержит приемный модуль 1111 для приема битового потока, содержащего один или более слоев кодированных изображений и VPS, при этом VPS включает в себя ols_mode_idc, указывающий, что общее количество OLS, указанное посредством VPS, равно количеству слоев, указанных VPS. Видеодекодер 1110 дополнительно содержит модуль 1113 определения для определения слоя вывода на основе ols_mode_idc в VPS. Видеодекодер 1110 дополнительно содержит модуль 1115 декодирования для декодирования кодированного изображения из выходного слоя для создания декодированного изображения. Видеодекодер 1110 дополнительно содержит модуль 1117 перенаправления для перенаправления декодированного изображения для отображения как части декодированной видеопоследовательности. Видеодекодер 1110 может быть дополнительно выполнен с возможностью выполнения любого из этапов способа 1000.
[0155] Первый компонент непосредственно соединен со вторым компонентом, если между первым компонентом и вторым компонентом нет промежуточных компонентов, за исключением линии, проводника или другой среды. Первый компонент опосредованно соединен со вторым компонентом, если между первым компонентом и вторым компонентом есть промежуточные компоненты, отличные от линии, проводника или другой среды. Термин «соединенный» и его варианты включают в себя как непосредственное соединение, так и опосредованное соединение. Использование термина «около» означает диапазон, включающий в себя±10% от последующего числа, если не указано иное.
[0156] Также следует понимать, что этапы примерных способов, изложенных в настоящем документе, не обязательно должны выполняться в описанном порядке, и порядок этапов таких способов следует понимать как лишь примерный. Аналогичным образом, в способах, соответствующих различным вариантам осуществления настоящего изобретения, в такие способы могут быть включены дополнительные этапы, а некоторые этапы могут быть исключены или объединены.
[0157] Хотя в настоящем изобретении предусмотрено несколько вариантов осуществления, следует понимать, что раскрытые системы и способы могут быть реализованы во многих других конкретных формах, не выходящих за рамки сущности или объема настоящего изобретения. Настоящие примеры следует рассматривать как иллюстративные, а не ограничительные, и не подразумевается ограничение приведенными в данном документе подробностями. Например, различные элементы или компоненты могут быть объединены или интегрированы в другую систему, или определенные признаки могут быть исключены или не реализованы.
[0158] Кроме того, технологии, системы, подсистемы и способы, описанные и проиллюстрированные в различных вариантах осуществления как дискретные или отдельные, могут быть объединены или интегрированы с другими системами, компонентами, технологиями или способами без отклонения от объема настоящего изобретения. Другие примеры изменений, замен и модификаций могут быть определены специалистом в данной области техники и могут быть выполнены без отклонения от сущности и объема, раскрытых в данном документе.
название | год | авторы | номер документа |
---|---|---|---|
OLS ДЛЯ МНОГОРАКУРСНОЙ МАСШТАБИРУЕМОСТИ | 2020 |
|
RU2822508C1 |
ОТКЛОНЕНИЕ НЕИСПОЛЬЗУЕМЫХ СЛОЕВ В МНОГОСЛОЙНЫХ ВИДЕОПОТОКАХ | 2020 |
|
RU2823559C1 |
УПРАВЛЕНИЕ МАСШТАБИРУЕМЫМ ВКЛАДЫВАЕМЫМ SEI-СООБЩЕНИЕМ | 2020 |
|
RU2824781C1 |
ТЕСТЫ НА СООТВЕТСТВИЕ HRD ДЛЯ OLS | 2020 |
|
RU2820076C1 |
ПАРАМЕТРЫ HRD НА УРОВНЕ ПОСЛЕДОВАТЕЛЬНОСТИ | 2020 |
|
RU2825440C1 |
ПРЕДОТВРАЩЕНИЕ ИЗБЫТОЧНОЙ СИГНАЛИЗАЦИИ В МНОГОСЛОЙНЫХ БИТОВЫХ ВИДЕОПОТОКАХ | 2020 |
|
RU2821429C1 |
ПАРАМЕТРЫ HRD ДЛЯ ТЕСТИРОВАНИЯ НА СООТВЕТСТВИЕ НА ОСНОВЕ СЛОЯ | 2020 |
|
RU2821048C1 |
СПОСОБЫ СИГНАЛИЗИРОВАНИЯ КОМБИНАЦИИ ПЕРЕДИСКРЕТИЗАЦИИ ОПОРНОГО ИЗОБРАЖЕНИЯ И ПРОСТРАНСТВЕННОЙ МАСШТАБИРУЕМОСТИ | 2021 |
|
RU2810966C1 |
СПОСОБ ВЫВЕДЕНИЯ НА ОСНОВЕ НАБОРА ВЫХОДНЫХ СЛОЕВ ПО СУБСЛОЮ | 2021 |
|
RU2809562C1 |
СПОСОБ ВЫВОДА НАБОРА СЛОЕВ ДЛЯ МНОГОСЛОЙНОГО ВИДЕОПОТОКА | 2020 |
|
RU2807213C1 |
Изобретение относится к средствам для кодирования видео. Технический результат заключается в повышении эффективности кодирования видео за счет поддержки как пространственной масштабируемости, так и масштабируемости по отношению сигнала к шуму. Принимают битовый поток, содержащий один или более слоев кодированных изображений и набор параметров видео (VPS). Причем VPS включает в себя идентификационный код режима набора выходных слоев (OLS) (ols_mode_idc), если ols_mode_idc равен нулю, указывающий, что общее количество OLS, указанное посредством VPS, равно количеству слоев, указанному посредством VPS, i-й OLS включает в себя слои с индексами слоев от нуля до i включительно, и для каждого OLS только самый верхний слой в каждом OLS является выходным слоем. Определяют выходной слой на основе ols_mode_idc в VPS. Декодируют кодированное изображение из выходного слоя для получения декодированного изображения. 6 н. и 8 з.п. ф-лы, 11 ил.
1. Способ декодирования, реализуемый декодером, причем способ содержит этапы, на которых:
принимают битовый поток, содержащий один или более слоев кодированных изображений и набор параметров видео (VPS), причем VPS включает в себя идентификационный код режима набора выходных слоев (OLS) (ols_mode_idc), если ols_mode_idc равен нулю, указывающий, что общее количество OLS, указанное посредством VPS, равно количеству слоев, указанному посредством VPS, i-й OLS включает в себя слои с индексами слоев от нуля до i включительно, и для каждого OLS только самый верхний слой в каждом OLS является выходным слоем;
определяют выходной слой на основе ols_mode_idc в VPS; и
декодируют кодированное изображение из выходного слоя для получения декодированного изображения.
2. Способ по п. 1, в котором VPS включает в себя максимальное количество слоев VPS минус один (vps_max_layers_minus1) плюс 1 указывает максимально допустимое количество слоев в каждой CVS, содержащих обращение к VPS.
3. Способ по п. 1 или 2, в котором общее количество OLS (TotalNumOlss) равно vps_max_layers_minus1 плюс один, если ols_mode_idc равен нулю или если ols_mode_idc равен единице.
4. Способ по любому из пп. 1-3, в котором количество слоев в i-м OLS (NumLayersInOls[i]) и идентификатор (ID) слоя в OLS (LayerIdInOLS[i][j]), указывающий значение идентификатора слоя заголовка блока (nuh_layer_id) слоя сетевой абстракции (NAL) для j-го слоя в i-м OLS, получают следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i < TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]
} else if(ols_mode_idc== 0 | | ols_mode_idc== 1) {
NumLayersInOls[i]=i+1
for(j=0; j < NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j],
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг каждого слоя OLS, указывающий, содержит ли по меньшей мере один OLS более одного слоя.
5. Способ кодирования, реализуемый кодером, причем способ содержит этапы, на которых:
кодируют битовый поток, содержащий один или более слоев кодированных изображений;
кодируют в битовый поток набор видеопараметров (VPS), при этом VPS включает в себя идентификационный код режима набора выходных слоев (OLS) (ols_mode_idc), если ols_mode_idc равен нулю, указывающий, что общее количество OLS, указанное посредством VPS, равно количеству слоев, указанных посредством VPS, i-й OLS включает в себя слои с индексами слоев от нуля до i включительно, и для каждого OLS только самый верхний слой в каждом OLS является выходным слоем; и
сохраняют битовый поток для передачи в декодер.
6. Способ по п. 5, в котором VPS включает в себя максимальное количество слоев VPS минус один (vps_max_layers_minus1) плюс 1 указывает максимально допустимое количество слоев в каждой CVS, содержащих обращение к VPS.
7. Способ по п. 5 или 6, в котором общее количество OLS (TotalNumOlss) равно vps_max_layers_minus1 плюс один, если ols_mode_idc равен нулю или если ols_mode_idc равен единице.
8. Способ по любому из пп. 5-7, в котором количество слоев в i-й OLS (NumLayersInOls[i]) и идентификатор (ID) слоя в OLS (LayerIdInOLS[i][j]), указывающий значение идентификатора слоя заголовка блока (nuh_layer_id) слоя сетевой абстракции (NAL) для j-го слоя в i-м OLS, получают следующим образом:
NumLayersInOls[0]=1
LayerIdInOls[0][0]=vps_layer_id[0]
for(i=1, i < TotalNumOlss; i++) {
if(each_layer_is_an_ols_flag) {
NumLayersInOls[i]=1
LayerIdInOls[i][0]=vps_layer_id[i]
} else if(ols_mode_idc== 0 | | ols_mode_idc== 1) {
NumLayersInOls[i]=i+1
for(j=0; j < NumLayersInOls[i]; j++)
LayerIdInOls[i][j]=vps_layer_id[j]
где vps_layer_id[i] - идентификатор i-го слоя VPS, TotalNumOlss - общее количество OLS, указанное VPS, а each_layer_is_an_ols_flag - флаг OLS, указывающий, содержит ли по меньшей мере один OLS более одного слоя.
9. Устройство кодирования видео, содержащее:
процессор, приемник, соединенный с процессором, память, соединенную с процессором, и передатчик, соединенный с процессором, при этом процессор, приемник, память и передатчик выполнены с возможностью осуществления способа по любому из пп. 1-8.
10. Постоянный машиночитаемый носитель, содержащий компьютерный программный продукт для использования устройством кодирования видео, причем компьютерный программный продукт содержит исполняемые компьютером инструкции, сохраненные на постоянном машиночитаемом носителе, таким образом, что при выполнении процессором они побуждают устройство кодирования видео выполнять способ по любому из пп. 1-8.
11. Декодер, содержащий:
средство приема для приема битового потока, содержащего один или более слоев кодированных изображений и набор параметров видео (VPS), при этом VPS включает в себя идентификационный код режима набора выходных слоев (OLS) (ols_mode_idc), если ols_mode_idc равен нулю, указывающий, что общее количество OLS, указанное посредством VPS, соответствует количеству слоев, указанному посредством VPS, i-й OLS включает в себя слои с индексами слоев от нуля до i включительно, и для каждого OLS только самый верхний слой в каждом OLS является выходным слоем;
средство определения для определения выходного слоя на основе ols_mode_idc в VPS;
средство декодирования для декодирования кодированного изображения из выходного слоя для получения декодированного изображения; и
средство перенаправления для перенаправления декодированного изображения для отображения в качестве части декодированной видеопоследовательности.
12. Декодер по п. 11, причем декодер дополнительно выполнен с возможностью выполнения способа по любому из пп. 1-4.
13. Кодер, содержащий:
средство кодирования для:
кодирования битового потока, содержащего один или более слоев кодированных изображений; и
кодирования в битовый поток набора параметров видео (VPS), при этом VPS включает в себя идентификационный код режима набора выходных слоев (OLS) (ols_mode_idc), если ols_mode_idc равен нулю, указывающий, что общее количество OLS, указанное посредством VPS, равно количеству слоев, указанных посредством VPS, i-й OLS включает в себя слои с индексами слоев от нуля до i включительно, и для каждого OLS только самый верхний слой в каждом OLS является выходным слоем; и
средство хранения для сохранения битового потока для передачи на декодер.
14. Кодер по п. 13, при этом кодер дополнительно выполнен с возможностью выполнения способа по любому из пп. 5-8.
Benjamin Bross et al., "Versatile Video Coding (Draft 6)", JVET-O2001-vE, 15th Meeting, Gothenburg, 31.07.2019 | |||
US 20160191931 A1, 30.06.2016 | |||
US 20150319462 A1, 05.11.2015 | |||
US 20190075311 A1, 07.03.2019 | |||
ВИДЕООБРАБОТКА С МАСШТАБИРУЕМОСТЬЮ | 2007 |
|
RU2406254C2 |
US 20140301477 A1, 09.10.2014 | |||
US 20150189322 A1, 02.07.2015 | |||
US 20170006300 A1, 05.01.2017 | |||
СПОСОБ И УСТРОЙСТВО ДЛЯ КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ВИДЕОДАННЫХ | 2015 |
|
RU2653299C2 |
Авторы
Даты
2024-07-16—Публикация
2020-09-18—Подача